Skip to content

Commit cb10ffc

Browse files
committed
tests on semver
1 parent 48abe88 commit cb10ffc

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
@@ -109,7 +109,27 @@ mod tests {
109109
use semver::Version;
110110

111111
#[test]
112-
fn test_version_map() {
112+
fn test_version_map_basic_operations() {
113+
let mut map = VersionMap::new();
114+
115+
let version0 = Version::new(0, 4, 2);
116+
let version1 = Version::new(1, 0, 0);
117+
let version2 = Version::new(1, 0, 1);
118+
let version3 = Version::new(2, 0, 0);
119+
120+
// Test insertions
121+
assert!(map.try_insert(version0.clone(), "value0").is_ok());
122+
assert!(map.try_insert(version1.clone(), "value1").is_ok());
123+
assert!(map.try_insert(version2.clone(), "value2").is_ok());
124+
assert!(map.try_insert(version3.clone(), "value3").is_ok());
125+
126+
// Test duplicate insertion
127+
assert!(map.try_insert(version1.clone(), "duplicate").is_err());
128+
129+
}
130+
131+
#[test]
132+
fn test_version_map_alternate_lookups() {
113133
let mut map = VersionMap::new();
114134

115135
let version0 = Version::new(0, 4, 2);
@@ -122,20 +142,94 @@ mod tests {
122142
map.try_insert(version2.clone(), "value2").unwrap();
123143
map.try_insert(version3.clone(), "value3").unwrap();
124144

145+
// Test exact matches
125146
assert_eq!(map.get(&version0), Some(&"value0"));
126-
assert_eq!(map.get(&version1), Some(&"value2"));
127147
assert_eq!(map.get(&version2), Some(&"value2"));
128148
assert_eq!(map.get(&version3), Some(&"value3"));
129149

150+
// Test alternate matches (should get latest in group)
151+
assert_eq!(map.get(&version1), Some(&"value2")); // 1.0.0 -> latest in 1.x.x group
152+
assert_eq!(map.get(&Version::new(0, 4, 1)), Some(&"value0")); // 0.4.1 -> latest in 0.4.x group
153+
assert_eq!(map.get(&Version::new(1, 1, 0)), Some(&"value2")); // 1.1.0 -> latest in 1.x.x group
154+
assert_eq!(map.get(&Version::new(2, 0, 4)), Some(&"value3")); // 2.0.4 -> latest in 2.x.x group
155+
156+
// Test non-existent versions
130157
assert_eq!(map.get(&Version::new(0, 1, 0)), None);
131-
assert_eq!(map.get(&Version::new(0, 4, 1)), Some(&"value0"));
132-
assert_eq!(map.get(&Version::new(1, 1, 0)), Some(&"value2"));
133-
assert_eq!(map.get(&Version::new(2, 0, 4)), Some(&"value3"));
134158
assert_eq!(map.get(&Version::new(3, 0, 0)), None);
135159

160+
// Test exact lookups
136161
assert_eq!(map.get_exact(&version1), Some(&"value1"));
162+
assert_eq!(map.get_exact(&Version::new(1, 1, 0)), None); // No exact match
163+
}
164+
165+
#[test]
166+
fn test_version_map_latest_operations() {
167+
let mut map = VersionMap::new();
168+
169+
assert_eq!(map.get_latest(), None);
170+
assert_eq!(map.get_or_latest(None), None);
171+
172+
map.insert(Version::new(1, 0, 0), "v1.0.0");
173+
map.insert(Version::new(2, 0, 0), "v2.0.0");
174+
map.insert(Version::new(0, 1, 0), "v0.1.0");
137175

138-
assert_eq!(map.get_or_latest(None), Some(&"value3"));
139-
assert_eq!(map.get_or_latest(Some(&version1)), Some(&"value2"));
176+
assert_eq!(map.get_latest(), Some((&Version::new(2, 0, 0), &"v2.0.0")));
177+
assert_eq!(map.get_or_latest(None), Some(&"v2.0.0"));
178+
assert_eq!(
179+
map.get_or_latest(Some(&Version::new(1, 0, 0))),
180+
Some(&"v1.0.0")
181+
);
182+
}
183+
184+
#[test]
185+
fn test_version_map_removal() {
186+
let mut map = VersionMap::new();
187+
188+
let v1 = Version::new(1, 0, 0);
189+
let v2 = Version::new(1, 0, 1);
190+
191+
map.insert(v1.clone(), "v1");
192+
map.insert(v2.clone(), "v2");
193+
194+
assert_eq!(map.remove(&v1), Some("v1"));
195+
assert_eq!(map.remove(&v1), None); // Already removed
196+
197+
}
198+
199+
#[test]
200+
fn test_version_alternate_function() {
201+
// Pre-release versions have no alternates
202+
let pre = Version::parse("1.0.0-alpha").unwrap();
203+
assert_eq!(version_alternate(&pre), None);
204+
205+
// Major versions > 0
206+
assert_eq!(
207+
version_alternate(&Version::new(1, 2, 3)),
208+
Some(Version::new(1, 0, 0))
209+
);
210+
assert_eq!(
211+
version_alternate(&Version::new(2, 5, 1)),
212+
Some(Version::new(2, 0, 0))
213+
);
214+
215+
// Minor versions > 0 (when major is 0)
216+
assert_eq!(
217+
version_alternate(&Version::new(0, 1, 5)),
218+
Some(Version::new(0, 1, 0))
219+
);
220+
assert_eq!(
221+
version_alternate(&Version::new(0, 3, 2)),
222+
Some(Version::new(0, 3, 0))
223+
);
224+
225+
// Patch versions (when major and minor are 0)
226+
assert_eq!(
227+
version_alternate(&Version::new(0, 0, 1)),
228+
Some(Version::new(0, 0, 1))
229+
);
230+
assert_eq!(
231+
version_alternate(&Version::new(0, 0, 5)),
232+
Some(Version::new(0, 0, 5))
233+
);
140234
}
141235
}

0 commit comments

Comments
 (0)