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}