< prev index next >
test/jdk/java/lang/StrictMath/ExactArithTests.java
Print this page
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2019, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
@@ -53,12 +53,12 @@
errors++;
System.err.println(message);
}
/**
- * Test StrictMath.addExact, multiplyExact, subtractExact, toIntValue methods
- * with {@code int} arguments.
+ * Test StrictMath.addExact, multiplyExact, subtractExact, incrementExact,
+ * decrementExact, negateExact methods with {@code int} arguments.
*/
static void testIntegerExact() {
testIntegerExact(0, 0);
testIntegerExact(1, 1);
testIntegerExact(1, -1);
@@ -73,11 +73,10 @@
testIntegerExact(Integer.MAX_VALUE, 2);
testIntegerExact(Integer.MIN_VALUE, -1);
testIntegerExact(Integer.MAX_VALUE, -1);
testIntegerExact(Integer.MIN_VALUE, -2);
testIntegerExact(Integer.MAX_VALUE, -2);
-
}
/**
* Test exact arithmetic by comparing with the same operations using long
* and checking that the result is the same as the integer truncation.
@@ -98,11 +97,10 @@
}
} catch (ArithmeticException ex) {
long sum2 = (long) x + (long) y;
if ((int) sum2 == sum2) {
fail("FAIL: int StrictMath.addExact(" + x + " + " + y + ")" + "; Unexpected exception: " + ex);
-
}
}
try {
// Test subtractExact
@@ -131,15 +129,62 @@
if ((int) m2 == m2) {
fail("FAIL: int StrictMath.multiplyExact(" + x + " * " + y + ")" + "; Unexpected exception: " + ex);
}
}
+ try {
+ // Test incrementExact
+ int inc = StrictMath.incrementExact(x);
+ long inc2 = (long) x + 1L;
+ if ((int) inc2 != inc2) {
+ fail("FAIL: int StrictMath.incrementExact(" + x + ") = " + inc + "; expected Arithmetic exception");
+ } else if (inc != inc2) {
+ fail("FAIL: long StrictMath.incrementExact(" + x + ") = " + inc + "; expected: " + inc2);
+ }
+ } catch (ArithmeticException ex) {
+ long inc2 = (long) x + 1L;
+ if ((int) inc2 == inc2) {
+ fail("FAIL: int StrictMath.incrementExact(" + x + ")" + "; Unexpected exception: " + ex);
+ }
+ }
+
+ try {
+ // Test decrementExact
+ int dec = StrictMath.decrementExact(x);
+ long dec2 = (long) x - 1L;
+ if ((int) dec2 != dec2) {
+ fail("FAIL: int StrictMath.decrementExact(" + x + ") = " + dec + "; expected Arithmetic exception");
+ } else if (dec != dec2) {
+ fail("FAIL: long StrictMath.decrementExact(" + x + ") = " + dec + "; expected: " + dec2);
+ }
+ } catch (ArithmeticException ex) {
+ long dec2 = (long) x - 1L;
+ if ((int) dec2 == dec2) {
+ fail("FAIL: int StrictMath.decrementExact(" + x + ")" + "; Unexpected exception: " + ex);
+ }
+ }
+
+ try {
+ // Test negateExact
+ int neg = StrictMath.negateExact(x);
+ long neg2 = -((long)x) ;
+ if ((int) neg2 != neg2) {
+ fail("FAIL: int StrictMath.negateExact(" + x + ") = " + neg + "; expected Arithmetic exception");
+ } else if (neg != neg2) {
+ fail("FAIL: long StrictMath.negateExact(" + x + ") = " + neg + "; expected: " + neg2);
+ }
+ } catch (ArithmeticException ex) {
+ long neg2 = (long) x - 1L;
+ if ((int) neg2 == neg2) {
+ fail("FAIL: int StrictMath.negateExact(" + x + ")" + "; Unexpected exception: " + ex);
+ }
+ }
}
/**
- * Test StrictMath.addExact, multiplyExact, subtractExact, toIntExact methods
- * with {@code long} arguments.
+ * Test StrictMath.addExact, multiplyExact, subtractExact, incrementExact,
+ * decrementExact, negateExact, toIntExact methods with {@code long} arguments.
*/
static void testLongExact() {
testLongExactTwice(0, 0);
testLongExactTwice(1, 1);
testLongExactTwice(1, -1);
@@ -162,11 +207,10 @@
testLongExactTwice(Integer.MAX_VALUE+1, Integer.MAX_VALUE+1);
testLongExactTwice(Integer.MAX_VALUE+1, -Integer.MAX_VALUE+1);
testLongExactTwice(Integer.MIN_VALUE-1, Integer.MIN_VALUE-1);
testLongExactTwice(Integer.MIN_VALUE-1, -Integer.MIN_VALUE-1);
testLongExactTwice(Integer.MIN_VALUE/2, 2);
-
}
/**
* Test each of the exact operations with the arguments and
* with the arguments reversed.
@@ -223,21 +267,53 @@
fail("FAIL: long StrictMath.multiplyExact(" + x + " * " + y + ")" + "; Unexpected exception: " + ex);
}
}
try {
+ // Test incrementExact
+ resultBig = xBig.add(BigInteger.ONE);
+ long inc = StrictMath.incrementExact(x);
+ checkResult("long Math.incrementExact", x, 1L, inc, resultBig);
+ } catch (ArithmeticException ex) {
+ if (inLongRange(resultBig)) {
+ fail("FAIL: long Math.incrementExact(" + x + "); Unexpected exception: " + ex);
+ }
+ }
+
+ try {
+ // Test decrementExact
+ resultBig = xBig.subtract(BigInteger.ONE);
+ long dec = StrictMath.decrementExact(x);
+ checkResult("long Math.decrementExact", x, 1L, dec, resultBig);
+ } catch (ArithmeticException ex) {
+ if (inLongRange(resultBig)) {
+ fail("FAIL: long Math.decrementExact(" + x + "); Unexpected exception: " + ex);
+ }
+ }
+
+ try {
+ // Test negateExact
+ resultBig = xBig.negate();
+ long dec = StrictMath.negateExact(x);
+ checkResult("long Math.negateExact", x, 0L, dec, resultBig);
+ } catch (ArithmeticException ex) {
+ if (inLongRange(resultBig)) {
+ fail("FAIL: long Math.negateExact(" + x + "); Unexpected exception: " + ex);
+ }
+ }
+
+ try {
// Test toIntExact
int value = StrictMath.toIntExact(x);
if ((long)value != x) {
fail("FAIL: " + "long StrictMath.toIntExact" + "(" + x + ") = " + value + "; expected an arithmetic exception: ");
}
} catch (ArithmeticException ex) {
if (resultBig.bitLength() <= 32) {
fail("FAIL: long StrictMath.toIntExact(" + x + ")" + "; Unexpected exception: " + ex);
}
}
-
}
/**
* Compare the expected and actual results.
* @param message message for the error
< prev index next >