@@ -7,7 +7,7 @@ use libc;
77
88use { raw, Error , ObjectType , IntoCString } ;
99
10- use util:: Binding ;
10+ use util:: { c_cmp_to_ordering , Binding } ;
1111
1212/// Unique identity of any object (commit, tree, blob, tag).
1313#[ derive( Copy , Clone ) ]
@@ -156,11 +156,7 @@ impl PartialOrd for Oid {
156156
157157impl Ord for Oid {
158158 fn cmp ( & self , other : & Oid ) -> Ordering {
159- match unsafe { raw:: git_oid_cmp ( & self . raw , & other. raw ) } {
160- 0 => Ordering :: Equal ,
161- n if n < 0 => Ordering :: Less ,
162- _ => Ordering :: Greater ,
163- }
159+ c_cmp_to_ordering ( unsafe { raw:: git_oid_cmp ( & self . raw , & other. raw ) } )
164160 }
165161}
166162
@@ -181,6 +177,7 @@ mod tests {
181177
182178 use tempdir:: TempDir ;
183179 use { ObjectType } ;
180+ use super :: Error ;
184181 use super :: Oid ;
185182
186183 #[ test]
@@ -191,6 +188,32 @@ mod tests {
191188 assert ! ( Oid :: from_bytes( b"00000000000000000000" ) . is_ok( ) ) ;
192189 }
193190
191+ #[ test]
192+ fn comparisons ( ) -> Result < ( ) , Error > {
193+ assert_eq ! ( Oid :: from_str( "decbf2b" ) ?, Oid :: from_str( "decbf2b" ) ?) ;
194+ assert ! ( Oid :: from_str( "decbf2b" ) ? <= Oid :: from_str( "decbf2b" ) ?) ;
195+ assert ! ( Oid :: from_str( "decbf2b" ) ? >= Oid :: from_str( "decbf2b" ) ?) ;
196+ {
197+ let o = Oid :: from_str ( "decbf2b" ) ?;
198+ assert_eq ! ( o, o) ;
199+ assert ! ( o <= o) ;
200+ assert ! ( o >= o) ;
201+ }
202+ assert_eq ! (
203+ Oid :: from_str( "decbf2b" ) ?,
204+ Oid :: from_str( "decbf2b000000000000000000000000000000000" ) ?
205+ ) ;
206+ assert ! (
207+ Oid :: from_bytes( b"00000000000000000000" ) ? < Oid :: from_bytes( b"00000000000000000001" ) ?
208+ ) ;
209+ assert ! ( Oid :: from_bytes( b"00000000000000000000" ) ? < Oid :: from_str( "decbf2b" ) ?) ;
210+ assert_eq ! (
211+ Oid :: from_bytes( b"00000000000000000000" ) ?,
212+ Oid :: from_str( "3030303030303030303030303030303030303030" ) ?
213+ ) ;
214+ Ok ( ( ) )
215+ }
216+
194217 #[ test]
195218 fn zero_is_zero ( ) {
196219 assert ! ( Oid :: zero( ) . is_zero( ) ) ;
0 commit comments