-
Notifications
You must be signed in to change notification settings - Fork 12.9k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add UI tests for
array::IntoIter
impls
This it to make sure traits are implemented for arrays with length 32 and below, while they are not implemented for >= 33.
- Loading branch information
1 parent
5334a30
commit c36b9dd
Showing
3 changed files
with
216 additions
and
0 deletions.
There are no files selected for viewing
41 changes: 41 additions & 0 deletions
41
src/test/ui/const-generics/array-impls/into-iter-impls-length-32.rs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,41 @@ | ||
// check-pass | ||
|
||
#![feature(array_value_iter)] | ||
#![feature(trusted_len)] | ||
|
||
use std::{ | ||
array::IntoIter, | ||
fmt::Debug, | ||
iter::{ExactSizeIterator, FusedIterator, TrustedLen}, | ||
}; | ||
|
||
pub fn yes_iterator() -> impl Iterator<Item = i32> { | ||
IntoIter::new([0i32; 32]) | ||
} | ||
|
||
pub fn yes_double_ended_iterator() -> impl DoubleEndedIterator { | ||
IntoIter::new([0i32; 32]) | ||
} | ||
|
||
pub fn yes_exact_size_iterator() -> impl ExactSizeIterator { | ||
IntoIter::new([0i32; 32]) | ||
} | ||
|
||
pub fn yes_fused_iterator() -> impl FusedIterator { | ||
IntoIter::new([0i32; 32]) | ||
} | ||
|
||
pub fn yes_trusted_len() -> impl TrustedLen { | ||
IntoIter::new([0i32; 32]) | ||
} | ||
|
||
pub fn yes_clone() -> impl Clone { | ||
IntoIter::new([0i32; 32]) | ||
} | ||
|
||
pub fn yes_debug() -> impl Debug { | ||
IntoIter::new([0i32; 32]) | ||
} | ||
|
||
|
||
fn main() {} |
53 changes: 53 additions & 0 deletions
53
src/test/ui/const-generics/array-impls/into-iter-no-impls-length-33.rs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,53 @@ | ||
#![feature(array_value_iter)] | ||
#![feature(trusted_len)] | ||
|
||
use std::{ | ||
array::IntoIter, | ||
fmt::Debug, | ||
iter::{ExactSizeIterator, FusedIterator, TrustedLen}, | ||
}; | ||
|
||
pub fn no_iterator() -> impl Iterator<Item = i32> { | ||
//~^ ERROR arrays only have std trait implementations for lengths 0..=32 | ||
IntoIter::new([0i32; 33]) | ||
//~^ ERROR arrays only have std trait implementations for lengths 0..=32 | ||
} | ||
|
||
pub fn no_double_ended_iterator() -> impl DoubleEndedIterator { | ||
//~^ ERROR arrays only have std trait implementations for lengths 0..=32 | ||
IntoIter::new([0i32; 33]) | ||
//~^ ERROR arrays only have std trait implementations for lengths 0..=32 | ||
} | ||
|
||
pub fn no_exact_size_iterator() -> impl ExactSizeIterator { | ||
//~^ ERROR arrays only have std trait implementations for lengths 0..=32 | ||
IntoIter::new([0i32; 33]) | ||
//~^ ERROR arrays only have std trait implementations for lengths 0..=32 | ||
} | ||
|
||
pub fn no_fused_iterator() -> impl FusedIterator { | ||
//~^ ERROR arrays only have std trait implementations for lengths 0..=32 | ||
IntoIter::new([0i32; 33]) | ||
//~^ ERROR arrays only have std trait implementations for lengths 0..=32 | ||
} | ||
|
||
pub fn no_trusted_len() -> impl TrustedLen { | ||
//~^ ERROR arrays only have std trait implementations for lengths 0..=32 | ||
IntoIter::new([0i32; 33]) | ||
//~^ ERROR arrays only have std trait implementations for lengths 0..=32 | ||
} | ||
|
||
pub fn no_clone() -> impl Clone { | ||
//~^ ERROR arrays only have std trait implementations for lengths 0..=32 | ||
IntoIter::new([0i32; 33]) | ||
//~^ ERROR arrays only have std trait implementations for lengths 0..=32 | ||
} | ||
|
||
pub fn no_debug() -> impl Debug { | ||
//~^ ERROR arrays only have std trait implementations for lengths 0..=32 | ||
IntoIter::new([0i32; 33]) | ||
//~^ ERROR arrays only have std trait implementations for lengths 0..=32 | ||
} | ||
|
||
|
||
fn main() {} |
122 changes: 122 additions & 0 deletions
122
src/test/ui/const-generics/array-impls/into-iter-no-impls-length-33.stderr
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,122 @@ | ||
error[E0277]: arrays only have std trait implementations for lengths 0..=32 | ||
--> $DIR/into-iter-no-impls-length-33.rs:12:5 | ||
| | ||
LL | IntoIter::new([0i32; 33]) | ||
| ^^^^^^^^^^^^^ the trait `std::array::LengthAtMost32` is not implemented for `[i32; 33]` | ||
| | ||
= note: required by `std::array::IntoIter::<T, N>::new` | ||
|
||
error[E0277]: arrays only have std trait implementations for lengths 0..=32 | ||
--> $DIR/into-iter-no-impls-length-33.rs:10:25 | ||
| | ||
LL | pub fn no_iterator() -> impl Iterator<Item = i32> { | ||
| ^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `std::array::LengthAtMost32` is not implemented for `[i32; 33]` | ||
| | ||
= note: required because of the requirements on the impl of `std::iter::Iterator` for `std::array::IntoIter<i32, 33usize>` | ||
= note: the return type of a function must have a statically known size | ||
|
||
error[E0277]: arrays only have std trait implementations for lengths 0..=32 | ||
--> $DIR/into-iter-no-impls-length-33.rs:18:5 | ||
| | ||
LL | IntoIter::new([0i32; 33]) | ||
| ^^^^^^^^^^^^^ the trait `std::array::LengthAtMost32` is not implemented for `[i32; 33]` | ||
| | ||
= note: required by `std::array::IntoIter::<T, N>::new` | ||
|
||
error[E0277]: arrays only have std trait implementations for lengths 0..=32 | ||
--> $DIR/into-iter-no-impls-length-33.rs:16:38 | ||
| | ||
LL | pub fn no_double_ended_iterator() -> impl DoubleEndedIterator { | ||
| ^^^^^^^^^^^^^^^^^^^^^^^^ the trait `std::array::LengthAtMost32` is not implemented for `[i32; 33]` | ||
| | ||
= note: required because of the requirements on the impl of `std::iter::DoubleEndedIterator` for `std::array::IntoIter<i32, 33usize>` | ||
= note: the return type of a function must have a statically known size | ||
|
||
error[E0277]: arrays only have std trait implementations for lengths 0..=32 | ||
--> $DIR/into-iter-no-impls-length-33.rs:24:5 | ||
| | ||
LL | IntoIter::new([0i32; 33]) | ||
| ^^^^^^^^^^^^^ the trait `std::array::LengthAtMost32` is not implemented for `[i32; 33]` | ||
| | ||
= note: required by `std::array::IntoIter::<T, N>::new` | ||
|
||
error[E0277]: arrays only have std trait implementations for lengths 0..=32 | ||
--> $DIR/into-iter-no-impls-length-33.rs:22:36 | ||
| | ||
LL | pub fn no_exact_size_iterator() -> impl ExactSizeIterator { | ||
| ^^^^^^^^^^^^^^^^^^^^^^ the trait `std::array::LengthAtMost32` is not implemented for `[i32; 33]` | ||
| | ||
= note: required because of the requirements on the impl of `std::iter::ExactSizeIterator` for `std::array::IntoIter<i32, 33usize>` | ||
= note: the return type of a function must have a statically known size | ||
|
||
error[E0277]: arrays only have std trait implementations for lengths 0..=32 | ||
--> $DIR/into-iter-no-impls-length-33.rs:30:5 | ||
| | ||
LL | IntoIter::new([0i32; 33]) | ||
| ^^^^^^^^^^^^^ the trait `std::array::LengthAtMost32` is not implemented for `[i32; 33]` | ||
| | ||
= note: required by `std::array::IntoIter::<T, N>::new` | ||
|
||
error[E0277]: arrays only have std trait implementations for lengths 0..=32 | ||
--> $DIR/into-iter-no-impls-length-33.rs:28:31 | ||
| | ||
LL | pub fn no_fused_iterator() -> impl FusedIterator { | ||
| ^^^^^^^^^^^^^^^^^^ the trait `std::array::LengthAtMost32` is not implemented for `[i32; 33]` | ||
| | ||
= note: required because of the requirements on the impl of `std::iter::FusedIterator` for `std::array::IntoIter<i32, 33usize>` | ||
= note: the return type of a function must have a statically known size | ||
|
||
error[E0277]: arrays only have std trait implementations for lengths 0..=32 | ||
--> $DIR/into-iter-no-impls-length-33.rs:36:5 | ||
| | ||
LL | IntoIter::new([0i32; 33]) | ||
| ^^^^^^^^^^^^^ the trait `std::array::LengthAtMost32` is not implemented for `[i32; 33]` | ||
| | ||
= note: required by `std::array::IntoIter::<T, N>::new` | ||
|
||
error[E0277]: arrays only have std trait implementations for lengths 0..=32 | ||
--> $DIR/into-iter-no-impls-length-33.rs:34:28 | ||
| | ||
LL | pub fn no_trusted_len() -> impl TrustedLen { | ||
| ^^^^^^^^^^^^^^^ the trait `std::array::LengthAtMost32` is not implemented for `[i32; 33]` | ||
| | ||
= note: required because of the requirements on the impl of `std::iter::TrustedLen` for `std::array::IntoIter<i32, 33usize>` | ||
= note: the return type of a function must have a statically known size | ||
|
||
error[E0277]: arrays only have std trait implementations for lengths 0..=32 | ||
--> $DIR/into-iter-no-impls-length-33.rs:42:5 | ||
| | ||
LL | IntoIter::new([0i32; 33]) | ||
| ^^^^^^^^^^^^^ the trait `std::array::LengthAtMost32` is not implemented for `[i32; 33]` | ||
| | ||
= note: required by `std::array::IntoIter::<T, N>::new` | ||
|
||
error[E0277]: arrays only have std trait implementations for lengths 0..=32 | ||
--> $DIR/into-iter-no-impls-length-33.rs:40:22 | ||
| | ||
LL | pub fn no_clone() -> impl Clone { | ||
| ^^^^^^^^^^ the trait `std::array::LengthAtMost32` is not implemented for `[i32; 33]` | ||
| | ||
= note: required because of the requirements on the impl of `std::clone::Clone` for `std::array::IntoIter<i32, 33usize>` | ||
= note: the return type of a function must have a statically known size | ||
|
||
error[E0277]: arrays only have std trait implementations for lengths 0..=32 | ||
--> $DIR/into-iter-no-impls-length-33.rs:48:5 | ||
| | ||
LL | IntoIter::new([0i32; 33]) | ||
| ^^^^^^^^^^^^^ the trait `std::array::LengthAtMost32` is not implemented for `[i32; 33]` | ||
| | ||
= note: required by `std::array::IntoIter::<T, N>::new` | ||
|
||
error[E0277]: arrays only have std trait implementations for lengths 0..=32 | ||
--> $DIR/into-iter-no-impls-length-33.rs:46:22 | ||
| | ||
LL | pub fn no_debug() -> impl Debug { | ||
| ^^^^^^^^^^ the trait `std::array::LengthAtMost32` is not implemented for `[i32; 33]` | ||
| | ||
= note: required because of the requirements on the impl of `std::fmt::Debug` for `std::array::IntoIter<i32, 33usize>` | ||
= note: the return type of a function must have a statically known size | ||
|
||
error: aborting due to 14 previous errors | ||
|
||
For more information about this error, try `rustc --explain E0277`. |