50 lines
1.2 KiB
Rust
50 lines
1.2 KiB
Rust
//@ run-pass
|
|
|
|
#![feature(if_let_guard, let_chains)]
|
|
|
|
fn check_if_let(opt: Option<Option<Option<i32>>>, value: i32) -> bool {
|
|
if let Some(first) = opt
|
|
&& let Some(second) = first
|
|
&& let Some(third) = second
|
|
&& third == value
|
|
{
|
|
true
|
|
}
|
|
else {
|
|
false
|
|
}
|
|
}
|
|
|
|
fn check_let_guard(opt: Option<Option<Option<i32>>>, value: i32) -> bool {
|
|
match opt {
|
|
Some(first) if let Some(second) = first && let Some(third) = second && third == value => {
|
|
true
|
|
}
|
|
_ => {
|
|
false
|
|
}
|
|
}
|
|
}
|
|
|
|
fn check_while_let(opt: Option<Option<Option<i32>>>, value: i32) -> bool {
|
|
while let Some(first) = opt
|
|
&& let Some(second) = first
|
|
&& let Some(third) = second
|
|
&& third == value
|
|
{
|
|
return true;
|
|
}
|
|
false
|
|
}
|
|
|
|
fn main() {
|
|
assert_eq!(check_if_let(Some(Some(Some(1))), 1), true);
|
|
assert_eq!(check_if_let(Some(Some(Some(1))), 9), false);
|
|
|
|
assert_eq!(check_let_guard(Some(Some(Some(1))), 1), true);
|
|
assert_eq!(check_let_guard(Some(Some(Some(1))), 9), false);
|
|
|
|
assert_eq!(check_while_let(Some(Some(Some(1))), 1), true);
|
|
assert_eq!(check_while_let(Some(Some(Some(1))), 9), false);
|
|
}
|