mirror of https://github.com/rust-lang/rust.git
55 lines
1.3 KiB
Rust
55 lines
1.3 KiB
Rust
// Test that `#[loop_match]` supports or-patterns.
|
|
|
|
//@ run-pass
|
|
|
|
#![allow(incomplete_features)]
|
|
#![feature(loop_match)]
|
|
|
|
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
|
|
enum State {
|
|
A,
|
|
B,
|
|
C,
|
|
D,
|
|
}
|
|
|
|
fn main() {
|
|
let mut states = vec![];
|
|
let mut first = true;
|
|
let mut state = State::A;
|
|
#[loop_match]
|
|
'a: loop {
|
|
state = 'blk: {
|
|
match state {
|
|
State::A => {
|
|
states.push(state);
|
|
if first {
|
|
#[const_continue]
|
|
break 'blk State::B;
|
|
} else {
|
|
#[const_continue]
|
|
break 'blk State::D;
|
|
}
|
|
}
|
|
State::B | State::D => {
|
|
states.push(state);
|
|
if first {
|
|
first = false;
|
|
#[const_continue]
|
|
break 'blk State::A;
|
|
} else {
|
|
#[const_continue]
|
|
break 'blk State::C;
|
|
}
|
|
}
|
|
State::C => {
|
|
states.push(state);
|
|
break 'a;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
assert_eq!(states, [State::A, State::B, State::A, State::D, State::C]);
|
|
}
|