diff --git a/src/libcollections/hashmap.rs b/src/libcollections/hashmap.rs index 1b79b84ff9085..c51061067dc1e 100644 --- a/src/libcollections/hashmap.rs +++ b/src/libcollections/hashmap.rs @@ -2003,6 +2003,20 @@ mod test_map { assert_eq!(m1, m2); } + #[test] + fn test_show() { + let mut map: HashMap = HashMap::new(); + let empty: HashMap = HashMap::new(); + + map.insert(1, 2); + map.insert(3, 4); + + let map_str = format!("{}", map); + + assert!(map_str == "{1: 2, 3: 4}".to_owned() || map_str == "{3: 4, 1: 2}".to_owned()); + assert_eq!(format!("{}", empty), "{}".to_owned()); + } + #[test] fn test_expand() { let mut m = HashMap::new(); diff --git a/src/libcollections/treemap.rs b/src/libcollections/treemap.rs index bb4ca36709c25..fb663d91131af 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()); + } } diff --git a/src/libserialize/json.rs b/src/libserialize/json.rs index cf05bf5b64148..0991c22d4a3c1 100644 --- a/src/libserialize/json.rs +++ b/src/libserialize/json.rs @@ -1434,36 +1434,6 @@ impl> Parser { }, }, _ => return self.error(InvalidEscape), -/*======= - 'u' => { - // Parse \u1234. - let mut i = 0u; - let mut n = 0u; - while i < 4u && !self.eof() { - self.bump(); - n = match self.ch_or_null() { - c @ '0' .. '9' => n * 16u + (c as uint) - ('0' as uint), - 'a' | 'A' => n * 16u + 10u, - 'b' | 'B' => n * 16u + 11u, - 'c' | 'C' => n * 16u + 12u, - 'd' | 'D' => n * 16u + 13u, - 'e' | 'E' => n * 16u + 14u, - 'f' | 'F' => n * 16u + 15u, - _ => return self.error(UnrecognizedHex) - }; - - i += 1u; - } - - // Error out if we didn't parse 4 digits. - if i != 4u { - return self.error(NotFourDigit); - } - - res.push_char(char::from_u32(n as u32).unwrap()); - } - _ => return self.error(InvalidEscape), ->>>>>>> Add a streaming parser to serialize::json.*/ } escape = false; } else if self.ch_is('\\') {