micromap_rawl/
from.rs

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}