bbfb4c7e63
The existing test functions only check if a kind of fruit exists in the hashmap, but not if the amount of fruits is higher than zero. This new test function solves this.
93 lines
2.6 KiB
Rust
93 lines
2.6 KiB
Rust
// hashmaps2.rs
|
|
// We're collecting different fruits to bake a delicious fruit cake.
|
|
// For this, we have a basket, which we'll represent in the form of a hash
|
|
// map. The key represents the name of each fruit we collect and the value
|
|
// represents how many of that particular fruit we have collected.
|
|
// Three types of fruits - Apple (4), Mango (2) and Lychee (5) are already
|
|
// in the basket hash map.
|
|
// You must add fruit to the basket so that there is at least
|
|
// one of each kind and more than 11 in total - we have a lot of mouths to feed.
|
|
// You are not allowed to insert any more of these fruits!
|
|
//
|
|
// Make me pass the tests!
|
|
//
|
|
// Execute `rustlings hint hashmaps2` or use the `hint` watch subcommand for a hint.
|
|
|
|
// I AM NOT DONE
|
|
|
|
use std::collections::HashMap;
|
|
|
|
#[derive(Hash, PartialEq, Eq)]
|
|
enum Fruit {
|
|
Apple,
|
|
Banana,
|
|
Mango,
|
|
Lychee,
|
|
Pineapple,
|
|
}
|
|
|
|
fn fruit_basket(basket: &mut HashMap<Fruit, u32>) {
|
|
let fruit_kinds = vec![
|
|
Fruit::Apple,
|
|
Fruit::Banana,
|
|
Fruit::Mango,
|
|
Fruit::Lychee,
|
|
Fruit::Pineapple,
|
|
];
|
|
|
|
for fruit in fruit_kinds {
|
|
// TODO: Insert new fruits if they are not already present in the basket.
|
|
// Note that you are not allowed to put any type of fruit that's already
|
|
// present!
|
|
}
|
|
}
|
|
|
|
#[cfg(test)]
|
|
mod tests {
|
|
use super::*;
|
|
|
|
// Don't modify this function!
|
|
fn get_fruit_basket() -> HashMap<Fruit, u32> {
|
|
let mut basket = HashMap::<Fruit, u32>::new();
|
|
basket.insert(Fruit::Apple, 4);
|
|
basket.insert(Fruit::Mango, 2);
|
|
basket.insert(Fruit::Lychee, 5);
|
|
|
|
basket
|
|
}
|
|
|
|
#[test]
|
|
fn test_given_fruits_are_not_modified() {
|
|
let mut basket = get_fruit_basket();
|
|
fruit_basket(&mut basket);
|
|
assert_eq!(*basket.get(&Fruit::Apple).unwrap(), 4);
|
|
assert_eq!(*basket.get(&Fruit::Mango).unwrap(), 2);
|
|
assert_eq!(*basket.get(&Fruit::Lychee).unwrap(), 5);
|
|
}
|
|
|
|
#[test]
|
|
fn at_least_five_types_of_fruits() {
|
|
let mut basket = get_fruit_basket();
|
|
fruit_basket(&mut basket);
|
|
let count_fruit_kinds = basket.len();
|
|
assert!(count_fruit_kinds >= 5);
|
|
}
|
|
|
|
#[test]
|
|
fn greater_than_eleven_fruits() {
|
|
let mut basket = get_fruit_basket();
|
|
fruit_basket(&mut basket);
|
|
let count = basket.values().sum::<u32>();
|
|
assert!(count > 11);
|
|
}
|
|
|
|
#[test]
|
|
fn all_fruit_types_in_basket() {
|
|
let mut basket = get_fruit_basket();
|
|
fruit_basket(&mut basket);
|
|
for amount in basket.values() {
|
|
assert_ne!(amount, &0);
|
|
}
|
|
}
|
|
}
|