options1 solution

This commit is contained in:
mo8it 2024-06-26 12:59:10 +02:00
parent 1694682aa4
commit c31e15c4cf
3 changed files with 53 additions and 18 deletions

View file

@ -1,12 +1,9 @@
// This function returns how much icecream there is left in the fridge. // This function returns how much icecream there is left in the fridge.
// If it's before 10PM, there's 5 scoops left. At 10PM, someone eats it // If it's before 22:00 (24-hour system), then 5 scoops are left. At 22:00,
// all, so there'll be no more left :( // someone eats it all, so no icecream is left (value 0). Return `None` if
fn maybe_icecream(time_of_day: u16) -> Option<u16> { // `hour_of_day` is higher than 23.
// We use the 24-hour system here, so 10PM is a value of 22 and 12AM is a fn maybe_icecream(hour_of_day: u16) -> Option<u16> {
// value of 0. The Option output should gracefully handle cases where // TODO: Complete the function body.
// time_of_day > 23.
// TODO: Complete the function body - remember to return an Option!
???
} }
fn main() { fn main() {
@ -17,6 +14,14 @@ fn main() {
mod tests { mod tests {
use super::*; use super::*;
#[test]
fn raw_value() {
// TODO: Fix this test. How do you get the value contained in the
// Option?
let icecreams = maybe_icecream(12);
assert_eq!(icecreams, 5);
}
#[test] #[test]
fn check_icecream() { fn check_icecream() {
assert_eq!(maybe_icecream(0), Some(5)); assert_eq!(maybe_icecream(0), Some(5));
@ -24,14 +29,7 @@ mod tests {
assert_eq!(maybe_icecream(18), Some(5)); assert_eq!(maybe_icecream(18), Some(5));
assert_eq!(maybe_icecream(22), Some(0)); assert_eq!(maybe_icecream(22), Some(0));
assert_eq!(maybe_icecream(23), Some(0)); assert_eq!(maybe_icecream(23), Some(0));
assert_eq!(maybe_icecream(24), None);
assert_eq!(maybe_icecream(25), None); assert_eq!(maybe_icecream(25), None);
} }
#[test]
fn raw_value() {
// TODO: Fix this test. How do you get at the value contained in the
// Option?
let icecreams = maybe_icecream(12);
assert_eq!(icecreams, 5);
}
} }

View file

@ -603,7 +603,7 @@ hint = """
Options can have a `Some` value, with an inner value, or a `None` value, Options can have a `Some` value, with an inner value, or a `None` value,
without an inner value. without an inner value.
There's multiple ways to get at the inner value, you can use `unwrap`, or There are multiple ways to get at the inner value, you can use `unwrap`, or
pattern match. Unwrapping is the easiest, but how do you do it safely so that pattern match. Unwrapping is the easiest, but how do you do it safely so that
it doesn't panic in your face later?""" it doesn't panic in your face later?"""

View file

@ -1 +1,38 @@
// Solutions will be available before the stable release. Thank you for testing the beta version 🥰 // This function returns how much icecream there is left in the fridge.
// If it's before 22:00 (24-hour system), then 5 scoops are left. At 22:00,
// someone eats it all, so no icecream is left (value 0). Return `None` if
// `hour_of_day` is higher than 23.
fn maybe_icecream(hour_of_day: u16) -> Option<u16> {
match hour_of_day {
0..22 => Some(5),
22..24 => Some(0),
_ => None,
}
}
fn main() {
// You can optionally experiment here.
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn raw_value() {
// Using `unwrap` is fine in a test.
let icecreams = maybe_icecream(12).unwrap();
assert_eq!(icecreams, 5);
}
#[test]
fn check_icecream() {
assert_eq!(maybe_icecream(0), Some(5));
assert_eq!(maybe_icecream(9), Some(5));
assert_eq!(maybe_icecream(18), Some(5));
assert_eq!(maybe_icecream(22), Some(0));
assert_eq!(maybe_icecream(23), Some(0));
assert_eq!(maybe_icecream(24), None);
assert_eq!(maybe_icecream(25), None);
}
}