Skip to content

Commit

Permalink
Add tuple trait tests
Browse files Browse the repository at this point in the history
  • Loading branch information
compiler-errors committed Aug 7, 2022
1 parent d0e4c67 commit 109cc1d
Show file tree
Hide file tree
Showing 4 changed files with 97 additions and 3 deletions.
6 changes: 3 additions & 3 deletions src/test/ui/explore-issue-38412.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -43,19 +43,19 @@ LL | t.2;
= note: see issue #38412 <https://github.com/rust-lang/rust/issues/38412> for more information
= help: add `#![feature(unstable_undeclared)]` to the crate attributes to enable

error[E0616]: field `3` of struct `Tuple` is private
error[E0616]: field `3` of struct `pub_and_stability::Tuple` is private
--> $DIR/explore-issue-38412.rs:36:7
|
LL | t.3;
| ^ private field

error[E0616]: field `4` of struct `Tuple` is private
error[E0616]: field `4` of struct `pub_and_stability::Tuple` is private
--> $DIR/explore-issue-38412.rs:37:7
|
LL | t.4;
| ^ private field

error[E0616]: field `5` of struct `Tuple` is private
error[E0616]: field `5` of struct `pub_and_stability::Tuple` is private
--> $DIR/explore-issue-38412.rs:38:7
|
LL | t.5;
Expand Down
19 changes: 19 additions & 0 deletions src/test/ui/tuple/builtin-fail.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
#![feature(tuple_trait)]

fn assert_is_tuple<T: std::marker::Tuple + ?Sized>() {}

struct TupleStruct(i32, i32);

fn from_param_env<T>() {
assert_is_tuple::<T>();
//~^ ERROR `T` is not a tuple
}

fn main() {
assert_is_tuple::<i32>();
//~^ ERROR `i32` is not a tuple
assert_is_tuple::<(i32)>();
//~^ ERROR `i32` is not a tuple
assert_is_tuple::<TupleStruct>();
//~^ ERROR `TupleStruct` is not a tuple
}
55 changes: 55 additions & 0 deletions src/test/ui/tuple/builtin-fail.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
error[E0277]: `T` is not a tuple
--> $DIR/builtin-fail.rs:8:23
|
LL | assert_is_tuple::<T>();
| ^ the trait `Tuple` is not implemented for `T`
|
note: required by a bound in `assert_is_tuple`
--> $DIR/builtin-fail.rs:3:23
|
LL | fn assert_is_tuple<T: std::marker::Tuple + ?Sized>() {}
| ^^^^^^^^^^^^^^^^^^ required by this bound in `assert_is_tuple`
help: consider restricting type parameter `T`
|
LL | fn from_param_env<T: std::marker::Tuple>() {
| ++++++++++++++++++++

error[E0277]: `i32` is not a tuple
--> $DIR/builtin-fail.rs:13:23
|
LL | assert_is_tuple::<i32>();
| ^^^ the trait `Tuple` is not implemented for `i32`
|
note: required by a bound in `assert_is_tuple`
--> $DIR/builtin-fail.rs:3:23
|
LL | fn assert_is_tuple<T: std::marker::Tuple + ?Sized>() {}
| ^^^^^^^^^^^^^^^^^^ required by this bound in `assert_is_tuple`

error[E0277]: `i32` is not a tuple
--> $DIR/builtin-fail.rs:15:24
|
LL | assert_is_tuple::<(i32)>();
| ^^^ the trait `Tuple` is not implemented for `i32`
|
note: required by a bound in `assert_is_tuple`
--> $DIR/builtin-fail.rs:3:23
|
LL | fn assert_is_tuple<T: std::marker::Tuple + ?Sized>() {}
| ^^^^^^^^^^^^^^^^^^ required by this bound in `assert_is_tuple`

error[E0277]: `TupleStruct` is not a tuple
--> $DIR/builtin-fail.rs:17:23
|
LL | assert_is_tuple::<TupleStruct>();
| ^^^^^^^^^^^ the trait `Tuple` is not implemented for `TupleStruct`
|
note: required by a bound in `assert_is_tuple`
--> $DIR/builtin-fail.rs:3:23
|
LL | fn assert_is_tuple<T: std::marker::Tuple + ?Sized>() {}
| ^^^^^^^^^^^^^^^^^^ required by this bound in `assert_is_tuple`

error: aborting due to 4 previous errors

For more information about this error, try `rustc --explain E0277`.
20 changes: 20 additions & 0 deletions src/test/ui/tuple/builtin.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
// check-pass

#![feature(tuple_trait)]

fn assert_is_tuple<T: std::marker::Tuple + ?Sized>() {}

struct Unsized([u8]);

fn from_param_env<T: std::marker::Tuple + ?Sized>() {
assert_is_tuple::<T>();
}

fn main() {
assert_is_tuple::<()>();
assert_is_tuple::<(i32,)>();
assert_is_tuple::<(Unsized,)>();
from_param_env::<()>();
from_param_env::<(i32,)>();
from_param_env::<(Unsized,)>();
}

0 comments on commit 109cc1d

Please sign in to comment.