|
12 | 12 | //! trees. The only requirement for the types is that the key implements
|
13 | 13 | //! `TotalOrd`.
|
14 | 14 |
|
15 |
| -use std::iter; |
16 |
| -use std::iter::{Peekable}; |
17 | 15 | use std::cmp::Ordering;
|
| 16 | +use std::fmt::Show; |
| 17 | +use std::fmt; |
| 18 | +use std::iter::Peekable; |
| 19 | +use std::iter; |
18 | 20 | use std::mem::{replace, swap};
|
19 | 21 | use std::ptr;
|
20 | 22 |
|
@@ -67,6 +69,19 @@ impl<K: Ord + TotalOrd, V: Ord> Ord for TreeMap<K, V> {
|
67 | 69 | fn lt(&self, other: &TreeMap<K, V>) -> bool { lt(self, other) }
|
68 | 70 | }
|
69 | 71 |
|
| 72 | +impl<K: TotalOrd + Show, V: Show> Show for TreeMap<K, V> { |
| 73 | + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { |
| 74 | + try!(write!(f, r"\{")); |
| 75 | + |
| 76 | + for (i, (k, v)) in self.iter().enumerate() { |
| 77 | + if i != 0 { try!(write!(f, ", ")); } |
| 78 | + try!(write!(f, "{}: {}", *k, *v)); |
| 79 | + } |
| 80 | + |
| 81 | + write!(f, r"\}") |
| 82 | + } |
| 83 | +} |
| 84 | + |
70 | 85 | impl<K: TotalOrd, V> Container for TreeMap<K, V> {
|
71 | 86 | fn len(&self) -> uint { self.length }
|
72 | 87 | }
|
@@ -547,6 +562,19 @@ impl<T: Ord + TotalOrd> Ord for TreeSet<T> {
|
547 | 562 | fn lt(&self, other: &TreeSet<T>) -> bool { self.map < other.map }
|
548 | 563 | }
|
549 | 564 |
|
| 565 | +impl<T: TotalOrd + Show> Show for TreeSet<T> { |
| 566 | + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { |
| 567 | + try!(write!(f, r"\{")); |
| 568 | + |
| 569 | + for (i, x) in self.iter().enumerate() { |
| 570 | + if i != 0 { try!(write!(f, ", ")); } |
| 571 | + try!(write!(f, "{}", *x)); |
| 572 | + } |
| 573 | + |
| 574 | + write!(f, r"\}") |
| 575 | + } |
| 576 | +} |
| 577 | + |
550 | 578 | impl<T: TotalOrd> Container for TreeSet<T> {
|
551 | 579 | #[inline]
|
552 | 580 | fn len(&self) -> uint { self.map.len() }
|
@@ -1328,6 +1356,20 @@ mod test_treemap {
|
1328 | 1356 | assert!(a < b && a <= b);
|
1329 | 1357 | }
|
1330 | 1358 |
|
| 1359 | + #[test] |
| 1360 | + fn test_show() { |
| 1361 | + let mut map: TreeMap<int, int> = TreeMap::new(); |
| 1362 | + let empty: TreeMap<int, int> = TreeMap::new(); |
| 1363 | + |
| 1364 | + map.insert(1, 2); |
| 1365 | + map.insert(3, 4); |
| 1366 | + |
| 1367 | + let map_str = format!("{}", map); |
| 1368 | + |
| 1369 | + assert!(map_str == "{1: 2, 3: 4}".to_owned()); |
| 1370 | + assert_eq!(format!("{}", empty), "{}".to_owned()); |
| 1371 | + } |
| 1372 | + |
1331 | 1373 | #[test]
|
1332 | 1374 | fn test_lazy_iterator() {
|
1333 | 1375 | let mut m = TreeMap::new();
|
@@ -1723,4 +1765,18 @@ mod test_set {
|
1723 | 1765 | assert!(set.contains(x));
|
1724 | 1766 | }
|
1725 | 1767 | }
|
| 1768 | + |
| 1769 | + #[test] |
| 1770 | + fn test_show() { |
| 1771 | + let mut set: TreeSet<int> = TreeSet::new(); |
| 1772 | + let empty: TreeSet<int> = TreeSet::new(); |
| 1773 | + |
| 1774 | + set.insert(1); |
| 1775 | + set.insert(2); |
| 1776 | + |
| 1777 | + let set_str = format!("{}", set); |
| 1778 | + |
| 1779 | + assert!(set_str == "{1, 2}".to_owned()); |
| 1780 | + assert_eq!(format!("{}", empty), "{}".to_owned()); |
| 1781 | + } |
1726 | 1782 | }
|
0 commit comments