about summary refs log tree commit diff
path: root/tests/ui/binding/if-let.rs
diff options
context:
space:
mode:
Diffstat (limited to 'tests/ui/binding/if-let.rs')
-rw-r--r--tests/ui/binding/if-let.rs60
1 files changed, 60 insertions, 0 deletions
diff --git a/tests/ui/binding/if-let.rs b/tests/ui/binding/if-let.rs
new file mode 100644
index 00000000000..28d57e92c37
--- /dev/null
+++ b/tests/ui/binding/if-let.rs
@@ -0,0 +1,60 @@
+// run-pass
+#![allow(dead_code)]
+
+pub fn main() {
+    let x = Some(3);
+    if let Some(y) = x {
+        assert_eq!(y, 3);
+    } else {
+        panic!("`if let` panicked");
+    }
+    let mut worked = false;
+    if let Some(_) = x {
+        worked = true;
+    }
+    assert!(worked);
+    let clause: usize;
+    if let None = Some("test") {
+        clause = 1;
+    } else if 4_usize > 5 {
+        clause = 2;
+    } else if let Ok(()) = Err::<(),&'static str>("test") {
+        clause = 3;
+    } else {
+        clause = 4;
+    }
+    assert_eq!(clause, 4_usize);
+
+    if 3 > 4 {
+        panic!("bad math");
+    } else if let 1 = 2 {
+        panic!("bad pattern match");
+    }
+
+    enum Foo {
+        One,
+        Two(usize),
+        Three(String, isize)
+    }
+
+    let foo = Foo::Three("three".to_string(), 42);
+    if let Foo::One = foo {
+        panic!("bad pattern match");
+    } else if let Foo::Two(_x) = foo {
+        panic!("bad pattern match");
+    } else if let Foo::Three(s, _) = foo {
+        assert_eq!(s, "three");
+    } else {
+        panic!("bad else");
+    }
+
+    if false {
+        panic!("wat");
+    } else if let a@Foo::Two(_) = Foo::Two(42_usize) {
+        if let Foo::Two(b) = a {
+            assert_eq!(b, 42_usize);
+        } else {
+            panic!("panic in nested `if let`");
+        }
+    }
+}