@@ -47,6 +47,7 @@ use ops::Add;
47
47
use util;
48
48
use num:: Zero ;
49
49
use iterator:: Iterator ;
50
+ use iterator;
50
51
use str:: { StrSlice , OwnedStr } ;
51
52
use to_str:: ToStr ;
52
53
use clone:: DeepClone ;
@@ -58,31 +59,21 @@ pub enum Option<T> {
58
59
Some ( T ) ,
59
60
}
60
61
61
- impl < T : Ord > Ord for Option < T > {
62
+ impl < T : Eq + Ord > Ord for Option < T > {
62
63
fn lt ( & self , other : & Option < T > ) -> bool {
63
- match ( self , other) {
64
- ( & None , & None ) => false ,
65
- ( & None , & Some ( _) ) => true ,
66
- ( & Some ( _) , & None ) => false ,
67
- ( & Some ( ref a) , & Some ( ref b) ) => * a < * b
68
- }
64
+ iterator:: order:: lt ( self . iter ( ) , other. iter ( ) )
69
65
}
70
66
71
67
fn le ( & self , other : & Option < T > ) -> bool {
72
- match ( self , other) {
73
- ( & None , & None ) => true ,
74
- ( & None , & Some ( _) ) => true ,
75
- ( & Some ( _) , & None ) => false ,
76
- ( & Some ( ref a) , & Some ( ref b) ) => * a <= * b
77
- }
68
+ iterator:: order:: le ( self . iter ( ) , other. iter ( ) )
78
69
}
79
70
80
71
fn ge ( & self , other : & Option < T > ) -> bool {
81
- ! ( self < other)
72
+ iterator :: order :: ge ( self . iter ( ) , other. iter ( ) )
82
73
}
83
74
84
75
fn gt ( & self , other : & Option < T > ) -> bool {
85
- ! ( self <= other)
76
+ iterator :: order :: gt ( self . iter ( ) , other. iter ( ) )
86
77
}
87
78
}
88
79
@@ -553,6 +544,18 @@ mod tests {
553
544
assert ! ( it. next( ) . is_none( ) ) ;
554
545
}
555
546
547
+ #[ test]
548
+ fn test_ord ( ) {
549
+ let small = Some ( 1.0 ) ;
550
+ let big = Some ( 5.0 ) ;
551
+ let nan = Some ( 0.0 /0.0 ) ;
552
+ assert ! ( !( nan < big) ) ;
553
+ assert ! ( !( nan > big) ) ;
554
+ assert ! ( small < big) ;
555
+ assert ! ( None < big) ;
556
+ assert ! ( big > None ) ;
557
+ }
558
+
556
559
#[ test]
557
560
fn test_mutate ( ) {
558
561
let mut x = Some ( 3 i) ;
0 commit comments