Skip to content

Commit 17b55a3

Browse files
committed
tests on semver
1 parent 05a8696 commit 17b55a3

File tree

1 file changed

+101
-7
lines changed

1 file changed

+101
-7
lines changed

src/semver.rs

Lines changed: 101 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -207,7 +207,27 @@ mod tests {
207207
use semver::Version;
208208

209209
#[test]
210-
fn test_version_map() {
210+
fn test_version_map_basic_operations() {
211+
let mut map = VersionMap::new();
212+
213+
let version0 = Version::new(0, 4, 2);
214+
let version1 = Version::new(1, 0, 0);
215+
let version2 = Version::new(1, 0, 1);
216+
let version3 = Version::new(2, 0, 0);
217+
218+
// Test insertions
219+
assert!(map.try_insert(version0.clone(), "value0").is_ok());
220+
assert!(map.try_insert(version1.clone(), "value1").is_ok());
221+
assert!(map.try_insert(version2.clone(), "value2").is_ok());
222+
assert!(map.try_insert(version3.clone(), "value3").is_ok());
223+
224+
// Test duplicate insertion
225+
assert!(map.try_insert(version1.clone(), "duplicate").is_err());
226+
227+
}
228+
229+
#[test]
230+
fn test_version_map_alternate_lookups() {
211231
let mut map = VersionMap::new();
212232

213233
let version0 = Version::new(0, 4, 2);
@@ -220,20 +240,94 @@ mod tests {
220240
map.try_insert(version2.clone(), "value2").unwrap();
221241
map.try_insert(version3.clone(), "value3").unwrap();
222242

243+
// Test exact matches
223244
assert_eq!(map.get(&version0), Some(&"value0"));
224-
assert_eq!(map.get(&version1), Some(&"value2"));
225245
assert_eq!(map.get(&version2), Some(&"value2"));
226246
assert_eq!(map.get(&version3), Some(&"value3"));
227247

248+
// Test alternate matches (should get latest in group)
249+
assert_eq!(map.get(&version1), Some(&"value2")); // 1.0.0 -> latest in 1.x.x group
250+
assert_eq!(map.get(&Version::new(0, 4, 1)), Some(&"value0")); // 0.4.1 -> latest in 0.4.x group
251+
assert_eq!(map.get(&Version::new(1, 1, 0)), Some(&"value2")); // 1.1.0 -> latest in 1.x.x group
252+
assert_eq!(map.get(&Version::new(2, 0, 4)), Some(&"value3")); // 2.0.4 -> latest in 2.x.x group
253+
254+
// Test non-existent versions
228255
assert_eq!(map.get(&Version::new(0, 1, 0)), None);
229-
assert_eq!(map.get(&Version::new(0, 4, 1)), Some(&"value0"));
230-
assert_eq!(map.get(&Version::new(1, 1, 0)), Some(&"value2"));
231-
assert_eq!(map.get(&Version::new(2, 0, 4)), Some(&"value3"));
232256
assert_eq!(map.get(&Version::new(3, 0, 0)), None);
233257

258+
// Test exact lookups
234259
assert_eq!(map.get_exact(&version1), Some(&"value1"));
260+
assert_eq!(map.get_exact(&Version::new(1, 1, 0)), None); // No exact match
261+
}
262+
263+
#[test]
264+
fn test_version_map_latest_operations() {
265+
let mut map = VersionMap::new();
266+
267+
assert_eq!(map.get_latest(), None);
268+
assert_eq!(map.get_or_latest(None), None);
269+
270+
map.insert(Version::new(1, 0, 0), "v1.0.0");
271+
map.insert(Version::new(2, 0, 0), "v2.0.0");
272+
map.insert(Version::new(0, 1, 0), "v0.1.0");
273+
274+
assert_eq!(map.get_latest(), Some((&Version::new(2, 0, 0), &"v2.0.0")));
275+
assert_eq!(map.get_or_latest(None), Some(&"v2.0.0"));
276+
assert_eq!(
277+
map.get_or_latest(Some(&Version::new(1, 0, 0))),
278+
Some(&"v1.0.0")
279+
);
280+
}
281+
282+
#[test]
283+
fn test_version_map_removal() {
284+
let mut map = VersionMap::new();
285+
286+
let v1 = Version::new(1, 0, 0);
287+
let v2 = Version::new(1, 0, 1);
288+
289+
map.insert(v1.clone(), "v1");
290+
map.insert(v2.clone(), "v2");
291+
292+
assert_eq!(map.remove(&v1), Some("v1"));
293+
assert_eq!(map.remove(&v1), None); // Already removed
294+
295+
}
296+
297+
#[test]
298+
fn test_version_alternate_function() {
299+
// Pre-release versions have no alternates
300+
let pre = Version::parse("1.0.0-alpha").unwrap();
301+
assert_eq!(version_alternate(&pre), None);
302+
303+
// Major versions > 0
304+
assert_eq!(
305+
version_alternate(&Version::new(1, 2, 3)),
306+
Some(Version::new(1, 0, 0))
307+
);
308+
assert_eq!(
309+
version_alternate(&Version::new(2, 5, 1)),
310+
Some(Version::new(2, 0, 0))
311+
);
312+
313+
// Minor versions > 0 (when major is 0)
314+
assert_eq!(
315+
version_alternate(&Version::new(0, 1, 5)),
316+
Some(Version::new(0, 1, 0))
317+
);
318+
assert_eq!(
319+
version_alternate(&Version::new(0, 3, 2)),
320+
Some(Version::new(0, 3, 0))
321+
);
235322

236-
assert_eq!(map.get_or_latest(None), Some(&"value3"));
237-
assert_eq!(map.get_or_latest(Some(&version1)), Some(&"value2"));
323+
// Patch versions (when major and minor are 0)
324+
assert_eq!(
325+
version_alternate(&Version::new(0, 0, 1)),
326+
Some(Version::new(0, 0, 1))
327+
);
328+
assert_eq!(
329+
version_alternate(&Version::new(0, 0, 5)),
330+
Some(Version::new(0, 0, 5))
331+
);
238332
}
239333
}

0 commit comments

Comments
 (0)