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 Ord for TreeMap { fn lt(&self, other: &TreeMap) -> bool { lt(self, other) } } +impl Show for TreeMap { + 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 Container for TreeMap { fn len(&self) -> uint { self.length } } @@ -547,6 +562,19 @@ impl Ord for TreeSet { fn lt(&self, other: &TreeSet) -> bool { self.map < other.map } } +impl Show for TreeSet { + 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 Container for TreeSet { #[inline] fn len(&self) -> uint { self.map.len() } @@ -1328,6 +1356,20 @@ mod test_treemap { assert!(a < b && a <= b); } + #[test] + fn test_show() { + let mut map: TreeMap = TreeMap::new(); + let empty: TreeMap = 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(); @@ -1723,4 +1765,18 @@ mod test_set { assert!(set.contains(x)); } } + + #[test] + fn test_show() { + let mut set: TreeSet = TreeSet::new(); + let empty: TreeSet = 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()); + } }