]> git.proxmox.com Git - rustc.git/blame - src/test/ui/type-alias-enum-variants/type-alias-enum-variants-pass.rs
New upstream version 1.67.1+dfsg1
[rustc.git] / src / test / ui / type-alias-enum-variants / type-alias-enum-variants-pass.rs
CommitLineData
dc9dc135
XL
1// run-pass
2
3// Check that it is possible to resolve, in the value namespace,
4// to an `enum` variant through a type alias. This includes `Self`.
5// Type qualified syntax `<Type>::Variant` also works when syntactically valid.
6
7#[derive(Debug, PartialEq, Eq)]
8enum Foo {
9 Bar(i32),
10 Baz { i: i32 },
11 Qux,
12}
13
14type FooAlias = Foo;
15type OptionAlias = Option<i32>;
16
17macro_rules! check_pat {
18 ($x:expr, $p:pat) => {
19 assert!(if let $p = $x { true } else { false });
20 };
21}
22
23impl Foo {
24 fn bar() -> Self {
25 let x = Self::Bar(3);
26 assert_eq!(x, <Self>::Bar(3));
27 check_pat!(x, Self::Bar(3));
28 x
29 }
30
31 fn baz() -> Self {
32 let x = Self::Baz { i: 42 };
33 check_pat!(x, Self::Baz { i: 42 });
34 x
35 }
36
37 fn qux() -> Self {
38 let x = Self::Qux;
39 assert_eq!(x, <Self>::Qux);
40 check_pat!(x, Self::Qux);
41 check_pat!(x, <Self>::Qux);
42 x
43 }
44}
45
46fn main() {
47 let bar = Foo::Bar(1);
48 assert_eq!(bar, FooAlias::Bar(1));
49 assert_eq!(bar, <FooAlias>::Bar(1));
50 check_pat!(bar, FooAlias::Bar(1));
51
52 let baz = FooAlias::Baz { i: 2 };
53 assert_eq!(baz, Foo::Baz { i: 2 });
54 check_pat!(baz, FooAlias::Baz { i: 2 });
55
56 let qux = Foo::Qux;
57 assert_eq!(qux, FooAlias::Qux);
58 assert_eq!(qux, <FooAlias>::Qux);
59 check_pat!(qux, FooAlias::Qux);
60 check_pat!(qux, <FooAlias>::Qux);
61
62 assert_eq!(Foo::bar(), Foo::Bar(3));
63 assert_eq!(Foo::baz(), Foo::Baz { i: 42 });
64 assert_eq!(Foo::qux(), Foo::Qux);
65
66 let some = Option::Some(4);
67 assert_eq!(some, OptionAlias::Some(4));
68 check_pat!(some, OptionAlias::Some(4));
69}