ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/loops/IntMapCheck.java
(Generate patch)

Comparing jsr166/src/test/loops/IntMapCheck.java (file contents):
Revision 1.1 by dl, Mon May 2 19:19:38 2005 UTC vs.
Revision 1.14 by jsr166, Thu Jan 15 18:34:19 2015 UTC

# Line 1 | Line 1
1 + /*
2 + * Written by Doug Lea with assistance from members of JCP JSR-166
3 + * Expert Group and released to the public domain, as explained at
4 + * http://creativecommons.org/publicdomain/zero/1.0/
5 + */
6   /**
7   * @test
8   * @synopsis Times and checks basic map operations
9   */
5 import java.util.*;
10   import java.io.*;
11 + import java.util.*;
12  
13   public class IntMapCheck {
14      static int absentSize;
# Line 17 | Line 22 | public class IntMapCheck {
22      }
23  
24      public static void main(String[] args) throws Exception {
25 <        Class mapClass = java.util.concurrent.ConcurrentHashMap.class;
25 >        Class<?> mapClass = java.util.concurrent.ConcurrentHashMap.class;
26          int numTests = 50;
27 <        int size = 50000;
27 >        int size = 75000;
28  
29          if (args.length > 0) {
30              try {
31                  mapClass = Class.forName(args[0]);
32 <            } catch(ClassNotFoundException e) {
32 >            } catch (ClassNotFoundException e) {
33                  throw new RuntimeException("Class " + args[0] + " not found.");
34              }
35          }
36  
37 <
33 <        if (args.length > 1)
37 >        if (args.length > 1)
38              numTests = Integer.parseInt(args[1]);
39  
40 <        if (args.length > 2)
40 >        if (args.length > 2)
41              size = Integer.parseInt(args[2]);
42  
43          boolean doSerializeTest = args.length > 3;
# Line 41 | Line 45 | public class IntMapCheck {
45          System.out.println("Testing " + mapClass.getName() + " trials: " + numTests + " size: " + size);
46  
47          absentSize = 4;
48 <        while (absentSize <= size) absentSize <<= 1;
48 >        while (absentSize < size) absentSize <<= 1;
49          absentMask = absentSize-1;
50          absent = new Integer[absentSize];
51 <        for (int i = 0; i < absentSize; ++i)
52 <            absent[i] = new Integer(2 * (i - 1) + 1);
51 >        for (int i = 0; i < absentSize/2; ++i)
52 >            absent[i] = Integer.valueOf(-i - 1);
53 >        for (int i = absentSize/2; i < absentSize; ++i)
54 >            absent[i] = Integer.valueOf(size + i + 1);
55  
56          Integer[] key = new Integer[size];
57 <        for (int i = 0; i < size; ++i)
58 <            key[i] = new Integer(2 * i);
57 >        for (int i = 0; i < size; ++i)
58 >            key[i] = Integer.valueOf(i);
59  
60          for (int rep = 0; rep < numTests; ++rep) {
55            shuffle(absent);
61              runTest(newMap(mapClass), key);
62 +            if ((rep & 3) == 3 && rep < numTests - 1) {
63 +                shuffle(key);
64 +                //                Thread.sleep(50);
65 +            }
66          }
67  
68          TestTimer.printStats();
69  
61
70          if (doSerializeTest)
71              stest(newMap(mapClass), size);
72      }
73  
74 <    static Map<Integer,Integer> newMap(Class cl) {
74 >    static Map<Integer,Integer> newMap(Class<?> cl) {
75          try {
76              Map m = (Map<Integer,Integer>)cl.newInstance();
77              return m;
78 <        } catch(Exception e) {
78 >        } catch (Exception e) {
79              throw new RuntimeException("Can't instantiate " + cl + ": " + e);
80          }
81      }
82  
75
83      static void runTest(Map<Integer,Integer> s, Integer[] key) {
77        shuffle(key);
84          int size = key.length;
85          long startTime = System.nanoTime();
86          test(s, key);
87          long time = System.nanoTime() - startTime;
88      }
89  
90 <
85 <    static void t1(String nm, int n, Map<Integer,Integer> s, Integer[] key, int expect) {
90 >    static void t1(String nm, int n, Map<Integer,Integer> s, Integer[] key, int expect, int iters) {
91          int sum = 0;
87        int iters = 4;
92          timer.start(nm, n * iters);
93          for (int j = 0; j < iters; ++j) {
94              for (int i = 0; i < n; i++) {
95                  if (s.get(key[i]) != null) ++sum;
96              }
97          }
98 <        timer.finish();
99 <        reallyAssert (sum == expect * iters);
98 >        timer.finish();
99 >        reallyAssert(sum == expect * iters);
100 >    }
101 >
102 >    static void t1Boxed(String nm, int n, Map<Integer,Integer> s, Integer[] key, int expect) {
103 >        int sum = 0;
104 >        int iters = 8;
105 >        timer.start(nm, n * iters);
106 >        for (int j = 0; j < iters; ++j) {
107 >            for (int i = 0; i < n; i++) {
108 >                if (s.get(i) != i) ++sum;
109 >            }
110 >        }
111 >        timer.finish();
112 >        reallyAssert(sum == expect * iters);
113      }
114  
115      static void t2(String nm, int n, Map<Integer,Integer> s, Integer[] key, int expect) {
# Line 101 | Line 118 | public class IntMapCheck {
118          for (int i = 0; i < n; i++) {
119              if (s.remove(key[i]) != null) ++sum;
120          }
121 <        timer.finish();
122 <        reallyAssert (sum == expect);
121 >        timer.finish();
122 >        reallyAssert(sum == expect);
123      }
124  
125      static void t3(String nm, int n, Map<Integer,Integer> s, Integer[] key, int expect) {
# Line 113 | Line 130 | public class IntMapCheck {
130              Integer v = absent[i & absentMask];
131              if (s.put(k, v) == null) ++sum;
132          }
133 <        timer.finish();
134 <        reallyAssert (sum == expect);
133 >        timer.finish();
134 >        reallyAssert(sum == expect);
135      }
136  
137      static void t4(String nm, int n, Map<Integer,Integer> s, Integer[] key, int expect) {
# Line 123 | Line 140 | public class IntMapCheck {
140          for (int i = 0; i < n; i++) {
141              if (s.containsKey(key[i])) ++sum;
142          }
143 <        timer.finish();
144 <        reallyAssert (sum == expect);
143 >        timer.finish();
144 >        reallyAssert(sum == expect);
145      }
146  
147      static void t5(String nm, int n, Map<Integer,Integer> s, Integer[] key, int expect) {
# Line 133 | Line 150 | public class IntMapCheck {
150          for (int i = n-2; i >= 0; i-=2) {
151              if (s.remove(key[i]) != null) ++sum;
152          }
153 <        timer.finish();
154 <        reallyAssert (sum == expect);
153 >        timer.finish();
154 >        reallyAssert(sum == expect);
155      }
156  
157      static void t6(String nm, int n, Map<Integer,Integer> s, Integer[] k1, Integer[] k2) {
# Line 144 | Line 161 | public class IntMapCheck {
161              if (s.get(k1[i]) != null) ++sum;
162              if (s.get(k2[i & absentMask]) != null) ++sum;
163          }
164 <        timer.finish();
165 <        reallyAssert (sum == n);
164 >        timer.finish();
165 >        reallyAssert(sum == n);
166      }
167  
168      static void t7(String nm, int n, Map<Integer,Integer> s, Integer[] k1, Integer[] k2) {
# Line 155 | Line 172 | public class IntMapCheck {
172              if (s.containsKey(k1[i])) ++sum;
173              if (s.containsKey(k2[i & absentMask])) ++sum;
174          }
175 <        timer.finish();
176 <        reallyAssert (sum == n);
175 >        timer.finish();
176 >        reallyAssert(sum == n);
177      }
178  
179      static void t8(String nm, int n, Map<Integer,Integer> s, Integer[] key, int expect) {
# Line 165 | Line 182 | public class IntMapCheck {
182          for (int i = 0; i < n; i++) {
183              if (s.get(key[i]) != null) ++sum;
184          }
185 <        timer.finish();
186 <        reallyAssert (sum == expect);
185 >        timer.finish();
186 >        reallyAssert(sum == expect);
187      }
188  
172
189      static void t9(Map<Integer,Integer> s) {
190          int sum = 0;
191          int iters = 20;
# Line 177 | Line 193 | public class IntMapCheck {
193          int step = absentSize / iters;
194          for (int i = 0; i < absentSize; i += step)
195              if (s.containsValue(absent[i])) ++sum;
196 <        timer.finish();
197 <        reallyAssert (sum != 0);
196 >        timer.finish();
197 >        reallyAssert(sum != 0);
198      }
199  
184
200      static void ktest(Map<Integer,Integer> s, int size, Integer[] key) {
201          timer.start("ContainsKey            ", size);
202          Set ks = s.keySet();
# Line 189 | Line 204 | public class IntMapCheck {
204          for (int i = 0; i < size; i++) {
205              if (ks.contains(key[i])) ++sum;
206          }
207 <        timer.finish();
208 <        reallyAssert (sum == size);
207 >        timer.finish();
208 >        reallyAssert(sum == size);
209      }
210  
196
211      static void ittest1(Map<Integer,Integer> s, int size) {
212          int sum = 0;
213          timer.start("Iter Key               ", size);
214          for (Iterator it = s.keySet().iterator(); it.hasNext(); ) {
215 <            if(it.next() != MISSING)
215 >            if (it.next() != MISSING)
216                  ++sum;
217          }
218 <        timer.finish();
219 <        reallyAssert (sum == size);
218 >        timer.finish();
219 >        //        if (sum != size)
220 >        //            System.out.println("iters " + sum + " size " + size);
221 >        reallyAssert(sum == size);
222      }
223  
224      static void ittest2(Map<Integer,Integer> s, int size) {
225          int sum = 0;
226          timer.start("Iter Value             ", size);
227          for (Iterator it = s.values().iterator(); it.hasNext(); ) {
228 <            if(it.next() != MISSING)
228 >            if (it.next() != MISSING)
229                  ++sum;
230          }
231 <        timer.finish();
232 <        reallyAssert (sum == size);
231 >        timer.finish();
232 >        //        if (sum != size)
233 >        //            System.out.println("iters " + sum + " size " + size);
234 >        reallyAssert(sum == size);
235      }
236      static void ittest3(Map<Integer,Integer> s, int size) {
237          int sum = 0;
238          timer.start("Iter Entry             ", size);
239          for (Iterator it = s.entrySet().iterator(); it.hasNext(); ) {
240 <            if(it.next() != MISSING)
240 >            if (it.next() != MISSING)
241                  ++sum;
242          }
243 <        timer.finish();
244 <        reallyAssert (sum == size);
243 >        timer.finish();
244 >        reallyAssert(sum == size);
245      }
246  
247      static void ittest4(Map<Integer,Integer> s, int size, int pos) {
248          IdentityHashMap seen = new IdentityHashMap(size);
249 <        reallyAssert (s.size() == size);
249 >        reallyAssert(s.size() == size);
250          int sum = 0;
251          timer.start("Iter XEntry            ", size);
252 <        Iterator it = s.entrySet().iterator();
252 >        Iterator it = s.entrySet().iterator();
253          Integer k = null;
254          Integer v = null;
255          for (int i = 0; i < size-pos; ++i) {
# Line 242 | Line 260 | public class IntMapCheck {
260              if (v != MISSING)
261                  ++sum;
262          }
263 <        reallyAssert (s.containsKey(k));
263 >        reallyAssert(s.containsKey(k));
264          it.remove();
265 <        reallyAssert (!s.containsKey(k));
265 >        reallyAssert(!s.containsKey(k));
266          while (it.hasNext()) {
267              Map.Entry<Integer,Integer> x = (Map.Entry<Integer,Integer>)(it.next());
268 <            Integer k2 = (Integer)x.getKey();
268 >            Integer k2 = x.getKey();
269              seen.put(k2, k2);
270              if (k2 != MISSING)
271                  ++sum;
272          }
273  
274 <        reallyAssert (s.size() == size-1);
274 >        reallyAssert(s.size() == size-1);
275          s.put(k, v);
276 <        reallyAssert (seen.size() == size);
277 <        timer.finish();
278 <        reallyAssert (sum == size);
279 <        reallyAssert (s.size() == size);
276 >        reallyAssert(seen.size() == size);
277 >        timer.finish();
278 >        reallyAssert(sum == size);
279 >        reallyAssert(s.size() == size);
280      }
281  
264
282      static void ittest(Map<Integer,Integer> s, int size) {
283 <        ittest1(s, size);
284 <        ittest2(s, size);
285 <        ittest3(s, size);
286 <        //        for (int i = 0; i < size-1; ++i)
283 >        for (int i = 0; i < 4; ++i) {
284 >            ittest1(s, size);
285 >            ittest2(s, size);
286 >            ittest3(s, size);
287 >        }
288 >        //        for (int i = 0; i < size-1; ++i)
289          //            ittest4(s, size, i);
290      }
291  
# Line 278 | Line 297 | public class IntMapCheck {
297              if (en.nextElement() != MISSING)
298                  ++sum;
299          }
300 <        timer.finish();
301 <        reallyAssert (sum == size);
300 >        timer.finish();
301 >        reallyAssert(sum == size);
302      }
303  
304      static void entest2(Hashtable ht, int size) {
# Line 289 | Line 308 | public class IntMapCheck {
308              if (en.nextElement() != MISSING)
309                  ++sum;
310          }
311 <        timer.finish();
312 <        reallyAssert (sum == size);
311 >        timer.finish();
312 >        reallyAssert(sum == size);
313      }
314  
296
315      static void entest3(Hashtable ht, int size) {
316          int sum = 0;
317  
318          timer.start("Iterf Enumeration Key  ", size);
319 <        Enumeration en = ht.keys();
319 >        Enumeration en = ht.keys();
320          for (int i = 0; i < size; ++i) {
321              if (en.nextElement() != MISSING)
322                  ++sum;
323          }
324 <        timer.finish();
325 <        reallyAssert (sum == size);
324 >        timer.finish();
325 >        reallyAssert(sum == size);
326      }
327  
328      static void entest4(Hashtable ht, int size) {
329          int sum = 0;
330          timer.start("Iterf Enumeration Value", size);
331 <        Enumeration en = ht.elements();
331 >        Enumeration en = ht.elements();
332          for (int i = 0; i < size; ++i) {
333              if (en.nextElement() != MISSING)
334                  ++sum;
335          }
336 <        timer.finish();
337 <        reallyAssert (sum == size);
336 >        timer.finish();
337 >        reallyAssert(sum == size);
338      }
339  
340      static void entest(Map<Integer,Integer> s, int size) {
341          if (s instanceof Hashtable) {
342 <            Hashtable ht = (Hashtable)s;
342 >            Hashtable ht = (Hashtable) s;
343              //            entest3(ht, size);
344              //            entest4(ht, size);
345              entest1(ht, size);
# Line 339 | Line 357 | public class IntMapCheck {
357              it.next();
358              it.remove();
359          }
360 <        timer.finish();
360 >        reallyAssert(s.isEmpty());
361 >        timer.finish();
362      }
363  
364 <    static void rvtest(Map<Integer,Integer> s, int size) {
365 <        timer.start("Remove (iterator)      ", size);
366 <        for (Iterator it = s.values().iterator(); it.hasNext(); ) {
367 <            it.next();
368 <            it.remove();
364 >    static void stest(Map<Integer,Integer> s, int size) throws Exception {
365 >        if (!(s instanceof Serializable))
366 >            return;
367 >        System.out.print("Serialize              : ");
368 >
369 >        for (int i = 0; i < size; i++) {
370 >            s.put(Integer.valueOf(i), Integer.valueOf(1));
371          }
372 <        timer.finish();
372 >
373 >        long startTime = System.nanoTime();
374 >
375 >        FileOutputStream fs = new FileOutputStream("IntMapCheck.dat");
376 >        ObjectOutputStream out = new ObjectOutputStream(new BufferedOutputStream(fs));
377 >        out.writeObject(s);
378 >        out.close();
379 >
380 >        FileInputStream is = new FileInputStream("IntMapCheck.dat");
381 >        ObjectInputStream in = new ObjectInputStream(new BufferedInputStream(is));
382 >        Map<Integer,Integer> m = (Map<Integer,Integer>)in.readObject();
383 >
384 >        long endTime = System.nanoTime();
385 >        long time = endTime - startTime;
386 >
387 >        System.out.print(time + "ms");
388 >
389 >        if (s instanceof IdentityHashMap) return;
390 >        reallyAssert(s.equals(m));
391      }
392  
393 +    static void test(Map<Integer,Integer> s, Integer[] key) {
394 +        int size = key.length;
395 +
396 +        t3("Put (absent)           ", size, s, key, size);
397 +        reallyAssert(s.size() == size);
398 +        t1("Get (present)          ", size, s, key, size, 8);
399 +        t1Boxed("Get boxed (present)    ", size, s, key, size);
400 +        ittest1(s, size);
401 +        t3("Put (present)          ", size, s, key, 0);
402 +        reallyAssert(s.size() == size);
403 +        t7("ContainsKey            ", size, s, key, absent);
404 +        t4("ContainsKey            ", size, s, key, size);
405 +        ktest(s, size, key);
406 +        t4("ContainsKey            ", absentSize, s, absent, 0);
407 +        t6("Get                    ", size, s, key, absent);
408 +        t1("Get (present)          ", size, s, key, size, 8);
409 +        t1("Get (absent)           ", absentSize, s, absent, 0, 1);
410 +        reallyAssert(s.size() == size);
411 +        t2("Remove (absent)        ", absentSize, s, absent, 0);
412 +        reallyAssert(s.size() == size);
413 +        t5("Remove (present)       ", size, s, key, size / 2);
414 +        reallyAssert(s.size() == size / 2);
415 +        t1("Get                    ", size, s, key, size / 2, 8);
416 +        ittest1(s, size / 2);
417 +        t3("Put (half present)     ", size, s, key, size / 2);
418 +        reallyAssert(s.size() == size);
419 +        t1("Get (present)          ", size, s, key, size, 4);
420 +
421 +        entest(s, size);
422 +        t9(s);
423 +        reallyAssert(s.size() == size);
424 +        timer.start("Clear                  ", size);
425 +        s.clear();
426 +        timer.finish();
427 +        t1("Get (absent)           ", size, s, key, 0, 1);
428 +        t4("ContainsKey            ", size, s, key, 0);
429 +        t2("Remove (absent)        ", size, s, key, 0);
430 +        t3("Put (presized)         ", size, s, key, size);
431 +        t1("Get (present)          ", size, s, key, size, 4);
432 +        reallyAssert(s.size() == size);
433 +        ittest(s, size);
434 +        rtest(s, size);
435 +        reallyAssert(s.size() == 0);
436 +        timer.start("Clear                  ", size);
437 +        s.clear();
438 +        timer.finish();
439 +        t3("Put (presized)         ", size, s, key, size);
440  
355    static void dtest(Map<Integer,Integer> s, int size, Integer[] key) {
441          timer.start("Put (putAll)           ", size * 2);
442          Map<Integer,Integer> s2 = null;
443          try {
# Line 360 | Line 445 | public class IntMapCheck {
445              s2.putAll(s);
446          }
447          catch (Exception e) { e.printStackTrace(); return; }
448 <        timer.finish();
449 <    
448 >        timer.finish();
449 >
450          timer.start("Iter Equals            ", size * 2);
451          boolean eqt = s2.equals(s) && s.equals(s2);
452 <        reallyAssert (eqt);
453 <        timer.finish();
452 >        reallyAssert(eqt);
453 >        timer.finish();
454  
455          timer.start("Iter HashCode          ", size * 2);
456          int shc = s.hashCode();
457          int s2hc = s2.hashCode();
458 <        reallyAssert (shc == s2hc);
459 <        timer.finish();
458 >        reallyAssert(shc == s2hc);
459 >        timer.finish();
460  
461 <        timer.start("Put (present)          ", size);
461 >        timer.start("Put (present)          ", size * 2);
462          s2.putAll(s);
463 <        timer.finish();
463 >        timer.finish();
464 >
465 >        timer.start("Put (present)          ", size);
466 >        int ipsum = 0;
467 >        for (Iterator i0 = s.entrySet().iterator(); i0.hasNext(); ) {
468 >            Map.Entry<Integer,Integer> me = (Map.Entry<Integer,Integer>)(i0.next());
469 >            if (s2.put(me.getKey(), me.getValue()) != null)
470 >                ++ipsum;
471 >        }
472 >        reallyAssert(ipsum == s.size());
473 >        timer.finish();
474  
475          timer.start("Iter EntrySet contains ", size * 2);
476          Set es2 = s2.entrySet();
# Line 384 | Line 479 | public class IntMapCheck {
479              Object entry = i1.next();
480              if (es2.contains(entry)) ++sum;
481          }
482 <        timer.finish();
483 <        reallyAssert (sum == size);
389 <
390 <        t6("Get                    ", size, s2, key, absent);
482 >        timer.finish();
483 >        reallyAssert(sum == size);
484  
485          Integer hold = s2.get(key[size-1]);
486          s2.put(key[size-1], absent[0]);
487          timer.start("Iter Equals            ", size * 2);
488          eqt = s2.equals(s) && s.equals(s2);
489 <        reallyAssert (!eqt);
490 <        timer.finish();
489 >        reallyAssert(!eqt);
490 >        timer.finish();
491  
492          timer.start("Iter HashCode          ", size * 2);
493          int s1h = s.hashCode();
494          int s2h = s2.hashCode();
495 <        reallyAssert (s1h != s2h);
496 <        timer.finish();
495 >        reallyAssert(s1h != s2h);
496 >        timer.finish();
497  
498          s2.put(key[size-1], hold);
499 <        timer.start("Remove (iterator)      ", size * 2);
499 >        timer.start("Remove (present)       ", size * 2);
500          Iterator s2i = s2.entrySet().iterator();
501          Set es = s.entrySet();
502          while (s2i.hasNext())
503              reallyAssert(es.remove(s2i.next()));
504 <        timer.finish();
504 >        timer.finish();
505  
506 <        if (!s.isEmpty()) System.out.println(s);
414 <        reallyAssert (s.isEmpty());
506 >        reallyAssert(s.isEmpty());
507  
508          timer.start("Clear                  ", size);
509          s2.clear();
510 <        timer.finish();
511 <        reallyAssert (s2.isEmpty() && s.isEmpty());
420 <    }
421 <
422 <    static void stest(Map<Integer,Integer> s, int size) throws Exception {
423 <        if (!(s instanceof Serializable))
424 <            return;
425 <        System.out.print("Serialize              : ");
426 <      
427 <        for (int i = 0; i < size; i++) {
428 <            s.put(new Integer(i), new Integer(1));
429 <        }
430 <
431 <        long startTime = System.nanoTime();
432 <
433 <        FileOutputStream fs = new FileOutputStream("IntMapCheck.dat");
434 <        ObjectOutputStream out = new ObjectOutputStream(new BufferedOutputStream(fs));
435 <        out.writeObject(s);
436 <        out.close();
437 <
438 <        FileInputStream is = new FileInputStream("IntMapCheck.dat");
439 <        ObjectInputStream in = new ObjectInputStream(new BufferedInputStream(is));
440 <        Map<Integer,Integer> m = (Map<Integer,Integer>)in.readObject();
441 <
442 <        long endTime = System.nanoTime();
443 <        long time = endTime - startTime;
444 <
445 <        System.out.print(time + "ms");
446 <
447 <        if (s instanceof IdentityHashMap) return;
448 <        reallyAssert (s.equals(m));
449 <    }
450 <
451 <    
452 <    static void test(Map<Integer,Integer> s, Integer[] key) {
453 <        int size = key.length;
454 <
455 <        t3("Put (absent)           ", size, s, key, size);
456 <        t3("Put (present)          ", size, s, key, 0);
457 <        t7("ContainsKey            ", size, s, key, absent);
458 <        t4("ContainsKey            ", size, s, key, size);
459 <        ktest(s, size, key);
460 <        t4("ContainsKey            ", absentSize, s, absent, 0);
461 <        t6("Get                    ", size, s, key, absent);
462 <        t1("Get (present)          ", size, s, key, size);
463 <        t1("Get (absent)           ", absentSize, s, absent, 0);
464 <        t2("Remove (absent)        ", absentSize, s, absent, 0);
465 <        t5("Remove (present)       ", size, s, key, size / 2);
466 <        t3("Put (half present)     ", size, s, key, size / 2);
467 <
468 <        ittest(s, size);
469 <        entest(s, size);
470 <        t9(s);
471 <        rtest(s, size);
472 <
473 <        t4("ContainsKey            ", size, s, key, 0);
474 <        t2("Remove (absent)        ", size, s, key, 0);
475 <        t3("Put (presized)         ", size, s, key, size);
476 <        dtest(s, size, key);
510 >        timer.finish();
511 >        reallyAssert(s2.isEmpty() && s.isEmpty());
512      }
513  
514      static class TestTimer {
# Line 483 | Line 518 | public class IntMapCheck {
518          private String cname;
519  
520          static final java.util.TreeMap accum = new java.util.TreeMap();
521 <    
521 >
522          static void printStats() {
523              for (Iterator it = accum.entrySet().iterator(); it.hasNext(); ) {
524                  Map.Entry e = (Map.Entry)(it.next());
525 <                Stats stats = ((Stats)(e.getValue()));
525 >                Stats stats = ((Stats) (e.getValue()));
526                  long n = stats.number;
527                  double t;
528 <                if (n > 0)
528 >                if (n > 0)
529                      t = stats.sum / n;
530                  else
531                      t = stats.least;
532 <                long nano = Math.round(1000000.0 * t);
532 >                long nano = Math.round(t);
533                  System.out.println(e.getKey() + ": " + nano);
534              }
535          }
536 <    
536 >
537          void start(String name, long numOps) {
538              this.name = name;
539              this.cname = classify();
540              this.numOps = numOps;
541              startTime = System.nanoTime();
542          }
508    
543  
544          String classify() {
545              if (name.startsWith("Get"))
# Line 516 | Line 550 | public class IntMapCheck {
550                  return "Remove                 ";
551              else if (name.startsWith("Iter"))
552                  return "Iter                   ";
553 <            else
553 >            else
554                  return null;
555          }
556  
557          void finish() {
558              long endTime = System.nanoTime();
559              long time = endTime - startTime;
560 <            double timePerOp = (((double)time)/numOps) / 1000000;
560 >            double timePerOp = ((double) time)/numOps;
561  
562              Object st = accum.get(name);
563              if (st == null)
# Line 558 | Line 592 | public class IntMapCheck {
592          Stats(double t) { least = t; }
593      }
594  
595 <    static Random rng = new Random();
595 >    static Random rng = new Random(3152688);
596  
597      static void shuffle(Integer[] keys) {
598          int size = keys.length;
599 <        for (int i=size; i>1; i--) {
599 >        for (int i = size; i > 1; i--) {
600              int r = rng.nextInt(i);
601              Integer t = keys[i-1];
602              keys[i-1] = keys[r];
# Line 571 | Line 605 | public class IntMapCheck {
605      }
606  
607   }
574

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines