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.
7 #[derive(Debug, PartialEq, Eq)]
15 type OptionAlias = Option<i32>;
17 macro_rules! check_pat {
18 ($x:expr, $p:pat) => {
19 assert!(if let $p = $x { true } else { false });
26 assert_eq!(x, <Self>::Bar(3));
27 check_pat!(x, Self::Bar(3));
32 let x = Self::Baz { i: 42 };
33 check_pat!(x, Self::Baz { i: 42 });
39 assert_eq!(x, <Self>::Qux);
40 check_pat!(x, Self::Qux);
41 check_pat!(x, <Self>::Qux);
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));
52 let baz = FooAlias::Baz { i: 2 };
53 assert_eq!(baz, Foo::Baz { i: 2 });
54 check_pat!(baz, FooAlias::Baz { i: 2 });
57 assert_eq!(qux, FooAlias::Qux);
58 assert_eq!(qux, <FooAlias>::Qux);
59 check_pat!(qux, FooAlias::Qux);
60 check_pat!(qux, <FooAlias>::Qux);
62 assert_eq!(Foo::bar(), Foo::Bar(3));
63 assert_eq!(Foo::baz(), Foo::Baz { i: 42 });
64 assert_eq!(Foo::qux(), Foo::Qux);
66 let some = Option::Some(4);
67 assert_eq!(some, OptionAlias::Some(4));
68 check_pat!(some, OptionAlias::Some(4));