1use crate::Map;
2use core::mem::MaybeUninit;
3
4impl<K: PartialEq, V, const N: usize> Default for Map<K, V, N> {
5 #[inline]
7 #[must_use]
8 fn default() -> Self {
9 Self::new()
10 }
11}
12
13impl<K: PartialEq, V, const N: usize> Map<K, V, N> {
14 #[inline]
19 #[must_use]
20 #[allow(clippy::uninit_assumed_init)]
21 pub const fn new() -> Self {
22 unsafe {
23 Self {
24 len: 0,
25 pairs: MaybeUninit::<[MaybeUninit<(K, V)>; N]>::uninit().assume_init(),
26 }
27 }
28 }
29}
30
31impl<K: PartialEq, V, const N: usize> Drop for Map<K, V, N> {
32 fn drop(&mut self) {
33 for i in 0..self.len {
34 self.item_drop(i);
35 }
36 }
37}
38
39#[cfg(test)]
40mod test {
41 use super::*;
42
43 #[test]
44 fn makes_default_map() {
45 let m: Map<u8, u8, 8> = Map::default();
46 assert_eq!(0, m.len());
47 }
48
49 #[test]
50 fn makes_new_map() {
51 let m: Map<u8, u8, 8> = Map::new();
52 assert_eq!(0, m.len());
53 }
54
55 #[test]
56 fn drops_correctly() {
57 let _m: Map<Vec<u8>, u8, 8> = Map::new();
58 }
59
60 #[test]
61 fn drops_keys() {
62 use std::rc::Rc;
63 let mut m: Map<Rc<()>, (), 8> = Map::new();
64 let k = Rc::new(());
65 m.insert(Rc::clone(&k), ());
66 drop(m);
67 assert_eq!(Rc::strong_count(&k), 1);
68 }
69
70 #[test]
71 fn drops_values() {
72 use std::rc::Rc;
73 let mut m: Map<(), Rc<()>, 8> = Map::new();
74 let v = Rc::new(());
75 m.insert((), Rc::clone(&v));
76 drop(m);
77 assert_eq!(Rc::strong_count(&v), 1);
78 }
79}