< 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,13 @@
*/
smallArray = new BigInteger[TESTSIZE]; /*
* Small number less than
* MAX_INT
*/
+ shiftArray = new BigInteger[TESTSIZE]; /*
+ * Each array entry size is max 16k bits
+ */
dummyStringArray = new String[TESTSIZE];
dummyArr = new Object[TESTSIZE];
for (int i = 0; i < TESTSIZE; i++) {
@@ -76,10 +80,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 +140,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 >