| 
							
								 | 
							
							// 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<Fruit, u32>) {
 | 
						
						
						
						
							 | 
							
								 | 
							
							    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<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);
 | 
						
						
						
						
							 | 
							
								 | 
							
							    }
 | 
						
						
						
						
							 | 
							
								 | 
							
							}
 |