micromap_rawl/
eq.rs

1use crate::Map;
2
3impl<K: PartialEq, V: PartialEq, const N: usize> PartialEq for Map<K, V, N> {
4    /// Two maps can be compared.
5    ///
6    /// For example:
7    ///
8    /// ```
9    /// let mut m1: micromap_rawl::Map<u8, i32, 10> = micromap_rawl::Map::new();
10    /// let mut m2: micromap_rawl::Map<u8, i32, 10> = micromap_rawl::Map::new();
11    /// m1.insert(1, 42);
12    /// m2.insert(1, 42);
13    /// # #[cfg(std)]
14    /// assert_eq!(m1, m2);
15    /// // two maps with different order of key-value pairs are still equal:
16    /// m1.insert(2, 1);
17    /// m1.insert(3, 16);
18    /// m2.insert(3, 16);
19    /// m2.insert(2, 1);
20    /// # #[cfg(std)]
21    /// assert_eq!(m1, m2);
22    /// ```
23    #[inline]
24    fn eq(
25        &self,
26        other: &Self,
27    ) -> bool {
28        self.len() == other.len() && self.iter().all(|(k, v)| other.get(k) == Some(v))
29    }
30}
31
32impl<K: Eq, V: Eq, const N: usize> Eq for Map<K, V, N> {}
33
34#[cfg(test)]
35mod test {
36    use super::*;
37
38    #[test]
39    fn compares_two_maps() {
40        let mut m1: Map<String, i32, 10> = Map::new();
41        m1.insert("first".to_string(), 42);
42        let mut m2: Map<String, i32, 10> = Map::new();
43        m2.insert("first".to_string(), 42);
44        assert!(m1.eq(&m2));
45    }
46}