< prev index next >

test/jdk/java/lang/StrictMath/ExactArithTests.java

Print this page

        

*** 1,7 **** /* ! * Copyright (c) 2012, 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. --- 1,7 ---- /* ! * 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,64 **** errors++; System.err.println(message); } /** ! * Test StrictMath.addExact, multiplyExact, subtractExact, toIntValue methods ! * with {@code int} arguments. */ static void testIntegerExact() { testIntegerExact(0, 0); testIntegerExact(1, 1); testIntegerExact(1, -1); --- 53,64 ---- errors++; System.err.println(message); } /** ! * 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,83 **** 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. --- 73,82 ----
*** 98,108 **** } } 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 --- 97,106 ----
*** 131,145 **** if ((int) m2 == m2) { fail("FAIL: int StrictMath.multiplyExact(" + x + " * " + y + ")" + "; Unexpected exception: " + ex); } } } /** ! * Test StrictMath.addExact, multiplyExact, subtractExact, toIntExact methods ! * with {@code long} arguments. */ static void testLongExact() { testLongExactTwice(0, 0); testLongExactTwice(1, 1); testLongExactTwice(1, -1); --- 129,190 ---- 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, incrementExact, ! * decrementExact, negateExact, toIntExact methods with {@code long} arguments. */ static void testLongExact() { testLongExactTwice(0, 0); testLongExactTwice(1, 1); testLongExactTwice(1, -1);
*** 162,172 **** 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. --- 207,216 ----
*** 223,243 **** fail("FAIL: long StrictMath.multiplyExact(" + x + " * " + y + ")" + "; 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 --- 267,319 ---- 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 >