[jdk17u-dev] RFR: 8315024: Vector API FP reduction tests should not test for exact equality
Amos Shi
ashi at openjdk.org
Thu Aug 1 17:16:13 UTC 2024
Backport of [JDK-8315024](https://bugs.openjdk.org/browse/JDK-8315024)
- This PR has two commits
- `commit 1`: the git apply result, which is `clean`
- `commit 2`: manually merge the following two `.rej` files
- `test/jdk/jdk/incubator/vector/DoubleMaxVectorTests.java.rej`
- `test/jdk/jdk/incubator/vector/FloatMaxVectorTests.java.rej`
Content of `test/jdk/jdk/incubator/vector/DoubleMaxVectorTests.java.rej`
@@ -668,15 +670,21 @@
static void assertReductionArraysEquals(double[] r, double rc, double[] a,
FReductionOp f, FReductionAllOp fa) {
+ assertReductionArraysEquals(r, rc, a, f, fa, (double)0.0);
+ }
+
+ static void assertReductionArraysEquals(double[] r, double rc, double[] a,
+ FReductionOp f, FReductionAllOp fa,
+ double relativeError) {
int i = 0;
try {
- Assert.assertEquals(rc, fa.apply(a));
+ Assert.assertEquals(rc, fa.apply(a), Math.abs(rc * relativeError));
for (; i < a.length; i += SPECIES.length()) {
- Assert.assertEquals(r[i], f.apply(a, i));
+ Assert.assertEquals(r[i], f.apply(a, i), Math.abs(r[i] * relativeError));
}
} catch (AssertionError e) {
- Assert.assertEquals(rc, fa.apply(a), "Final result is incorrect!");
- Assert.assertEquals(r[i], f.apply(a, i), "at index #" + i);
+ Assert.assertEquals(rc, fa.apply(a), Math.abs(rc * relativeError), "Final result is incorrect!");
+ Assert.assertEquals(r[i], f.apply(a, i), Math.abs(r[i] * relativeError), "at index #" + i);
}
}
@@ -690,15 +698,22 @@
static void assertReductionArraysEqualsMasked(double[] r, double rc, double[] a, boolean[] mask,
FReductionMaskedOp f, FReductionAllMaskedOp fa) {
+ assertReductionArraysEqualsMasked(r, rc, a, mask, f, fa, (double)0.0);
+ }
+
+ static void assertReductionArraysEqualsMasked(double[] r, double rc, double[] a, boolean[] mask,
+ FReductionMaskedOp f, FReductionAllMaskedOp fa,
+ double relativeError) {
int i = 0;
try {
- Assert.assertEquals(rc, fa.apply(a, mask));
+ Assert.assertEquals(rc, fa.apply(a, mask), Math.abs(rc * relativeError));
for (; i < a.length; i += SPECIES.length()) {
- Assert.assertEquals(r[i], f.apply(a, i, mask));
+ Assert.assertEquals(r[i], f.apply(a, i, mask), Math.abs(r[i] *
+relativeError));
}
} catch (AssertionError e) {
- Assert.assertEquals(rc, fa.apply(a, mask), "Final result is incorrect!");
- Assert.assertEquals(r[i], f.apply(a, i, mask), "at index #" + i);
+ Assert.assertEquals(rc, fa.apply(a, mask), Math.abs(rc * relativeError), "Final result is incorrect!");
+ Assert.assertEquals(r[i], f.apply(a, i, mask), Math.abs(r[i] * relativeError), "at index #" + i);
}
}
Content of `test/jdk/jdk/incubator/vector/FloatMaxVectorTests.java.rej`
@@ -668,15 +670,21 @@
static void assertReductionArraysEquals(float[] r, float rc, float[] a,
FReductionOp f, FReductionAllOp fa) {
+ assertReductionArraysEquals(r, rc, a, f, fa, (float)0.0);
+ }
+
+ static void assertReductionArraysEquals(float[] r, float rc, float[] a,
+ FReductionOp f, FReductionAllOp fa,
+ float relativeError) {
int i = 0;
try {
- Assert.assertEquals(rc, fa.apply(a));
+ Assert.assertEquals(rc, fa.apply(a), Math.abs(rc * relativeError));
for (; i < a.length; i += SPECIES.length()) {
- Assert.assertEquals(r[i], f.apply(a, i));
+ Assert.assertEquals(r[i], f.apply(a, i), Math.abs(r[i] * relativeError));
}
} catch (AssertionError e) {
- Assert.assertEquals(rc, fa.apply(a), "Final result is incorrect!");
- Assert.assertEquals(r[i], f.apply(a, i), "at index #" + i);
+ Assert.assertEquals(rc, fa.apply(a), Math.abs(rc * relativeError), "Final result is incorrect!");
+ Assert.assertEquals(r[i], f.apply(a, i), Math.abs(r[i] * relativeError), "at index #" + i);
}
}
@@ -690,15 +698,22 @@
static void assertReductionArraysEqualsMasked(float[] r, float rc, float[] a, boolean[] mask,
FReductionMaskedOp f, FReductionAllMaskedOp fa) {
+ assertReductionArraysEqualsMasked(r, rc, a, mask, f, fa, (float)0.0);
+ }
+
+ static void assertReductionArraysEqualsMasked(float[] r, float rc, float[] a, boolean[] mask,
+ FReductionMaskedOp f, FReductionAllMaskedOp fa,
+ float relativeError) {
int i = 0;
try {
- Assert.assertEquals(rc, fa.apply(a, mask));
+ Assert.assertEquals(rc, fa.apply(a, mask), Math.abs(rc * relativeError));
for (; i < a.length; i += SPECIES.length()) {
- Assert.assertEquals(r[i], f.apply(a, i, mask));
+ Assert.assertEquals(r[i], f.apply(a, i, mask), Math.abs(r[i] *
+relativeError));
}
} catch (AssertionError e) {
- Assert.assertEquals(rc, fa.apply(a, mask), "Final result is incorrect!");
- Assert.assertEquals(r[i], f.apply(a, i, mask), "at index #" + i);
+ Assert.assertEquals(rc, fa.apply(a, mask), Math.abs(rc * relativeError), "Final result is incorrect!");
+ Assert.assertEquals(r[i], f.apply(a, i, mask), Math.abs(r[i] * relativeError), "at index #" + i);
}
}
Testing
- Local: Test passed on `MacOS 14.5` with `Apple M1 Max`
- `Double128VectorTests.java`: Test results: passed: 1
- `Double256VectorTests.java`: Test results: passed: 1
- `Double512VectorTests.java`: Test results: passed: 1
- `Double64VectorTests.java`: Test results: passed: 1
- `DoubleMaxVectorTests.java`: Test results: passed: 1
- `Float128VectorTests.java`: Test results: passed: 1
- `Float256VectorTests.java`: Test results: passed: 1
- `Float512VectorTests.java`: Test results: passed: 1
- `Float64VectorTests.java`: Test results: passed: 1
- `FloatMaxVectorTests.java`: Test results: passed: 1
- Pipeline:
- Testing Machine:
-------------
Commit messages:
- Backport e6f23a90d4a53339a3c9c2b76fc5d317940e4472 Manual Merge
- Backport e6f23a90d4a53339a3c9c2b76fc5d317940e4472
Changes: https://git.openjdk.org/jdk17u-dev/pull/2768/files
Webrev: https://webrevs.openjdk.org/?repo=jdk17u-dev&pr=2768&range=00
Issue: https://bugs.openjdk.org/browse/JDK-8315024
Stats: 358 lines in 12 files changed: 238 ins; 0 del; 120 mod
Patch: https://git.openjdk.org/jdk17u-dev/pull/2768.diff
Fetch: git fetch https://git.openjdk.org/jdk17u-dev.git pull/2768/head:pull/2768
PR: https://git.openjdk.org/jdk17u-dev/pull/2768
More information about the jdk-updates-dev
mailing list