@@ -56,6 +56,7 @@ use container::{Container, Mutable, Map, MutableMap, Set, MutableSet};
5656use clone:: Clone ;
5757use cmp:: { Eq , Equiv } ;
5858use default:: Default ;
59+ #[ cfg( not( stage0) ) ] use fmt;
5960use hash:: Hash ;
6061use iter;
6162use iter:: { Iterator , FromIterator , Extendable } ;
@@ -65,6 +66,7 @@ use num;
6566use option:: { None , Option , Some } ;
6667use rand:: Rng ;
6768use rand;
69+ #[ cfg( not( stage0) ) ] use result:: { Ok , Err } ;
6870use vec:: { ImmutableVector , MutableVector , OwnedVector , Items , MutItems } ;
6971use vec_ng;
7072use vec_ng:: Vec ;
@@ -595,6 +597,23 @@ impl<K:Hash + Eq + Clone,V:Clone> Clone for HashMap<K,V> {
595597 }
596598}
597599
600+ #[ cfg( not( stage0) ) ]
601+ impl < A : fmt:: Show + Hash + Eq , B : fmt:: Show > fmt:: Show for HashMap < A , B > {
602+ fn fmt ( & self , f : & mut fmt:: Formatter ) -> fmt:: Result {
603+ if_ok ! ( write!( f. buf, r"\{" ) )
604+ let mut first = true ;
605+ for ( key, value) in self . iter ( ) {
606+ if first {
607+ first = false ;
608+ } else {
609+ if_ok ! ( write!( f. buf, ", " ) ) ;
610+ }
611+ if_ok ! ( write!( f. buf, "{}: {}" , * key, * value) ) ;
612+ }
613+ write ! ( f. buf, r"\}" )
614+ }
615+ }
616+
598617/// HashMap iterator
599618#[ deriving( Clone ) ]
600619pub struct Entries < ' a , K , V > {
@@ -857,6 +876,23 @@ impl<T:Hash + Eq + Clone> Clone for HashSet<T> {
857876 }
858877}
859878
879+ #[ cfg( not( stage0) ) ]
880+ impl < A : fmt:: Show + Hash + Eq > fmt:: Show for HashSet < A > {
881+ fn fmt ( & self , f : & mut fmt:: Formatter ) -> fmt:: Result {
882+ if_ok ! ( write!( f. buf, r"\{" ) )
883+ let mut first = true ;
884+ for x in self . iter ( ) {
885+ if first {
886+ first = false ;
887+ } else {
888+ if_ok ! ( write!( f. buf, ", " ) ) ;
889+ }
890+ if_ok ! ( write!( f. buf, "{}" , * x) ) ;
891+ }
892+ write ! ( f. buf, r"\}" )
893+ }
894+ }
895+
860896impl < K : Eq + Hash > FromIterator < K > for HashSet < K > {
861897 fn from_iterator < T : Iterator < K > > ( iter : & mut T ) -> HashSet < K > {
862898 let ( lower, _) = iter. size_hint ( ) ;
@@ -890,6 +926,7 @@ pub type SetAlgebraItems<'a, T> =
890926mod test_map {
891927 use prelude:: * ;
892928 use super :: * ;
929+ use fmt;
893930
894931 #[ test]
895932 fn test_create_capacity_zero ( ) {
@@ -1121,6 +1158,30 @@ mod test_map {
11211158 assert_eq ! ( map. find( & k) , Some ( & v) ) ;
11221159 }
11231160 }
1161+
1162+ struct ShowableStruct {
1163+ value : int ,
1164+ }
1165+
1166+ impl fmt:: Show for ShowableStruct {
1167+ fn fmt ( & self , f : & mut fmt:: Formatter ) -> fmt:: Result {
1168+ write ! ( f. buf, r"s{}" , self . value)
1169+ }
1170+ }
1171+
1172+ #[ test]
1173+ fn test_show ( ) {
1174+ let mut table: HashMap < int , ShowableStruct > = HashMap :: new ( ) ;
1175+ let empty: HashMap < int , ShowableStruct > = HashMap :: new ( ) ;
1176+
1177+ table. insert ( 3 , ShowableStruct { value : 4 } ) ;
1178+ table. insert ( 1 , ShowableStruct { value : 2 } ) ;
1179+
1180+ let table_str = format ! ( "{}" , table) ;
1181+
1182+ assert ! ( table_str == ~"{ 1 : s2, 3 : s4} " || table_str == ~" { 3 : s4, 1 : s2} ");
1183+ assert_eq!(format!(" { } ", empty), ~" { } ");
1184+ }
11241185}
11251186
11261187#[cfg(test)]
@@ -1346,4 +1407,18 @@ mod test_set {
13461407
13471408 assert_eq!(s1, s2);
13481409 }
1410+
1411+ #[test]
1412+ fn test_show() {
1413+ let mut set: HashSet<int> = HashSet::new();
1414+ let empty: HashSet<int> = HashSet::new();
1415+
1416+ set.insert(1);
1417+ set.insert(2);
1418+
1419+ let set_str = format!(" { } ", set);
1420+
1421+ assert!(set_str == ~" { 1 , 2 } " || set_str == ~" { 2 , 1 } ");
1422+ assert_eq!(format!(" { } ", empty), ~" { } " ) ;
1423+ }
13491424}
0 commit comments