blob: 43f45f1a8b41cdf6da28e04908a925130803c369 [file] [log] [blame]
jeffhao5d1ac922011-09-29 17:41:15 -07001import otherpackage.OtherPackagePublicEnum;
2
3public class Main {
4 /** used by {@link #basisCall} */
5 static private int basisTestValue = 12;
6
7 static public void main(String[] args) throws Exception {
8 boolean timing = (args.length >= 1) && args[0].equals("--timing");
9 run(timing);
10 }
11
12 static public void run(boolean timing) {
13 preTest();
14
15 long time0 = System.nanoTime();
16 int count1 = test1(500);
17 long time1 = System.nanoTime();
18 int count2 = test2(500);
19 long time2 = System.nanoTime();
20 int count3 = test3(500);
21 long time3 = System.nanoTime();
22 int count4 = basis(500);
23 long time4 = System.nanoTime();
24
25 System.out.println("basis: performed " + count4 + " iterations");
26 System.out.println("test1: performed " + count1 + " iterations");
27 System.out.println("test2: performed " + count2 + " iterations");
28 System.out.println("test3: performed " + count3 + " iterations");
29
30 double msec1 = (time1 - time0) / (double) count1 / 1000000;
31 double msec2 = (time2 - time1) / (double) count2 / 1000000;
32 double msec3 = (time3 - time2) / (double) count3 / 1000000;
33 double basisMsec = (time4 - time3) / (double) count4 / 1000000;
34
35 double avg = (msec1 + msec2 + msec3) / 3;
36 if (avg < (basisMsec * 10)) {
37 System.out.println("Timing is acceptable.");
38 } else {
39 System.out.println("Iterations are taking too long!");
40 timing = true;
41 }
42
43 if (timing) {
44 System.out.printf("basis time: %.3g msec\n", basisMsec);
45 System.out.printf("test1: %.3g msec per iteration\n", msec1);
46 System.out.printf("test2: %.3g msec per iteration\n", msec2);
47 System.out.printf("test3: %.3g msec per iteration\n", msec3);
48 }
49
50 }
51
52 static public void preTest() {
53 /*
54 * This is meant to ensure that the basic enum functionality
55 * really is working.
56 */
57
58 Class<SamePackagePublicEnum> c = SamePackagePublicEnum.class;
59
60 System.out.println(Enum.valueOf(c, "FOUR"));
61 System.out.println(Enum.valueOf(c, "ONE"));
62 System.out.println(Enum.valueOf(c, "FOURTEEN"));
63 System.out.println(Enum.valueOf(c, "NINE"));
64 System.out.println(Enum.valueOf(c, "FIVE"));
65 System.out.println(Enum.valueOf(c, "TWELVE"));
66
67 System.out.println(Enum.valueOf(c, "ZERO").getClass().getName());
68 }
69
70 static final String[] BASIS_COMPARE_ARRAY = {
71 "ZERO", "ONE", "TWO", "THREE", "FOUR", "FIVE", "SIX", "SEVEN", "EIGHT",
72 "NINE", "TEN", "ELEVEN", "TWELVE", "THIRTEEN", "FOURTEEN", "FIFTEEN",
73 "SIXTEEN", "SEVENTEEN", "EIGHTEEN", "NINETEEN"
74 };
75
76 static public int basis(int iters) {
77 for (int i = iters; i > 0; i--) {
78 basisValueOf("ZERO");
79 basisValueOf("ONE");
80 basisValueOf("TWO");
81 basisValueOf("THREE");
82 basisValueOf("FOUR");
83 basisValueOf("FIVE");
84 basisValueOf("SIX");
85 basisValueOf("SEVEN");
86 basisValueOf("EIGHT");
87 basisValueOf("NINE");
88 basisValueOf("TEN");
89 basisValueOf("ELEVEN");
90 basisValueOf("TWELVE");
91 basisValueOf("THIRTEEN");
92 basisValueOf("FOURTEEN");
93 basisValueOf("FIFTEEN");
94 basisValueOf("SIXTEEN");
95 basisValueOf("SEVENTEEN");
96 basisValueOf("EIGHTEEN");
97 basisValueOf("NINETEEN");
98 }
99
100 return iters * 20;
101 }
102
103 static String basisValueOf(String key) {
104 for (String s : BASIS_COMPARE_ARRAY) {
105 if (s.equals(key)) {
106 return s;
107 }
108 }
109 throw new IllegalArgumentException();
110 }
111
112 static public int test1(int iters) {
113 Class<SamePackagePublicEnum> c = SamePackagePublicEnum.class;
114 for (int i = iters; i > 0; i--) {
115 Enum.valueOf(c, "ZERO");
116 Enum.valueOf(c, "ONE");
117 Enum.valueOf(c, "TWO");
118 Enum.valueOf(c, "THREE");
119 Enum.valueOf(c, "FOUR");
120 Enum.valueOf(c, "FIVE");
121 Enum.valueOf(c, "SIX");
122 Enum.valueOf(c, "SEVEN");
123 Enum.valueOf(c, "EIGHT");
124 Enum.valueOf(c, "NINE");
125 Enum.valueOf(c, "TEN");
126 Enum.valueOf(c, "ELEVEN");
127 Enum.valueOf(c, "TWELVE");
128 Enum.valueOf(c, "THIRTEEN");
129 Enum.valueOf(c, "FOURTEEN");
130 Enum.valueOf(c, "FIFTEEN");
131 Enum.valueOf(c, "SIXTEEN");
132 Enum.valueOf(c, "SEVENTEEN");
133 Enum.valueOf(c, "EIGHTEEN");
134 Enum.valueOf(c, "NINETEEN");
135 }
136
137 return iters * 20;
138 }
139
140 static public int test2(int iters) {
141 Class<SamePackagePrivateEnum> c = SamePackagePrivateEnum.class;
142 for (int i = iters; i > 0; i--) {
143 Enum.valueOf(c, "ZERO");
144 Enum.valueOf(c, "ONE");
145 Enum.valueOf(c, "TWO");
146 Enum.valueOf(c, "THREE");
147 Enum.valueOf(c, "FOUR");
148 Enum.valueOf(c, "FIVE");
149 Enum.valueOf(c, "SIX");
150 Enum.valueOf(c, "SEVEN");
151 Enum.valueOf(c, "EIGHT");
152 Enum.valueOf(c, "NINE");
153 Enum.valueOf(c, "TEN");
154 Enum.valueOf(c, "ELEVEN");
155 Enum.valueOf(c, "TWELVE");
156 Enum.valueOf(c, "THIRTEEN");
157 Enum.valueOf(c, "FOURTEEN");
158 Enum.valueOf(c, "FIFTEEN");
159 Enum.valueOf(c, "SIXTEEN");
160 Enum.valueOf(c, "SEVENTEEN");
161 Enum.valueOf(c, "EIGHTEEN");
162 Enum.valueOf(c, "NINETEEN");
163 }
164
165 return iters * 20;
166 }
167
168 static public int test3(int iters) {
169 Class<OtherPackagePublicEnum> c = OtherPackagePublicEnum.class;
170 for (int i = iters; i > 0; i--) {
171 Enum.valueOf(c, "ZERO");
172 Enum.valueOf(c, "ONE");
173 Enum.valueOf(c, "TWO");
174 Enum.valueOf(c, "THREE");
175 Enum.valueOf(c, "FOUR");
176 Enum.valueOf(c, "FIVE");
177 Enum.valueOf(c, "SIX");
178 Enum.valueOf(c, "SEVEN");
179 Enum.valueOf(c, "EIGHT");
180 Enum.valueOf(c, "NINE");
181 Enum.valueOf(c, "TEN");
182 Enum.valueOf(c, "ELEVEN");
183 Enum.valueOf(c, "TWELVE");
184 Enum.valueOf(c, "THIRTEEN");
185 Enum.valueOf(c, "FOURTEEN");
186 Enum.valueOf(c, "FIFTEEN");
187 Enum.valueOf(c, "SIXTEEN");
188 Enum.valueOf(c, "SEVENTEEN");
189 Enum.valueOf(c, "EIGHTEEN");
190 Enum.valueOf(c, "NINETEEN");
191 }
192
193 return iters * 20;
194 }
195}