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