Skip to content

Commit 0cae452

Browse files
committed
add some VecMap tests
1 parent 4d8c196 commit 0cae452

File tree

1 file changed

+103
-0
lines changed

1 file changed

+103
-0
lines changed

signal-hook-registry/src/vec_map.rs

Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,3 +66,106 @@ impl<K: Eq, V> VecMap<K, V> {
6666
self.0.iter().map(|kv| &kv.1)
6767
}
6868
}
69+
70+
#[cfg(test)]
71+
mod tests {
72+
use super::*;
73+
74+
#[test]
75+
fn empty() {
76+
let m: VecMap<char, u32> = VecMap::new();
77+
assert!(m.is_empty());
78+
assert!(!m.contains(&'a'));
79+
assert!(m.values().next().is_none());
80+
}
81+
82+
#[test]
83+
fn insert_update_get() {
84+
let mut m: VecMap<char, u32> = VecMap::new();
85+
assert!(m.insert('a', 1).is_none());
86+
assert!(m.insert('b', 2).is_none());
87+
assert_eq!(m.get(&'a'), Some(&1));
88+
assert_eq!(m.get(&'b'), Some(&2));
89+
*m.get_mut(&'a').unwrap() += 10;
90+
assert_eq!(m.get(&'a'), Some(&11));
91+
assert_eq!(m.get(&'b'), Some(&2));
92+
}
93+
94+
#[test]
95+
fn insert_overwrite() {
96+
let mut m = VecMap::new();
97+
assert_eq!(m.insert('a', 1), None);
98+
assert_eq!(m.insert('b', 2), None);
99+
assert_eq!(m.insert('a', 3), Some(1));
100+
assert_eq!(m.insert('a', 4), Some(3));
101+
assert_eq!(m.get(&'a').copied(), Some(4));
102+
assert_eq!(m.get(&'b').copied(), Some(2));
103+
assert_eq!(m.insert('b', 5), Some(2));
104+
assert_eq!(m.get(&'a').copied(), Some(4));
105+
assert_eq!(m.get(&'b').copied(), Some(5));
106+
}
107+
108+
#[test]
109+
fn insert_remove() {
110+
let mut m: VecMap<char, u32> = VecMap::new();
111+
assert_eq!(m.remove(&'a'), None);
112+
m.insert('a', 1);
113+
m.insert('b', 2);
114+
assert_eq!(m.remove(&'a'), Some(1));
115+
assert_eq!(m.remove(&'a'), None);
116+
assert_eq!(m.remove(&'b'), Some(2));
117+
assert!(m.is_empty());
118+
}
119+
120+
#[test]
121+
fn insertion_order() {
122+
let mut m: VecMap<char, u32> = VecMap::new();
123+
let values = |m: &VecMap<char, u32>| -> Vec<u32> { m.values().copied().collect() };
124+
m.insert('b', 2);
125+
m.insert('a', 1);
126+
m.insert('c', 3);
127+
assert_eq!(values(&m), vec![2, 1, 3]);
128+
m.insert('a', 11);
129+
m.remove(&'b');
130+
assert_eq!(values(&m), vec![11, 3]);
131+
m.insert('b', 2);
132+
assert_eq!(values(&m), vec![11, 3, 2]);
133+
}
134+
135+
#[test]
136+
fn containment_equivalences() {
137+
let mut m = VecMap::new();
138+
for i in 0u8..=255 {
139+
if i % 10 < 3 {
140+
m.insert(i, i);
141+
}
142+
}
143+
for i in 0u8..=255 {
144+
if m.contains(&i) {
145+
assert_eq!(m.get(&i).copied(), Some(i));
146+
assert_eq!(m.get_mut(&i).copied(), Some(i));
147+
assert_eq!(m.insert(i, i), Some(i));
148+
assert_eq!(m.remove(&i), Some(i));
149+
} else {
150+
assert!(m.get(&i).is_none());
151+
assert!(m.get_mut(&i).is_none());
152+
assert!(m.remove(&i).is_none());
153+
assert!(m.insert(i, i).is_none());
154+
}
155+
}
156+
}
157+
158+
#[test]
159+
fn clear() {
160+
let mut m = VecMap::new();
161+
m.clear();
162+
assert!(m.is_empty());
163+
m.insert('a', 1);
164+
m.insert('b', 2);
165+
assert!(!m.is_empty());
166+
m.clear();
167+
assert!(m.is_empty());
168+
m.insert('c', 3);
169+
assert!(!m.is_empty());
170+
}
171+
}

0 commit comments

Comments
 (0)