@@ -56,6 +56,7 @@ use container::{Container, Mutable, Map, MutableMap, Set, MutableSet};
56
56
use clone:: Clone ;
57
57
use cmp:: { Eq , Equiv } ;
58
58
use default:: Default ;
59
+ #[ cfg( not( stage0) ) ] use fmt;
59
60
use hash:: Hash ;
60
61
use iter;
61
62
use iter:: { Iterator , FromIterator , Extendable } ;
@@ -65,6 +66,7 @@ use num;
65
66
use option:: { None , Option , Some } ;
66
67
use rand:: Rng ;
67
68
use rand;
69
+ #[ cfg( not( stage0) ) ] use result:: { Ok , Err } ;
68
70
use vec:: { ImmutableVector , MutableVector , OwnedVector , Items , MutItems } ;
69
71
use vec_ng;
70
72
use vec_ng:: Vec ;
@@ -595,6 +597,23 @@ impl<K:Hash + Eq + Clone,V:Clone> Clone for HashMap<K,V> {
595
597
}
596
598
}
597
599
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
+
598
617
/// HashMap iterator
599
618
#[ deriving( Clone ) ]
600
619
pub struct Entries < ' a , K , V > {
@@ -857,6 +876,23 @@ impl<T:Hash + Eq + Clone> Clone for HashSet<T> {
857
876
}
858
877
}
859
878
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
+
860
896
impl < K : Eq + Hash > FromIterator < K > for HashSet < K > {
861
897
fn from_iterator < T : Iterator < K > > ( iter : & mut T ) -> HashSet < K > {
862
898
let ( lower, _) = iter. size_hint ( ) ;
@@ -890,6 +926,7 @@ pub type SetAlgebraItems<'a, T> =
890
926
mod test_map {
891
927
use prelude:: * ;
892
928
use super :: * ;
929
+ use fmt;
893
930
894
931
#[ test]
895
932
fn test_create_capacity_zero ( ) {
@@ -1121,6 +1158,30 @@ mod test_map {
1121
1158
assert_eq ! ( map. find( & k) , Some ( & v) ) ;
1122
1159
}
1123
1160
}
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
+ }
1124
1185
}
1125
1186
1126
1187
#[cfg(test)]
@@ -1346,4 +1407,18 @@ mod test_set {
1346
1407
1347
1408
assert_eq!(s1, s2);
1348
1409
}
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
+ }
1349
1424
}
0 commit comments