test/java/lang/Math/ExactArithTests.java

Print this page
rev 7819 : 8022109: Evaluate adding incrementExact, decrementExact, negateExact to java.lang.Math
Summary: Add the methods for parameter types int and long.
Reviewed-by: TBD
Contributed-by: Brian Burkhalter <brian.burkhalter@oracle.com>

*** 130,141 **** --- 130,190 ---- long m2 = (long) x * (long) y; if ((int) m2 == m2) { fail("FAIL: int Math.multiplyExact(" + x + " * " + y + ")" + "; Unexpected exception: " + ex); } } + try { + // Test incrementExact + int inc = Math.incrementExact(x); + long inc2 = (long) x + 1L; + if ((int) inc2 != inc2) { + fail("FAIL: int Math.incrementExact(" + x + ") = " + inc + "; expected Arithmetic exception"); + } else if (inc != inc2) { + fail("FAIL: long Math.incrementExact(" + x + ") = " + inc + "; expected: " + inc2); + } + } catch (ArithmeticException ex) { + long inc2 = (long) x + 1L; + if ((int) inc2 == inc2) { + fail("FAIL: int Math.incrementExact(" + x + ")" + "; Unexpected exception: " + ex); + + } + } + + try { + // Test decrementExact + int dec = Math.decrementExact(x); + long dec2 = (long) x - 1L; + if ((int) dec2 != dec2) { + fail("FAIL: int Math.decrementExact(" + x + ") = " + dec + "; expected Arithmetic exception"); + } else if (dec != dec2) { + fail("FAIL: long Math.decrementExact(" + x + ") = " + dec + "; expected: " + dec2); + } + } catch (ArithmeticException ex) { + long dec2 = (long) x - 1L; + if ((int) dec2 == dec2) { + fail("FAIL: int Math.decrementExact(" + x + ")" + "; Unexpected exception: " + ex); } + } + + try { + // Test negateExact + int neg = Math.negateExact(x); + long neg2 = -((long)x) ; + if ((int) neg2 != neg2) { + fail("FAIL: int Math.negateExact(" + x + ") = " + neg + "; expected Arithmetic exception"); + } else if (neg != neg2) { + fail("FAIL: long Math.negateExact(" + x + ") = " + neg + "; expected: " + neg2); + } + } catch (ArithmeticException ex) { + long neg2 = (long) x - 1L; + if ((int) neg2 == neg2) { + fail("FAIL: int Math.negateExact(" + x + ")" + "; Unexpected exception: " + ex); + + } + } + } /** * Test Math.addExact, multiplyExact, subtractExact, toIntExact methods * with {@code long} arguments. */
*** 223,232 **** --- 272,314 ---- fail("FAIL: long Math.multiplyExact(" + x + " * " + y + ")" + "; Unexpected exception: " + ex); } } try { + // Test incrementExact + resultBig = xBig.add(BigInteger.ONE); + long inc = Math.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 = Math.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 = Math.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 = Math.toIntExact(x); if ((long)value != x) { fail("FAIL: " + "long Math.toIntExact" + "(" + x + ") = " + value + "; expected an arithmetic exception: "); }