@@ -26,6 +26,7 @@ use std::cast;
26
26
use std:: ptr;
27
27
use std:: util;
28
28
use std:: iterator:: { FromIterator , Extendable , Invert } ;
29
+ use std:: iterator;
29
30
30
31
use container:: Deque ;
31
32
@@ -589,12 +590,27 @@ impl<A, T: Iterator<A>> Extendable<A, T> for DList<A> {
589
590
impl < A : Eq > Eq for DList < A > {
590
591
fn eq ( & self , other : & DList < A > ) -> bool {
591
592
self . len ( ) == other. len ( ) &&
592
- self . iter ( ) . zip ( other. iter ( ) ) . all ( | ( a , b ) | a . eq ( b ) )
593
+ iterator :: order :: eq ( self . iter ( ) , other. iter ( ) )
593
594
}
594
595
595
- #[ inline]
596
596
fn ne ( & self , other : & DList < A > ) -> bool {
597
- !self . eq ( other)
597
+ self . len ( ) != other. len ( ) &&
598
+ iterator:: order:: ne ( self . iter ( ) , other. iter ( ) )
599
+ }
600
+ }
601
+
602
+ impl < A : Eq + Ord > Ord for DList < A > {
603
+ fn lt ( & self , other : & DList < A > ) -> bool {
604
+ iterator:: order:: lt ( self . iter ( ) , other. iter ( ) )
605
+ }
606
+ fn le ( & self , other : & DList < A > ) -> bool {
607
+ iterator:: order:: le ( self . iter ( ) , other. iter ( ) )
608
+ }
609
+ fn gt ( & self , other : & DList < A > ) -> bool {
610
+ iterator:: order:: gt ( self . iter ( ) , other. iter ( ) )
611
+ }
612
+ fn ge ( & self , other : & DList < A > ) -> bool {
613
+ iterator:: order:: ge ( self . iter ( ) , other. iter ( ) )
598
614
}
599
615
}
600
616
@@ -964,6 +980,48 @@ mod tests {
964
980
assert_eq ! ( & n, & m) ;
965
981
}
966
982
983
+ #[ test]
984
+ fn test_ord ( ) {
985
+ let n: DList < int > = list_from ( [ ] ) ;
986
+ let m = list_from ( [ 1 , 2 , 3 ] ) ;
987
+ assert ! ( n < m) ;
988
+ assert ! ( m > n) ;
989
+ assert ! ( n <= n) ;
990
+ assert ! ( n >= n) ;
991
+ }
992
+
993
+ #[ test]
994
+ fn test_ord_nan ( ) {
995
+ let nan = 0.0 /0.0 ;
996
+ let n = list_from ( [ nan] ) ;
997
+ let m = list_from ( [ nan] ) ;
998
+ assert ! ( !( n < m) ) ;
999
+ assert ! ( !( n > m) ) ;
1000
+ assert ! ( !( n <= m) ) ;
1001
+ assert ! ( !( n >= m) ) ;
1002
+
1003
+ let n = list_from ( [ nan] ) ;
1004
+ let one = list_from ( [ 1.0 ] ) ;
1005
+ assert ! ( !( n < one) ) ;
1006
+ assert ! ( !( n > one) ) ;
1007
+ assert ! ( !( n <= one) ) ;
1008
+ assert ! ( !( n >= one) ) ;
1009
+
1010
+ let u = list_from ( [ 1.0 , 2.0 , nan] ) ;
1011
+ let v = list_from ( [ 1.0 , 2.0 , 3.0 ] ) ;
1012
+ assert ! ( !( u < v) ) ;
1013
+ assert ! ( !( u > v) ) ;
1014
+ assert ! ( !( u <= v) ) ;
1015
+ assert ! ( !( u >= v) ) ;
1016
+
1017
+ let s = list_from ( [ 1.0 , 2.0 , 4.0 , 2.0 ] ) ;
1018
+ let t = list_from ( [ 1.0 , 2.0 , 3.0 , 2.0 ] ) ;
1019
+ assert ! ( !( s < t) ) ;
1020
+ assert ! ( s > one) ;
1021
+ assert ! ( !( s <= one) ) ;
1022
+ assert ! ( s >= one) ;
1023
+ }
1024
+
967
1025
#[ test]
968
1026
fn test_fuzz ( ) {
969
1027
do 25 . times {
0 commit comments