]> git.proxmox.com Git - rustc.git/blame - src/test/ui/binding/if-let.rs
Merge tag 'debian/1.52.1+dfsg1-1_exp2' into proxmox/buster
[rustc.git] / src / test / ui / binding / if-let.rs
CommitLineData
b7449926 1// run-pass
0bf4aa26 2#![allow(dead_code)]
c34b1796 3
1a4d82fc 4pub fn main() {
85aaf69f 5 let x = Some(3);
1a4d82fc 6 if let Some(y) = x {
85aaf69f 7 assert_eq!(y, 3);
1a4d82fc 8 } else {
6a06907d 9 panic!("`if let` panicked");
1a4d82fc
JJ
10 }
11 let mut worked = false;
12 if let Some(_) = x {
13 worked = true;
14 }
15 assert!(worked);
c34b1796 16 let clause: usize;
1a4d82fc
JJ
17 if let None = Some("test") {
18 clause = 1;
85aaf69f 19 } else if 4_usize > 5 {
1a4d82fc
JJ
20 clause = 2;
21 } else if let Ok(()) = Err::<(),&'static str>("test") {
22 clause = 3;
23 } else {
24 clause = 4;
25 }
85aaf69f 26 assert_eq!(clause, 4_usize);
1a4d82fc 27
85aaf69f 28 if 3 > 4 {
1a4d82fc 29 panic!("bad math");
85aaf69f 30 } else if let 1 = 2 {
1a4d82fc
JJ
31 panic!("bad pattern match");
32 }
33
34 enum Foo {
35 One,
c34b1796
AL
36 Two(usize),
37 Three(String, isize)
1a4d82fc
JJ
38 }
39
85aaf69f 40 let foo = Foo::Three("three".to_string(), 42);
1a4d82fc
JJ
41 if let Foo::One = foo {
42 panic!("bad pattern match");
43 } else if let Foo::Two(_x) = foo {
44 panic!("bad pattern match");
45 } else if let Foo::Three(s, _) = foo {
85aaf69f 46 assert_eq!(s, "three");
1a4d82fc
JJ
47 } else {
48 panic!("bad else");
49 }
50
51 if false {
52 panic!("wat");
85aaf69f 53 } else if let a@Foo::Two(_) = Foo::Two(42_usize) {
1a4d82fc 54 if let Foo::Two(b) = a {
85aaf69f 55 assert_eq!(b, 42_usize);
1a4d82fc 56 } else {
6a06907d 57 panic!("panic in nested `if let`");
1a4d82fc
JJ
58 }
59 }
60}