Skip to content

Commit 8121faa

Browse files
authored
Add unit tests for utils indexmap and vector modules (gluesql#1813)
1 parent 9997048 commit 8121faa

2 files changed

Lines changed: 115 additions & 9 deletions

File tree

utils/src/indexmap.rs

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,3 +50,49 @@ impl<K: Hash + Eq, V> IntoIterator for IndexMap<K, V> {
5050
self.0.into_iter()
5151
}
5252
}
53+
54+
#[cfg(test)]
55+
mod tests {
56+
use super::IndexMap;
57+
58+
#[test]
59+
fn new_and_default_are_empty() {
60+
let map = IndexMap::<&str, i32>::new();
61+
assert!(map.is_empty());
62+
assert_eq!(map.len(), 0);
63+
64+
let default_map = IndexMap::<&str, i32>::default();
65+
assert!(default_map.is_empty());
66+
assert_eq!(default_map.len(), 0);
67+
}
68+
69+
#[test]
70+
fn insert_get_and_order() {
71+
let (map, previous) = IndexMap::new().insert("a", 1);
72+
assert!(previous.is_none());
73+
74+
let (map, previous) = map.insert("b", 2);
75+
assert!(previous.is_none());
76+
77+
let (map, previous) = map.insert("a", 3);
78+
assert_eq!(previous, Some(1));
79+
80+
assert_eq!(map.len(), 2);
81+
assert!(!map.is_empty());
82+
assert_eq!(map.get(&"a"), Some(&3));
83+
assert_eq!(map.get(&"b"), Some(&2));
84+
85+
let keys: Vec<_> = map.keys().copied().collect();
86+
assert_eq!(keys, vec!["a", "b"]);
87+
}
88+
89+
#[test]
90+
fn into_iter_preserves_insertion_order() {
91+
let (map, _) = IndexMap::new().insert(1, "one");
92+
let (map, _) = map.insert(2, "two");
93+
let (map, _) = map.insert(1, "uno");
94+
95+
let collected: Vec<_> = map.into_iter().collect();
96+
assert_eq!(collected, vec![(1, "uno"), (2, "two")]);
97+
}
98+
}

utils/src/vector.rs

Lines changed: 69 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -109,23 +109,83 @@ mod tests {
109109
use super::Vector;
110110

111111
#[test]
112-
fn test_len() {
113-
let mut vector = Vector::new();
112+
fn new_and_default_are_empty() {
113+
let vector = Vector::<i32>::new();
114+
assert!(vector.is_empty());
114115
assert_eq!(vector.len(), 0);
115116

116-
vector = vector.push(1);
117-
assert_eq!(vector.len(), 1);
117+
let default_vector = Vector::<i32>::default();
118+
assert!(default_vector.is_empty());
119+
assert_eq!(default_vector.len(), 0);
120+
}
121+
122+
#[test]
123+
fn push_update_remove_and_get() {
124+
let vector = Vector::new().push(1).push(2).push(3);
125+
assert_eq!(vector.len(), 3);
126+
assert_eq!(vector.get(0), Some(&1));
127+
assert_eq!(vector.get(2), Some(&3));
128+
129+
let vector = vector.update(1, 10);
130+
assert_eq!(vector.get(1), Some(&10));
118131

119-
vector = vector.push(2);
132+
let vector = vector.remove(0);
120133
assert_eq!(vector.len(), 2);
134+
assert_eq!(vector.get(0), Some(&10));
135+
assert_eq!(vector.get(1), Some(&3));
136+
}
137+
138+
#[test]
139+
fn reverse_sort_and_sort_by() {
140+
let vector = Vector::new().push(3).push(1).push(2);
141+
let vector = vector.reverse();
142+
assert_eq!(vector.get(0), Some(&2));
143+
assert_eq!(vector.get(1), Some(&1));
144+
assert_eq!(vector.get(2), Some(&3));
145+
146+
let vector = vector.sort();
147+
assert_eq!(vector.get(0), Some(&1));
148+
assert_eq!(vector.get(1), Some(&2));
149+
assert_eq!(vector.get(2), Some(&3));
150+
151+
let vector = vector.sort_by(|a, b| b.cmp(a));
152+
assert_eq!(vector.get(0), Some(&3));
153+
assert_eq!(vector.get(1), Some(&2));
154+
assert_eq!(vector.get(2), Some(&1));
121155
}
122156

123157
#[test]
124-
fn test_is_empty() {
125-
let mut vector = Vector::new();
158+
fn pop_returns_removed_value() {
159+
let vector = Vector::new().push(1).push(2);
160+
let (vector, popped) = vector.pop();
161+
assert_eq!(popped, Some(2));
162+
assert_eq!(vector.len(), 1);
163+
164+
let (vector, popped) = vector.pop();
165+
assert_eq!(popped, Some(1));
126166
assert!(vector.is_empty());
127167

128-
vector = vector.push(1);
129-
assert!(!vector.is_empty());
168+
let (_, popped) = Vector::<i32>::new().pop();
169+
assert_eq!(popped, None);
170+
}
171+
172+
#[test]
173+
fn conversions_cover_all_variants() {
174+
let base = vec![1, 2, 3];
175+
176+
let vector_from_vec = Vector::from(base.clone());
177+
assert_eq!(vector_from_vec.len(), base.len());
178+
179+
let vec_from_vector: Vec<_> = Vector::from(base.clone()).into();
180+
assert_eq!(vec_from_vector, base);
181+
182+
let vector_from_iter: Vector<_> = base.clone().into_iter().collect();
183+
assert_eq!(vector_from_iter.len(), base.len());
184+
185+
let vec_from_iter_vector: Vec<_> = vector_from_iter.into();
186+
assert_eq!(vec_from_iter_vector, base);
187+
188+
let iterated: Vec<_> = Vector::from(vec![1, 2, 3]).into_iter().collect();
189+
assert_eq!(iterated, vec![1, 2, 3]);
130190
}
131191
}

0 commit comments

Comments
 (0)