1use crate::Map;
2
3impl<K: PartialEq, V, const N: usize> FromIterator<(K, V)> for Map<K, V, N> {
4 #[inline]
5 #[must_use]
6 fn from_iter<T: IntoIterator<Item = (K, V)>>(iter: T) -> Self {
7 let mut m: Self = Self::new();
8 for (k, v) in iter {
9 m.insert(k, v);
10 }
11 m
12 }
13}
14
15impl<K: PartialEq, V, const N: usize> From<[(K, V); N]> for Map<K, V, N> {
16 #[inline]
17 #[must_use]
18 fn from(arr: [(K, V); N]) -> Self {
19 Self::from_iter(arr)
20 }
21}
22
23#[cfg(test)]
24mod test {
25 use super::*;
26
27 const TEST_ARRAY: [(i32, &str); 5] =
28 [(1, "sun"), (2, "mon"), (3, "tue"), (4, "wed"), (5, "thu")];
29
30 #[test]
31 fn from_iter() {
32 let vec = Vec::from(TEST_ARRAY);
33 let m: Map<i32, &str, 10> = Map::from_iter(vec);
34 assert_eq!(m.len(), 5);
35 }
36
37 #[test]
38 #[should_panic]
39 #[cfg(debug_assertions)]
40 fn from_larger_iter() {
41 let vec = Vec::from(TEST_ARRAY);
42 let _m: Map<i32, &str, 1> = Map::from_iter(vec);
43 }
44
45 #[test]
46 fn from_array() {
47 let m = Map::from(TEST_ARRAY);
48 assert_eq!(m.len(), 5);
49 }
50
51 #[test]
52 fn array_into_map() {
53 let m: Map<i32, &str, 5> = TEST_ARRAY.into();
54 assert_eq!(m.len(), 5);
55 }
56
57 #[test]
58 fn from_with_duplicates() {
59 let arr = [(1, "sun"), (2, "mon"), (3, "tue"), (1, "wed"), (2, "thu")];
60 let m = Map::from(arr);
61 assert_eq!(m.len(), 3);
62 assert_eq!(m[&2], "thu");
63 }
64}