test/compiler/intrinsics/mathexact/AddExactIRepeatTest.java
Index
Unified diffs
Context diffs
Sdiffs
Patch
New
Old
Previous File
Next File
hotspot Cdiff test/compiler/intrinsics/mathexact/AddExactIRepeatTest.java
test/compiler/intrinsics/mathexact/AddExactIRepeatTest.java
Print this page
rev 5462 : 8026844: Various Math functions needs intrinsification
Reviewed-by: duke
*** 23,107 ****
/*
* @test
* @bug 8025657
* @summary Test repeating addExact
! * @compile RepeatTest.java
! * @run main RepeatTest
*
*/
! import java.lang.ArithmeticException;
!
! public class RepeatTest {
public static void main(String[] args) {
java.util.Random rnd = new java.util.Random();
for (int i = 0; i < 50000; ++i) {
int x = Integer.MAX_VALUE - 10;
! int y = Integer.MAX_VALUE - 10 + rnd.nextInt(5); //rnd.nextInt() / 2;
int c = rnd.nextInt() / 2;
int d = rnd.nextInt() / 2;
! int a = addExact(x, y);
if (a != 36) {
! throw new RuntimeException("a != 0 : " + a);
}
! int b = nonExact(c, d);
! int n = addExact2(c, d);
if (n != b) {
throw new RuntimeException("n != b : " + n + " != " + b);
}
}
}
! public static int addExact2(int x, int y) {
int result = 0;
! result += java.lang.Math.addExact(x, y);
! result += java.lang.Math.addExact(x, y);
! result += java.lang.Math.addExact(x, y);
! result += java.lang.Math.addExact(x, y);
return result;
}
! public static int addExact(int x, int y) {
int result = 0;
try {
result += 5;
! result = java.lang.Math.addExact(x, y);
} catch (ArithmeticException e) {
result += 1;
}
try {
result += 6;
! result += java.lang.Math.addExact(x, y);
} catch (ArithmeticException e) {
result += 2;
}
try {
result += 7;
! result += java.lang.Math.addExact(x, y);
} catch (ArithmeticException e) {
result += 3;
}
try {
result += 8;
! result += java.lang.Math.addExact(x, y);
} catch (ArithmeticException e) {
result += 4;
}
return result;
}
-
- public static int nonExact(int x, int y) {
- int result = x + y;
- result += x + y;
- result += x + y;
- result += x + y;
- return result;
- }
}
--- 23,109 ----
/*
* @test
* @bug 8025657
* @summary Test repeating addExact
! * @compile AddExactIRepeatTest.java Verify.java
! * @run main AddExactIRepeatTest
*
*/
! public class AddExactIRepeatTest {
public static void main(String[] args) {
+ runTest(new Verify.AddExactI());
+ }
+
+ public static int nonExact(int x, int y, Verify.BinaryMethod method) {
+ int result = method.unchecked(x, y);
+ result += method.unchecked(x, y);
+ result += method.unchecked(x, y);
+ result += method.unchecked(x, y);
+ return result;
+ }
+
+ public static void runTest(Verify.BinaryMethod method) {
java.util.Random rnd = new java.util.Random();
for (int i = 0; i < 50000; ++i) {
int x = Integer.MAX_VALUE - 10;
! int y = Integer.MAX_VALUE - 10 + rnd.nextInt(5);
int c = rnd.nextInt() / 2;
int d = rnd.nextInt() / 2;
! int a = catchingExact(x, y, method);
if (a != 36) {
! throw new RuntimeException("a != 36 : " + a);
}
! int b = nonExact(c, d, method);
! int n = exact(c, d, method);
if (n != b) {
throw new RuntimeException("n != b : " + n + " != " + b);
}
}
}
! public static int exact(int x, int y, Verify.BinaryMethod method) {
int result = 0;
! result += method.checkMethod(x, y);
! result += method.checkMethod(x, y);
! result += method.checkMethod(x, y);
! result += method.checkMethod(x, y);
return result;
}
! public static int catchingExact(int x, int y, Verify.BinaryMethod method) {
int result = 0;
try {
result += 5;
! result = method.checkMethod(x, y);
} catch (ArithmeticException e) {
result += 1;
}
try {
result += 6;
! result += method.checkMethod(x, y);
} catch (ArithmeticException e) {
result += 2;
}
try {
result += 7;
! result += method.checkMethod(x, y);
} catch (ArithmeticException e) {
result += 3;
}
try {
result += 8;
! result += method.checkMethod(x, y);
} catch (ArithmeticException e) {
result += 4;
}
return result;
}
}
test/compiler/intrinsics/mathexact/AddExactIRepeatTest.java
Index
Unified diffs
Context diffs
Sdiffs
Patch
New
Old
Previous File
Next File