]>
Commit | Line | Data |
---|---|---|
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)] | |
8 | enum Foo { | |
9 | Bar(i32), | |
10 | Baz { i: i32 }, | |
11 | Qux, | |
12 | } | |
13 | ||
14 | type FooAlias = Foo; | |
15 | type OptionAlias = Option<i32>; | |
16 | ||
17 | macro_rules! check_pat { | |
18 | ($x:expr, $p:pat) => { | |
19 | assert!(if let $p = $x { true } else { false }); | |
20 | }; | |
21 | } | |
22 | ||
23 | impl 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 | ||
46 | fn 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 | } |