]> git.lizzy.rs Git - rust.git/blob - tests/ui/let-else/let-else-bindings.rs
Don't resolve type var roots in point_at_expr_source_of_inferred_type
[rust.git] / tests / ui / let-else / let-else-bindings.rs
1 // run-pass
2 // adapted from tests/ui/binding/if-let.rs
3
4 #![allow(dead_code)]
5
6 fn none() -> bool {
7     let None = Some("test") else {
8         return true;
9     };
10     false
11 }
12
13 fn ok() -> bool {
14     let Ok(()) = Err::<(),&'static str>("test") else {
15         return true;
16     };
17     false
18 }
19
20 pub fn main() {
21     let x = Some(3);
22     let Some(y) = x else {
23         panic!("let-else panicked");
24     };
25     assert_eq!(y, 3);
26     let Some(_) = x else {
27         panic!("bad match");
28     };
29     assert!(none());
30     assert!(ok());
31
32     assert!((|| {
33         let 1 = 2 else {
34             return true;
35         };
36         false
37     })());
38
39     enum Foo {
40         One,
41         Two(usize),
42         Three(String, isize),
43     }
44
45     let foo = Foo::Three("three".to_string(), 42);
46     let one = || {
47         let Foo::One = foo else {
48             return true;
49         };
50         false
51     };
52     assert!(one());
53     let two = || {
54         let Foo::Two(_x) = foo else {
55             return true;
56         };
57         false
58     };
59     assert!(two());
60     let three = || {
61         let Foo::Three(s, _x) = foo else {
62             return false;
63         };
64         s == "three"
65     };
66     assert!(three());
67
68     let a@Foo::Two(_) = Foo::Two(42_usize) else {
69         panic!("bad match")
70     };
71     let Foo::Two(b) = a else {
72         panic!("panic in nested `if let`");
73     };
74     assert_eq!(b, 42_usize);
75 }