diff options
| author | nham <hamann.nick@gmail.com> | 2014-07-27 23:51:28 -0400 |
|---|---|---|
| committer | nham <hamann.nick@gmail.com> | 2014-07-27 23:51:28 -0400 |
| commit | 16acc10bf9f0318d1d6e310a1fd23dd242811d10 (patch) | |
| tree | 7b1421ab1c78a64dd0e3c78f38909970ad428019 | |
| parent | 79e9f14abf50eecb7d3c53f10ad900615bb2d397 (diff) | |
| download | rust-16acc10bf9f0318d1d6e310a1fd23dd242811d10.tar.gz rust-16acc10bf9f0318d1d6e310a1fd23dd242811d10.zip | |
Implement PartialOrd for TrieMap and TrieSet
| -rw-r--r-- | src/libcollections/trie.rs | 73 |
1 files changed, 72 insertions, 1 deletions
diff --git a/src/libcollections/trie.rs b/src/libcollections/trie.rs index 1ac05fbd562..5d6a9080374 100644 --- a/src/libcollections/trie.rs +++ b/src/libcollections/trie.rs @@ -93,6 +93,13 @@ impl<T: PartialEq> PartialEq for TrieMap<T> { impl<T: Eq> Eq for TrieMap<T> {} +impl<T: PartialOrd> PartialOrd for TrieMap<T> { + #[inline] + fn partial_cmp(&self, other: &TrieMap<T>) -> Option<Ordering> { + iter::order::partial_cmp(self.iter(), other.iter()) + } +} + impl<T: Show> Show for TrieMap<T> { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { try!(write!(f, "{{")); @@ -517,7 +524,7 @@ impl<S: Writer, T: Hash<S>> Hash<S> for TrieMap<T> { /// set.clear(); /// assert!(set.is_empty()); /// ``` -#[deriving(Clone, Hash, PartialEq, Eq)] +#[deriving(Clone, Hash, PartialEq, Eq, PartialOrd)] pub struct TrieSet { map: TrieMap<()> } @@ -1310,6 +1317,38 @@ mod test_map { } #[test] + fn test_lt() { + let mut a = TrieMap::new(); + let mut b = TrieMap::new(); + + assert!(!(a < b) && !(b < a)); + assert!(b.insert(2u, 5i)); + assert!(a < b); + assert!(a.insert(2, 7)); + assert!(!(a < b) && b < a); + assert!(b.insert(1, 0)); + assert!(b < a); + assert!(a.insert(0, 6)); + assert!(a < b); + assert!(a.insert(6, 2)); + assert!(a < b && !(b < a)); + } + + #[test] + fn test_ord() { + let mut a = TrieMap::new(); + let mut b = TrieMap::new(); + + assert!(a <= b && a >= b); + assert!(a.insert(1u, 1i)); + assert!(a > b && a >= b); + assert!(b < a && b <= a); + assert!(b.insert(2, 2)); + assert!(b > a && b >= a); + assert!(a < b && a <= b); + } + + #[test] fn test_hash() { let mut x = TrieMap::new(); let mut y = TrieMap::new(); @@ -1513,4 +1552,36 @@ mod test_set { assert!(a.clone() == a); } + + #[test] + fn test_lt() { + let mut a = TrieSet::new(); + let mut b = TrieSet::new(); + + assert!(!(a < b) && !(b < a)); + assert!(b.insert(2u)); + assert!(a < b); + assert!(a.insert(3u)); + assert!(!(a < b) && b < a); + assert!(b.insert(1)); + assert!(b < a); + assert!(a.insert(0)); + assert!(a < b); + assert!(a.insert(6)); + assert!(a < b && !(b < a)); + } + + #[test] + fn test_ord() { + let mut a = TrieSet::new(); + let mut b = TrieSet::new(); + + assert!(a <= b && a >= b); + assert!(a.insert(1u)); + assert!(a > b && a >= b); + assert!(b < a && b <= a); + assert!(b.insert(2u)); + assert!(b > a && b >= a); + assert!(a < b && a <= b); + } } |
