// 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, } } } }