Home | History | Annotate | Download | only in src
      1 
      2 public class Main {
      3     static class SuperClass {
      4       protected static int getVar(int w) {
      5           return w & 0xF;
      6       }
      7     }
      8     static class SubClass extends SuperClass {
      9       final int getVarDirect(int w) {
     10         return w & 0xF;
     11       }
     12       public void testDirect(int max) {
     13         for (int i = 0; i < max; ++i) {
     14           getVarDirect(max);
     15         }
     16       }
     17       public void testStatic(int max) {
     18         for (int i = 0; i < max; ++i) {
     19           getVar(max);
     20         }
     21       }
     22     }
     23 
     24     static public void main(String[] args) throws Exception {
     25         boolean timing = (args.length >= 1) && args[0].equals("--timing");
     26         run(timing);
     27     }
     28 
     29     static int testBasis(int iterations) {
     30       (new SubClass()).testDirect(iterations);
     31       return iterations;
     32     }
     33 
     34     static int testStatic(int iterations) {
     35       (new SubClass()).testStatic(iterations);
     36       return iterations;
     37     }
     38 
     39     static public void run(boolean timing) {
     40         long time0 = System.nanoTime();
     41         int count1 = testBasis(50000000);
     42         long time1 = System.nanoTime();
     43         int count2 = testStatic(50000000);
     44         long time2 = System.nanoTime();
     45 
     46         System.out.println("basis: performed " + count1 + " iterations");
     47         System.out.println("test1: performed " + count2 + " iterations");
     48 
     49         double basisMsec = (time1 - time0) / (double) count1 / 1000000;
     50         double msec1 = (time2 - time1) / (double) count2 / 1000000;
     51 
     52         if (msec1 < basisMsec * 5) {
     53             System.out.println("Timing is acceptable.");
     54         } else {
     55             System.out.println("Iterations are taking too long!");
     56             timing = true;
     57         }
     58         if (timing) {
     59             System.out.printf("basis time: %.3g msec\n", basisMsec);
     60             System.out.printf("test1: %.3g msec per iteration\n", msec1);
     61         }
     62     }
     63 }
     64