@@ -206,7 +206,10 @@ impl std::cmp::Ord for Version {
206206 // prefer numbers
207207 if let Ok ( a_num) = a. parse :: < u64 > ( ) {
208208 if let Ok ( b_num) = b. parse :: < u64 > ( ) {
209- return a_num. cmp ( & b_num) ;
209+ let cmp_result = a_num. cmp ( & b_num) ;
210+ if cmp_result != Ordering :: Equal {
211+ return cmp_result;
212+ }
210213 } else {
211214 return Ordering :: Less ;
212215 }
@@ -433,6 +436,13 @@ mod test {
433436 assert_eq ! ( cmp( "0.0.0" , "0.0.0-pre" ) , Ordering :: Greater ) ;
434437 assert_eq ! ( cmp( "0.0.0-a" , "0.0.0-b" ) , Ordering :: Less ) ;
435438 assert_eq ! ( cmp( "0.0.0-a" , "0.0.0-a" ) , Ordering :: Equal ) ;
439+ assert_eq ! ( cmp( "2.0.0-rc.3.0.5" , "2.0.0-rc.3.0.6" ) , Ordering :: Less ) ;
440+ assert_eq ! ( cmp( "2.0.0-rc.3.0.5" , "2.0.0-rc.3.1.0" ) , Ordering :: Less ) ;
441+ assert_eq ! ( cmp( "2.0.0-rc.3.1.0" , "2.0.0-rc.3.0.5" ) , Ordering :: Greater ) ;
442+ assert_eq ! ( cmp( "2.0.0-rc.3.1.0" , "2.0.0-rc.3.1.0" ) , Ordering :: Equal ) ;
443+ assert_eq ! ( cmp( "2.0.0-rc.3.0.5" , "2.0.0" ) , Ordering :: Less ) ;
444+ assert_eq ! ( cmp( "2.0.0-rc.3.0.5" , "2.1.0" ) , Ordering :: Less ) ;
445+ assert_eq ! ( cmp( "2.0.0" , "2.0.0-rc.3.0.5" ) , Ordering :: Greater ) ;
436446 }
437447
438448 #[ test]
0 commit comments