Skip to content

Commit 16acc10

Browse files
committed
Implement PartialOrd for TrieMap and TrieSet
1 parent 79e9f14 commit 16acc10

File tree

1 file changed

+72
-1
lines changed

1 file changed

+72
-1
lines changed

src/libcollections/trie.rs

Lines changed: 72 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,13 @@ impl<T: PartialEq> PartialEq for TrieMap<T> {
9393

9494
impl<T: Eq> Eq for TrieMap<T> {}
9595

96+
impl<T: PartialOrd> PartialOrd for TrieMap<T> {
97+
#[inline]
98+
fn partial_cmp(&self, other: &TrieMap<T>) -> Option<Ordering> {
99+
iter::order::partial_cmp(self.iter(), other.iter())
100+
}
101+
}
102+
96103
impl<T: Show> Show for TrieMap<T> {
97104
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
98105
try!(write!(f, "{{"));
@@ -517,7 +524,7 @@ impl<S: Writer, T: Hash<S>> Hash<S> for TrieMap<T> {
517524
/// set.clear();
518525
/// assert!(set.is_empty());
519526
/// ```
520-
#[deriving(Clone, Hash, PartialEq, Eq)]
527+
#[deriving(Clone, Hash, PartialEq, Eq, PartialOrd)]
521528
pub struct TrieSet {
522529
map: TrieMap<()>
523530
}
@@ -1309,6 +1316,38 @@ mod test_map {
13091316
assert!(a == b);
13101317
}
13111318

1319+
#[test]
1320+
fn test_lt() {
1321+
let mut a = TrieMap::new();
1322+
let mut b = TrieMap::new();
1323+
1324+
assert!(!(a < b) && !(b < a));
1325+
assert!(b.insert(2u, 5i));
1326+
assert!(a < b);
1327+
assert!(a.insert(2, 7));
1328+
assert!(!(a < b) && b < a);
1329+
assert!(b.insert(1, 0));
1330+
assert!(b < a);
1331+
assert!(a.insert(0, 6));
1332+
assert!(a < b);
1333+
assert!(a.insert(6, 2));
1334+
assert!(a < b && !(b < a));
1335+
}
1336+
1337+
#[test]
1338+
fn test_ord() {
1339+
let mut a = TrieMap::new();
1340+
let mut b = TrieMap::new();
1341+
1342+
assert!(a <= b && a >= b);
1343+
assert!(a.insert(1u, 1i));
1344+
assert!(a > b && a >= b);
1345+
assert!(b < a && b <= a);
1346+
assert!(b.insert(2, 2));
1347+
assert!(b > a && b >= a);
1348+
assert!(a < b && a <= b);
1349+
}
1350+
13121351
#[test]
13131352
fn test_hash() {
13141353
let mut x = TrieMap::new();
@@ -1513,4 +1552,36 @@ mod test_set {
15131552

15141553
assert!(a.clone() == a);
15151554
}
1555+
1556+
#[test]
1557+
fn test_lt() {
1558+
let mut a = TrieSet::new();
1559+
let mut b = TrieSet::new();
1560+
1561+
assert!(!(a < b) && !(b < a));
1562+
assert!(b.insert(2u));
1563+
assert!(a < b);
1564+
assert!(a.insert(3u));
1565+
assert!(!(a < b) && b < a);
1566+
assert!(b.insert(1));
1567+
assert!(b < a);
1568+
assert!(a.insert(0));
1569+
assert!(a < b);
1570+
assert!(a.insert(6));
1571+
assert!(a < b && !(b < a));
1572+
}
1573+
1574+
#[test]
1575+
fn test_ord() {
1576+
let mut a = TrieSet::new();
1577+
let mut b = TrieSet::new();
1578+
1579+
assert!(a <= b && a >= b);
1580+
assert!(a.insert(1u));
1581+
assert!(a > b && a >= b);
1582+
assert!(b < a && b <= a);
1583+
assert!(b.insert(2u));
1584+
assert!(b > a && b >= a);
1585+
assert!(a < b && a <= b);
1586+
}
15161587
}

0 commit comments

Comments
 (0)