| // Test that signed and unsigned integer patterns work with `#[loop_match]`. | |
| //@ run-pass | |
| #![allow(incomplete_features)] | |
| #![feature(loop_match)] | |
| fn main() { | |
| assert_eq!(integer(0), 2); | |
| assert_eq!(integer(-1), 2); | |
| assert_eq!(integer(2), 2); | |
| assert_eq!(boolean(true), false); | |
| assert_eq!(boolean(false), false); | |
| assert_eq!(character('a'), 'b'); | |
| assert_eq!(character('b'), 'b'); | |
| assert_eq!(character('c'), 'd'); | |
| assert_eq!(character('d'), 'd'); | |
| assert_eq!(test_f32(1.0), core::f32::consts::PI); | |
| assert_eq!(test_f32(2.5), core::f32::consts::PI); | |
| assert_eq!(test_f32(4.0), 4.0); | |
| assert_eq!(test_f64(1.0), core::f64::consts::PI); | |
| assert_eq!(test_f64(2.5), core::f64::consts::PI); | |
| assert_eq!(test_f64(4.0), 4.0); | |
| } | |
| fn integer(mut state: i32) -> i32 { | |
| #[loop_match] | |
| 'a: loop { | |
| state = 'blk: { | |
| match state { | |
| -1 => { | |
| #[const_continue] | |
| break 'blk 2; | |
| } | |
| 0 => { | |
| #[const_continue] | |
| break 'blk -1; | |
| } | |
| 2 => break 'a, | |
| _ => unreachable!("weird value {:?}", state), | |
| } | |
| } | |
| } | |
| state | |
| } | |
| fn boolean(mut state: bool) -> bool { | |
| #[loop_match] | |
| loop { | |
| state = 'blk: { | |
| match state { | |
| true => { | |
| #[const_continue] | |
| break 'blk false; | |
| } | |
| false => return state, | |
| } | |
| } | |
| } | |
| } | |
| fn character(mut state: char) -> char { | |
| #[loop_match] | |
| loop { | |
| state = 'blk: { | |
| match state { | |
| 'a' => { | |
| #[const_continue] | |
| break 'blk 'b'; | |
| } | |
| 'b' => return state, | |
| 'c' => { | |
| #[const_continue] | |
| break 'blk 'd'; | |
| } | |
| _ => return state, | |
| } | |
| } | |
| } | |
| } | |
| fn test_f32(mut state: f32) -> f32 { | |
| #[loop_match] | |
| loop { | |
| state = 'blk: { | |
| match state { | |
| 1.0 => { | |
| #[const_continue] | |
| break 'blk 2.5; | |
| } | |
| 2.0..3.0 => return core::f32::consts::PI, | |
| _ => return state, | |
| } | |
| } | |
| } | |
| } | |
| fn test_f64(mut state: f64) -> f64 { | |
| #[loop_match] | |
| loop { | |
| state = 'blk: { | |
| match state { | |
| 1.0 => { | |
| #[const_continue] | |
| break 'blk 2.5; | |
| } | |
| 2.0..3.0 => return core::f64::consts::PI, | |
| _ => return state, | |
| } | |
| } | |
| } | |
| } |