@@ -93,6 +93,20 @@ impl<T: PartialEq> PartialEq for TrieMap<T> {
93
93
94
94
impl < T : Eq > Eq for TrieMap < T > { }
95
95
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
+
103
+ impl < T : Ord > Ord for TrieMap < T > {
104
+ #[ inline]
105
+ fn cmp ( & self , other : & TrieMap < T > ) -> Ordering {
106
+ iter:: order:: cmp ( self . iter ( ) , other. iter ( ) )
107
+ }
108
+ }
109
+
96
110
impl < T : Show > Show for TrieMap < T > {
97
111
fn fmt ( & self , f : & mut fmt:: Formatter ) -> fmt:: Result {
98
112
try!( write ! ( f, "{{" ) ) ;
@@ -517,7 +531,7 @@ impl<S: Writer, T: Hash<S>> Hash<S> for TrieMap<T> {
517
531
/// set.clear();
518
532
/// assert!(set.is_empty());
519
533
/// ```
520
- #[ deriving( Clone , Hash , PartialEq , Eq ) ]
534
+ #[ deriving( Clone , Hash , PartialEq , Eq , PartialOrd , Ord ) ]
521
535
pub struct TrieSet {
522
536
map : TrieMap < ( ) >
523
537
}
@@ -1309,6 +1323,38 @@ mod test_map {
1309
1323
assert ! ( a == b) ;
1310
1324
}
1311
1325
1326
+ #[ test]
1327
+ fn test_lt ( ) {
1328
+ let mut a = TrieMap :: new ( ) ;
1329
+ let mut b = TrieMap :: new ( ) ;
1330
+
1331
+ assert ! ( !( a < b) && !( b < a) ) ;
1332
+ assert ! ( b. insert( 2 u, 5 i) ) ;
1333
+ assert ! ( a < b) ;
1334
+ assert ! ( a. insert( 2 , 7 ) ) ;
1335
+ assert ! ( !( a < b) && b < a) ;
1336
+ assert ! ( b. insert( 1 , 0 ) ) ;
1337
+ assert ! ( b < a) ;
1338
+ assert ! ( a. insert( 0 , 6 ) ) ;
1339
+ assert ! ( a < b) ;
1340
+ assert ! ( a. insert( 6 , 2 ) ) ;
1341
+ assert ! ( a < b && !( b < a) ) ;
1342
+ }
1343
+
1344
+ #[ test]
1345
+ fn test_ord ( ) {
1346
+ let mut a = TrieMap :: new ( ) ;
1347
+ let mut b = TrieMap :: new ( ) ;
1348
+
1349
+ assert ! ( a <= b && a >= b) ;
1350
+ assert ! ( a. insert( 1 u, 1 i) ) ;
1351
+ assert ! ( a > b && a >= b) ;
1352
+ assert ! ( b < a && b <= a) ;
1353
+ assert ! ( b. insert( 2 , 2 ) ) ;
1354
+ assert ! ( b > a && b >= a) ;
1355
+ assert ! ( a < b && a <= b) ;
1356
+ }
1357
+
1312
1358
#[ test]
1313
1359
fn test_hash ( ) {
1314
1360
let mut x = TrieMap :: new ( ) ;
@@ -1513,4 +1559,36 @@ mod test_set {
1513
1559
1514
1560
assert ! ( a. clone( ) == a) ;
1515
1561
}
1562
+
1563
+ #[ test]
1564
+ fn test_lt ( ) {
1565
+ let mut a = TrieSet :: new ( ) ;
1566
+ let mut b = TrieSet :: new ( ) ;
1567
+
1568
+ assert ! ( !( a < b) && !( b < a) ) ;
1569
+ assert ! ( b. insert( 2 u) ) ;
1570
+ assert ! ( a < b) ;
1571
+ assert ! ( a. insert( 3 u) ) ;
1572
+ assert ! ( !( a < b) && b < a) ;
1573
+ assert ! ( b. insert( 1 ) ) ;
1574
+ assert ! ( b < a) ;
1575
+ assert ! ( a. insert( 0 ) ) ;
1576
+ assert ! ( a < b) ;
1577
+ assert ! ( a. insert( 6 ) ) ;
1578
+ assert ! ( a < b && !( b < a) ) ;
1579
+ }
1580
+
1581
+ #[ test]
1582
+ fn test_ord ( ) {
1583
+ let mut a = TrieSet :: new ( ) ;
1584
+ let mut b = TrieSet :: new ( ) ;
1585
+
1586
+ assert ! ( a <= b && a >= b) ;
1587
+ assert ! ( a. insert( 1 u) ) ;
1588
+ assert ! ( a > b && a >= b) ;
1589
+ assert ! ( b < a && b <= a) ;
1590
+ assert ! ( b. insert( 2 u) ) ;
1591
+ assert ! ( b > a && b >= a) ;
1592
+ assert ! ( a < b && a <= b) ;
1593
+ }
1516
1594
}
0 commit comments