diff options
| author | b-naber <b_naber@gmx.de> | 2023-07-17 21:58:37 +0000 |
|---|---|---|
| committer | b-naber <b_naber@gmx.de> | 2023-07-17 22:06:32 +0000 |
| commit | e1e755311a6ae8a3d15dff80851d00a8b2881d82 (patch) | |
| tree | 7645a0d85e12ff2b759c8209e1c845f4d680ef02 /tests/ui/pattern | |
| parent | 96af415476968d91847dde81c8ac907823b0def0 (diff) | |
| download | rust-e1e755311a6ae8a3d15dff80851d00a8b2881d82.tar.gz rust-e1e755311a6ae8a3d15dff80851d00a8b2881d82.zip | |
add more tests
Diffstat (limited to 'tests/ui/pattern')
| -rw-r--r-- | tests/ui/pattern/issue-76342.rs | 25 | ||||
| -rw-r--r-- | tests/ui/pattern/slice-array-infer.rs | 27 | ||||
| -rw-r--r-- | tests/ui/pattern/slice-patterns-irrefutable.rs | 62 | ||||
| -rw-r--r-- | tests/ui/pattern/slice-patterns-irrefutable.stderr | 14 |
4 files changed, 103 insertions, 25 deletions
diff --git a/tests/ui/pattern/issue-76342.rs b/tests/ui/pattern/issue-76342.rs deleted file mode 100644 index e4d3218104e..00000000000 --- a/tests/ui/pattern/issue-76342.rs +++ /dev/null @@ -1,25 +0,0 @@ -// check-pass - -// Test that we infer the expected type of a pattern to an array of the given length. - -#![allow(unused_variables)] -struct Zeroes; -impl Into<[usize; 2]> for Zeroes { - fn into(self) -> [usize; 2] { - [0; 2] - } -} -impl Into<[usize; 3]> for Zeroes { - fn into(self) -> [usize; 3] { - [0; 3] - } -} -impl Into<[usize; 4]> for Zeroes { - fn into(self) -> [usize; 4] { - [0; 4] - } -} -fn main() { - let [a, b, c] = Zeroes.into(); - let [d, e, f]: [_; 3] = Zeroes.into(); -} diff --git a/tests/ui/pattern/slice-array-infer.rs b/tests/ui/pattern/slice-array-infer.rs new file mode 100644 index 00000000000..f94a3dcfe0a --- /dev/null +++ b/tests/ui/pattern/slice-array-infer.rs @@ -0,0 +1,27 @@ +// check-pass + +#![allow(unused_variables)] +#![feature(generic_arg_infer)] + +struct Zeroes; +impl Into<&'static [usize; 3]> for Zeroes { + fn into(self) -> &'static [usize; 3] { + &[0; 3] + } +} +impl Into<[usize; 3]> for Zeroes { + fn into(self) -> [usize; 3] { + [0; 3] + } +} +fn main() { + let [a, b, c] = Zeroes.into(); + let [d, e, f] = <Zeroes as Into<&'static [usize; 3]>>::into(Zeroes); + let &[g, h, i] = Zeroes.into(); + let [j, k, l]: [usize; _] = Zeroes.into(); + let [m, n, o]: &[usize; _] = Zeroes.into(); + + // check the binding mode of these patterns: + let _: &[usize] = &[a, b, c, g, h, i, j, k, l]; + let _: &[&usize] = &[d, e, f, m, n, o]; +} diff --git a/tests/ui/pattern/slice-patterns-irrefutable.rs b/tests/ui/pattern/slice-patterns-irrefutable.rs new file mode 100644 index 00000000000..7be02b44e43 --- /dev/null +++ b/tests/ui/pattern/slice-patterns-irrefutable.rs @@ -0,0 +1,62 @@ +// Test that we infer the expected type of a pattern to an array of the given length. + +#![allow(unused_variables)] + +use std::array::TryFromSliceError; +use std::convert::TryInto; + +struct Zeroes; +impl Into<[usize; 2]> for Zeroes { + fn into(self) -> [usize; 2] { + [0; 2] + } +} +impl Into<[usize; 3]> for Zeroes { + fn into(self) -> [usize; 3] { + [0; 3] + } +} +impl Into<[usize; 4]> for Zeroes { + fn into(self) -> [usize; 4] { + [0; 4] + } +} + +fn zeroes_into() { + let [a, b, c] = Zeroes.into(); + let [d, e, f]: [_; 3] = Zeroes.into(); +} + +fn array_try_from(x: &[usize]) -> Result<usize, TryFromSliceError> { + let [a, b] = x.try_into()?; + Ok(a + b) +} + +fn default() { + let a: i32; + let b; + [a, b] = Default::default(); +} + +fn test_nested_array() { + let a: [_; 3]; + let b; + //~^ ERROR type annotations needed + [a, b] = Default::default(); +} + +struct Foo<T>([T; 2]); + +impl<T: Default + Copy> Default for Foo<T> { + fn default() -> Self { + Foo([Default::default(); 2]) + } +} + +fn field_array() { + let a: i32; + let b; + Foo([a, b]) = Default::default(); +} + +fn main() {} diff --git a/tests/ui/pattern/slice-patterns-irrefutable.stderr b/tests/ui/pattern/slice-patterns-irrefutable.stderr new file mode 100644 index 00000000000..fac99534f3e --- /dev/null +++ b/tests/ui/pattern/slice-patterns-irrefutable.stderr @@ -0,0 +1,14 @@ +error[E0282]: type annotations needed for `[_; 3]` + --> $DIR/slice-patterns-irrefutable.rs:43:9 + | +LL | let b; + | ^ + | +help: consider giving `b` an explicit type, where the placeholders `_` are specified + | +LL | let b: [_; 3]; + | ++++++++ + +error: aborting due to previous error + +For more information about this error, try `rustc --explain E0282`. |
