diff --git a/src/function/version.rs b/src/function/version.rs index 28e0d5c..70755b5 100644 --- a/src/function/version.rs +++ b/src/function/version.rs @@ -229,7 +229,14 @@ impl PartialOrd for Version { match self_release_ids.partial_cmp(&other_release_ids) { Some(Ordering::Equal) | None => { - self.pre_release_ids.partial_cmp(&other.pre_release_ids) + match ( + self.pre_release_ids.is_empty(), + other.pre_release_ids.is_empty(), + ) { + (true, false) => Some(Ordering::Greater), + (false, true) => Some(Ordering::Less), + _ => self.pre_release_ids.partial_cmp(&other.pre_release_ids), + } } r => r, } @@ -636,6 +643,19 @@ mod tests { assert!(Version::from("10.0.5") > Version::from("5.0.10")); } + #[test] + fn version_eq_should_consider_versions_that_differ_by_the_presence_of_a_pre_release_id_to_be_not_equal( + ) { + assert_ne!(Version::from("1.0.0"), Version::from("1.0.0-alpha")); + } + + #[test] + fn version_partial_cmp_should_treat_the_absence_of_a_pre_release_id_as_greater_than_its_presence( + ) { + assert!(Version::from("1.0.0-alpha") < Version::from("1.0.0")); + assert!(Version::from("1.0.0") > Version::from("1.0.0-alpha")); + } + #[test] fn version_eq_should_compare_pre_release_identifiers() { assert_eq!(