Skip to content

Commit a2e3cdf

Browse files
author
blake2-ppc
committed
extra::dlist: Use iterator::order for sequence ordering
1 parent 5d9fd88 commit a2e3cdf

File tree

1 file changed

+61
-3
lines changed

1 file changed

+61
-3
lines changed

src/libextra/dlist.rs

Lines changed: 61 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ use std::cast;
2626
use std::ptr;
2727
use std::util;
2828
use std::iterator::{FromIterator, Extendable, Invert};
29+
use std::iterator;
2930

3031
use container::Deque;
3132

@@ -589,12 +590,27 @@ impl<A, T: Iterator<A>> Extendable<A, T> for DList<A> {
589590
impl<A: Eq> Eq for DList<A> {
590591
fn eq(&self, other: &DList<A>) -> bool {
591592
self.len() == other.len() &&
592-
self.iter().zip(other.iter()).all(|(a, b)| a.eq(b))
593+
iterator::order::eq(self.iter(), other.iter())
593594
}
594595

595-
#[inline]
596596
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())
598614
}
599615
}
600616

@@ -964,6 +980,48 @@ mod tests {
964980
assert_eq!(&n, &m);
965981
}
966982

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+
9671025
#[test]
9681026
fn test_fuzz() {
9691027
do 25.times {

0 commit comments

Comments
 (0)