//@ 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`"); } } }