about summary refs log tree commit diff
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2014-08-02 13:51:09 +0000
committerbors <bors@rust-lang.org>2014-08-02 13:51:09 +0000
commit87bc22f587f1a18b447c4fa3cf967bbc0f7e7e17 (patch)
tree22978be8a2db66a5ee728afec142807f4be7178b
parent5bad333fec6577e9581b1925ec1d8f25ec65b9f0 (diff)
parenta0438143dec68fea83e3e4d28c120f7d14a9572d (diff)
downloadrust-87bc22f587f1a18b447c4fa3cf967bbc0f7e7e17.tar.gz
rust-87bc22f587f1a18b447c4fa3cf967bbc0f7e7e17.zip
auto merge of #16177 : nham/rust/collections_15294_eq_ord, r=alexcrichton
This implements:

 - Eq and Ord for DList, RingBuf, TreeMap and TreeSet
 - FromIterator and Extendable for BitvSet

cc #15294
-rw-r--r--src/libcollections/bitv.rs28
-rw-r--r--src/libcollections/dlist.rs9
-rw-r--r--src/libcollections/ringbuf.rs9
-rw-r--r--src/libcollections/treemap.rs18
4 files changed, 63 insertions, 1 deletions
diff --git a/src/libcollections/bitv.rs b/src/libcollections/bitv.rs
index 3e1160b45ee..02714c728ec 100644
--- a/src/libcollections/bitv.rs
+++ b/src/libcollections/bitv.rs
@@ -978,6 +978,21 @@ impl Default for BitvSet {
     fn default() -> BitvSet { BitvSet::new() }
 }
 
+impl FromIterator<bool> for BitvSet {
+    fn from_iter<I:Iterator<bool>>(iterator: I) -> BitvSet {
+        let mut ret = BitvSet::new();
+        ret.extend(iterator);
+        ret
+    }
+}
+
+impl Extendable<bool> for BitvSet {
+    #[inline]
+    fn extend<I: Iterator<bool>>(&mut self, iterator: I) {
+        self.get_mut_ref().extend(iterator);
+    }
+}
+
 impl BitvSet {
     /// Create a new bit vector set with initially no contents.
     ///
@@ -1959,6 +1974,17 @@ mod tests {
     }
 
     #[test]
+    fn test_bitv_set_from_bools() {
+        let bools = vec![true, false, true, true];
+        let a: BitvSet = bools.iter().map(|n| *n).collect();
+        let mut b = BitvSet::new();
+        b.insert(0);
+        b.insert(2);
+        b.insert(3);
+        assert_eq!(a, b);
+    }
+
+    #[test]
     fn test_to_bools() {
         let bools = vec!(false, false, true, false, false, true, true, false);
         assert_eq!(from_bytes([0b00100110]).iter().collect::<Vec<bool>>(), bools);
@@ -1977,7 +2003,7 @@ mod tests {
     #[test]
     fn test_bitv_set_iterator() {
         let bools = [true, false, true, true];
-        let bitv = BitvSet::from_bitv(bools.iter().map(|n| *n).collect());
+        let bitv: BitvSet = bools.iter().map(|n| *n).collect();
 
         let idxs: Vec<uint> = bitv.iter().collect();
         assert_eq!(idxs, vec!(0, 2, 3));
diff --git a/src/libcollections/dlist.rs b/src/libcollections/dlist.rs
index 5e3ce75eb95..3d322729aab 100644
--- a/src/libcollections/dlist.rs
+++ b/src/libcollections/dlist.rs
@@ -683,12 +683,21 @@ impl<A: PartialEq> PartialEq for DList<A> {
     }
 }
 
+impl<A: Eq> Eq for DList<A> {}
+
 impl<A: PartialOrd> PartialOrd for DList<A> {
     fn partial_cmp(&self, other: &DList<A>) -> Option<Ordering> {
         iter::order::partial_cmp(self.iter(), other.iter())
     }
 }
 
+impl<A: Ord> Ord for DList<A> {
+    #[inline]
+    fn cmp(&self, other: &DList<A>) -> Ordering {
+        iter::order::cmp(self.iter(), other.iter())
+    }
+}
+
 impl<A: Clone> Clone for DList<A> {
     fn clone(&self) -> DList<A> {
         self.iter().map(|x| x.clone()).collect()
diff --git a/src/libcollections/ringbuf.rs b/src/libcollections/ringbuf.rs
index 44b546f6656..0cde7a90e9c 100644
--- a/src/libcollections/ringbuf.rs
+++ b/src/libcollections/ringbuf.rs
@@ -452,12 +452,21 @@ impl<A: PartialEq> PartialEq for RingBuf<A> {
     }
 }
 
+impl<A: Eq> Eq for RingBuf<A> {}
+
 impl<A: PartialOrd> PartialOrd for RingBuf<A> {
     fn partial_cmp(&self, other: &RingBuf<A>) -> Option<Ordering> {
         iter::order::partial_cmp(self.iter(), other.iter())
     }
 }
 
+impl<A: Ord> Ord for RingBuf<A> {
+    #[inline]
+    fn cmp(&self, other: &RingBuf<A>) -> Ordering {
+        iter::order::cmp(self.iter(), other.iter())
+    }
+}
+
 impl<S: Writer, A: Hash<S>> Hash<S> for RingBuf<A> {
     fn hash(&self, state: &mut S) {
         self.len().hash(state);
diff --git a/src/libcollections/treemap.rs b/src/libcollections/treemap.rs
index 6a29a9a75b8..6299ecfc5fd 100644
--- a/src/libcollections/treemap.rs
+++ b/src/libcollections/treemap.rs
@@ -173,6 +173,8 @@ impl<K: PartialEq + Ord, V: PartialEq> PartialEq for TreeMap<K, V> {
     }
 }
 
+impl<K: Eq + Ord, V: Eq> Eq for TreeMap<K, V> {}
+
 impl<K: Ord, V: PartialOrd> PartialOrd for TreeMap<K, V> {
     #[inline]
     fn partial_cmp(&self, other: &TreeMap<K, V>) -> Option<Ordering> {
@@ -180,6 +182,13 @@ impl<K: Ord, V: PartialOrd> PartialOrd for TreeMap<K, V> {
     }
 }
 
+impl<K: Ord, V: Ord> Ord for TreeMap<K, V> {
+    #[inline]
+    fn cmp(&self, other: &TreeMap<K, V>) -> Ordering {
+        iter::order::cmp(self.iter(), other.iter())
+    }
+}
+
 impl<K: Ord + Show, V: Show> Show for TreeMap<K, V> {
     fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
         try!(write!(f, "{{"));
@@ -1010,6 +1019,8 @@ impl<T: PartialEq + Ord> PartialEq for TreeSet<T> {
     fn eq(&self, other: &TreeSet<T>) -> bool { self.map == other.map }
 }
 
+impl<T: Eq + Ord> Eq for TreeSet<T> {}
+
 impl<T: Ord> PartialOrd for TreeSet<T> {
     #[inline]
     fn partial_cmp(&self, other: &TreeSet<T>) -> Option<Ordering> {
@@ -1017,6 +1028,13 @@ impl<T: Ord> PartialOrd for TreeSet<T> {
     }
 }
 
+impl<T: Ord> Ord for TreeSet<T> {
+    #[inline]
+    fn cmp(&self, other: &TreeSet<T>) -> Ordering {
+        iter::order::cmp(self.iter(), other.iter())
+    }
+}
+
 impl<T: Ord + Show> Show for TreeSet<T> {
     fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
         try!(write!(f, "{{"));