// hashmap2.rs // 给你一个用散列表表示的水果篮,它的键表示水果的名称,值表示篮子里对应水果的个数。 // 现在需要往篮子添加至少 11 种水果。篮子里已有 - 苹果 (4), // 芒果 (2) 和荔枝 (5) 三种水果,你不能再添加这些水果。 // // 让我通过测试! // // 如果需要提示,可以执行命令 `rustlings hint hashmap2`。 // 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) { let fruit_kinds = vec![ Fruit::Apple, Fruit::Banana, Fruit::Mango, Fruit::Lychee, Fruit::Pineapple, ]; for fruit in fruit_kinds { // TODO:如果篮子里没有某种水果,就把它放入篮子。 // 注意,你不能放入篮子中任何已有的水果。 } } #[cfg(test)] mod tests { use super::*; fn get_fruit_basket() -> HashMap { let mut basket = HashMap::::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::(); assert!(count > 11); } }