mirror of
				https://github.com/rust-lang/rust.git
				synced 2025-10-30 20:44:34 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			143 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			143 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
| //@ run-pass
 | |
| 
 | |
| fn a() {
 | |
|     let x = [1];
 | |
|     match x {
 | |
|         [a] => {
 | |
|             assert_eq!(a, 1);
 | |
|         }
 | |
|     }
 | |
| }
 | |
| 
 | |
| fn b() {
 | |
|     let x = [1, 2, 3];
 | |
|     match x {
 | |
|         [a, b, c @ ..] => {
 | |
|             assert_eq!(a, 1);
 | |
|             assert_eq!(b, 2);
 | |
|             let expected: &[_] = &[3];
 | |
|             assert_eq!(c, expected);
 | |
|         }
 | |
|     }
 | |
|     match x {
 | |
|         [a @ .., b, c] => {
 | |
|             let expected: &[_] = &[1];
 | |
|             assert_eq!(a, expected);
 | |
|             assert_eq!(b, 2);
 | |
|             assert_eq!(c, 3);
 | |
|         }
 | |
|     }
 | |
|     match x {
 | |
|         [a, b @ .., c] => {
 | |
|             assert_eq!(a, 1);
 | |
|             let expected: &[_] = &[2];
 | |
|             assert_eq!(b, expected);
 | |
|             assert_eq!(c, 3);
 | |
|         }
 | |
|     }
 | |
|     match x {
 | |
|         [a, b, c] => {
 | |
|             assert_eq!(a, 1);
 | |
|             assert_eq!(b, 2);
 | |
|             assert_eq!(c, 3);
 | |
|         }
 | |
|     }
 | |
| }
 | |
| 
 | |
| 
 | |
| fn b_slice() {
 | |
|     let x : &[_] = &[1, 2, 3];
 | |
|     match x {
 | |
|         &[a, b, ref c @ ..] => {
 | |
|             assert_eq!(a, 1);
 | |
|             assert_eq!(b, 2);
 | |
|             let expected: &[_] = &[3];
 | |
|             assert_eq!(c, expected);
 | |
|         }
 | |
|         _ => unreachable!()
 | |
|     }
 | |
|     match x {
 | |
|         &[ref a @ .., b, c] => {
 | |
|             let expected: &[_] = &[1];
 | |
|             assert_eq!(a, expected);
 | |
|             assert_eq!(b, 2);
 | |
|             assert_eq!(c, 3);
 | |
|         }
 | |
|         _ => unreachable!()
 | |
|     }
 | |
|     match x {
 | |
|         &[a, ref b @ .., c] => {
 | |
|             assert_eq!(a, 1);
 | |
|             let expected: &[_] = &[2];
 | |
|             assert_eq!(b, expected);
 | |
|             assert_eq!(c, 3);
 | |
|         }
 | |
|         _ => unreachable!()
 | |
|     }
 | |
|     match x {
 | |
|         &[a, b, c] => {
 | |
|             assert_eq!(a, 1);
 | |
|             assert_eq!(b, 2);
 | |
|             assert_eq!(c, 3);
 | |
|         }
 | |
|         _ => unreachable!()
 | |
|     }
 | |
| }
 | |
| 
 | |
| fn c() {
 | |
|     let x = [1];
 | |
|     match x {
 | |
|         [2, ..] => panic!(),
 | |
|         [..] => ()
 | |
|     }
 | |
| }
 | |
| 
 | |
| fn d() {
 | |
|     let x = [1, 2, 3];
 | |
|     let branch = match x {
 | |
|         [1, 1, ..] => 0,
 | |
|         [1, 2, 3, ..] => 1,
 | |
|         [1, 2, ..] => 2,
 | |
|         _ => 3
 | |
|     };
 | |
|     assert_eq!(branch, 1);
 | |
| }
 | |
| 
 | |
| fn e() {
 | |
|     let x: &[isize] = &[1, 2, 3];
 | |
|     let a = match *x {
 | |
|         [1, 2] => 0,
 | |
|         [..] => 1,
 | |
|     };
 | |
| 
 | |
|     assert_eq!(a, 1);
 | |
| 
 | |
|     let b = match *x {
 | |
|         [2, ..] => 0,
 | |
|         [1, 2, ..] => 1,
 | |
|         [_] => 2,
 | |
|         [..] => 3
 | |
|     };
 | |
| 
 | |
|     assert_eq!(b, 1);
 | |
| 
 | |
| 
 | |
|     let c = match *x {
 | |
|         [_, _, _, _, ..] => 0,
 | |
|         [1, 2, ..] => 1,
 | |
|         [_] => 2,
 | |
|         [..] => 3
 | |
|     };
 | |
| 
 | |
|     assert_eq!(c, 1);
 | |
| }
 | |
| 
 | |
| pub fn main() {
 | |
|     a();
 | |
|     b();
 | |
|     b_slice();
 | |
|     c();
 | |
|     d();
 | |
|     e();
 | |
| }
 | 
