diff options
| author | nham <hamann.nick@gmail.com> | 2014-07-22 17:04:16 -0400 |
|---|---|---|
| committer | nham <hamann.nick@gmail.com> | 2014-07-22 17:04:16 -0400 |
| commit | 366c66e171b94ef78ce7b8daf2530dbdc30eadb9 (patch) | |
| tree | 904105d996aa3344ee8e81fb237d7dc79873957f | |
| parent | 9e83d29f30046292f43e982893517f9aee47fa48 (diff) | |
| download | rust-366c66e171b94ef78ce7b8daf2530dbdc30eadb9.tar.gz rust-366c66e171b94ef78ce7b8daf2530dbdc30eadb9.zip | |
Implement PartialEq, Eq for TrieMap, TrieSet
| -rw-r--r-- | src/libcollections/trie.rs | 64 |
1 files changed, 46 insertions, 18 deletions
diff --git a/src/libcollections/trie.rs b/src/libcollections/trie.rs index 21fafdec019..424cda92c12 100644 --- a/src/libcollections/trie.rs +++ b/src/libcollections/trie.rs @@ -41,6 +41,15 @@ pub struct TrieMap<T> { length: uint } +impl<T: PartialEq> PartialEq for TrieMap<T> { + fn eq(&self, other: &TrieMap<T>) -> bool { + self.len() == other.len() && + self.iter().zip(other.iter()).all(|(a, b)| a == b) + } +} + +impl<T: Eq> Eq for TrieMap<T> {} + impl<T> Collection for TrieMap<T> { /// Return the number of elements in the map #[inline] @@ -302,7 +311,7 @@ impl<S: Writer, T: Hash<S>> Hash<S> for TrieMap<T> { } #[allow(missing_doc)] -#[deriving(Hash)] +#[deriving(Hash, PartialEq, Eq)] pub struct TrieSet { map: TrieMap<()> } @@ -671,6 +680,7 @@ mod test_map { use std::prelude::*; use std::iter::range_step; use std::uint; + use std::hash; use {MutableMap, Map}; use super::{TrieMap, TrieNode, Internal, External, Nothing}; @@ -943,6 +953,41 @@ mod test_map { assert!(m_lower.iter().all(|(_, &x)| x == 0)); assert!(m_upper.iter().all(|(_, &x)| x == 0)); } + + #[test] + fn test_eq() { + let mut a = TrieMap::new(); + let mut b = TrieMap::new(); + + assert!(a == b); + assert!(a.insert(0, 5i)); + assert!(a != b); + assert!(b.insert(0, 4i)); + assert!(a != b); + assert!(a.insert(5, 19)); + assert!(a != b); + assert!(!b.insert(0, 5)); + assert!(a != b); + assert!(b.insert(5, 19)); + assert!(a == b); + } + + #[test] + fn test_hash() { + let mut x = TrieMap::new(); + let mut y = TrieMap::new(); + + assert!(hash::hash(&x) == hash::hash(&y)); + x.insert(1, 'a'); + x.insert(2, 'b'); + x.insert(3, 'c'); + + y.insert(3, 'c'); + y.insert(2, 'b'); + y.insert(1, 'a'); + + assert!(hash::hash(&x) == hash::hash(&y)); + } } #[cfg(test)] @@ -1059,7 +1104,6 @@ mod bench_map { mod test_set { use std::prelude::*; use std::uint; - use std::hash; use {MutableSet, Set}; use super::TrieSet; @@ -1093,20 +1137,4 @@ mod test_set { assert!(set.contains(x)); } } - - #[test] - fn test_hash() { - let mut x = TrieSet::new(); - let mut y = TrieSet::new(); - - x.insert(1); - x.insert(2); - x.insert(3); - - y.insert(3); - y.insert(2); - y.insert(1); - - assert!(hash::hash(&x) == hash::hash(&y)); - } } |
