diff --git a/src/libcore/iter.rs b/src/libcore/iter.rs index d40701860f46eb09ed85117e205ef3fe0fec0623..9fc16b55631a4d5d15867b33e7033df4f656f33f 100644 --- a/src/libcore/iter.rs +++ b/src/libcore/iter.rs @@ -2184,7 +2184,7 @@ pub mod order { use super::Iterator; /// Compare `a` and `b` for equality using `TotalEq` - pub fn equals>(mut a: T, mut b: T) -> bool { + pub fn equals, S: Iterator>(mut a: T, mut b: S) -> bool { loop { match (a.next(), b.next()) { (None, None) => return true, @@ -2195,7 +2195,7 @@ pub fn equals>(mut a: T, mut b: T) -> bool { } /// Order `a` and `b` lexicographically using `TotalOrd` - pub fn cmp>(mut a: T, mut b: T) -> cmp::Ordering { + pub fn cmp, S: Iterator>(mut a: T, mut b: S) -> cmp::Ordering { loop { match (a.next(), b.next()) { (None, None) => return cmp::Equal, @@ -2210,7 +2210,7 @@ pub fn cmp>(mut a: T, mut b: T) -> cmp::Ordering { } /// Compare `a` and `b` for equality (Using partial equality, `Eq`) - pub fn eq>(mut a: T, mut b: T) -> bool { + pub fn eq, S: Iterator>(mut a: T, mut b: S) -> bool { loop { match (a.next(), b.next()) { (None, None) => return true, @@ -2221,7 +2221,7 @@ pub fn eq>(mut a: T, mut b: T) -> bool { } /// Compare `a` and `b` for nonequality (Using partial equality, `Eq`) - pub fn ne>(mut a: T, mut b: T) -> bool { + pub fn ne, S: Iterator>(mut a: T, mut b: S) -> bool { loop { match (a.next(), b.next()) { (None, None) => return false, @@ -2232,7 +2232,7 @@ pub fn ne>(mut a: T, mut b: T) -> bool { } /// Return `a` < `b` lexicographically (Using partial order, `Ord`) - pub fn lt>(mut a: T, mut b: T) -> bool { + pub fn lt, S: Iterator>(mut a: T, mut b: S) -> bool { loop { match (a.next(), b.next()) { (None, None) => return false, @@ -2244,7 +2244,7 @@ pub fn lt>(mut a: T, mut b: T) -> bool { } /// Return `a` <= `b` lexicographically (Using partial order, `Ord`) - pub fn le>(mut a: T, mut b: T) -> bool { + pub fn le, S: Iterator>(mut a: T, mut b: S) -> bool { loop { match (a.next(), b.next()) { (None, None) => return true, @@ -2256,7 +2256,7 @@ pub fn le>(mut a: T, mut b: T) -> bool { } /// Return `a` > `b` lexicographically (Using partial order, `Ord`) - pub fn gt>(mut a: T, mut b: T) -> bool { + pub fn gt, S: Iterator>(mut a: T, mut b: S) -> bool { loop { match (a.next(), b.next()) { (None, None) => return false, @@ -2268,7 +2268,7 @@ pub fn gt>(mut a: T, mut b: T) -> bool { } /// Return `a` >= `b` lexicographically (Using partial order, `Ord`) - pub fn ge>(mut a: T, mut b: T) -> bool { + pub fn ge, S: Iterator>(mut a: T, mut b: S) -> bool { loop { match (a.next(), b.next()) { (None, None) => return true, @@ -2325,6 +2325,16 @@ fn test_lt() { assert!(gt(c.iter(), b.iter()) == (c[0] > b[0])); assert!(ge(c.iter(), b.iter()) == (c[0] >= b[0])); } + + #[test] + fn test_multi_iter() { + use slice::ImmutableVector; + use iter::DoubleEndedIterator; + let xs = [1i,2,3,4]; + let ys = [4i,3,2,1]; + assert!(eq(xs.iter(), ys.iter().rev())); + assert!(lt(xs.iter(), xs.iter().skip(2))); + } } #[cfg(test)]