diff --git a/src/libcollections/bitv.rs b/src/libcollections/bitv.rs index 3e1160b45eee4..02714c728ec7b 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 for BitvSet { + fn from_iter>(iterator: I) -> BitvSet { + let mut ret = BitvSet::new(); + ret.extend(iterator); + ret + } +} + +impl Extendable for BitvSet { + #[inline] + fn extend>(&mut self, iterator: I) { + self.get_mut_ref().extend(iterator); + } +} + impl BitvSet { /// Create a new bit vector set with initially no contents. /// @@ -1958,6 +1973,17 @@ mod tests { assert_eq!(bitv.to_string().as_slice(), "1011"); } + #[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); @@ -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 = bitv.iter().collect(); assert_eq!(idxs, vec!(0, 2, 3)); diff --git a/src/libcollections/dlist.rs b/src/libcollections/dlist.rs index 5e3ce75eb9586..3d322729aab43 100644 --- a/src/libcollections/dlist.rs +++ b/src/libcollections/dlist.rs @@ -683,12 +683,21 @@ impl PartialEq for DList { } } +impl Eq for DList {} + impl PartialOrd for DList { fn partial_cmp(&self, other: &DList) -> Option { iter::order::partial_cmp(self.iter(), other.iter()) } } +impl Ord for DList { + #[inline] + fn cmp(&self, other: &DList) -> Ordering { + iter::order::cmp(self.iter(), other.iter()) + } +} + impl Clone for DList { fn clone(&self) -> DList { self.iter().map(|x| x.clone()).collect() diff --git a/src/libcollections/ringbuf.rs b/src/libcollections/ringbuf.rs index 44b546f665688..0cde7a90e9c89 100644 --- a/src/libcollections/ringbuf.rs +++ b/src/libcollections/ringbuf.rs @@ -452,12 +452,21 @@ impl PartialEq for RingBuf { } } +impl Eq for RingBuf {} + impl PartialOrd for RingBuf { fn partial_cmp(&self, other: &RingBuf) -> Option { iter::order::partial_cmp(self.iter(), other.iter()) } } +impl Ord for RingBuf { + #[inline] + fn cmp(&self, other: &RingBuf) -> Ordering { + iter::order::cmp(self.iter(), other.iter()) + } +} + impl> Hash for RingBuf { fn hash(&self, state: &mut S) { self.len().hash(state); diff --git a/src/libcollections/treemap.rs b/src/libcollections/treemap.rs index 5de23b42f5c7d..afb838333f351 100644 --- a/src/libcollections/treemap.rs +++ b/src/libcollections/treemap.rs @@ -173,6 +173,8 @@ impl PartialEq for TreeMap { } } +impl Eq for TreeMap {} + impl PartialOrd for TreeMap { #[inline] fn partial_cmp(&self, other: &TreeMap) -> Option { @@ -180,6 +182,13 @@ impl PartialOrd for TreeMap { } } +impl Ord for TreeMap { + #[inline] + fn cmp(&self, other: &TreeMap) -> Ordering { + iter::order::cmp(self.iter(), other.iter()) + } +} + impl Show for TreeMap { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { try!(write!(f, "{{")); @@ -1010,6 +1019,8 @@ impl PartialEq for TreeSet { fn eq(&self, other: &TreeSet) -> bool { self.map == other.map } } +impl Eq for TreeSet {} + impl PartialOrd for TreeSet { #[inline] fn partial_cmp(&self, other: &TreeSet) -> Option { @@ -1017,6 +1028,13 @@ impl PartialOrd for TreeSet { } } +impl Ord for TreeSet { + #[inline] + fn cmp(&self, other: &TreeSet) -> Ordering { + iter::order::cmp(self.iter(), other.iter()) + } +} + impl Show for TreeSet { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { try!(write!(f, "{{"));