options2.rs (1037B)
1 fn main() { 2 // You can optionally experiment here. 3 } 4 5 #[cfg(test)] 6 mod tests { 7 use core::option::Option::Some; 8 9 #[test] 10 fn simple_option() { 11 let target = "rustlings"; 12 let optional_target = Some(target); 13 14 // TODO: Make this an if-let statement whose value is `Some`. 15 if let Some(word) = optional_target { 16 assert_eq!(word, target); 17 } 18 } 19 20 #[test] 21 fn layered_option() { 22 let range = 10; 23 let mut optional_integers: Vec<Option<i8>> = vec![None]; 24 25 for i in 1..=range { 26 optional_integers.push(Some(i)); 27 } 28 29 let mut cursor = range; 30 31 // TODO: Make this a while-let statement. Remember that `Vec::pop()` 32 // adds another layer of `Option`. You can do nested pattern matching 33 // in if-let and while-let statements. 34 while let Some(Some(integer)) = optional_integers.pop() { 35 assert_eq!(integer, cursor); 36 cursor -= 1; 37 } 38 39 assert_eq!(cursor, 0); 40 } 41 }