[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