This is a review request to add better test failure output to 
jdk/test/java/util/Arrays/ParallelPrefix.java

This test has been seen to fail occasionally on recent JDK 9 builds. It fails 
with a message similar to:

...
test ParallelPrefix.testParallelPrefixForInt([I@47a7a8ef, 1365, 2730, 
ParallelPrefix$$Lambda$56/1605520928@106dbc48): success 
test ParallelPrefix.testParallelPrefixForInt([I@789e465e, 1365, 2731, 
ParallelPrefix$$Lambda$55/1326195546@2c8625ae): failure 
java.lang.AssertionError: expected [[I@7b703d4a] but found [[I@73625cb4] 
at org.testng.Assert.fail(Assert.java:94) 
at org.testng.Assert.failNotEquals(Assert.java:494) 
at org.testng.Assert.assertArrayEquals(Assert.java:144) 
at org.testng.Assert.assertEquals(Assert.java:117) 
at org.testng.Assert.assertEquals(Assert.java:165) 
at ParallelPrefix.testParallelPrefixForInt(ParallelPrefix.java:124) 
…

The output is not very helpful. Testng, or at least the version that we have in 
use in jtreg, does not provide pretty failure messages when dealing with 
arrays. It is trivial to add these to the test, see below. Note: I used the 
3-args version of assertEquals as it will trigger the inclusion of the index of 
the array where the values differ.

Hopefully, when we see this test fail again it can produce some meaningful 
output.

-Chris.

diff --git a/test/java/util/Arrays/ParallelPrefix.java 
b/test/java/util/Arrays/ParallelPrefix.java
--- a/test/java/util/Arrays/ParallelPrefix.java
+++ b/test/java/util/Arrays/ParallelPrefix.java
@@ -39,6 +39,7 @@
 import static org.testng.Assert.*;
 import org.testng.annotations.DataProvider;
 import org.testng.annotations.Test;
+import static java.lang.System.out;
 
 public class ParallelPrefix {
     //Array size less than MIN_PARTITION
@@ -121,11 +122,11 @@
 
         int[] parallelResult = data.clone();
         Arrays.parallelPrefix(parallelResult, fromIndex, toIndex, op);
-        assertEquals(parallelResult, sequentialResult);
+        assertArraysEqual(parallelResult, sequentialResult);
 
         int[] parallelRangeResult = Arrays.copyOfRange(data, fromIndex, 
toIndex);
         Arrays.parallelPrefix(parallelRangeResult, op);
-        assertEquals(parallelRangeResult, Arrays.copyOfRange(sequentialResult, 
fromIndex, toIndex));
+        assertArraysEqual(parallelRangeResult, 
Arrays.copyOfRange(sequentialResult, fromIndex, toIndex));
     }
 
     @Test(dataProvider="longSet")
@@ -137,11 +138,11 @@
 
         long[] parallelResult = data.clone();
         Arrays.parallelPrefix(parallelResult, fromIndex, toIndex, op);
-        assertEquals(parallelResult, sequentialResult);
+        assertArraysEqual(parallelResult, sequentialResult);
 
         long[] parallelRangeResult = Arrays.copyOfRange(data, fromIndex, 
toIndex);
         Arrays.parallelPrefix(parallelRangeResult, op);
-        assertEquals(parallelRangeResult, Arrays.copyOfRange(sequentialResult, 
fromIndex, toIndex));
+        assertArraysEqual(parallelRangeResult, 
Arrays.copyOfRange(sequentialResult, fromIndex, toIndex));
     }
 
     @Test(dataProvider="doubleSet")
@@ -153,11 +154,11 @@
 
         double[] parallelResult = data.clone();
         Arrays.parallelPrefix(parallelResult, fromIndex, toIndex, op);
-        assertEquals(parallelResult, sequentialResult);
+        assertArraysEqual(parallelResult, sequentialResult);
 
         double[] parallelRangeResult = Arrays.copyOfRange(data, fromIndex, 
toIndex);
         Arrays.parallelPrefix(parallelRangeResult, op);
-        assertEquals(parallelRangeResult, Arrays.copyOfRange(sequentialResult, 
fromIndex, toIndex));
+        assertArraysEqual(parallelRangeResult, 
Arrays.copyOfRange(sequentialResult, fromIndex, toIndex));
     }
 
     @Test(dataProvider="stringSet")
@@ -169,11 +170,11 @@
 
         String[] parallelResult = data.clone();
         Arrays.parallelPrefix(parallelResult, fromIndex, toIndex, op);
-        assertEquals(parallelResult, sequentialResult);
+        assertArraysEqual(parallelResult, sequentialResult);
 
         String[] parallelRangeResult = Arrays.copyOfRange(data, fromIndex, 
toIndex);
         Arrays.parallelPrefix(parallelRangeResult, op);
-        assertEquals(parallelRangeResult, Arrays.copyOfRange(sequentialResult, 
fromIndex, toIndex));
+        assertArraysEqual(parallelRangeResult, 
Arrays.copyOfRange(sequentialResult, fromIndex, toIndex));
     }
 
     @Test
@@ -293,5 +294,41 @@
     public static void assertInstance(Object actual, Class<?> expected, String 
message) {
         assertTrue(expected.isInstance(actual), message);
     }
+
+    static void assertArraysEqual(int[] actual, int[] expected) {
+        try {
+            assertEquals(actual, expected, "");
+        } catch (AssertionError x) {
+            out.printf("Expected:%s, actual:%s%n", Arrays.toString(expected), 
Arrays.toString(actual));
+            throw x;
+        }
+    }
+
+    static void assertArraysEqual(long[] actual, long[] expected) {
+        try {
+            assertEquals(actual, expected, "");
+        } catch (AssertionError x) {
+            out.printf("Expected:%s, actual:%s%n", Arrays.toString(expected), 
Arrays.toString(actual));
+            throw x;
+        }
+    }
+
+    static void assertArraysEqual(double[] actual, double[] expected) {
+        try {
+            assertEquals(actual, expected, "");
+        } catch (AssertionError x) {
+            out.printf("Expected:%s, actual:%s%n", Arrays.toString(expected), 
Arrays.toString(actual));
+            throw x;
+        }
+    }
+
+    static void assertArraysEqual(String[] actual, String[] expected) {
+        try {
+            assertEquals(actual, expected, "");
+        } catch (AssertionError x) {
+            out.printf("Expected:%s, actual:%s%n", Arrays.toString(expected), 
Arrays.toString(actual));
+            throw x;
+        }
+    }
 }
 

Reply via email to