diff options
| author | Erick Tryzelaar <erick.tryzelaar@gmail.com> | 2014-05-27 10:38:52 -0700 |
|---|---|---|
| committer | Erick Tryzelaar <erick.tryzelaar@gmail.com> | 2014-05-27 10:38:52 -0700 |
| commit | 926504c8853458dcde5f4ab66a10e11a6fcda2e7 (patch) | |
| tree | 2f2194e693c65f6703ceabfa355be0465c9e5cff | |
| parent | e9e799f7506a620bcebd291d716e895faa9d427b (diff) | |
| download | rust-926504c8853458dcde5f4ab66a10e11a6fcda2e7.tar.gz rust-926504c8853458dcde5f4ab66a10e11a6fcda2e7.zip | |
collections: implement Show for Tree{Map,Set}
| -rw-r--r-- | src/libcollections/treemap.rs | 60 |
1 files changed, 58 insertions, 2 deletions
diff --git a/src/libcollections/treemap.rs b/src/libcollections/treemap.rs index bb4ca36709c..fb663d91131 100644 --- a/src/libcollections/treemap.rs +++ b/src/libcollections/treemap.rs @@ -12,9 +12,11 @@ //! trees. The only requirement for the types is that the key implements //! `TotalOrd`. -use std::iter; -use std::iter::{Peekable}; use std::cmp::Ordering; +use std::fmt::Show; +use std::fmt; +use std::iter::Peekable; +use std::iter; use std::mem::{replace, swap}; use std::ptr; @@ -67,6 +69,19 @@ impl<K: Ord + TotalOrd, V: Ord> Ord for TreeMap<K, V> { fn lt(&self, other: &TreeMap<K, V>) -> bool { lt(self, other) } } +impl<K: TotalOrd + Show, V: Show> Show for TreeMap<K, V> { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + try!(write!(f, r"\{")); + + for (i, (k, v)) in self.iter().enumerate() { + if i != 0 { try!(write!(f, ", ")); } + try!(write!(f, "{}: {}", *k, *v)); + } + + write!(f, r"\}") + } +} + impl<K: TotalOrd, V> Container for TreeMap<K, V> { fn len(&self) -> uint { self.length } } @@ -547,6 +562,19 @@ impl<T: Ord + TotalOrd> Ord for TreeSet<T> { fn lt(&self, other: &TreeSet<T>) -> bool { self.map < other.map } } +impl<T: TotalOrd + Show> Show for TreeSet<T> { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + try!(write!(f, r"\{")); + + for (i, x) in self.iter().enumerate() { + if i != 0 { try!(write!(f, ", ")); } + try!(write!(f, "{}", *x)); + } + + write!(f, r"\}") + } +} + impl<T: TotalOrd> Container for TreeSet<T> { #[inline] fn len(&self) -> uint { self.map.len() } @@ -1329,6 +1357,20 @@ mod test_treemap { } #[test] + fn test_show() { + let mut map: TreeMap<int, int> = TreeMap::new(); + let empty: TreeMap<int, int> = TreeMap::new(); + + map.insert(1, 2); + map.insert(3, 4); + + let map_str = format!("{}", map); + + assert!(map_str == "{1: 2, 3: 4}".to_owned()); + assert_eq!(format!("{}", empty), "{}".to_owned()); + } + + #[test] fn test_lazy_iterator() { let mut m = TreeMap::new(); let (x1, y1) = (2, 5); @@ -1723,4 +1765,18 @@ mod test_set { assert!(set.contains(x)); } } + + #[test] + fn test_show() { + let mut set: TreeSet<int> = TreeSet::new(); + let empty: TreeSet<int> = TreeSet::new(); + + set.insert(1); + set.insert(2); + + let set_str = format!("{}", set); + + assert!(set_str == "{1, 2}".to_owned()); + assert_eq!(format!("{}", empty), "{}".to_owned()); + } } |
