< prev index next >

test/micro/org/openjdk/bench/java/math/BigIntegers.java

Print this page

        

@@ -43,18 +43,19 @@
 @BenchmarkMode(Mode.AverageTime)
 @OutputTimeUnit(TimeUnit.NANOSECONDS)
 @State(Scope.Thread)
 public class BigIntegers {
 
-    private BigInteger[] hugeArray, largeArray, smallArray;
+    private BigInteger[] hugeArray, largeArray, smallArray, shiftArray;
     public String[] dummyStringArray;
     public Object[] dummyArr;
     private static final int TESTSIZE = 1000;
 
     @Setup
     public void setup() {
         Random r = new Random(1123);
+        int numbits = r.nextInt(16384);
 
         hugeArray = new BigInteger[TESTSIZE]; /*
          * Huge numbers larger than
          * MAX_LONG
          */

@@ -65,10 +66,14 @@
          */
         smallArray = new BigInteger[TESTSIZE]; /*
          * Small number less than
          * MAX_INT
          */
+        shiftArray = new BigInteger[TESTSIZE]; /*
+         * Each array entry is atmost 16k bits
+         * in size
+         */
 
         dummyStringArray = new String[TESTSIZE];
         dummyArr = new Object[TESTSIZE];
 
         for (int i = 0; i < TESTSIZE; i++) {

@@ -76,10 +81,11 @@
 
             hugeArray[i] = new BigInteger("" + ((long) value + (long) Integer.MAX_VALUE)
                     + ((long) value + (long) Integer.MAX_VALUE));
             largeArray[i] = new BigInteger("" + ((long) value + (long) Integer.MAX_VALUE));
             smallArray[i] = new BigInteger("" + ((long) value / 1000));
+            shiftArray[i] = new BigInteger(numbits, r);
         }
     }
 
     /** Test BigInteger.toString() with huge numbers larger than MAX_LONG */
     @Benchmark

@@ -135,6 +141,40 @@
             }
             tmp = tmp.add(s);
         }
         bh.consume(tmp);
     }
+
+    /** Invokes the shiftLeft method of BigInteger with different values. */
+    @Benchmark
+    @OperationsPerInvocation(TESTSIZE)
+    public void testLeftShift(Blackhole bh) {
+        Random rand = new Random();
+        int shift = rand.nextInt(30) + 1;
+        BigInteger tmp = null;
+        for (BigInteger s : shiftArray) {
+            if (tmp == null) {
+                tmp = s;
+                continue;
+            }
+            tmp = tmp.shiftLeft(shift);
+        }
+        bh.consume(tmp);
+    }
+
+    /** Invokes the shiftRight method of BigInteger with different values. */
+    @Benchmark
+    @OperationsPerInvocation(TESTSIZE)
+    public void testRightShift(Blackhole bh) {
+        Random rand = new Random();
+        int shift = rand.nextInt(30) + 1;
+        BigInteger tmp = null;
+        for (BigInteger s : shiftArray) {
+            if (tmp == null) {
+                tmp = s;
+                continue;
+            }
+            tmp = tmp.shiftRight(shift);
+        }
+        bh.consume(tmp);
+    }
 }
< prev index next >