mirror of
				https://github.com/rust-lang/rust.git
				synced 2025-10-31 13:04:42 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			61 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			61 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
| //@ 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`");
 | |
|         }
 | |
|     }
 | |
| }
 | 
