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

Comparing jsr166/src/test/loops/CollectionWordLoops.java (file contents):
Revision 1.1 by dl, Tue May 31 15:08:32 2005 UTC vs.
Revision 1.11 by jsr166, Mon Aug 10 03:13:33 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/licenses/publicdomain
4 > * http://creativecommons.org/publicdomain/zero/1.0/
5   */
6 import java.util.*;
6   import java.io.*;
7 + import java.util.*;
8  
9   public class CollectionWordLoops {
10  
11      static final String[] WORDS_FILES = {
12 <        "kw.txt",
12 >        "kw.txt",
13          "class.txt",
14 <        "dir.txt",
15 <        "ids.txt",
16 <        "/usr/dict/words",
14 >        //        "dir.txt",
15 >        //        "ids.txt",
16 >        //        "/usr/dict/words",
17      };
18  
19      static final int MAX_WORDS = 500000;
# Line 23 | Line 23 | public class CollectionWordLoops {
23      static final int numTests  = 2;
24  
25      public static void main(String[] args) {
26 <        Class collectionClass = null;
26 >        Class<?> collectionClass = null;
27          try {
28              collectionClass = Class.forName(args[0]);
29 <        } catch(ClassNotFoundException e) {
29 >        } catch (ClassNotFoundException e) {
30              throw new RuntimeException("Class " + args[0] + " not found.");
31          }
32  
33          System.out.println("Testing " + collectionClass.getName());
34  
35 <        for (int s = 0; s < WORDS_FILES.length; ++s)
35 >        for (int s = 0; s < WORDS_FILES.length; ++s)
36              tests(collectionClass, numTests, s);
37  
38 <        for (int s = WORDS_FILES.length-1; s >= 0; --s)
38 >        for (int s = WORDS_FILES.length-1; s >= 0; --s)
39              tests(collectionClass, numTests, s);
40
40      }
41  
42 <    static void tests(Class collectionClass, int numTests, int sizeIndex) {
43 <        try {
42 >    static void tests(Class<?> collectionClass, int numTests, int sizeIndex) {
43 >        try {
44              String[] key = readWords(sizeIndex);
45              int size = key.length;
46 <            
46 >
47              System.out.print("n = " +LoopHelpers.rightJustify(size) +" : ");
48              long least = Long.MAX_VALUE;
49 <            
49 >
50              for (int i = 0; i < numTests; ++i) {
51                  Collection<String> m = newCollection(collectionClass);
52                  long t = doTest(collectionClass.getName(), m, key);
# Line 55 | Line 54 | public class CollectionWordLoops {
54                  m.clear();
55                  m = null;
56              }
57 <            
57 >
58              long nano = Math.round(1000000.0 * (least) / NOPS);
59              System.out.println(LoopHelpers.rightJustify(nano) + " ns per op");
60          } catch (IOException ignore) {
# Line 63 | Line 62 | public class CollectionWordLoops {
62          }
63      }
64  
65 <
67 <    static Collection<String> newCollection(Class cl) {
65 >    static Collection<String> newCollection(Class<?> cl) {
66          try {
67 <            Collection m = (Collection<String>)cl.newInstance();
67 >            Collection m = (Collection<String>) cl.newInstance();
68              return m;
69 <        } catch(Exception e) {
69 >        } catch (Exception e) {
70              throw new RuntimeException("Can't instantiate " + cl + ": " + e);
71          }
72      }
73  
74      static void pause() {
75 <        try { Thread.sleep(100); } catch(InterruptedException ie) { return; }
75 >        try { Thread.sleep(100); }
76 >        catch (InterruptedException ie) { return; }
77      }
78  
79      static String[] readWords(int sizeIndex) throws IOException {
# Line 105 | Line 104 | public class CollectionWordLoops {
104      }
105  
106      static long doTest(String name,
107 <                       final Collection<String> m,
107 >                       final Collection<String> m,
108                         final String[] key) {
109  
110          //    System.out.print(name + "\t");
# Line 113 | Line 112 | public class CollectionWordLoops {
112          long startTime = System.currentTimeMillis();
113          runner.run();
114          long afterRun = System.currentTimeMillis();
115 <        long runTime =  (afterRun - startTime);
115 >        long runTime = afterRun - startTime;
116          int np = runner.total;
117 <        if (runner.total == runner.hashCode())
117 >        if (runner.total == runner.hashCode())
118              System.out.println("Useless Number" + runner.total);
119          int sz = runner.maxsz;
120 <        if (sz == runner.hashCode())
120 >        if (sz == runner.hashCode())
121              System.out.println("Useless Number" + sz);
122          //        System.out.print(" m = " + sz);
123          return runTime;
124      }
125  
127
126      static class Runner implements Runnable {
127          final Collection<String> collection;
128          final String[] key;
# Line 139 | Line 137 | public class CollectionWordLoops {
137          int maxsz;
138  
139          Runner(Collection<String> m, String[] k) {
140 <            collection = m; key = k;
140 >            collection = m; key = k;
141              pctrem = (int)(((long)premove * (long)(Integer.MAX_VALUE/2)) / 50);
142              pctins = (int)(((long)pinsert * (long)(Integer.MAX_VALUE/2)) / 50);
143          }
144  
147
145          int oneStep(int j) {
146              int n = key.length;
147              int r = rng.next() & 0x7FFFFFFF;
148              int jinc = (r & 7);
149              j += jinc - 3;
150 <            if (j >= n) j -= n;  
150 >            if (j >= n) j -= n;
151              if (j < 0) j += n;
152  
153              int l = n / 4 + j;
154 <            if (l >= n) l -= n;  
155 <      
154 >            if (l >= n) l -= n;
155 >
156              String k = key[j];
157 <      
157 >
158              if (!collection.contains(k)) {
159                  ++nagets;
160                  if (r < pctins) {
# Line 172 | Line 169 | public class CollectionWordLoops {
169                  if (r < pctrem) {
170                      collection.remove(k);
171                      ++nremoves;
172 <                    j += ((r >>> 8) & 7) +  n / 2;
172 >                    j += ((r >>> 8) & 7) + n / 2;
173                      if (j >= n) j -= n;
174                  }
175              }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines