3
3
use std;
4
4
import std. map ;
5
5
import std. _str ;
6
+ import std. _uint ;
6
7
import std. util ;
7
8
8
9
fn test_simple ( ) {
@@ -42,16 +43,20 @@ fn test_simple() {
42
43
check ( hm_uu. get ( 12 u) == 12 u) ;
43
44
44
45
45
- /*
46
+ let str ten = "ten" ;
47
+ let str eleven = "eleven" ;
48
+ let str twelve = "twelve" ;
49
+
46
50
log "str -> uint" ;
47
51
48
52
let map. hashmap[ str, uint] hm_su = map. mk_hashmap [ str, uint] ( hasher_str,
49
53
eqer_str) ;
50
-
51
54
check ( hm_su. insert ( "ten" , 12 u) ) ;
52
- check (hm_su.insert(" eleven" , 13u));
55
+ check ( hm_su. insert ( eleven, 13 u) ) ;
53
56
check ( hm_su. insert ( "twelve" , 14 u) ) ;
54
57
58
+ check ( hm_su. get ( eleven) == 13 u) ;
59
+
55
60
check ( hm_su. get ( "eleven" ) == 13 u) ;
56
61
check ( hm_su. get ( "twelve" ) == 14 u) ;
57
62
check ( hm_su. get ( "ten" ) == 12 u) ;
@@ -88,9 +93,9 @@ fn test_simple() {
88
93
let map. hashmap[ str, str] hm_ss = map. mk_hashmap [ str, str] ( hasher_str,
89
94
eqer_str) ;
90
95
91
- check (hm_ss.insert(" ten" , "twelve"));
92
- check (hm_ss.insert(" eleven" , "thirteen"));
93
- check (hm_ss.insert(" twelve" , "fourteen"));
96
+ check ( hm_ss. insert ( ten, "twelve" ) ) ;
97
+ check ( hm_ss. insert ( eleven, "thirteen" ) ) ;
98
+ check ( hm_ss. insert ( twelve, "fourteen" ) ) ;
94
99
95
100
check ( _str. eq ( hm_ss. get ( "eleven" ) , "thirteen" ) ) ;
96
101
check ( _str. eq ( hm_ss. get ( "twelve" ) , "fourteen" ) ) ;
@@ -101,8 +106,6 @@ fn test_simple() {
101
106
102
107
check ( !hm_ss. insert ( "twelve" , "twelve" ) ) ;
103
108
check ( _str. eq ( hm_ss. get ( "twelve" ) , "twelve" ) ) ;
104
- */
105
-
106
109
107
110
log "*** finished test_simple" ;
108
111
}
@@ -115,47 +118,100 @@ fn test_growth() {
115
118
116
119
let uint num_to_insert = 64 u;
117
120
118
- fn eq ( & uint x, & uint y) -> bool { ret x == y; }
119
- fn hash ( & uint u) -> uint {
121
+ fn eq_uint ( & uint x, & uint y) -> bool { ret x == y; }
122
+ fn hash_uint ( & uint u) -> uint {
120
123
// FIXME: can't use std.util.id since we'd be capturing a type param,
121
124
// and presently we can't close items over type params.
122
125
ret u;
123
126
}
124
127
125
- let map. hashfn[ uint] hasher = hash;
126
- let map. eqfn[ uint] eqer = eq;
127
- let map. hashmap[ uint, uint] hm = map. mk_hashmap [ uint, uint] ( hasher, eqer) ;
128
+
129
+ log "uint -> uint" ;
130
+
131
+ let map. hashfn[ uint] hasher_uint = hash_uint;
132
+ let map. eqfn[ uint] eqer_uint = eq_uint;
133
+ let map. hashmap[ uint, uint] hm_uu = map. mk_hashmap [ uint, uint] ( hasher_uint,
134
+ eqer_uint) ;
128
135
129
136
let uint i = 0 u;
130
137
while ( i < num_to_insert) {
131
- check ( hm . insert ( i, i * i) ) ;
132
- log "inserting " + std . _uint . to_str ( i, 10 u)
133
- + " -> " + std . _uint . to_str ( i * i, 10 u) ;
138
+ check ( hm_uu . insert ( i, i * i) ) ;
139
+ log "inserting " + _uint. to_str ( i, 10 u)
140
+ + " -> " + _uint. to_str ( i * i, 10 u) ;
134
141
i += 1 u;
135
142
}
136
143
137
144
log "-----";
138
145
139
146
i = 0u;
140
147
while (i < num_to_insert) {
141
- log " get( " + std. _uint.to_str(i, 10u) + " ) = "
142
- + std. _uint.to_str(hm .get(i), 10u);
143
- check (hm .get(i) == i * i);
148
+ log " get( " + _uint.to_str(i, 10u) + " ) = "
149
+ + _uint.to_str(hm_uu .get(i), 10u);
150
+ check (hm_uu .get(i) == i * i);
144
151
i += 1u;
145
152
}
146
153
147
- check (hm .insert(num_to_insert, 17u));
148
- check (hm .get(num_to_insert) == 17u);
154
+ check (hm_uu .insert(num_to_insert, 17u));
155
+ check (hm_uu .get(num_to_insert) == 17u);
149
156
150
157
log " -----";
151
158
152
- hm .rehash();
159
+ hm_uu .rehash();
153
160
154
161
i = 0u;
155
162
while (i < num_to_insert) {
156
- log " get( " + std._uint.to_str(i, 10u) + " ) = "
157
- + std._uint.to_str(hm.get(i), 10u);
158
- check (hm.get(i) == i * i);
163
+ log " get( " + _uint.to_str(i, 10u) + " ) = "
164
+ + _uint.to_str(hm_uu.get(i), 10u);
165
+ check (hm_uu.get(i) == i * i);
166
+ i += 1u;
167
+ }
168
+
169
+
170
+ log " str -> str ";
171
+
172
+ let map. hashfn[ str] hasher_str = _str. hash ;
173
+ let map. eqfn[ str] eqer_str = _str. eq ;
174
+ let map. hashmap[ str, str] hm_ss = map. mk_hashmap [ str, str] ( hasher_str,
175
+ eqer_str) ;
176
+
177
+ i = 0 u;
178
+ while ( i < num_to_insert) {
179
+ check ( hm_ss. insert ( _uint. to_str ( i, 2 u) , _uint. to_str ( i * i, 2 u) ) ) ;
180
+ log "inserting \" " + _uint. to_str ( i, 2 u)
181
+ + "\" -> \" " + _uint. to_str ( i * i, 2 u) + "\" " ;
182
+ i += 1 u;
183
+ }
184
+
185
+ log "-----";
186
+
187
+ i = 0u;
188
+ while (i < num_to_insert) {
189
+ log " get( \" "
190
+ + _uint. to_str ( i, 2 u)
191
+ + "\" ) = \" "
192
+ + hm_ss. get ( _uint. to_str ( i, 2 u) ) + "\" " ;
193
+
194
+ check ( _str. eq ( hm_ss. get ( _uint. to_str ( i, 2 u) ) ,
195
+ _uint. to_str ( i * i, 2 u) ) ) ;
196
+ i += 1 u;
197
+ }
198
+
199
+ check ( hm_ss. insert ( _uint. to_str ( num_to_insert, 2 u) ,
200
+ _uint. to_str ( 17 u, 2 u) ) ) ;
201
+
202
+ check ( _str. eq ( hm_ss. get ( _uint. to_str ( num_to_insert, 2 u) ) ,
203
+ _uint. to_str ( 17 u, 2 u) ) ) ;
204
+
205
+ log "-----";
206
+
207
+ hm_ss.rehash();
208
+
209
+ i = 0u;
210
+ while (i < num_to_insert) {
211
+ log " get( \" " + _uint. to_str ( i, 2 u) + "\" ) = \" "
212
+ + hm_ss. get ( _uint. to_str ( i, 2 u) ) + "\" " ;
213
+ check ( _str. eq ( hm_ss. get ( _uint. to_str ( i, 2 u) ) ,
214
+ _uint. to_str ( i * i, 2 u) ) ) ;
159
215
i += 1 u;
160
216
}
161
217
@@ -185,8 +241,8 @@ fn test_removal() {
185
241
let uint i = 0 u;
186
242
while ( i < num_to_insert) {
187
243
check ( hm. insert ( i, i * i) ) ;
188
- log "inserting " + std . _uint . to_str ( i, 10 u)
189
- + " -> " + std . _uint . to_str ( i * i, 10 u) ;
244
+ log "inserting " + _uint. to_str ( i, 10 u)
245
+ + " -> " + _uint. to_str ( i * i, 10 u) ;
190
246
i += 1 u;
191
247
}
192
248
@@ -223,8 +279,8 @@ fn test_removal() {
223
279
224
280
i = 1u;
225
281
while (i < num_to_insert) {
226
- log " get( " + std. _uint.to_str(i, 10u) + " ) = "
227
- + std. _uint.to_str(hm.get(i), 10u);
282
+ log " get( " + _uint.to_str(i, 10u) + " ) = "
283
+ + _uint.to_str(hm.get(i), 10u);
228
284
check (hm.get(i) == i * i);
229
285
i += 2u;
230
286
}
@@ -238,8 +294,8 @@ fn test_removal() {
238
294
239
295
i = 1u;
240
296
while (i < num_to_insert) {
241
- log " get( " + std. _uint.to_str(i, 10u) + " ) = "
242
- + std. _uint.to_str(hm.get(i), 10u);
297
+ log " get( " + _uint.to_str(i, 10u) + " ) = "
298
+ + _uint.to_str(hm.get(i), 10u);
243
299
check (hm.get(i) == i * i);
244
300
i += 2u;
245
301
}
@@ -249,8 +305,8 @@ fn test_removal() {
249
305
i = 0u;
250
306
while (i < num_to_insert) {
251
307
check (hm.insert(i, i * i));
252
- log " inserting " + std. _uint.to_str(i, 10u)
253
- + " -> " + std. _uint.to_str(i * i, 10u);
308
+ log " inserting " + _uint.to_str(i, 10u)
309
+ + " -> " + _uint.to_str(i * i, 10u);
254
310
i += 2u;
255
311
}
256
312
@@ -260,8 +316,8 @@ fn test_removal() {
260
316
261
317
i = 0u;
262
318
while (i < num_to_insert) {
263
- log " get( " + std. _uint.to_str(i, 10u) + " ) = "
264
- + std. _uint.to_str(hm.get(i), 10u);
319
+ log " get( " + _uint.to_str(i, 10u) + " ) = "
320
+ + _uint.to_str(hm.get(i), 10u);
265
321
check (hm.get(i) == i * i);
266
322
i += 1u;
267
323
}
@@ -277,8 +333,8 @@ fn test_removal() {
277
333
278
334
i = 0u;
279
335
while (i < num_to_insert) {
280
- log " get( " + std. _uint.to_str(i, 10u) + " ) = "
281
- + std. _uint.to_str(hm.get(i), 10u);
336
+ log " get( " + _uint.to_str(i, 10u) + " ) = "
337
+ + _uint.to_str(hm.get(i), 10u);
282
338
check (hm.get(i) == i * i);
283
339
i += 1u;
284
340
}
@@ -290,4 +346,6 @@ fn main() {
290
346
test_simple ( ) ;
291
347
test_growth ( ) ;
292
348
test_removal ( ) ;
349
+
350
+ std. sys . rustrt . gc ( ) ;
293
351
}
0 commit comments