about summary refs log tree commit diff
diff options
context:
space:
mode:
authornham <hamann.nick@gmail.com>2014-07-27 23:51:28 -0400
committernham <hamann.nick@gmail.com>2014-07-27 23:51:28 -0400
commit16acc10bf9f0318d1d6e310a1fd23dd242811d10 (patch)
tree7b1421ab1c78a64dd0e3c78f38909970ad428019
parent79e9f14abf50eecb7d3c53f10ad900615bb2d397 (diff)
downloadrust-16acc10bf9f0318d1d6e310a1fd23dd242811d10.tar.gz
rust-16acc10bf9f0318d1d6e310a1fd23dd242811d10.zip
Implement PartialOrd for TrieMap and TrieSet
-rw-r--r--src/libcollections/trie.rs73
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);
+    }
 }