diff --git a/test/jdk/jdk/incubator/vector/AbstractVectorTest.java b/test/jdk/jdk/incubator/vector/AbstractVectorTest.java index 71cabe75b76..b334e64ab80 100644 --- a/test/jdk/jdk/incubator/vector/AbstractVectorTest.java +++ b/test/jdk/jdk/incubator/vector/AbstractVectorTest.java @@ -110,19 +110,19 @@ public class AbstractVectorTest { } static final List> BOOLEAN_MASK_GENERATORS = List.of( - withToString("mask[i % 2]", (int l) -> { - boolean[] a = new boolean[l]; - for (int i = 0; i < l; i++) { - a[i] = (i % 2 == 0); - } - return a; + withToString("mask[i % 2]", (int s) -> { + return fill_boolean(s, + i -> ((i % 2) == 0)); }), - withToString("mask[true]", (int l) -> { - boolean[] a = new boolean[l]; + withToString("mask[true]", (int s) -> { + boolean[] a = new boolean[s]; Arrays.fill(a, true); return a; }), - withToString("mask[false]", boolean[]::new) + withToString("mask[false]", boolean[]::new), + withToString("mask[random]", (int s) -> { + return fill_boolean(s,_i -> RAND.nextBoolean()); + }) ); static final List>> @@ -131,6 +131,26 @@ public class AbstractVectorTest { flatMap(fa -> BOOLEAN_MASK_GENERATORS.stream().skip(1).map( fb -> List.of(fa, fb))).collect(Collectors.toList()); + static long[] pack_booleans_to_longs(boolean[] mask) { + int totalLongs = (mask.length + 63) / 64; // ceil division + long[] packed = new long[totalLongs]; + for (int i = 0; i < mask.length; i++) { + int longIndex = i / 64; + int bitIndex = i % 64; + if (mask[i]) { + packed[longIndex] |= 1L << bitIndex; + } + } + return packed; + } + + static final List> LONG_MASK_GENERATORS = BOOLEAN_MASK_GENERATORS.stream() + .map(f -> withToString( + f.toString().replace("mask", "long_mask"), + (IntFunction) (int l) -> pack_booleans_to_longs(f.apply(l)) + )) + .collect(Collectors.toList()); + static final List> INT_SHUFFLE_GENERATORS = List.of( withToStringBi("shuffle[random]", (Integer l, Integer m) -> RAND.ints(l, 0, m).toArray()) @@ -210,21 +230,6 @@ public class AbstractVectorTest { return a; } - interface FBooleanBinOp { - boolean apply(boolean a, boolean b); - } - - static void assertArraysEquals(boolean[] r, boolean[] a, boolean[] b, FBooleanBinOp f) { - int i = 0; - try { - for (; i < a.length; i++) { - Assert.assertEquals(r[i], f.apply(a[i], b[i])); - } - } catch (AssertionError e) { - Assert.assertEquals(r[i], f.apply(a[i], b[i]), "(" + a[i] + ", " + b[i] + ") at index #" + i); - } - } - // Non-optimized test partial wrap derived from the Spec: // Validation function for lane indexes which may be out of the valid range of [0..VLENGTH-1]. // The index is forced into this range by adding or subtracting a suitable multiple of VLENGTH. diff --git a/test/jdk/jdk/incubator/vector/Byte128VectorTests.java b/test/jdk/jdk/incubator/vector/Byte128VectorTests.java index bea4d541987..4980c66c02a 100644 --- a/test/jdk/jdk/incubator/vector/Byte128VectorTests.java +++ b/test/jdk/jdk/incubator/vector/Byte128VectorTests.java @@ -393,6 +393,36 @@ public class Byte128VectorTests extends AbstractVectorTest { } } + interface FBoolUnOp { + boolean apply(boolean a); + } + + static void assertArraysEquals(boolean[] r, boolean[] a, FBoolUnOp f) { + int i = 0; + try { + for (; i < a.length; i++) { + Assert.assertEquals(r[i], f.apply(a[i])); + } + } catch (AssertionError e) { + Assert.assertEquals(r[i], f.apply(a[i]), "(" + a[i] + ") at index #" + i); + } + } + + interface FBoolBinOp { + boolean apply(boolean a, boolean b); + } + + static void assertArraysEquals(boolean[] r, boolean[] a, boolean[] b, FBoolBinOp f) { + int i = 0; + try { + for (; i < a.length; i++) { + Assert.assertEquals(r[i], f.apply(a[i], b[i])); + } + } catch (AssertionError e) { + Assert.assertEquals(r[i], f.apply(a[i], b[i]), "(" + a[i] + ", " + b[i] + ") at index #" + i); + } + } + interface FBinOp { byte apply(byte a, byte b); } @@ -1095,12 +1125,6 @@ public class Byte128VectorTests extends AbstractVectorTest { .flatMap(pair -> BYTE_SATURATING_GENERATORS_ASSOC.stream().map(f -> List.of(pair.get(0), pair.get(1), f))) .collect(Collectors.toList()); - @DataProvider - public Object[][] boolUnaryOpProvider() { - return BOOL_ARRAY_GENERATORS.stream(). - map(f -> new Object[]{f}). - toArray(Object[][]::new); - } static final List>> BYTE_GENERATOR_TRIPLES = BYTE_GENERATOR_PAIRS.stream(). @@ -1232,8 +1256,23 @@ public class Byte128VectorTests extends AbstractVectorTest { } @DataProvider - public Object[][] maskCompareOpProvider() { - return BOOLEAN_MASK_COMPARE_GENERATOR_PAIRS.stream().map(List::toArray). + public Object[][] longMaskProvider() { + return LONG_MASK_GENERATORS.stream(). + map(f -> new Object[]{f}). + toArray(Object[][]::new); + } + + @DataProvider + public Object[][] boolMaskBinaryOpProvider() { + return BOOLEAN_MASK_COMPARE_GENERATOR_PAIRS.stream(). + map(List::toArray). + toArray(Object[][]::new); + } + + @DataProvider + public Object[][] boolMaskUnaryOpProvider() { + return BOOLEAN_MASK_GENERATORS.stream(). + map(f -> new Object[]{f}). toArray(Object[][]::new); } @@ -4464,7 +4503,7 @@ public class Byte128VectorTests extends AbstractVectorTest { return res; } - @Test(dataProvider = "boolUnaryOpProvider") + @Test(dataProvider = "boolMaskUnaryOpProvider") static void anyTrueByte128VectorTests(IntFunction fm) { boolean[] mask = fm.apply(SPECIES.length()); boolean[] r = fmr.apply(SPECIES.length()); @@ -4488,7 +4527,7 @@ public class Byte128VectorTests extends AbstractVectorTest { return res; } - @Test(dataProvider = "boolUnaryOpProvider") + @Test(dataProvider = "boolMaskUnaryOpProvider") static void allTrueByte128VectorTests(IntFunction fm) { boolean[] mask = fm.apply(SPECIES.length()); boolean[] r = fmr.apply(SPECIES.length()); @@ -6390,6 +6429,157 @@ public class Byte128VectorTests extends AbstractVectorTest { assertArraysEquals(r, a, mask, Byte128VectorTests::REVERSE_BYTES); } + static boolean band(boolean a, boolean b) { + return a & b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskandByte128VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.and(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Byte128VectorTests::band); + } + + static boolean bor(boolean a, boolean b) { + return a | b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskorByte128VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.or(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Byte128VectorTests::bor); + } + + static boolean bxor(boolean a, boolean b) { + return a != b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskxorByte128VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.xor(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Byte128VectorTests::bxor); + } + + static boolean bandNot(boolean a, boolean b) { + return a & !b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskandNotByte128VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.andNot(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Byte128VectorTests::bandNot); + } + + static boolean beq(boolean a, boolean b) { + return a == b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskeqByte128VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.eq(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Byte128VectorTests::beq); + } + + static boolean unot(boolean a) { + return !a; + } + + @Test(dataProvider = "boolMaskUnaryOpProvider") + static void masknotByte128VectorTests(IntFunction fa) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + av.not().intoArray(r, i); + } + } + + assertArraysEquals(r, a, Byte128VectorTests::unot); + } + + private static final long LONG_MASK_BITS = 0xFFFFFFFFFFFFFFFFL >>> (64 - SPECIES.length()); + + static void assertArraysEquals(long[] r, long[] a, long bits) { + int i = 0; + try { + for (; i < a.length; i++) { + Assert.assertEquals(r[i], a[i] & bits); + } + } catch (AssertionError e) { + Assert.assertEquals(r[i], a[i] & bits, "(" + a[i] + ") at index #" + i); + } + } + + @Test(dataProvider = "longMaskProvider") + static void maskFromToLongByte128VectorTests(IntFunction fa) { + long[] a = fa.apply(SPECIES.length()); + long[] r = new long[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i++) { + VectorMask vmask = VectorMask.fromLong(SPECIES, a[i]); + r[i] = vmask.toLong(); + } + } + assertArraysEquals(r, a, LONG_MASK_BITS); + } + @Test(dataProvider = "byteCompareOpProvider") static void ltByte128VectorTestsBroadcastSmokeTest(IntFunction fa, IntFunction fb) { byte[] a = fa.apply(SPECIES.length()); @@ -6700,115 +6890,22 @@ public class Byte128VectorTests extends AbstractVectorTest { } } - @Test(dataProvider = "maskCompareOpProvider") - static void maskEqualsByte128VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskEqualsByte128VectorTests(IntFunction fa, IntFunction fb) { boolean[] a = fa.apply(SPECIES.length()); boolean[] b = fb.apply(SPECIES.length()); - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - boolean equals = av.equals(bv); - int to = i + SPECIES.length(); - Assert.assertEquals(equals, Arrays.equals(a, i, to, b, i, to)); + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + var av = SPECIES.loadMask(a, i); + var bv = SPECIES.loadMask(b, i); + boolean equals = av.equals(bv); + int to = i + SPECIES.length(); + Assert.assertEquals(equals, Arrays.equals(a, i, to, b, i, to)); + } } } - static boolean band(boolean a, boolean b) { - return a & b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskAndByte128VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.and(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Byte128VectorTests::band); - } - - static boolean bor(boolean a, boolean b) { - return a | b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskOrByte128VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.or(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Byte128VectorTests::bor); - } - - static boolean bxor(boolean a, boolean b) { - return a != b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskXorByte128VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.xor(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Byte128VectorTests::bxor); - } - - static boolean bandNot(boolean a, boolean b) { - return a & !b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskAndNotByte128VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.andNot(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Byte128VectorTests::bandNot); - } - - static boolean beq(boolean a, boolean b) { - return (a == b); - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskEqByte128VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.eq(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Byte128VectorTests::beq); - } - @Test(dataProvider = "maskProvider") static void maskHashCodeByte128VectorTestsSmokeTest(IntFunction fa) { boolean[] a = fa.apply(SPECIES.length()); @@ -6913,23 +7010,6 @@ public class Byte128VectorTests extends AbstractVectorTest { } } - @DataProvider - public static Object[][] longMaskProvider() { - return new Object[][]{ - {0xFFFFFFFFFFFFFFFFL}, - {0x0000000000000000L}, - {0x5555555555555555L}, - {0x0123456789abcdefL}, - }; - } - - @Test(dataProvider = "longMaskProvider") - static void maskFromToLongByte128VectorTestsSmokeTest(long inputLong) { - var vmask = VectorMask.fromLong(SPECIES, inputLong); - long outputLong = vmask.toLong(); - Assert.assertEquals(outputLong, (inputLong & (((0xFFFFFFFFFFFFFFFFL >>> (64 - SPECIES.length())))))); - } - @DataProvider public static Object[][] offsetProvider() { return new Object[][]{ diff --git a/test/jdk/jdk/incubator/vector/Byte256VectorTests.java b/test/jdk/jdk/incubator/vector/Byte256VectorTests.java index be5b3cf6198..b3cad54e101 100644 --- a/test/jdk/jdk/incubator/vector/Byte256VectorTests.java +++ b/test/jdk/jdk/incubator/vector/Byte256VectorTests.java @@ -393,6 +393,36 @@ public class Byte256VectorTests extends AbstractVectorTest { } } + interface FBoolUnOp { + boolean apply(boolean a); + } + + static void assertArraysEquals(boolean[] r, boolean[] a, FBoolUnOp f) { + int i = 0; + try { + for (; i < a.length; i++) { + Assert.assertEquals(r[i], f.apply(a[i])); + } + } catch (AssertionError e) { + Assert.assertEquals(r[i], f.apply(a[i]), "(" + a[i] + ") at index #" + i); + } + } + + interface FBoolBinOp { + boolean apply(boolean a, boolean b); + } + + static void assertArraysEquals(boolean[] r, boolean[] a, boolean[] b, FBoolBinOp f) { + int i = 0; + try { + for (; i < a.length; i++) { + Assert.assertEquals(r[i], f.apply(a[i], b[i])); + } + } catch (AssertionError e) { + Assert.assertEquals(r[i], f.apply(a[i], b[i]), "(" + a[i] + ", " + b[i] + ") at index #" + i); + } + } + interface FBinOp { byte apply(byte a, byte b); } @@ -1095,12 +1125,6 @@ public class Byte256VectorTests extends AbstractVectorTest { .flatMap(pair -> BYTE_SATURATING_GENERATORS_ASSOC.stream().map(f -> List.of(pair.get(0), pair.get(1), f))) .collect(Collectors.toList()); - @DataProvider - public Object[][] boolUnaryOpProvider() { - return BOOL_ARRAY_GENERATORS.stream(). - map(f -> new Object[]{f}). - toArray(Object[][]::new); - } static final List>> BYTE_GENERATOR_TRIPLES = BYTE_GENERATOR_PAIRS.stream(). @@ -1232,8 +1256,23 @@ public class Byte256VectorTests extends AbstractVectorTest { } @DataProvider - public Object[][] maskCompareOpProvider() { - return BOOLEAN_MASK_COMPARE_GENERATOR_PAIRS.stream().map(List::toArray). + public Object[][] longMaskProvider() { + return LONG_MASK_GENERATORS.stream(). + map(f -> new Object[]{f}). + toArray(Object[][]::new); + } + + @DataProvider + public Object[][] boolMaskBinaryOpProvider() { + return BOOLEAN_MASK_COMPARE_GENERATOR_PAIRS.stream(). + map(List::toArray). + toArray(Object[][]::new); + } + + @DataProvider + public Object[][] boolMaskUnaryOpProvider() { + return BOOLEAN_MASK_GENERATORS.stream(). + map(f -> new Object[]{f}). toArray(Object[][]::new); } @@ -4464,7 +4503,7 @@ public class Byte256VectorTests extends AbstractVectorTest { return res; } - @Test(dataProvider = "boolUnaryOpProvider") + @Test(dataProvider = "boolMaskUnaryOpProvider") static void anyTrueByte256VectorTests(IntFunction fm) { boolean[] mask = fm.apply(SPECIES.length()); boolean[] r = fmr.apply(SPECIES.length()); @@ -4488,7 +4527,7 @@ public class Byte256VectorTests extends AbstractVectorTest { return res; } - @Test(dataProvider = "boolUnaryOpProvider") + @Test(dataProvider = "boolMaskUnaryOpProvider") static void allTrueByte256VectorTests(IntFunction fm) { boolean[] mask = fm.apply(SPECIES.length()); boolean[] r = fmr.apply(SPECIES.length()); @@ -6390,6 +6429,157 @@ public class Byte256VectorTests extends AbstractVectorTest { assertArraysEquals(r, a, mask, Byte256VectorTests::REVERSE_BYTES); } + static boolean band(boolean a, boolean b) { + return a & b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskandByte256VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.and(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Byte256VectorTests::band); + } + + static boolean bor(boolean a, boolean b) { + return a | b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskorByte256VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.or(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Byte256VectorTests::bor); + } + + static boolean bxor(boolean a, boolean b) { + return a != b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskxorByte256VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.xor(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Byte256VectorTests::bxor); + } + + static boolean bandNot(boolean a, boolean b) { + return a & !b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskandNotByte256VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.andNot(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Byte256VectorTests::bandNot); + } + + static boolean beq(boolean a, boolean b) { + return a == b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskeqByte256VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.eq(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Byte256VectorTests::beq); + } + + static boolean unot(boolean a) { + return !a; + } + + @Test(dataProvider = "boolMaskUnaryOpProvider") + static void masknotByte256VectorTests(IntFunction fa) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + av.not().intoArray(r, i); + } + } + + assertArraysEquals(r, a, Byte256VectorTests::unot); + } + + private static final long LONG_MASK_BITS = 0xFFFFFFFFFFFFFFFFL >>> (64 - SPECIES.length()); + + static void assertArraysEquals(long[] r, long[] a, long bits) { + int i = 0; + try { + for (; i < a.length; i++) { + Assert.assertEquals(r[i], a[i] & bits); + } + } catch (AssertionError e) { + Assert.assertEquals(r[i], a[i] & bits, "(" + a[i] + ") at index #" + i); + } + } + + @Test(dataProvider = "longMaskProvider") + static void maskFromToLongByte256VectorTests(IntFunction fa) { + long[] a = fa.apply(SPECIES.length()); + long[] r = new long[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i++) { + VectorMask vmask = VectorMask.fromLong(SPECIES, a[i]); + r[i] = vmask.toLong(); + } + } + assertArraysEquals(r, a, LONG_MASK_BITS); + } + @Test(dataProvider = "byteCompareOpProvider") static void ltByte256VectorTestsBroadcastSmokeTest(IntFunction fa, IntFunction fb) { byte[] a = fa.apply(SPECIES.length()); @@ -6700,115 +6890,22 @@ public class Byte256VectorTests extends AbstractVectorTest { } } - @Test(dataProvider = "maskCompareOpProvider") - static void maskEqualsByte256VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskEqualsByte256VectorTests(IntFunction fa, IntFunction fb) { boolean[] a = fa.apply(SPECIES.length()); boolean[] b = fb.apply(SPECIES.length()); - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - boolean equals = av.equals(bv); - int to = i + SPECIES.length(); - Assert.assertEquals(equals, Arrays.equals(a, i, to, b, i, to)); + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + var av = SPECIES.loadMask(a, i); + var bv = SPECIES.loadMask(b, i); + boolean equals = av.equals(bv); + int to = i + SPECIES.length(); + Assert.assertEquals(equals, Arrays.equals(a, i, to, b, i, to)); + } } } - static boolean band(boolean a, boolean b) { - return a & b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskAndByte256VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.and(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Byte256VectorTests::band); - } - - static boolean bor(boolean a, boolean b) { - return a | b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskOrByte256VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.or(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Byte256VectorTests::bor); - } - - static boolean bxor(boolean a, boolean b) { - return a != b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskXorByte256VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.xor(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Byte256VectorTests::bxor); - } - - static boolean bandNot(boolean a, boolean b) { - return a & !b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskAndNotByte256VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.andNot(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Byte256VectorTests::bandNot); - } - - static boolean beq(boolean a, boolean b) { - return (a == b); - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskEqByte256VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.eq(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Byte256VectorTests::beq); - } - @Test(dataProvider = "maskProvider") static void maskHashCodeByte256VectorTestsSmokeTest(IntFunction fa) { boolean[] a = fa.apply(SPECIES.length()); @@ -6913,23 +7010,6 @@ public class Byte256VectorTests extends AbstractVectorTest { } } - @DataProvider - public static Object[][] longMaskProvider() { - return new Object[][]{ - {0xFFFFFFFFFFFFFFFFL}, - {0x0000000000000000L}, - {0x5555555555555555L}, - {0x0123456789abcdefL}, - }; - } - - @Test(dataProvider = "longMaskProvider") - static void maskFromToLongByte256VectorTestsSmokeTest(long inputLong) { - var vmask = VectorMask.fromLong(SPECIES, inputLong); - long outputLong = vmask.toLong(); - Assert.assertEquals(outputLong, (inputLong & (((0xFFFFFFFFFFFFFFFFL >>> (64 - SPECIES.length())))))); - } - @DataProvider public static Object[][] offsetProvider() { return new Object[][]{ diff --git a/test/jdk/jdk/incubator/vector/Byte512VectorTests.java b/test/jdk/jdk/incubator/vector/Byte512VectorTests.java index 0fd68b6f712..83e48cd2fdc 100644 --- a/test/jdk/jdk/incubator/vector/Byte512VectorTests.java +++ b/test/jdk/jdk/incubator/vector/Byte512VectorTests.java @@ -393,6 +393,36 @@ public class Byte512VectorTests extends AbstractVectorTest { } } + interface FBoolUnOp { + boolean apply(boolean a); + } + + static void assertArraysEquals(boolean[] r, boolean[] a, FBoolUnOp f) { + int i = 0; + try { + for (; i < a.length; i++) { + Assert.assertEquals(r[i], f.apply(a[i])); + } + } catch (AssertionError e) { + Assert.assertEquals(r[i], f.apply(a[i]), "(" + a[i] + ") at index #" + i); + } + } + + interface FBoolBinOp { + boolean apply(boolean a, boolean b); + } + + static void assertArraysEquals(boolean[] r, boolean[] a, boolean[] b, FBoolBinOp f) { + int i = 0; + try { + for (; i < a.length; i++) { + Assert.assertEquals(r[i], f.apply(a[i], b[i])); + } + } catch (AssertionError e) { + Assert.assertEquals(r[i], f.apply(a[i], b[i]), "(" + a[i] + ", " + b[i] + ") at index #" + i); + } + } + interface FBinOp { byte apply(byte a, byte b); } @@ -1095,12 +1125,6 @@ public class Byte512VectorTests extends AbstractVectorTest { .flatMap(pair -> BYTE_SATURATING_GENERATORS_ASSOC.stream().map(f -> List.of(pair.get(0), pair.get(1), f))) .collect(Collectors.toList()); - @DataProvider - public Object[][] boolUnaryOpProvider() { - return BOOL_ARRAY_GENERATORS.stream(). - map(f -> new Object[]{f}). - toArray(Object[][]::new); - } static final List>> BYTE_GENERATOR_TRIPLES = BYTE_GENERATOR_PAIRS.stream(). @@ -1232,8 +1256,23 @@ public class Byte512VectorTests extends AbstractVectorTest { } @DataProvider - public Object[][] maskCompareOpProvider() { - return BOOLEAN_MASK_COMPARE_GENERATOR_PAIRS.stream().map(List::toArray). + public Object[][] longMaskProvider() { + return LONG_MASK_GENERATORS.stream(). + map(f -> new Object[]{f}). + toArray(Object[][]::new); + } + + @DataProvider + public Object[][] boolMaskBinaryOpProvider() { + return BOOLEAN_MASK_COMPARE_GENERATOR_PAIRS.stream(). + map(List::toArray). + toArray(Object[][]::new); + } + + @DataProvider + public Object[][] boolMaskUnaryOpProvider() { + return BOOLEAN_MASK_GENERATORS.stream(). + map(f -> new Object[]{f}). toArray(Object[][]::new); } @@ -4464,7 +4503,7 @@ public class Byte512VectorTests extends AbstractVectorTest { return res; } - @Test(dataProvider = "boolUnaryOpProvider") + @Test(dataProvider = "boolMaskUnaryOpProvider") static void anyTrueByte512VectorTests(IntFunction fm) { boolean[] mask = fm.apply(SPECIES.length()); boolean[] r = fmr.apply(SPECIES.length()); @@ -4488,7 +4527,7 @@ public class Byte512VectorTests extends AbstractVectorTest { return res; } - @Test(dataProvider = "boolUnaryOpProvider") + @Test(dataProvider = "boolMaskUnaryOpProvider") static void allTrueByte512VectorTests(IntFunction fm) { boolean[] mask = fm.apply(SPECIES.length()); boolean[] r = fmr.apply(SPECIES.length()); @@ -6390,6 +6429,157 @@ public class Byte512VectorTests extends AbstractVectorTest { assertArraysEquals(r, a, mask, Byte512VectorTests::REVERSE_BYTES); } + static boolean band(boolean a, boolean b) { + return a & b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskandByte512VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.and(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Byte512VectorTests::band); + } + + static boolean bor(boolean a, boolean b) { + return a | b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskorByte512VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.or(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Byte512VectorTests::bor); + } + + static boolean bxor(boolean a, boolean b) { + return a != b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskxorByte512VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.xor(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Byte512VectorTests::bxor); + } + + static boolean bandNot(boolean a, boolean b) { + return a & !b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskandNotByte512VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.andNot(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Byte512VectorTests::bandNot); + } + + static boolean beq(boolean a, boolean b) { + return a == b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskeqByte512VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.eq(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Byte512VectorTests::beq); + } + + static boolean unot(boolean a) { + return !a; + } + + @Test(dataProvider = "boolMaskUnaryOpProvider") + static void masknotByte512VectorTests(IntFunction fa) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + av.not().intoArray(r, i); + } + } + + assertArraysEquals(r, a, Byte512VectorTests::unot); + } + + private static final long LONG_MASK_BITS = 0xFFFFFFFFFFFFFFFFL >>> (64 - SPECIES.length()); + + static void assertArraysEquals(long[] r, long[] a, long bits) { + int i = 0; + try { + for (; i < a.length; i++) { + Assert.assertEquals(r[i], a[i] & bits); + } + } catch (AssertionError e) { + Assert.assertEquals(r[i], a[i] & bits, "(" + a[i] + ") at index #" + i); + } + } + + @Test(dataProvider = "longMaskProvider") + static void maskFromToLongByte512VectorTests(IntFunction fa) { + long[] a = fa.apply(SPECIES.length()); + long[] r = new long[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i++) { + VectorMask vmask = VectorMask.fromLong(SPECIES, a[i]); + r[i] = vmask.toLong(); + } + } + assertArraysEquals(r, a, LONG_MASK_BITS); + } + @Test(dataProvider = "byteCompareOpProvider") static void ltByte512VectorTestsBroadcastSmokeTest(IntFunction fa, IntFunction fb) { byte[] a = fa.apply(SPECIES.length()); @@ -6700,115 +6890,22 @@ public class Byte512VectorTests extends AbstractVectorTest { } } - @Test(dataProvider = "maskCompareOpProvider") - static void maskEqualsByte512VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskEqualsByte512VectorTests(IntFunction fa, IntFunction fb) { boolean[] a = fa.apply(SPECIES.length()); boolean[] b = fb.apply(SPECIES.length()); - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - boolean equals = av.equals(bv); - int to = i + SPECIES.length(); - Assert.assertEquals(equals, Arrays.equals(a, i, to, b, i, to)); + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + var av = SPECIES.loadMask(a, i); + var bv = SPECIES.loadMask(b, i); + boolean equals = av.equals(bv); + int to = i + SPECIES.length(); + Assert.assertEquals(equals, Arrays.equals(a, i, to, b, i, to)); + } } } - static boolean band(boolean a, boolean b) { - return a & b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskAndByte512VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.and(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Byte512VectorTests::band); - } - - static boolean bor(boolean a, boolean b) { - return a | b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskOrByte512VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.or(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Byte512VectorTests::bor); - } - - static boolean bxor(boolean a, boolean b) { - return a != b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskXorByte512VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.xor(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Byte512VectorTests::bxor); - } - - static boolean bandNot(boolean a, boolean b) { - return a & !b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskAndNotByte512VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.andNot(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Byte512VectorTests::bandNot); - } - - static boolean beq(boolean a, boolean b) { - return (a == b); - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskEqByte512VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.eq(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Byte512VectorTests::beq); - } - @Test(dataProvider = "maskProvider") static void maskHashCodeByte512VectorTestsSmokeTest(IntFunction fa) { boolean[] a = fa.apply(SPECIES.length()); @@ -6913,23 +7010,6 @@ public class Byte512VectorTests extends AbstractVectorTest { } } - @DataProvider - public static Object[][] longMaskProvider() { - return new Object[][]{ - {0xFFFFFFFFFFFFFFFFL}, - {0x0000000000000000L}, - {0x5555555555555555L}, - {0x0123456789abcdefL}, - }; - } - - @Test(dataProvider = "longMaskProvider") - static void maskFromToLongByte512VectorTestsSmokeTest(long inputLong) { - var vmask = VectorMask.fromLong(SPECIES, inputLong); - long outputLong = vmask.toLong(); - Assert.assertEquals(outputLong, (inputLong & (((0xFFFFFFFFFFFFFFFFL >>> (64 - SPECIES.length())))))); - } - @DataProvider public static Object[][] offsetProvider() { return new Object[][]{ diff --git a/test/jdk/jdk/incubator/vector/Byte64VectorTests.java b/test/jdk/jdk/incubator/vector/Byte64VectorTests.java index 112b2e56b6f..0088b3fbf8e 100644 --- a/test/jdk/jdk/incubator/vector/Byte64VectorTests.java +++ b/test/jdk/jdk/incubator/vector/Byte64VectorTests.java @@ -393,6 +393,36 @@ public class Byte64VectorTests extends AbstractVectorTest { } } + interface FBoolUnOp { + boolean apply(boolean a); + } + + static void assertArraysEquals(boolean[] r, boolean[] a, FBoolUnOp f) { + int i = 0; + try { + for (; i < a.length; i++) { + Assert.assertEquals(r[i], f.apply(a[i])); + } + } catch (AssertionError e) { + Assert.assertEquals(r[i], f.apply(a[i]), "(" + a[i] + ") at index #" + i); + } + } + + interface FBoolBinOp { + boolean apply(boolean a, boolean b); + } + + static void assertArraysEquals(boolean[] r, boolean[] a, boolean[] b, FBoolBinOp f) { + int i = 0; + try { + for (; i < a.length; i++) { + Assert.assertEquals(r[i], f.apply(a[i], b[i])); + } + } catch (AssertionError e) { + Assert.assertEquals(r[i], f.apply(a[i], b[i]), "(" + a[i] + ", " + b[i] + ") at index #" + i); + } + } + interface FBinOp { byte apply(byte a, byte b); } @@ -1095,12 +1125,6 @@ public class Byte64VectorTests extends AbstractVectorTest { .flatMap(pair -> BYTE_SATURATING_GENERATORS_ASSOC.stream().map(f -> List.of(pair.get(0), pair.get(1), f))) .collect(Collectors.toList()); - @DataProvider - public Object[][] boolUnaryOpProvider() { - return BOOL_ARRAY_GENERATORS.stream(). - map(f -> new Object[]{f}). - toArray(Object[][]::new); - } static final List>> BYTE_GENERATOR_TRIPLES = BYTE_GENERATOR_PAIRS.stream(). @@ -1232,8 +1256,23 @@ public class Byte64VectorTests extends AbstractVectorTest { } @DataProvider - public Object[][] maskCompareOpProvider() { - return BOOLEAN_MASK_COMPARE_GENERATOR_PAIRS.stream().map(List::toArray). + public Object[][] longMaskProvider() { + return LONG_MASK_GENERATORS.stream(). + map(f -> new Object[]{f}). + toArray(Object[][]::new); + } + + @DataProvider + public Object[][] boolMaskBinaryOpProvider() { + return BOOLEAN_MASK_COMPARE_GENERATOR_PAIRS.stream(). + map(List::toArray). + toArray(Object[][]::new); + } + + @DataProvider + public Object[][] boolMaskUnaryOpProvider() { + return BOOLEAN_MASK_GENERATORS.stream(). + map(f -> new Object[]{f}). toArray(Object[][]::new); } @@ -4464,7 +4503,7 @@ public class Byte64VectorTests extends AbstractVectorTest { return res; } - @Test(dataProvider = "boolUnaryOpProvider") + @Test(dataProvider = "boolMaskUnaryOpProvider") static void anyTrueByte64VectorTests(IntFunction fm) { boolean[] mask = fm.apply(SPECIES.length()); boolean[] r = fmr.apply(SPECIES.length()); @@ -4488,7 +4527,7 @@ public class Byte64VectorTests extends AbstractVectorTest { return res; } - @Test(dataProvider = "boolUnaryOpProvider") + @Test(dataProvider = "boolMaskUnaryOpProvider") static void allTrueByte64VectorTests(IntFunction fm) { boolean[] mask = fm.apply(SPECIES.length()); boolean[] r = fmr.apply(SPECIES.length()); @@ -6390,6 +6429,157 @@ public class Byte64VectorTests extends AbstractVectorTest { assertArraysEquals(r, a, mask, Byte64VectorTests::REVERSE_BYTES); } + static boolean band(boolean a, boolean b) { + return a & b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskandByte64VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.and(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Byte64VectorTests::band); + } + + static boolean bor(boolean a, boolean b) { + return a | b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskorByte64VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.or(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Byte64VectorTests::bor); + } + + static boolean bxor(boolean a, boolean b) { + return a != b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskxorByte64VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.xor(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Byte64VectorTests::bxor); + } + + static boolean bandNot(boolean a, boolean b) { + return a & !b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskandNotByte64VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.andNot(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Byte64VectorTests::bandNot); + } + + static boolean beq(boolean a, boolean b) { + return a == b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskeqByte64VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.eq(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Byte64VectorTests::beq); + } + + static boolean unot(boolean a) { + return !a; + } + + @Test(dataProvider = "boolMaskUnaryOpProvider") + static void masknotByte64VectorTests(IntFunction fa) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + av.not().intoArray(r, i); + } + } + + assertArraysEquals(r, a, Byte64VectorTests::unot); + } + + private static final long LONG_MASK_BITS = 0xFFFFFFFFFFFFFFFFL >>> (64 - SPECIES.length()); + + static void assertArraysEquals(long[] r, long[] a, long bits) { + int i = 0; + try { + for (; i < a.length; i++) { + Assert.assertEquals(r[i], a[i] & bits); + } + } catch (AssertionError e) { + Assert.assertEquals(r[i], a[i] & bits, "(" + a[i] + ") at index #" + i); + } + } + + @Test(dataProvider = "longMaskProvider") + static void maskFromToLongByte64VectorTests(IntFunction fa) { + long[] a = fa.apply(SPECIES.length()); + long[] r = new long[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i++) { + VectorMask vmask = VectorMask.fromLong(SPECIES, a[i]); + r[i] = vmask.toLong(); + } + } + assertArraysEquals(r, a, LONG_MASK_BITS); + } + @Test(dataProvider = "byteCompareOpProvider") static void ltByte64VectorTestsBroadcastSmokeTest(IntFunction fa, IntFunction fb) { byte[] a = fa.apply(SPECIES.length()); @@ -6700,115 +6890,22 @@ public class Byte64VectorTests extends AbstractVectorTest { } } - @Test(dataProvider = "maskCompareOpProvider") - static void maskEqualsByte64VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskEqualsByte64VectorTests(IntFunction fa, IntFunction fb) { boolean[] a = fa.apply(SPECIES.length()); boolean[] b = fb.apply(SPECIES.length()); - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - boolean equals = av.equals(bv); - int to = i + SPECIES.length(); - Assert.assertEquals(equals, Arrays.equals(a, i, to, b, i, to)); + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + var av = SPECIES.loadMask(a, i); + var bv = SPECIES.loadMask(b, i); + boolean equals = av.equals(bv); + int to = i + SPECIES.length(); + Assert.assertEquals(equals, Arrays.equals(a, i, to, b, i, to)); + } } } - static boolean band(boolean a, boolean b) { - return a & b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskAndByte64VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.and(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Byte64VectorTests::band); - } - - static boolean bor(boolean a, boolean b) { - return a | b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskOrByte64VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.or(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Byte64VectorTests::bor); - } - - static boolean bxor(boolean a, boolean b) { - return a != b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskXorByte64VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.xor(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Byte64VectorTests::bxor); - } - - static boolean bandNot(boolean a, boolean b) { - return a & !b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskAndNotByte64VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.andNot(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Byte64VectorTests::bandNot); - } - - static boolean beq(boolean a, boolean b) { - return (a == b); - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskEqByte64VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.eq(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Byte64VectorTests::beq); - } - @Test(dataProvider = "maskProvider") static void maskHashCodeByte64VectorTestsSmokeTest(IntFunction fa) { boolean[] a = fa.apply(SPECIES.length()); @@ -6913,23 +7010,6 @@ public class Byte64VectorTests extends AbstractVectorTest { } } - @DataProvider - public static Object[][] longMaskProvider() { - return new Object[][]{ - {0xFFFFFFFFFFFFFFFFL}, - {0x0000000000000000L}, - {0x5555555555555555L}, - {0x0123456789abcdefL}, - }; - } - - @Test(dataProvider = "longMaskProvider") - static void maskFromToLongByte64VectorTestsSmokeTest(long inputLong) { - var vmask = VectorMask.fromLong(SPECIES, inputLong); - long outputLong = vmask.toLong(); - Assert.assertEquals(outputLong, (inputLong & (((0xFFFFFFFFFFFFFFFFL >>> (64 - SPECIES.length())))))); - } - @DataProvider public static Object[][] offsetProvider() { return new Object[][]{ diff --git a/test/jdk/jdk/incubator/vector/ByteMaxVectorTests.java b/test/jdk/jdk/incubator/vector/ByteMaxVectorTests.java index 435cacc013e..6df01fb48e3 100644 --- a/test/jdk/jdk/incubator/vector/ByteMaxVectorTests.java +++ b/test/jdk/jdk/incubator/vector/ByteMaxVectorTests.java @@ -398,6 +398,36 @@ public class ByteMaxVectorTests extends AbstractVectorTest { } } + interface FBoolUnOp { + boolean apply(boolean a); + } + + static void assertArraysEquals(boolean[] r, boolean[] a, FBoolUnOp f) { + int i = 0; + try { + for (; i < a.length; i++) { + Assert.assertEquals(r[i], f.apply(a[i])); + } + } catch (AssertionError e) { + Assert.assertEquals(r[i], f.apply(a[i]), "(" + a[i] + ") at index #" + i); + } + } + + interface FBoolBinOp { + boolean apply(boolean a, boolean b); + } + + static void assertArraysEquals(boolean[] r, boolean[] a, boolean[] b, FBoolBinOp f) { + int i = 0; + try { + for (; i < a.length; i++) { + Assert.assertEquals(r[i], f.apply(a[i], b[i])); + } + } catch (AssertionError e) { + Assert.assertEquals(r[i], f.apply(a[i], b[i]), "(" + a[i] + ", " + b[i] + ") at index #" + i); + } + } + interface FBinOp { byte apply(byte a, byte b); } @@ -1100,12 +1130,6 @@ public class ByteMaxVectorTests extends AbstractVectorTest { .flatMap(pair -> BYTE_SATURATING_GENERATORS_ASSOC.stream().map(f -> List.of(pair.get(0), pair.get(1), f))) .collect(Collectors.toList()); - @DataProvider - public Object[][] boolUnaryOpProvider() { - return BOOL_ARRAY_GENERATORS.stream(). - map(f -> new Object[]{f}). - toArray(Object[][]::new); - } static final List>> BYTE_GENERATOR_TRIPLES = BYTE_GENERATOR_PAIRS.stream(). @@ -1237,8 +1261,23 @@ public class ByteMaxVectorTests extends AbstractVectorTest { } @DataProvider - public Object[][] maskCompareOpProvider() { - return BOOLEAN_MASK_COMPARE_GENERATOR_PAIRS.stream().map(List::toArray). + public Object[][] longMaskProvider() { + return LONG_MASK_GENERATORS.stream(). + map(f -> new Object[]{f}). + toArray(Object[][]::new); + } + + @DataProvider + public Object[][] boolMaskBinaryOpProvider() { + return BOOLEAN_MASK_COMPARE_GENERATOR_PAIRS.stream(). + map(List::toArray). + toArray(Object[][]::new); + } + + @DataProvider + public Object[][] boolMaskUnaryOpProvider() { + return BOOLEAN_MASK_GENERATORS.stream(). + map(f -> new Object[]{f}). toArray(Object[][]::new); } @@ -4469,7 +4508,7 @@ public class ByteMaxVectorTests extends AbstractVectorTest { return res; } - @Test(dataProvider = "boolUnaryOpProvider") + @Test(dataProvider = "boolMaskUnaryOpProvider") static void anyTrueByteMaxVectorTests(IntFunction fm) { boolean[] mask = fm.apply(SPECIES.length()); boolean[] r = fmr.apply(SPECIES.length()); @@ -4493,7 +4532,7 @@ public class ByteMaxVectorTests extends AbstractVectorTest { return res; } - @Test(dataProvider = "boolUnaryOpProvider") + @Test(dataProvider = "boolMaskUnaryOpProvider") static void allTrueByteMaxVectorTests(IntFunction fm) { boolean[] mask = fm.apply(SPECIES.length()); boolean[] r = fmr.apply(SPECIES.length()); @@ -6395,6 +6434,157 @@ public class ByteMaxVectorTests extends AbstractVectorTest { assertArraysEquals(r, a, mask, ByteMaxVectorTests::REVERSE_BYTES); } + static boolean band(boolean a, boolean b) { + return a & b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskandByteMaxVectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.and(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, ByteMaxVectorTests::band); + } + + static boolean bor(boolean a, boolean b) { + return a | b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskorByteMaxVectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.or(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, ByteMaxVectorTests::bor); + } + + static boolean bxor(boolean a, boolean b) { + return a != b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskxorByteMaxVectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.xor(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, ByteMaxVectorTests::bxor); + } + + static boolean bandNot(boolean a, boolean b) { + return a & !b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskandNotByteMaxVectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.andNot(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, ByteMaxVectorTests::bandNot); + } + + static boolean beq(boolean a, boolean b) { + return a == b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskeqByteMaxVectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.eq(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, ByteMaxVectorTests::beq); + } + + static boolean unot(boolean a) { + return !a; + } + + @Test(dataProvider = "boolMaskUnaryOpProvider") + static void masknotByteMaxVectorTests(IntFunction fa) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + av.not().intoArray(r, i); + } + } + + assertArraysEquals(r, a, ByteMaxVectorTests::unot); + } + + private static final long LONG_MASK_BITS = 0xFFFFFFFFFFFFFFFFL >>> (64 - SPECIES.length()); + + static void assertArraysEquals(long[] r, long[] a, long bits) { + int i = 0; + try { + for (; i < a.length; i++) { + Assert.assertEquals(r[i], a[i] & bits); + } + } catch (AssertionError e) { + Assert.assertEquals(r[i], a[i] & bits, "(" + a[i] + ") at index #" + i); + } + } + + @Test(dataProvider = "longMaskProvider") + static void maskFromToLongByteMaxVectorTests(IntFunction fa) { + long[] a = fa.apply(SPECIES.length()); + long[] r = new long[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i++) { + VectorMask vmask = VectorMask.fromLong(SPECIES, a[i]); + r[i] = vmask.toLong(); + } + } + assertArraysEquals(r, a, LONG_MASK_BITS); + } + @Test(dataProvider = "byteCompareOpProvider") static void ltByteMaxVectorTestsBroadcastSmokeTest(IntFunction fa, IntFunction fb) { byte[] a = fa.apply(SPECIES.length()); @@ -6705,115 +6895,22 @@ public class ByteMaxVectorTests extends AbstractVectorTest { } } - @Test(dataProvider = "maskCompareOpProvider") - static void maskEqualsByteMaxVectorTestsSmokeTest(IntFunction fa, IntFunction fb) { + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskEqualsByteMaxVectorTests(IntFunction fa, IntFunction fb) { boolean[] a = fa.apply(SPECIES.length()); boolean[] b = fb.apply(SPECIES.length()); - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - boolean equals = av.equals(bv); - int to = i + SPECIES.length(); - Assert.assertEquals(equals, Arrays.equals(a, i, to, b, i, to)); + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + var av = SPECIES.loadMask(a, i); + var bv = SPECIES.loadMask(b, i); + boolean equals = av.equals(bv); + int to = i + SPECIES.length(); + Assert.assertEquals(equals, Arrays.equals(a, i, to, b, i, to)); + } } } - static boolean band(boolean a, boolean b) { - return a & b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskAndByteMaxVectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.and(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, ByteMaxVectorTests::band); - } - - static boolean bor(boolean a, boolean b) { - return a | b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskOrByteMaxVectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.or(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, ByteMaxVectorTests::bor); - } - - static boolean bxor(boolean a, boolean b) { - return a != b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskXorByteMaxVectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.xor(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, ByteMaxVectorTests::bxor); - } - - static boolean bandNot(boolean a, boolean b) { - return a & !b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskAndNotByteMaxVectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.andNot(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, ByteMaxVectorTests::bandNot); - } - - static boolean beq(boolean a, boolean b) { - return (a == b); - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskEqByteMaxVectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.eq(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, ByteMaxVectorTests::beq); - } - @Test(dataProvider = "maskProvider") static void maskHashCodeByteMaxVectorTestsSmokeTest(IntFunction fa) { boolean[] a = fa.apply(SPECIES.length()); @@ -6918,7 +7015,6 @@ public class ByteMaxVectorTests extends AbstractVectorTest { } } - @DataProvider public static Object[][] offsetProvider() { return new Object[][]{ diff --git a/test/jdk/jdk/incubator/vector/Double128VectorTests.java b/test/jdk/jdk/incubator/vector/Double128VectorTests.java index f15ce88ddb8..879dac4c966 100644 --- a/test/jdk/jdk/incubator/vector/Double128VectorTests.java +++ b/test/jdk/jdk/incubator/vector/Double128VectorTests.java @@ -411,6 +411,36 @@ relativeError)); } } + interface FBoolUnOp { + boolean apply(boolean a); + } + + static void assertArraysEquals(boolean[] r, boolean[] a, FBoolUnOp f) { + int i = 0; + try { + for (; i < a.length; i++) { + Assert.assertEquals(r[i], f.apply(a[i])); + } + } catch (AssertionError e) { + Assert.assertEquals(r[i], f.apply(a[i]), "(" + a[i] + ") at index #" + i); + } + } + + interface FBoolBinOp { + boolean apply(boolean a, boolean b); + } + + static void assertArraysEquals(boolean[] r, boolean[] a, boolean[] b, FBoolBinOp f) { + int i = 0; + try { + for (; i < a.length; i++) { + Assert.assertEquals(r[i], f.apply(a[i], b[i])); + } + } catch (AssertionError e) { + Assert.assertEquals(r[i], f.apply(a[i], b[i]), "(" + a[i] + ", " + b[i] + ") at index #" + i); + } + } + interface FBinOp { double apply(double a, double b); } @@ -1187,12 +1217,6 @@ relativeError)); flatMap(fa -> DOUBLE_GENERATORS.stream().skip(1).map(fb -> List.of(fa, fb))). collect(Collectors.toList()); - @DataProvider - public Object[][] boolUnaryOpProvider() { - return BOOL_ARRAY_GENERATORS.stream(). - map(f -> new Object[]{f}). - toArray(Object[][]::new); - } static final List>> DOUBLE_GENERATOR_TRIPLES = DOUBLE_GENERATOR_PAIRS.stream(). @@ -1291,8 +1315,23 @@ relativeError)); } @DataProvider - public Object[][] maskCompareOpProvider() { - return BOOLEAN_MASK_COMPARE_GENERATOR_PAIRS.stream().map(List::toArray). + public Object[][] longMaskProvider() { + return LONG_MASK_GENERATORS.stream(). + map(f -> new Object[]{f}). + toArray(Object[][]::new); + } + + @DataProvider + public Object[][] boolMaskBinaryOpProvider() { + return BOOLEAN_MASK_COMPARE_GENERATOR_PAIRS.stream(). + map(List::toArray). + toArray(Object[][]::new); + } + + @DataProvider + public Object[][] boolMaskUnaryOpProvider() { + return BOOLEAN_MASK_GENERATORS.stream(). + map(f -> new Object[]{f}). toArray(Object[][]::new); } @@ -4806,6 +4845,157 @@ relativeError)); assertArraysEquals(r, a, mask, Double128VectorTests::SQRT); } + static boolean band(boolean a, boolean b) { + return a & b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskandDouble128VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.and(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Double128VectorTests::band); + } + + static boolean bor(boolean a, boolean b) { + return a | b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskorDouble128VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.or(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Double128VectorTests::bor); + } + + static boolean bxor(boolean a, boolean b) { + return a != b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskxorDouble128VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.xor(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Double128VectorTests::bxor); + } + + static boolean bandNot(boolean a, boolean b) { + return a & !b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskandNotDouble128VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.andNot(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Double128VectorTests::bandNot); + } + + static boolean beq(boolean a, boolean b) { + return a == b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskeqDouble128VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.eq(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Double128VectorTests::beq); + } + + static boolean unot(boolean a) { + return !a; + } + + @Test(dataProvider = "boolMaskUnaryOpProvider") + static void masknotDouble128VectorTests(IntFunction fa) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + av.not().intoArray(r, i); + } + } + + assertArraysEquals(r, a, Double128VectorTests::unot); + } + + private static final long LONG_MASK_BITS = 0xFFFFFFFFFFFFFFFFL >>> (64 - SPECIES.length()); + + static void assertArraysEquals(long[] r, long[] a, long bits) { + int i = 0; + try { + for (; i < a.length; i++) { + Assert.assertEquals(r[i], a[i] & bits); + } + } catch (AssertionError e) { + Assert.assertEquals(r[i], a[i] & bits, "(" + a[i] + ") at index #" + i); + } + } + + @Test(dataProvider = "longMaskProvider") + static void maskFromToLongDouble128VectorTests(IntFunction fa) { + long[] a = fa.apply(SPECIES.length()); + long[] r = new long[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i++) { + VectorMask vmask = VectorMask.fromLong(SPECIES, a[i]); + r[i] = vmask.toLong(); + } + } + assertArraysEquals(r, a, LONG_MASK_BITS); + } + @Test(dataProvider = "doubleCompareOpProvider") static void ltDouble128VectorTestsBroadcastSmokeTest(IntFunction fa, IntFunction fb) { double[] a = fa.apply(SPECIES.length()); @@ -5095,115 +5285,22 @@ relativeError)); } } - @Test(dataProvider = "maskCompareOpProvider") - static void maskEqualsDouble128VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskEqualsDouble128VectorTests(IntFunction fa, IntFunction fb) { boolean[] a = fa.apply(SPECIES.length()); boolean[] b = fb.apply(SPECIES.length()); - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - boolean equals = av.equals(bv); - int to = i + SPECIES.length(); - Assert.assertEquals(equals, Arrays.equals(a, i, to, b, i, to)); + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + var av = SPECIES.loadMask(a, i); + var bv = SPECIES.loadMask(b, i); + boolean equals = av.equals(bv); + int to = i + SPECIES.length(); + Assert.assertEquals(equals, Arrays.equals(a, i, to, b, i, to)); + } } } - static boolean band(boolean a, boolean b) { - return a & b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskAndDouble128VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.and(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Double128VectorTests::band); - } - - static boolean bor(boolean a, boolean b) { - return a | b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskOrDouble128VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.or(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Double128VectorTests::bor); - } - - static boolean bxor(boolean a, boolean b) { - return a != b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskXorDouble128VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.xor(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Double128VectorTests::bxor); - } - - static boolean bandNot(boolean a, boolean b) { - return a & !b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskAndNotDouble128VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.andNot(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Double128VectorTests::bandNot); - } - - static boolean beq(boolean a, boolean b) { - return (a == b); - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskEqDouble128VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.eq(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Double128VectorTests::beq); - } - @Test(dataProvider = "maskProvider") static void maskHashCodeDouble128VectorTestsSmokeTest(IntFunction fa) { boolean[] a = fa.apply(SPECIES.length()); @@ -5308,23 +5405,6 @@ relativeError)); } } - @DataProvider - public static Object[][] longMaskProvider() { - return new Object[][]{ - {0xFFFFFFFFFFFFFFFFL}, - {0x0000000000000000L}, - {0x5555555555555555L}, - {0x0123456789abcdefL}, - }; - } - - @Test(dataProvider = "longMaskProvider") - static void maskFromToLongDouble128VectorTestsSmokeTest(long inputLong) { - var vmask = VectorMask.fromLong(SPECIES, inputLong); - long outputLong = vmask.toLong(); - Assert.assertEquals(outputLong, (inputLong & (((0xFFFFFFFFFFFFFFFFL >>> (64 - SPECIES.length())))))); - } - @DataProvider public static Object[][] offsetProvider() { return new Object[][]{ diff --git a/test/jdk/jdk/incubator/vector/Double256VectorTests.java b/test/jdk/jdk/incubator/vector/Double256VectorTests.java index e6c3662e0ad..87230330642 100644 --- a/test/jdk/jdk/incubator/vector/Double256VectorTests.java +++ b/test/jdk/jdk/incubator/vector/Double256VectorTests.java @@ -411,6 +411,36 @@ relativeError)); } } + interface FBoolUnOp { + boolean apply(boolean a); + } + + static void assertArraysEquals(boolean[] r, boolean[] a, FBoolUnOp f) { + int i = 0; + try { + for (; i < a.length; i++) { + Assert.assertEquals(r[i], f.apply(a[i])); + } + } catch (AssertionError e) { + Assert.assertEquals(r[i], f.apply(a[i]), "(" + a[i] + ") at index #" + i); + } + } + + interface FBoolBinOp { + boolean apply(boolean a, boolean b); + } + + static void assertArraysEquals(boolean[] r, boolean[] a, boolean[] b, FBoolBinOp f) { + int i = 0; + try { + for (; i < a.length; i++) { + Assert.assertEquals(r[i], f.apply(a[i], b[i])); + } + } catch (AssertionError e) { + Assert.assertEquals(r[i], f.apply(a[i], b[i]), "(" + a[i] + ", " + b[i] + ") at index #" + i); + } + } + interface FBinOp { double apply(double a, double b); } @@ -1187,12 +1217,6 @@ relativeError)); flatMap(fa -> DOUBLE_GENERATORS.stream().skip(1).map(fb -> List.of(fa, fb))). collect(Collectors.toList()); - @DataProvider - public Object[][] boolUnaryOpProvider() { - return BOOL_ARRAY_GENERATORS.stream(). - map(f -> new Object[]{f}). - toArray(Object[][]::new); - } static final List>> DOUBLE_GENERATOR_TRIPLES = DOUBLE_GENERATOR_PAIRS.stream(). @@ -1291,8 +1315,23 @@ relativeError)); } @DataProvider - public Object[][] maskCompareOpProvider() { - return BOOLEAN_MASK_COMPARE_GENERATOR_PAIRS.stream().map(List::toArray). + public Object[][] longMaskProvider() { + return LONG_MASK_GENERATORS.stream(). + map(f -> new Object[]{f}). + toArray(Object[][]::new); + } + + @DataProvider + public Object[][] boolMaskBinaryOpProvider() { + return BOOLEAN_MASK_COMPARE_GENERATOR_PAIRS.stream(). + map(List::toArray). + toArray(Object[][]::new); + } + + @DataProvider + public Object[][] boolMaskUnaryOpProvider() { + return BOOLEAN_MASK_GENERATORS.stream(). + map(f -> new Object[]{f}). toArray(Object[][]::new); } @@ -4806,6 +4845,157 @@ relativeError)); assertArraysEquals(r, a, mask, Double256VectorTests::SQRT); } + static boolean band(boolean a, boolean b) { + return a & b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskandDouble256VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.and(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Double256VectorTests::band); + } + + static boolean bor(boolean a, boolean b) { + return a | b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskorDouble256VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.or(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Double256VectorTests::bor); + } + + static boolean bxor(boolean a, boolean b) { + return a != b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskxorDouble256VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.xor(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Double256VectorTests::bxor); + } + + static boolean bandNot(boolean a, boolean b) { + return a & !b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskandNotDouble256VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.andNot(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Double256VectorTests::bandNot); + } + + static boolean beq(boolean a, boolean b) { + return a == b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskeqDouble256VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.eq(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Double256VectorTests::beq); + } + + static boolean unot(boolean a) { + return !a; + } + + @Test(dataProvider = "boolMaskUnaryOpProvider") + static void masknotDouble256VectorTests(IntFunction fa) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + av.not().intoArray(r, i); + } + } + + assertArraysEquals(r, a, Double256VectorTests::unot); + } + + private static final long LONG_MASK_BITS = 0xFFFFFFFFFFFFFFFFL >>> (64 - SPECIES.length()); + + static void assertArraysEquals(long[] r, long[] a, long bits) { + int i = 0; + try { + for (; i < a.length; i++) { + Assert.assertEquals(r[i], a[i] & bits); + } + } catch (AssertionError e) { + Assert.assertEquals(r[i], a[i] & bits, "(" + a[i] + ") at index #" + i); + } + } + + @Test(dataProvider = "longMaskProvider") + static void maskFromToLongDouble256VectorTests(IntFunction fa) { + long[] a = fa.apply(SPECIES.length()); + long[] r = new long[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i++) { + VectorMask vmask = VectorMask.fromLong(SPECIES, a[i]); + r[i] = vmask.toLong(); + } + } + assertArraysEquals(r, a, LONG_MASK_BITS); + } + @Test(dataProvider = "doubleCompareOpProvider") static void ltDouble256VectorTestsBroadcastSmokeTest(IntFunction fa, IntFunction fb) { double[] a = fa.apply(SPECIES.length()); @@ -5095,115 +5285,22 @@ relativeError)); } } - @Test(dataProvider = "maskCompareOpProvider") - static void maskEqualsDouble256VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskEqualsDouble256VectorTests(IntFunction fa, IntFunction fb) { boolean[] a = fa.apply(SPECIES.length()); boolean[] b = fb.apply(SPECIES.length()); - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - boolean equals = av.equals(bv); - int to = i + SPECIES.length(); - Assert.assertEquals(equals, Arrays.equals(a, i, to, b, i, to)); + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + var av = SPECIES.loadMask(a, i); + var bv = SPECIES.loadMask(b, i); + boolean equals = av.equals(bv); + int to = i + SPECIES.length(); + Assert.assertEquals(equals, Arrays.equals(a, i, to, b, i, to)); + } } } - static boolean band(boolean a, boolean b) { - return a & b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskAndDouble256VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.and(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Double256VectorTests::band); - } - - static boolean bor(boolean a, boolean b) { - return a | b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskOrDouble256VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.or(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Double256VectorTests::bor); - } - - static boolean bxor(boolean a, boolean b) { - return a != b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskXorDouble256VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.xor(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Double256VectorTests::bxor); - } - - static boolean bandNot(boolean a, boolean b) { - return a & !b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskAndNotDouble256VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.andNot(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Double256VectorTests::bandNot); - } - - static boolean beq(boolean a, boolean b) { - return (a == b); - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskEqDouble256VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.eq(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Double256VectorTests::beq); - } - @Test(dataProvider = "maskProvider") static void maskHashCodeDouble256VectorTestsSmokeTest(IntFunction fa) { boolean[] a = fa.apply(SPECIES.length()); @@ -5308,23 +5405,6 @@ relativeError)); } } - @DataProvider - public static Object[][] longMaskProvider() { - return new Object[][]{ - {0xFFFFFFFFFFFFFFFFL}, - {0x0000000000000000L}, - {0x5555555555555555L}, - {0x0123456789abcdefL}, - }; - } - - @Test(dataProvider = "longMaskProvider") - static void maskFromToLongDouble256VectorTestsSmokeTest(long inputLong) { - var vmask = VectorMask.fromLong(SPECIES, inputLong); - long outputLong = vmask.toLong(); - Assert.assertEquals(outputLong, (inputLong & (((0xFFFFFFFFFFFFFFFFL >>> (64 - SPECIES.length())))))); - } - @DataProvider public static Object[][] offsetProvider() { return new Object[][]{ diff --git a/test/jdk/jdk/incubator/vector/Double512VectorTests.java b/test/jdk/jdk/incubator/vector/Double512VectorTests.java index 7c37c9878e8..af8fbf5f51f 100644 --- a/test/jdk/jdk/incubator/vector/Double512VectorTests.java +++ b/test/jdk/jdk/incubator/vector/Double512VectorTests.java @@ -411,6 +411,36 @@ relativeError)); } } + interface FBoolUnOp { + boolean apply(boolean a); + } + + static void assertArraysEquals(boolean[] r, boolean[] a, FBoolUnOp f) { + int i = 0; + try { + for (; i < a.length; i++) { + Assert.assertEquals(r[i], f.apply(a[i])); + } + } catch (AssertionError e) { + Assert.assertEquals(r[i], f.apply(a[i]), "(" + a[i] + ") at index #" + i); + } + } + + interface FBoolBinOp { + boolean apply(boolean a, boolean b); + } + + static void assertArraysEquals(boolean[] r, boolean[] a, boolean[] b, FBoolBinOp f) { + int i = 0; + try { + for (; i < a.length; i++) { + Assert.assertEquals(r[i], f.apply(a[i], b[i])); + } + } catch (AssertionError e) { + Assert.assertEquals(r[i], f.apply(a[i], b[i]), "(" + a[i] + ", " + b[i] + ") at index #" + i); + } + } + interface FBinOp { double apply(double a, double b); } @@ -1187,12 +1217,6 @@ relativeError)); flatMap(fa -> DOUBLE_GENERATORS.stream().skip(1).map(fb -> List.of(fa, fb))). collect(Collectors.toList()); - @DataProvider - public Object[][] boolUnaryOpProvider() { - return BOOL_ARRAY_GENERATORS.stream(). - map(f -> new Object[]{f}). - toArray(Object[][]::new); - } static final List>> DOUBLE_GENERATOR_TRIPLES = DOUBLE_GENERATOR_PAIRS.stream(). @@ -1291,8 +1315,23 @@ relativeError)); } @DataProvider - public Object[][] maskCompareOpProvider() { - return BOOLEAN_MASK_COMPARE_GENERATOR_PAIRS.stream().map(List::toArray). + public Object[][] longMaskProvider() { + return LONG_MASK_GENERATORS.stream(). + map(f -> new Object[]{f}). + toArray(Object[][]::new); + } + + @DataProvider + public Object[][] boolMaskBinaryOpProvider() { + return BOOLEAN_MASK_COMPARE_GENERATOR_PAIRS.stream(). + map(List::toArray). + toArray(Object[][]::new); + } + + @DataProvider + public Object[][] boolMaskUnaryOpProvider() { + return BOOLEAN_MASK_GENERATORS.stream(). + map(f -> new Object[]{f}). toArray(Object[][]::new); } @@ -4806,6 +4845,157 @@ relativeError)); assertArraysEquals(r, a, mask, Double512VectorTests::SQRT); } + static boolean band(boolean a, boolean b) { + return a & b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskandDouble512VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.and(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Double512VectorTests::band); + } + + static boolean bor(boolean a, boolean b) { + return a | b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskorDouble512VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.or(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Double512VectorTests::bor); + } + + static boolean bxor(boolean a, boolean b) { + return a != b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskxorDouble512VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.xor(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Double512VectorTests::bxor); + } + + static boolean bandNot(boolean a, boolean b) { + return a & !b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskandNotDouble512VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.andNot(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Double512VectorTests::bandNot); + } + + static boolean beq(boolean a, boolean b) { + return a == b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskeqDouble512VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.eq(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Double512VectorTests::beq); + } + + static boolean unot(boolean a) { + return !a; + } + + @Test(dataProvider = "boolMaskUnaryOpProvider") + static void masknotDouble512VectorTests(IntFunction fa) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + av.not().intoArray(r, i); + } + } + + assertArraysEquals(r, a, Double512VectorTests::unot); + } + + private static final long LONG_MASK_BITS = 0xFFFFFFFFFFFFFFFFL >>> (64 - SPECIES.length()); + + static void assertArraysEquals(long[] r, long[] a, long bits) { + int i = 0; + try { + for (; i < a.length; i++) { + Assert.assertEquals(r[i], a[i] & bits); + } + } catch (AssertionError e) { + Assert.assertEquals(r[i], a[i] & bits, "(" + a[i] + ") at index #" + i); + } + } + + @Test(dataProvider = "longMaskProvider") + static void maskFromToLongDouble512VectorTests(IntFunction fa) { + long[] a = fa.apply(SPECIES.length()); + long[] r = new long[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i++) { + VectorMask vmask = VectorMask.fromLong(SPECIES, a[i]); + r[i] = vmask.toLong(); + } + } + assertArraysEquals(r, a, LONG_MASK_BITS); + } + @Test(dataProvider = "doubleCompareOpProvider") static void ltDouble512VectorTestsBroadcastSmokeTest(IntFunction fa, IntFunction fb) { double[] a = fa.apply(SPECIES.length()); @@ -5095,115 +5285,22 @@ relativeError)); } } - @Test(dataProvider = "maskCompareOpProvider") - static void maskEqualsDouble512VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskEqualsDouble512VectorTests(IntFunction fa, IntFunction fb) { boolean[] a = fa.apply(SPECIES.length()); boolean[] b = fb.apply(SPECIES.length()); - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - boolean equals = av.equals(bv); - int to = i + SPECIES.length(); - Assert.assertEquals(equals, Arrays.equals(a, i, to, b, i, to)); + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + var av = SPECIES.loadMask(a, i); + var bv = SPECIES.loadMask(b, i); + boolean equals = av.equals(bv); + int to = i + SPECIES.length(); + Assert.assertEquals(equals, Arrays.equals(a, i, to, b, i, to)); + } } } - static boolean band(boolean a, boolean b) { - return a & b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskAndDouble512VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.and(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Double512VectorTests::band); - } - - static boolean bor(boolean a, boolean b) { - return a | b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskOrDouble512VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.or(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Double512VectorTests::bor); - } - - static boolean bxor(boolean a, boolean b) { - return a != b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskXorDouble512VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.xor(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Double512VectorTests::bxor); - } - - static boolean bandNot(boolean a, boolean b) { - return a & !b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskAndNotDouble512VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.andNot(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Double512VectorTests::bandNot); - } - - static boolean beq(boolean a, boolean b) { - return (a == b); - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskEqDouble512VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.eq(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Double512VectorTests::beq); - } - @Test(dataProvider = "maskProvider") static void maskHashCodeDouble512VectorTestsSmokeTest(IntFunction fa) { boolean[] a = fa.apply(SPECIES.length()); @@ -5308,23 +5405,6 @@ relativeError)); } } - @DataProvider - public static Object[][] longMaskProvider() { - return new Object[][]{ - {0xFFFFFFFFFFFFFFFFL}, - {0x0000000000000000L}, - {0x5555555555555555L}, - {0x0123456789abcdefL}, - }; - } - - @Test(dataProvider = "longMaskProvider") - static void maskFromToLongDouble512VectorTestsSmokeTest(long inputLong) { - var vmask = VectorMask.fromLong(SPECIES, inputLong); - long outputLong = vmask.toLong(); - Assert.assertEquals(outputLong, (inputLong & (((0xFFFFFFFFFFFFFFFFL >>> (64 - SPECIES.length())))))); - } - @DataProvider public static Object[][] offsetProvider() { return new Object[][]{ diff --git a/test/jdk/jdk/incubator/vector/Double64VectorTests.java b/test/jdk/jdk/incubator/vector/Double64VectorTests.java index 85b96288b37..67822ae5353 100644 --- a/test/jdk/jdk/incubator/vector/Double64VectorTests.java +++ b/test/jdk/jdk/incubator/vector/Double64VectorTests.java @@ -411,6 +411,36 @@ relativeError)); } } + interface FBoolUnOp { + boolean apply(boolean a); + } + + static void assertArraysEquals(boolean[] r, boolean[] a, FBoolUnOp f) { + int i = 0; + try { + for (; i < a.length; i++) { + Assert.assertEquals(r[i], f.apply(a[i])); + } + } catch (AssertionError e) { + Assert.assertEquals(r[i], f.apply(a[i]), "(" + a[i] + ") at index #" + i); + } + } + + interface FBoolBinOp { + boolean apply(boolean a, boolean b); + } + + static void assertArraysEquals(boolean[] r, boolean[] a, boolean[] b, FBoolBinOp f) { + int i = 0; + try { + for (; i < a.length; i++) { + Assert.assertEquals(r[i], f.apply(a[i], b[i])); + } + } catch (AssertionError e) { + Assert.assertEquals(r[i], f.apply(a[i], b[i]), "(" + a[i] + ", " + b[i] + ") at index #" + i); + } + } + interface FBinOp { double apply(double a, double b); } @@ -1187,12 +1217,6 @@ relativeError)); flatMap(fa -> DOUBLE_GENERATORS.stream().skip(1).map(fb -> List.of(fa, fb))). collect(Collectors.toList()); - @DataProvider - public Object[][] boolUnaryOpProvider() { - return BOOL_ARRAY_GENERATORS.stream(). - map(f -> new Object[]{f}). - toArray(Object[][]::new); - } static final List>> DOUBLE_GENERATOR_TRIPLES = DOUBLE_GENERATOR_PAIRS.stream(). @@ -1291,8 +1315,23 @@ relativeError)); } @DataProvider - public Object[][] maskCompareOpProvider() { - return BOOLEAN_MASK_COMPARE_GENERATOR_PAIRS.stream().map(List::toArray). + public Object[][] longMaskProvider() { + return LONG_MASK_GENERATORS.stream(). + map(f -> new Object[]{f}). + toArray(Object[][]::new); + } + + @DataProvider + public Object[][] boolMaskBinaryOpProvider() { + return BOOLEAN_MASK_COMPARE_GENERATOR_PAIRS.stream(). + map(List::toArray). + toArray(Object[][]::new); + } + + @DataProvider + public Object[][] boolMaskUnaryOpProvider() { + return BOOLEAN_MASK_GENERATORS.stream(). + map(f -> new Object[]{f}). toArray(Object[][]::new); } @@ -4806,6 +4845,157 @@ relativeError)); assertArraysEquals(r, a, mask, Double64VectorTests::SQRT); } + static boolean band(boolean a, boolean b) { + return a & b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskandDouble64VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.and(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Double64VectorTests::band); + } + + static boolean bor(boolean a, boolean b) { + return a | b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskorDouble64VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.or(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Double64VectorTests::bor); + } + + static boolean bxor(boolean a, boolean b) { + return a != b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskxorDouble64VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.xor(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Double64VectorTests::bxor); + } + + static boolean bandNot(boolean a, boolean b) { + return a & !b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskandNotDouble64VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.andNot(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Double64VectorTests::bandNot); + } + + static boolean beq(boolean a, boolean b) { + return a == b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskeqDouble64VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.eq(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Double64VectorTests::beq); + } + + static boolean unot(boolean a) { + return !a; + } + + @Test(dataProvider = "boolMaskUnaryOpProvider") + static void masknotDouble64VectorTests(IntFunction fa) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + av.not().intoArray(r, i); + } + } + + assertArraysEquals(r, a, Double64VectorTests::unot); + } + + private static final long LONG_MASK_BITS = 0xFFFFFFFFFFFFFFFFL >>> (64 - SPECIES.length()); + + static void assertArraysEquals(long[] r, long[] a, long bits) { + int i = 0; + try { + for (; i < a.length; i++) { + Assert.assertEquals(r[i], a[i] & bits); + } + } catch (AssertionError e) { + Assert.assertEquals(r[i], a[i] & bits, "(" + a[i] + ") at index #" + i); + } + } + + @Test(dataProvider = "longMaskProvider") + static void maskFromToLongDouble64VectorTests(IntFunction fa) { + long[] a = fa.apply(SPECIES.length()); + long[] r = new long[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i++) { + VectorMask vmask = VectorMask.fromLong(SPECIES, a[i]); + r[i] = vmask.toLong(); + } + } + assertArraysEquals(r, a, LONG_MASK_BITS); + } + @Test(dataProvider = "doubleCompareOpProvider") static void ltDouble64VectorTestsBroadcastSmokeTest(IntFunction fa, IntFunction fb) { double[] a = fa.apply(SPECIES.length()); @@ -5095,115 +5285,22 @@ relativeError)); } } - @Test(dataProvider = "maskCompareOpProvider") - static void maskEqualsDouble64VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskEqualsDouble64VectorTests(IntFunction fa, IntFunction fb) { boolean[] a = fa.apply(SPECIES.length()); boolean[] b = fb.apply(SPECIES.length()); - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - boolean equals = av.equals(bv); - int to = i + SPECIES.length(); - Assert.assertEquals(equals, Arrays.equals(a, i, to, b, i, to)); + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + var av = SPECIES.loadMask(a, i); + var bv = SPECIES.loadMask(b, i); + boolean equals = av.equals(bv); + int to = i + SPECIES.length(); + Assert.assertEquals(equals, Arrays.equals(a, i, to, b, i, to)); + } } } - static boolean band(boolean a, boolean b) { - return a & b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskAndDouble64VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.and(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Double64VectorTests::band); - } - - static boolean bor(boolean a, boolean b) { - return a | b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskOrDouble64VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.or(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Double64VectorTests::bor); - } - - static boolean bxor(boolean a, boolean b) { - return a != b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskXorDouble64VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.xor(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Double64VectorTests::bxor); - } - - static boolean bandNot(boolean a, boolean b) { - return a & !b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskAndNotDouble64VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.andNot(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Double64VectorTests::bandNot); - } - - static boolean beq(boolean a, boolean b) { - return (a == b); - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskEqDouble64VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.eq(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Double64VectorTests::beq); - } - @Test(dataProvider = "maskProvider") static void maskHashCodeDouble64VectorTestsSmokeTest(IntFunction fa) { boolean[] a = fa.apply(SPECIES.length()); @@ -5308,23 +5405,6 @@ relativeError)); } } - @DataProvider - public static Object[][] longMaskProvider() { - return new Object[][]{ - {0xFFFFFFFFFFFFFFFFL}, - {0x0000000000000000L}, - {0x5555555555555555L}, - {0x0123456789abcdefL}, - }; - } - - @Test(dataProvider = "longMaskProvider") - static void maskFromToLongDouble64VectorTestsSmokeTest(long inputLong) { - var vmask = VectorMask.fromLong(SPECIES, inputLong); - long outputLong = vmask.toLong(); - Assert.assertEquals(outputLong, (inputLong & (((0xFFFFFFFFFFFFFFFFL >>> (64 - SPECIES.length())))))); - } - @DataProvider public static Object[][] offsetProvider() { return new Object[][]{ diff --git a/test/jdk/jdk/incubator/vector/DoubleMaxVectorTests.java b/test/jdk/jdk/incubator/vector/DoubleMaxVectorTests.java index 7245990d66c..5d7ae07c55a 100644 --- a/test/jdk/jdk/incubator/vector/DoubleMaxVectorTests.java +++ b/test/jdk/jdk/incubator/vector/DoubleMaxVectorTests.java @@ -416,6 +416,36 @@ relativeError)); } } + interface FBoolUnOp { + boolean apply(boolean a); + } + + static void assertArraysEquals(boolean[] r, boolean[] a, FBoolUnOp f) { + int i = 0; + try { + for (; i < a.length; i++) { + Assert.assertEquals(r[i], f.apply(a[i])); + } + } catch (AssertionError e) { + Assert.assertEquals(r[i], f.apply(a[i]), "(" + a[i] + ") at index #" + i); + } + } + + interface FBoolBinOp { + boolean apply(boolean a, boolean b); + } + + static void assertArraysEquals(boolean[] r, boolean[] a, boolean[] b, FBoolBinOp f) { + int i = 0; + try { + for (; i < a.length; i++) { + Assert.assertEquals(r[i], f.apply(a[i], b[i])); + } + } catch (AssertionError e) { + Assert.assertEquals(r[i], f.apply(a[i], b[i]), "(" + a[i] + ", " + b[i] + ") at index #" + i); + } + } + interface FBinOp { double apply(double a, double b); } @@ -1192,12 +1222,6 @@ relativeError)); flatMap(fa -> DOUBLE_GENERATORS.stream().skip(1).map(fb -> List.of(fa, fb))). collect(Collectors.toList()); - @DataProvider - public Object[][] boolUnaryOpProvider() { - return BOOL_ARRAY_GENERATORS.stream(). - map(f -> new Object[]{f}). - toArray(Object[][]::new); - } static final List>> DOUBLE_GENERATOR_TRIPLES = DOUBLE_GENERATOR_PAIRS.stream(). @@ -1296,8 +1320,23 @@ relativeError)); } @DataProvider - public Object[][] maskCompareOpProvider() { - return BOOLEAN_MASK_COMPARE_GENERATOR_PAIRS.stream().map(List::toArray). + public Object[][] longMaskProvider() { + return LONG_MASK_GENERATORS.stream(). + map(f -> new Object[]{f}). + toArray(Object[][]::new); + } + + @DataProvider + public Object[][] boolMaskBinaryOpProvider() { + return BOOLEAN_MASK_COMPARE_GENERATOR_PAIRS.stream(). + map(List::toArray). + toArray(Object[][]::new); + } + + @DataProvider + public Object[][] boolMaskUnaryOpProvider() { + return BOOLEAN_MASK_GENERATORS.stream(). + map(f -> new Object[]{f}). toArray(Object[][]::new); } @@ -4811,6 +4850,157 @@ relativeError)); assertArraysEquals(r, a, mask, DoubleMaxVectorTests::SQRT); } + static boolean band(boolean a, boolean b) { + return a & b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskandDoubleMaxVectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.and(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, DoubleMaxVectorTests::band); + } + + static boolean bor(boolean a, boolean b) { + return a | b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskorDoubleMaxVectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.or(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, DoubleMaxVectorTests::bor); + } + + static boolean bxor(boolean a, boolean b) { + return a != b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskxorDoubleMaxVectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.xor(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, DoubleMaxVectorTests::bxor); + } + + static boolean bandNot(boolean a, boolean b) { + return a & !b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskandNotDoubleMaxVectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.andNot(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, DoubleMaxVectorTests::bandNot); + } + + static boolean beq(boolean a, boolean b) { + return a == b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskeqDoubleMaxVectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.eq(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, DoubleMaxVectorTests::beq); + } + + static boolean unot(boolean a) { + return !a; + } + + @Test(dataProvider = "boolMaskUnaryOpProvider") + static void masknotDoubleMaxVectorTests(IntFunction fa) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + av.not().intoArray(r, i); + } + } + + assertArraysEquals(r, a, DoubleMaxVectorTests::unot); + } + + private static final long LONG_MASK_BITS = 0xFFFFFFFFFFFFFFFFL >>> (64 - SPECIES.length()); + + static void assertArraysEquals(long[] r, long[] a, long bits) { + int i = 0; + try { + for (; i < a.length; i++) { + Assert.assertEquals(r[i], a[i] & bits); + } + } catch (AssertionError e) { + Assert.assertEquals(r[i], a[i] & bits, "(" + a[i] + ") at index #" + i); + } + } + + @Test(dataProvider = "longMaskProvider") + static void maskFromToLongDoubleMaxVectorTests(IntFunction fa) { + long[] a = fa.apply(SPECIES.length()); + long[] r = new long[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i++) { + VectorMask vmask = VectorMask.fromLong(SPECIES, a[i]); + r[i] = vmask.toLong(); + } + } + assertArraysEquals(r, a, LONG_MASK_BITS); + } + @Test(dataProvider = "doubleCompareOpProvider") static void ltDoubleMaxVectorTestsBroadcastSmokeTest(IntFunction fa, IntFunction fb) { double[] a = fa.apply(SPECIES.length()); @@ -5100,115 +5290,22 @@ relativeError)); } } - @Test(dataProvider = "maskCompareOpProvider") - static void maskEqualsDoubleMaxVectorTestsSmokeTest(IntFunction fa, IntFunction fb) { + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskEqualsDoubleMaxVectorTests(IntFunction fa, IntFunction fb) { boolean[] a = fa.apply(SPECIES.length()); boolean[] b = fb.apply(SPECIES.length()); - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - boolean equals = av.equals(bv); - int to = i + SPECIES.length(); - Assert.assertEquals(equals, Arrays.equals(a, i, to, b, i, to)); + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + var av = SPECIES.loadMask(a, i); + var bv = SPECIES.loadMask(b, i); + boolean equals = av.equals(bv); + int to = i + SPECIES.length(); + Assert.assertEquals(equals, Arrays.equals(a, i, to, b, i, to)); + } } } - static boolean band(boolean a, boolean b) { - return a & b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskAndDoubleMaxVectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.and(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, DoubleMaxVectorTests::band); - } - - static boolean bor(boolean a, boolean b) { - return a | b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskOrDoubleMaxVectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.or(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, DoubleMaxVectorTests::bor); - } - - static boolean bxor(boolean a, boolean b) { - return a != b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskXorDoubleMaxVectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.xor(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, DoubleMaxVectorTests::bxor); - } - - static boolean bandNot(boolean a, boolean b) { - return a & !b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskAndNotDoubleMaxVectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.andNot(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, DoubleMaxVectorTests::bandNot); - } - - static boolean beq(boolean a, boolean b) { - return (a == b); - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskEqDoubleMaxVectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.eq(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, DoubleMaxVectorTests::beq); - } - @Test(dataProvider = "maskProvider") static void maskHashCodeDoubleMaxVectorTestsSmokeTest(IntFunction fa) { boolean[] a = fa.apply(SPECIES.length()); @@ -5313,7 +5410,6 @@ relativeError)); } } - @DataProvider public static Object[][] offsetProvider() { return new Object[][]{ diff --git a/test/jdk/jdk/incubator/vector/Float128VectorTests.java b/test/jdk/jdk/incubator/vector/Float128VectorTests.java index c4f4ed1b966..0d3ce311a90 100644 --- a/test/jdk/jdk/incubator/vector/Float128VectorTests.java +++ b/test/jdk/jdk/incubator/vector/Float128VectorTests.java @@ -411,6 +411,36 @@ relativeError)); } } + interface FBoolUnOp { + boolean apply(boolean a); + } + + static void assertArraysEquals(boolean[] r, boolean[] a, FBoolUnOp f) { + int i = 0; + try { + for (; i < a.length; i++) { + Assert.assertEquals(r[i], f.apply(a[i])); + } + } catch (AssertionError e) { + Assert.assertEquals(r[i], f.apply(a[i]), "(" + a[i] + ") at index #" + i); + } + } + + interface FBoolBinOp { + boolean apply(boolean a, boolean b); + } + + static void assertArraysEquals(boolean[] r, boolean[] a, boolean[] b, FBoolBinOp f) { + int i = 0; + try { + for (; i < a.length; i++) { + Assert.assertEquals(r[i], f.apply(a[i], b[i])); + } + } catch (AssertionError e) { + Assert.assertEquals(r[i], f.apply(a[i], b[i]), "(" + a[i] + ", " + b[i] + ") at index #" + i); + } + } + interface FBinOp { float apply(float a, float b); } @@ -1198,12 +1228,6 @@ relativeError)); flatMap(fa -> FLOAT_GENERATORS.stream().skip(1).map(fb -> List.of(fa, fb))). collect(Collectors.toList()); - @DataProvider - public Object[][] boolUnaryOpProvider() { - return BOOL_ARRAY_GENERATORS.stream(). - map(f -> new Object[]{f}). - toArray(Object[][]::new); - } static final List>> FLOAT_GENERATOR_TRIPLES = FLOAT_GENERATOR_PAIRS.stream(). @@ -1302,8 +1326,23 @@ relativeError)); } @DataProvider - public Object[][] maskCompareOpProvider() { - return BOOLEAN_MASK_COMPARE_GENERATOR_PAIRS.stream().map(List::toArray). + public Object[][] longMaskProvider() { + return LONG_MASK_GENERATORS.stream(). + map(f -> new Object[]{f}). + toArray(Object[][]::new); + } + + @DataProvider + public Object[][] boolMaskBinaryOpProvider() { + return BOOLEAN_MASK_COMPARE_GENERATOR_PAIRS.stream(). + map(List::toArray). + toArray(Object[][]::new); + } + + @DataProvider + public Object[][] boolMaskUnaryOpProvider() { + return BOOLEAN_MASK_GENERATORS.stream(). + map(f -> new Object[]{f}). toArray(Object[][]::new); } @@ -4775,6 +4814,157 @@ relativeError)); assertArraysEquals(r, a, mask, Float128VectorTests::SQRT); } + static boolean band(boolean a, boolean b) { + return a & b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskandFloat128VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.and(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Float128VectorTests::band); + } + + static boolean bor(boolean a, boolean b) { + return a | b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskorFloat128VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.or(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Float128VectorTests::bor); + } + + static boolean bxor(boolean a, boolean b) { + return a != b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskxorFloat128VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.xor(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Float128VectorTests::bxor); + } + + static boolean bandNot(boolean a, boolean b) { + return a & !b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskandNotFloat128VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.andNot(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Float128VectorTests::bandNot); + } + + static boolean beq(boolean a, boolean b) { + return a == b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskeqFloat128VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.eq(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Float128VectorTests::beq); + } + + static boolean unot(boolean a) { + return !a; + } + + @Test(dataProvider = "boolMaskUnaryOpProvider") + static void masknotFloat128VectorTests(IntFunction fa) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + av.not().intoArray(r, i); + } + } + + assertArraysEquals(r, a, Float128VectorTests::unot); + } + + private static final long LONG_MASK_BITS = 0xFFFFFFFFFFFFFFFFL >>> (64 - SPECIES.length()); + + static void assertArraysEquals(long[] r, long[] a, long bits) { + int i = 0; + try { + for (; i < a.length; i++) { + Assert.assertEquals(r[i], a[i] & bits); + } + } catch (AssertionError e) { + Assert.assertEquals(r[i], a[i] & bits, "(" + a[i] + ") at index #" + i); + } + } + + @Test(dataProvider = "longMaskProvider") + static void maskFromToLongFloat128VectorTests(IntFunction fa) { + long[] a = fa.apply(SPECIES.length()); + long[] r = new long[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i++) { + VectorMask vmask = VectorMask.fromLong(SPECIES, a[i]); + r[i] = vmask.toLong(); + } + } + assertArraysEquals(r, a, LONG_MASK_BITS); + } + @Test(dataProvider = "floatCompareOpProvider") static void ltFloat128VectorTestsBroadcastSmokeTest(IntFunction fa, IntFunction fb) { float[] a = fa.apply(SPECIES.length()); @@ -5074,115 +5264,22 @@ relativeError)); } } - @Test(dataProvider = "maskCompareOpProvider") - static void maskEqualsFloat128VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskEqualsFloat128VectorTests(IntFunction fa, IntFunction fb) { boolean[] a = fa.apply(SPECIES.length()); boolean[] b = fb.apply(SPECIES.length()); - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - boolean equals = av.equals(bv); - int to = i + SPECIES.length(); - Assert.assertEquals(equals, Arrays.equals(a, i, to, b, i, to)); + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + var av = SPECIES.loadMask(a, i); + var bv = SPECIES.loadMask(b, i); + boolean equals = av.equals(bv); + int to = i + SPECIES.length(); + Assert.assertEquals(equals, Arrays.equals(a, i, to, b, i, to)); + } } } - static boolean band(boolean a, boolean b) { - return a & b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskAndFloat128VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.and(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Float128VectorTests::band); - } - - static boolean bor(boolean a, boolean b) { - return a | b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskOrFloat128VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.or(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Float128VectorTests::bor); - } - - static boolean bxor(boolean a, boolean b) { - return a != b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskXorFloat128VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.xor(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Float128VectorTests::bxor); - } - - static boolean bandNot(boolean a, boolean b) { - return a & !b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskAndNotFloat128VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.andNot(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Float128VectorTests::bandNot); - } - - static boolean beq(boolean a, boolean b) { - return (a == b); - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskEqFloat128VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.eq(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Float128VectorTests::beq); - } - @Test(dataProvider = "maskProvider") static void maskHashCodeFloat128VectorTestsSmokeTest(IntFunction fa) { boolean[] a = fa.apply(SPECIES.length()); @@ -5287,23 +5384,6 @@ relativeError)); } } - @DataProvider - public static Object[][] longMaskProvider() { - return new Object[][]{ - {0xFFFFFFFFFFFFFFFFL}, - {0x0000000000000000L}, - {0x5555555555555555L}, - {0x0123456789abcdefL}, - }; - } - - @Test(dataProvider = "longMaskProvider") - static void maskFromToLongFloat128VectorTestsSmokeTest(long inputLong) { - var vmask = VectorMask.fromLong(SPECIES, inputLong); - long outputLong = vmask.toLong(); - Assert.assertEquals(outputLong, (inputLong & (((0xFFFFFFFFFFFFFFFFL >>> (64 - SPECIES.length())))))); - } - @DataProvider public static Object[][] offsetProvider() { return new Object[][]{ diff --git a/test/jdk/jdk/incubator/vector/Float256VectorTests.java b/test/jdk/jdk/incubator/vector/Float256VectorTests.java index 87cbc165d59..88ea856f17b 100644 --- a/test/jdk/jdk/incubator/vector/Float256VectorTests.java +++ b/test/jdk/jdk/incubator/vector/Float256VectorTests.java @@ -411,6 +411,36 @@ relativeError)); } } + interface FBoolUnOp { + boolean apply(boolean a); + } + + static void assertArraysEquals(boolean[] r, boolean[] a, FBoolUnOp f) { + int i = 0; + try { + for (; i < a.length; i++) { + Assert.assertEquals(r[i], f.apply(a[i])); + } + } catch (AssertionError e) { + Assert.assertEquals(r[i], f.apply(a[i]), "(" + a[i] + ") at index #" + i); + } + } + + interface FBoolBinOp { + boolean apply(boolean a, boolean b); + } + + static void assertArraysEquals(boolean[] r, boolean[] a, boolean[] b, FBoolBinOp f) { + int i = 0; + try { + for (; i < a.length; i++) { + Assert.assertEquals(r[i], f.apply(a[i], b[i])); + } + } catch (AssertionError e) { + Assert.assertEquals(r[i], f.apply(a[i], b[i]), "(" + a[i] + ", " + b[i] + ") at index #" + i); + } + } + interface FBinOp { float apply(float a, float b); } @@ -1198,12 +1228,6 @@ relativeError)); flatMap(fa -> FLOAT_GENERATORS.stream().skip(1).map(fb -> List.of(fa, fb))). collect(Collectors.toList()); - @DataProvider - public Object[][] boolUnaryOpProvider() { - return BOOL_ARRAY_GENERATORS.stream(). - map(f -> new Object[]{f}). - toArray(Object[][]::new); - } static final List>> FLOAT_GENERATOR_TRIPLES = FLOAT_GENERATOR_PAIRS.stream(). @@ -1302,8 +1326,23 @@ relativeError)); } @DataProvider - public Object[][] maskCompareOpProvider() { - return BOOLEAN_MASK_COMPARE_GENERATOR_PAIRS.stream().map(List::toArray). + public Object[][] longMaskProvider() { + return LONG_MASK_GENERATORS.stream(). + map(f -> new Object[]{f}). + toArray(Object[][]::new); + } + + @DataProvider + public Object[][] boolMaskBinaryOpProvider() { + return BOOLEAN_MASK_COMPARE_GENERATOR_PAIRS.stream(). + map(List::toArray). + toArray(Object[][]::new); + } + + @DataProvider + public Object[][] boolMaskUnaryOpProvider() { + return BOOLEAN_MASK_GENERATORS.stream(). + map(f -> new Object[]{f}). toArray(Object[][]::new); } @@ -4775,6 +4814,157 @@ relativeError)); assertArraysEquals(r, a, mask, Float256VectorTests::SQRT); } + static boolean band(boolean a, boolean b) { + return a & b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskandFloat256VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.and(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Float256VectorTests::band); + } + + static boolean bor(boolean a, boolean b) { + return a | b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskorFloat256VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.or(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Float256VectorTests::bor); + } + + static boolean bxor(boolean a, boolean b) { + return a != b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskxorFloat256VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.xor(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Float256VectorTests::bxor); + } + + static boolean bandNot(boolean a, boolean b) { + return a & !b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskandNotFloat256VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.andNot(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Float256VectorTests::bandNot); + } + + static boolean beq(boolean a, boolean b) { + return a == b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskeqFloat256VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.eq(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Float256VectorTests::beq); + } + + static boolean unot(boolean a) { + return !a; + } + + @Test(dataProvider = "boolMaskUnaryOpProvider") + static void masknotFloat256VectorTests(IntFunction fa) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + av.not().intoArray(r, i); + } + } + + assertArraysEquals(r, a, Float256VectorTests::unot); + } + + private static final long LONG_MASK_BITS = 0xFFFFFFFFFFFFFFFFL >>> (64 - SPECIES.length()); + + static void assertArraysEquals(long[] r, long[] a, long bits) { + int i = 0; + try { + for (; i < a.length; i++) { + Assert.assertEquals(r[i], a[i] & bits); + } + } catch (AssertionError e) { + Assert.assertEquals(r[i], a[i] & bits, "(" + a[i] + ") at index #" + i); + } + } + + @Test(dataProvider = "longMaskProvider") + static void maskFromToLongFloat256VectorTests(IntFunction fa) { + long[] a = fa.apply(SPECIES.length()); + long[] r = new long[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i++) { + VectorMask vmask = VectorMask.fromLong(SPECIES, a[i]); + r[i] = vmask.toLong(); + } + } + assertArraysEquals(r, a, LONG_MASK_BITS); + } + @Test(dataProvider = "floatCompareOpProvider") static void ltFloat256VectorTestsBroadcastSmokeTest(IntFunction fa, IntFunction fb) { float[] a = fa.apply(SPECIES.length()); @@ -5074,115 +5264,22 @@ relativeError)); } } - @Test(dataProvider = "maskCompareOpProvider") - static void maskEqualsFloat256VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskEqualsFloat256VectorTests(IntFunction fa, IntFunction fb) { boolean[] a = fa.apply(SPECIES.length()); boolean[] b = fb.apply(SPECIES.length()); - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - boolean equals = av.equals(bv); - int to = i + SPECIES.length(); - Assert.assertEquals(equals, Arrays.equals(a, i, to, b, i, to)); + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + var av = SPECIES.loadMask(a, i); + var bv = SPECIES.loadMask(b, i); + boolean equals = av.equals(bv); + int to = i + SPECIES.length(); + Assert.assertEquals(equals, Arrays.equals(a, i, to, b, i, to)); + } } } - static boolean band(boolean a, boolean b) { - return a & b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskAndFloat256VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.and(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Float256VectorTests::band); - } - - static boolean bor(boolean a, boolean b) { - return a | b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskOrFloat256VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.or(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Float256VectorTests::bor); - } - - static boolean bxor(boolean a, boolean b) { - return a != b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskXorFloat256VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.xor(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Float256VectorTests::bxor); - } - - static boolean bandNot(boolean a, boolean b) { - return a & !b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskAndNotFloat256VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.andNot(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Float256VectorTests::bandNot); - } - - static boolean beq(boolean a, boolean b) { - return (a == b); - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskEqFloat256VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.eq(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Float256VectorTests::beq); - } - @Test(dataProvider = "maskProvider") static void maskHashCodeFloat256VectorTestsSmokeTest(IntFunction fa) { boolean[] a = fa.apply(SPECIES.length()); @@ -5287,23 +5384,6 @@ relativeError)); } } - @DataProvider - public static Object[][] longMaskProvider() { - return new Object[][]{ - {0xFFFFFFFFFFFFFFFFL}, - {0x0000000000000000L}, - {0x5555555555555555L}, - {0x0123456789abcdefL}, - }; - } - - @Test(dataProvider = "longMaskProvider") - static void maskFromToLongFloat256VectorTestsSmokeTest(long inputLong) { - var vmask = VectorMask.fromLong(SPECIES, inputLong); - long outputLong = vmask.toLong(); - Assert.assertEquals(outputLong, (inputLong & (((0xFFFFFFFFFFFFFFFFL >>> (64 - SPECIES.length())))))); - } - @DataProvider public static Object[][] offsetProvider() { return new Object[][]{ diff --git a/test/jdk/jdk/incubator/vector/Float512VectorTests.java b/test/jdk/jdk/incubator/vector/Float512VectorTests.java index beb9561d882..cdccbfdd319 100644 --- a/test/jdk/jdk/incubator/vector/Float512VectorTests.java +++ b/test/jdk/jdk/incubator/vector/Float512VectorTests.java @@ -411,6 +411,36 @@ relativeError)); } } + interface FBoolUnOp { + boolean apply(boolean a); + } + + static void assertArraysEquals(boolean[] r, boolean[] a, FBoolUnOp f) { + int i = 0; + try { + for (; i < a.length; i++) { + Assert.assertEquals(r[i], f.apply(a[i])); + } + } catch (AssertionError e) { + Assert.assertEquals(r[i], f.apply(a[i]), "(" + a[i] + ") at index #" + i); + } + } + + interface FBoolBinOp { + boolean apply(boolean a, boolean b); + } + + static void assertArraysEquals(boolean[] r, boolean[] a, boolean[] b, FBoolBinOp f) { + int i = 0; + try { + for (; i < a.length; i++) { + Assert.assertEquals(r[i], f.apply(a[i], b[i])); + } + } catch (AssertionError e) { + Assert.assertEquals(r[i], f.apply(a[i], b[i]), "(" + a[i] + ", " + b[i] + ") at index #" + i); + } + } + interface FBinOp { float apply(float a, float b); } @@ -1198,12 +1228,6 @@ relativeError)); flatMap(fa -> FLOAT_GENERATORS.stream().skip(1).map(fb -> List.of(fa, fb))). collect(Collectors.toList()); - @DataProvider - public Object[][] boolUnaryOpProvider() { - return BOOL_ARRAY_GENERATORS.stream(). - map(f -> new Object[]{f}). - toArray(Object[][]::new); - } static final List>> FLOAT_GENERATOR_TRIPLES = FLOAT_GENERATOR_PAIRS.stream(). @@ -1302,8 +1326,23 @@ relativeError)); } @DataProvider - public Object[][] maskCompareOpProvider() { - return BOOLEAN_MASK_COMPARE_GENERATOR_PAIRS.stream().map(List::toArray). + public Object[][] longMaskProvider() { + return LONG_MASK_GENERATORS.stream(). + map(f -> new Object[]{f}). + toArray(Object[][]::new); + } + + @DataProvider + public Object[][] boolMaskBinaryOpProvider() { + return BOOLEAN_MASK_COMPARE_GENERATOR_PAIRS.stream(). + map(List::toArray). + toArray(Object[][]::new); + } + + @DataProvider + public Object[][] boolMaskUnaryOpProvider() { + return BOOLEAN_MASK_GENERATORS.stream(). + map(f -> new Object[]{f}). toArray(Object[][]::new); } @@ -4775,6 +4814,157 @@ relativeError)); assertArraysEquals(r, a, mask, Float512VectorTests::SQRT); } + static boolean band(boolean a, boolean b) { + return a & b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskandFloat512VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.and(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Float512VectorTests::band); + } + + static boolean bor(boolean a, boolean b) { + return a | b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskorFloat512VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.or(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Float512VectorTests::bor); + } + + static boolean bxor(boolean a, boolean b) { + return a != b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskxorFloat512VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.xor(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Float512VectorTests::bxor); + } + + static boolean bandNot(boolean a, boolean b) { + return a & !b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskandNotFloat512VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.andNot(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Float512VectorTests::bandNot); + } + + static boolean beq(boolean a, boolean b) { + return a == b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskeqFloat512VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.eq(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Float512VectorTests::beq); + } + + static boolean unot(boolean a) { + return !a; + } + + @Test(dataProvider = "boolMaskUnaryOpProvider") + static void masknotFloat512VectorTests(IntFunction fa) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + av.not().intoArray(r, i); + } + } + + assertArraysEquals(r, a, Float512VectorTests::unot); + } + + private static final long LONG_MASK_BITS = 0xFFFFFFFFFFFFFFFFL >>> (64 - SPECIES.length()); + + static void assertArraysEquals(long[] r, long[] a, long bits) { + int i = 0; + try { + for (; i < a.length; i++) { + Assert.assertEquals(r[i], a[i] & bits); + } + } catch (AssertionError e) { + Assert.assertEquals(r[i], a[i] & bits, "(" + a[i] + ") at index #" + i); + } + } + + @Test(dataProvider = "longMaskProvider") + static void maskFromToLongFloat512VectorTests(IntFunction fa) { + long[] a = fa.apply(SPECIES.length()); + long[] r = new long[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i++) { + VectorMask vmask = VectorMask.fromLong(SPECIES, a[i]); + r[i] = vmask.toLong(); + } + } + assertArraysEquals(r, a, LONG_MASK_BITS); + } + @Test(dataProvider = "floatCompareOpProvider") static void ltFloat512VectorTestsBroadcastSmokeTest(IntFunction fa, IntFunction fb) { float[] a = fa.apply(SPECIES.length()); @@ -5074,115 +5264,22 @@ relativeError)); } } - @Test(dataProvider = "maskCompareOpProvider") - static void maskEqualsFloat512VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskEqualsFloat512VectorTests(IntFunction fa, IntFunction fb) { boolean[] a = fa.apply(SPECIES.length()); boolean[] b = fb.apply(SPECIES.length()); - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - boolean equals = av.equals(bv); - int to = i + SPECIES.length(); - Assert.assertEquals(equals, Arrays.equals(a, i, to, b, i, to)); + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + var av = SPECIES.loadMask(a, i); + var bv = SPECIES.loadMask(b, i); + boolean equals = av.equals(bv); + int to = i + SPECIES.length(); + Assert.assertEquals(equals, Arrays.equals(a, i, to, b, i, to)); + } } } - static boolean band(boolean a, boolean b) { - return a & b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskAndFloat512VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.and(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Float512VectorTests::band); - } - - static boolean bor(boolean a, boolean b) { - return a | b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskOrFloat512VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.or(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Float512VectorTests::bor); - } - - static boolean bxor(boolean a, boolean b) { - return a != b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskXorFloat512VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.xor(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Float512VectorTests::bxor); - } - - static boolean bandNot(boolean a, boolean b) { - return a & !b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskAndNotFloat512VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.andNot(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Float512VectorTests::bandNot); - } - - static boolean beq(boolean a, boolean b) { - return (a == b); - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskEqFloat512VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.eq(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Float512VectorTests::beq); - } - @Test(dataProvider = "maskProvider") static void maskHashCodeFloat512VectorTestsSmokeTest(IntFunction fa) { boolean[] a = fa.apply(SPECIES.length()); @@ -5287,23 +5384,6 @@ relativeError)); } } - @DataProvider - public static Object[][] longMaskProvider() { - return new Object[][]{ - {0xFFFFFFFFFFFFFFFFL}, - {0x0000000000000000L}, - {0x5555555555555555L}, - {0x0123456789abcdefL}, - }; - } - - @Test(dataProvider = "longMaskProvider") - static void maskFromToLongFloat512VectorTestsSmokeTest(long inputLong) { - var vmask = VectorMask.fromLong(SPECIES, inputLong); - long outputLong = vmask.toLong(); - Assert.assertEquals(outputLong, (inputLong & (((0xFFFFFFFFFFFFFFFFL >>> (64 - SPECIES.length())))))); - } - @DataProvider public static Object[][] offsetProvider() { return new Object[][]{ diff --git a/test/jdk/jdk/incubator/vector/Float64VectorTests.java b/test/jdk/jdk/incubator/vector/Float64VectorTests.java index ee630abd8e0..056eae1974f 100644 --- a/test/jdk/jdk/incubator/vector/Float64VectorTests.java +++ b/test/jdk/jdk/incubator/vector/Float64VectorTests.java @@ -411,6 +411,36 @@ relativeError)); } } + interface FBoolUnOp { + boolean apply(boolean a); + } + + static void assertArraysEquals(boolean[] r, boolean[] a, FBoolUnOp f) { + int i = 0; + try { + for (; i < a.length; i++) { + Assert.assertEquals(r[i], f.apply(a[i])); + } + } catch (AssertionError e) { + Assert.assertEquals(r[i], f.apply(a[i]), "(" + a[i] + ") at index #" + i); + } + } + + interface FBoolBinOp { + boolean apply(boolean a, boolean b); + } + + static void assertArraysEquals(boolean[] r, boolean[] a, boolean[] b, FBoolBinOp f) { + int i = 0; + try { + for (; i < a.length; i++) { + Assert.assertEquals(r[i], f.apply(a[i], b[i])); + } + } catch (AssertionError e) { + Assert.assertEquals(r[i], f.apply(a[i], b[i]), "(" + a[i] + ", " + b[i] + ") at index #" + i); + } + } + interface FBinOp { float apply(float a, float b); } @@ -1198,12 +1228,6 @@ relativeError)); flatMap(fa -> FLOAT_GENERATORS.stream().skip(1).map(fb -> List.of(fa, fb))). collect(Collectors.toList()); - @DataProvider - public Object[][] boolUnaryOpProvider() { - return BOOL_ARRAY_GENERATORS.stream(). - map(f -> new Object[]{f}). - toArray(Object[][]::new); - } static final List>> FLOAT_GENERATOR_TRIPLES = FLOAT_GENERATOR_PAIRS.stream(). @@ -1302,8 +1326,23 @@ relativeError)); } @DataProvider - public Object[][] maskCompareOpProvider() { - return BOOLEAN_MASK_COMPARE_GENERATOR_PAIRS.stream().map(List::toArray). + public Object[][] longMaskProvider() { + return LONG_MASK_GENERATORS.stream(). + map(f -> new Object[]{f}). + toArray(Object[][]::new); + } + + @DataProvider + public Object[][] boolMaskBinaryOpProvider() { + return BOOLEAN_MASK_COMPARE_GENERATOR_PAIRS.stream(). + map(List::toArray). + toArray(Object[][]::new); + } + + @DataProvider + public Object[][] boolMaskUnaryOpProvider() { + return BOOLEAN_MASK_GENERATORS.stream(). + map(f -> new Object[]{f}). toArray(Object[][]::new); } @@ -4775,6 +4814,157 @@ relativeError)); assertArraysEquals(r, a, mask, Float64VectorTests::SQRT); } + static boolean band(boolean a, boolean b) { + return a & b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskandFloat64VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.and(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Float64VectorTests::band); + } + + static boolean bor(boolean a, boolean b) { + return a | b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskorFloat64VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.or(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Float64VectorTests::bor); + } + + static boolean bxor(boolean a, boolean b) { + return a != b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskxorFloat64VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.xor(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Float64VectorTests::bxor); + } + + static boolean bandNot(boolean a, boolean b) { + return a & !b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskandNotFloat64VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.andNot(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Float64VectorTests::bandNot); + } + + static boolean beq(boolean a, boolean b) { + return a == b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskeqFloat64VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.eq(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Float64VectorTests::beq); + } + + static boolean unot(boolean a) { + return !a; + } + + @Test(dataProvider = "boolMaskUnaryOpProvider") + static void masknotFloat64VectorTests(IntFunction fa) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + av.not().intoArray(r, i); + } + } + + assertArraysEquals(r, a, Float64VectorTests::unot); + } + + private static final long LONG_MASK_BITS = 0xFFFFFFFFFFFFFFFFL >>> (64 - SPECIES.length()); + + static void assertArraysEquals(long[] r, long[] a, long bits) { + int i = 0; + try { + for (; i < a.length; i++) { + Assert.assertEquals(r[i], a[i] & bits); + } + } catch (AssertionError e) { + Assert.assertEquals(r[i], a[i] & bits, "(" + a[i] + ") at index #" + i); + } + } + + @Test(dataProvider = "longMaskProvider") + static void maskFromToLongFloat64VectorTests(IntFunction fa) { + long[] a = fa.apply(SPECIES.length()); + long[] r = new long[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i++) { + VectorMask vmask = VectorMask.fromLong(SPECIES, a[i]); + r[i] = vmask.toLong(); + } + } + assertArraysEquals(r, a, LONG_MASK_BITS); + } + @Test(dataProvider = "floatCompareOpProvider") static void ltFloat64VectorTestsBroadcastSmokeTest(IntFunction fa, IntFunction fb) { float[] a = fa.apply(SPECIES.length()); @@ -5074,115 +5264,22 @@ relativeError)); } } - @Test(dataProvider = "maskCompareOpProvider") - static void maskEqualsFloat64VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskEqualsFloat64VectorTests(IntFunction fa, IntFunction fb) { boolean[] a = fa.apply(SPECIES.length()); boolean[] b = fb.apply(SPECIES.length()); - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - boolean equals = av.equals(bv); - int to = i + SPECIES.length(); - Assert.assertEquals(equals, Arrays.equals(a, i, to, b, i, to)); + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + var av = SPECIES.loadMask(a, i); + var bv = SPECIES.loadMask(b, i); + boolean equals = av.equals(bv); + int to = i + SPECIES.length(); + Assert.assertEquals(equals, Arrays.equals(a, i, to, b, i, to)); + } } } - static boolean band(boolean a, boolean b) { - return a & b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskAndFloat64VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.and(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Float64VectorTests::band); - } - - static boolean bor(boolean a, boolean b) { - return a | b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskOrFloat64VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.or(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Float64VectorTests::bor); - } - - static boolean bxor(boolean a, boolean b) { - return a != b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskXorFloat64VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.xor(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Float64VectorTests::bxor); - } - - static boolean bandNot(boolean a, boolean b) { - return a & !b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskAndNotFloat64VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.andNot(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Float64VectorTests::bandNot); - } - - static boolean beq(boolean a, boolean b) { - return (a == b); - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskEqFloat64VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.eq(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Float64VectorTests::beq); - } - @Test(dataProvider = "maskProvider") static void maskHashCodeFloat64VectorTestsSmokeTest(IntFunction fa) { boolean[] a = fa.apply(SPECIES.length()); @@ -5287,23 +5384,6 @@ relativeError)); } } - @DataProvider - public static Object[][] longMaskProvider() { - return new Object[][]{ - {0xFFFFFFFFFFFFFFFFL}, - {0x0000000000000000L}, - {0x5555555555555555L}, - {0x0123456789abcdefL}, - }; - } - - @Test(dataProvider = "longMaskProvider") - static void maskFromToLongFloat64VectorTestsSmokeTest(long inputLong) { - var vmask = VectorMask.fromLong(SPECIES, inputLong); - long outputLong = vmask.toLong(); - Assert.assertEquals(outputLong, (inputLong & (((0xFFFFFFFFFFFFFFFFL >>> (64 - SPECIES.length())))))); - } - @DataProvider public static Object[][] offsetProvider() { return new Object[][]{ diff --git a/test/jdk/jdk/incubator/vector/FloatMaxVectorTests.java b/test/jdk/jdk/incubator/vector/FloatMaxVectorTests.java index 41e4d6e4a5d..19bd385ca1f 100644 --- a/test/jdk/jdk/incubator/vector/FloatMaxVectorTests.java +++ b/test/jdk/jdk/incubator/vector/FloatMaxVectorTests.java @@ -416,6 +416,36 @@ relativeError)); } } + interface FBoolUnOp { + boolean apply(boolean a); + } + + static void assertArraysEquals(boolean[] r, boolean[] a, FBoolUnOp f) { + int i = 0; + try { + for (; i < a.length; i++) { + Assert.assertEquals(r[i], f.apply(a[i])); + } + } catch (AssertionError e) { + Assert.assertEquals(r[i], f.apply(a[i]), "(" + a[i] + ") at index #" + i); + } + } + + interface FBoolBinOp { + boolean apply(boolean a, boolean b); + } + + static void assertArraysEquals(boolean[] r, boolean[] a, boolean[] b, FBoolBinOp f) { + int i = 0; + try { + for (; i < a.length; i++) { + Assert.assertEquals(r[i], f.apply(a[i], b[i])); + } + } catch (AssertionError e) { + Assert.assertEquals(r[i], f.apply(a[i], b[i]), "(" + a[i] + ", " + b[i] + ") at index #" + i); + } + } + interface FBinOp { float apply(float a, float b); } @@ -1203,12 +1233,6 @@ relativeError)); flatMap(fa -> FLOAT_GENERATORS.stream().skip(1).map(fb -> List.of(fa, fb))). collect(Collectors.toList()); - @DataProvider - public Object[][] boolUnaryOpProvider() { - return BOOL_ARRAY_GENERATORS.stream(). - map(f -> new Object[]{f}). - toArray(Object[][]::new); - } static final List>> FLOAT_GENERATOR_TRIPLES = FLOAT_GENERATOR_PAIRS.stream(). @@ -1307,8 +1331,23 @@ relativeError)); } @DataProvider - public Object[][] maskCompareOpProvider() { - return BOOLEAN_MASK_COMPARE_GENERATOR_PAIRS.stream().map(List::toArray). + public Object[][] longMaskProvider() { + return LONG_MASK_GENERATORS.stream(). + map(f -> new Object[]{f}). + toArray(Object[][]::new); + } + + @DataProvider + public Object[][] boolMaskBinaryOpProvider() { + return BOOLEAN_MASK_COMPARE_GENERATOR_PAIRS.stream(). + map(List::toArray). + toArray(Object[][]::new); + } + + @DataProvider + public Object[][] boolMaskUnaryOpProvider() { + return BOOLEAN_MASK_GENERATORS.stream(). + map(f -> new Object[]{f}). toArray(Object[][]::new); } @@ -4780,6 +4819,157 @@ relativeError)); assertArraysEquals(r, a, mask, FloatMaxVectorTests::SQRT); } + static boolean band(boolean a, boolean b) { + return a & b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskandFloatMaxVectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.and(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, FloatMaxVectorTests::band); + } + + static boolean bor(boolean a, boolean b) { + return a | b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskorFloatMaxVectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.or(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, FloatMaxVectorTests::bor); + } + + static boolean bxor(boolean a, boolean b) { + return a != b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskxorFloatMaxVectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.xor(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, FloatMaxVectorTests::bxor); + } + + static boolean bandNot(boolean a, boolean b) { + return a & !b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskandNotFloatMaxVectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.andNot(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, FloatMaxVectorTests::bandNot); + } + + static boolean beq(boolean a, boolean b) { + return a == b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskeqFloatMaxVectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.eq(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, FloatMaxVectorTests::beq); + } + + static boolean unot(boolean a) { + return !a; + } + + @Test(dataProvider = "boolMaskUnaryOpProvider") + static void masknotFloatMaxVectorTests(IntFunction fa) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + av.not().intoArray(r, i); + } + } + + assertArraysEquals(r, a, FloatMaxVectorTests::unot); + } + + private static final long LONG_MASK_BITS = 0xFFFFFFFFFFFFFFFFL >>> (64 - SPECIES.length()); + + static void assertArraysEquals(long[] r, long[] a, long bits) { + int i = 0; + try { + for (; i < a.length; i++) { + Assert.assertEquals(r[i], a[i] & bits); + } + } catch (AssertionError e) { + Assert.assertEquals(r[i], a[i] & bits, "(" + a[i] + ") at index #" + i); + } + } + + @Test(dataProvider = "longMaskProvider") + static void maskFromToLongFloatMaxVectorTests(IntFunction fa) { + long[] a = fa.apply(SPECIES.length()); + long[] r = new long[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i++) { + VectorMask vmask = VectorMask.fromLong(SPECIES, a[i]); + r[i] = vmask.toLong(); + } + } + assertArraysEquals(r, a, LONG_MASK_BITS); + } + @Test(dataProvider = "floatCompareOpProvider") static void ltFloatMaxVectorTestsBroadcastSmokeTest(IntFunction fa, IntFunction fb) { float[] a = fa.apply(SPECIES.length()); @@ -5079,115 +5269,22 @@ relativeError)); } } - @Test(dataProvider = "maskCompareOpProvider") - static void maskEqualsFloatMaxVectorTestsSmokeTest(IntFunction fa, IntFunction fb) { + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskEqualsFloatMaxVectorTests(IntFunction fa, IntFunction fb) { boolean[] a = fa.apply(SPECIES.length()); boolean[] b = fb.apply(SPECIES.length()); - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - boolean equals = av.equals(bv); - int to = i + SPECIES.length(); - Assert.assertEquals(equals, Arrays.equals(a, i, to, b, i, to)); + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + var av = SPECIES.loadMask(a, i); + var bv = SPECIES.loadMask(b, i); + boolean equals = av.equals(bv); + int to = i + SPECIES.length(); + Assert.assertEquals(equals, Arrays.equals(a, i, to, b, i, to)); + } } } - static boolean band(boolean a, boolean b) { - return a & b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskAndFloatMaxVectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.and(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, FloatMaxVectorTests::band); - } - - static boolean bor(boolean a, boolean b) { - return a | b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskOrFloatMaxVectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.or(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, FloatMaxVectorTests::bor); - } - - static boolean bxor(boolean a, boolean b) { - return a != b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskXorFloatMaxVectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.xor(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, FloatMaxVectorTests::bxor); - } - - static boolean bandNot(boolean a, boolean b) { - return a & !b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskAndNotFloatMaxVectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.andNot(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, FloatMaxVectorTests::bandNot); - } - - static boolean beq(boolean a, boolean b) { - return (a == b); - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskEqFloatMaxVectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.eq(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, FloatMaxVectorTests::beq); - } - @Test(dataProvider = "maskProvider") static void maskHashCodeFloatMaxVectorTestsSmokeTest(IntFunction fa) { boolean[] a = fa.apply(SPECIES.length()); @@ -5292,7 +5389,6 @@ relativeError)); } } - @DataProvider public static Object[][] offsetProvider() { return new Object[][]{ diff --git a/test/jdk/jdk/incubator/vector/Int128VectorTests.java b/test/jdk/jdk/incubator/vector/Int128VectorTests.java index d6bca96ea6e..1bf3203790c 100644 --- a/test/jdk/jdk/incubator/vector/Int128VectorTests.java +++ b/test/jdk/jdk/incubator/vector/Int128VectorTests.java @@ -393,6 +393,36 @@ public class Int128VectorTests extends AbstractVectorTest { } } + interface FBoolUnOp { + boolean apply(boolean a); + } + + static void assertArraysEquals(boolean[] r, boolean[] a, FBoolUnOp f) { + int i = 0; + try { + for (; i < a.length; i++) { + Assert.assertEquals(r[i], f.apply(a[i])); + } + } catch (AssertionError e) { + Assert.assertEquals(r[i], f.apply(a[i]), "(" + a[i] + ") at index #" + i); + } + } + + interface FBoolBinOp { + boolean apply(boolean a, boolean b); + } + + static void assertArraysEquals(boolean[] r, boolean[] a, boolean[] b, FBoolBinOp f) { + int i = 0; + try { + for (; i < a.length; i++) { + Assert.assertEquals(r[i], f.apply(a[i], b[i])); + } + } catch (AssertionError e) { + Assert.assertEquals(r[i], f.apply(a[i], b[i]), "(" + a[i] + ", " + b[i] + ") at index #" + i); + } + } + interface FBinOp { int apply(int a, int b); } @@ -1085,12 +1115,6 @@ public class Int128VectorTests extends AbstractVectorTest { .flatMap(pair -> INT_SATURATING_GENERATORS_ASSOC.stream().map(f -> List.of(pair.get(0), pair.get(1), f))) .collect(Collectors.toList()); - @DataProvider - public Object[][] boolUnaryOpProvider() { - return BOOL_ARRAY_GENERATORS.stream(). - map(f -> new Object[]{f}). - toArray(Object[][]::new); - } static final List>> INT_GENERATOR_TRIPLES = INT_GENERATOR_PAIRS.stream(). @@ -1222,8 +1246,23 @@ public class Int128VectorTests extends AbstractVectorTest { } @DataProvider - public Object[][] maskCompareOpProvider() { - return BOOLEAN_MASK_COMPARE_GENERATOR_PAIRS.stream().map(List::toArray). + public Object[][] longMaskProvider() { + return LONG_MASK_GENERATORS.stream(). + map(f -> new Object[]{f}). + toArray(Object[][]::new); + } + + @DataProvider + public Object[][] boolMaskBinaryOpProvider() { + return BOOLEAN_MASK_COMPARE_GENERATOR_PAIRS.stream(). + map(List::toArray). + toArray(Object[][]::new); + } + + @DataProvider + public Object[][] boolMaskUnaryOpProvider() { + return BOOLEAN_MASK_GENERATORS.stream(). + map(f -> new Object[]{f}). toArray(Object[][]::new); } @@ -4508,7 +4547,7 @@ public class Int128VectorTests extends AbstractVectorTest { return res; } - @Test(dataProvider = "boolUnaryOpProvider") + @Test(dataProvider = "boolMaskUnaryOpProvider") static void anyTrueInt128VectorTests(IntFunction fm) { boolean[] mask = fm.apply(SPECIES.length()); boolean[] r = fmr.apply(SPECIES.length()); @@ -4532,7 +4571,7 @@ public class Int128VectorTests extends AbstractVectorTest { return res; } - @Test(dataProvider = "boolUnaryOpProvider") + @Test(dataProvider = "boolMaskUnaryOpProvider") static void allTrueInt128VectorTests(IntFunction fm) { boolean[] mask = fm.apply(SPECIES.length()); boolean[] r = fmr.apply(SPECIES.length()); @@ -6434,6 +6473,157 @@ public class Int128VectorTests extends AbstractVectorTest { assertArraysEquals(r, a, mask, Int128VectorTests::REVERSE_BYTES); } + static boolean band(boolean a, boolean b) { + return a & b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskandInt128VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.and(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Int128VectorTests::band); + } + + static boolean bor(boolean a, boolean b) { + return a | b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskorInt128VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.or(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Int128VectorTests::bor); + } + + static boolean bxor(boolean a, boolean b) { + return a != b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskxorInt128VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.xor(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Int128VectorTests::bxor); + } + + static boolean bandNot(boolean a, boolean b) { + return a & !b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskandNotInt128VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.andNot(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Int128VectorTests::bandNot); + } + + static boolean beq(boolean a, boolean b) { + return a == b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskeqInt128VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.eq(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Int128VectorTests::beq); + } + + static boolean unot(boolean a) { + return !a; + } + + @Test(dataProvider = "boolMaskUnaryOpProvider") + static void masknotInt128VectorTests(IntFunction fa) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + av.not().intoArray(r, i); + } + } + + assertArraysEquals(r, a, Int128VectorTests::unot); + } + + private static final long LONG_MASK_BITS = 0xFFFFFFFFFFFFFFFFL >>> (64 - SPECIES.length()); + + static void assertArraysEquals(long[] r, long[] a, long bits) { + int i = 0; + try { + for (; i < a.length; i++) { + Assert.assertEquals(r[i], a[i] & bits); + } + } catch (AssertionError e) { + Assert.assertEquals(r[i], a[i] & bits, "(" + a[i] + ") at index #" + i); + } + } + + @Test(dataProvider = "longMaskProvider") + static void maskFromToLongInt128VectorTests(IntFunction fa) { + long[] a = fa.apply(SPECIES.length()); + long[] r = new long[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i++) { + VectorMask vmask = VectorMask.fromLong(SPECIES, a[i]); + r[i] = vmask.toLong(); + } + } + assertArraysEquals(r, a, LONG_MASK_BITS); + } + @Test(dataProvider = "intCompareOpProvider") static void ltInt128VectorTestsBroadcastSmokeTest(IntFunction fa, IntFunction fb) { int[] a = fa.apply(SPECIES.length()); @@ -6733,115 +6923,22 @@ public class Int128VectorTests extends AbstractVectorTest { } } - @Test(dataProvider = "maskCompareOpProvider") - static void maskEqualsInt128VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskEqualsInt128VectorTests(IntFunction fa, IntFunction fb) { boolean[] a = fa.apply(SPECIES.length()); boolean[] b = fb.apply(SPECIES.length()); - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - boolean equals = av.equals(bv); - int to = i + SPECIES.length(); - Assert.assertEquals(equals, Arrays.equals(a, i, to, b, i, to)); + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + var av = SPECIES.loadMask(a, i); + var bv = SPECIES.loadMask(b, i); + boolean equals = av.equals(bv); + int to = i + SPECIES.length(); + Assert.assertEquals(equals, Arrays.equals(a, i, to, b, i, to)); + } } } - static boolean band(boolean a, boolean b) { - return a & b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskAndInt128VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.and(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Int128VectorTests::band); - } - - static boolean bor(boolean a, boolean b) { - return a | b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskOrInt128VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.or(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Int128VectorTests::bor); - } - - static boolean bxor(boolean a, boolean b) { - return a != b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskXorInt128VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.xor(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Int128VectorTests::bxor); - } - - static boolean bandNot(boolean a, boolean b) { - return a & !b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskAndNotInt128VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.andNot(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Int128VectorTests::bandNot); - } - - static boolean beq(boolean a, boolean b) { - return (a == b); - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskEqInt128VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.eq(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Int128VectorTests::beq); - } - @Test(dataProvider = "maskProvider") static void maskHashCodeInt128VectorTestsSmokeTest(IntFunction fa) { boolean[] a = fa.apply(SPECIES.length()); @@ -6946,23 +7043,6 @@ public class Int128VectorTests extends AbstractVectorTest { } } - @DataProvider - public static Object[][] longMaskProvider() { - return new Object[][]{ - {0xFFFFFFFFFFFFFFFFL}, - {0x0000000000000000L}, - {0x5555555555555555L}, - {0x0123456789abcdefL}, - }; - } - - @Test(dataProvider = "longMaskProvider") - static void maskFromToLongInt128VectorTestsSmokeTest(long inputLong) { - var vmask = VectorMask.fromLong(SPECIES, inputLong); - long outputLong = vmask.toLong(); - Assert.assertEquals(outputLong, (inputLong & (((0xFFFFFFFFFFFFFFFFL >>> (64 - SPECIES.length())))))); - } - @DataProvider public static Object[][] offsetProvider() { return new Object[][]{ diff --git a/test/jdk/jdk/incubator/vector/Int256VectorTests.java b/test/jdk/jdk/incubator/vector/Int256VectorTests.java index ac98217b714..5973fec7e57 100644 --- a/test/jdk/jdk/incubator/vector/Int256VectorTests.java +++ b/test/jdk/jdk/incubator/vector/Int256VectorTests.java @@ -393,6 +393,36 @@ public class Int256VectorTests extends AbstractVectorTest { } } + interface FBoolUnOp { + boolean apply(boolean a); + } + + static void assertArraysEquals(boolean[] r, boolean[] a, FBoolUnOp f) { + int i = 0; + try { + for (; i < a.length; i++) { + Assert.assertEquals(r[i], f.apply(a[i])); + } + } catch (AssertionError e) { + Assert.assertEquals(r[i], f.apply(a[i]), "(" + a[i] + ") at index #" + i); + } + } + + interface FBoolBinOp { + boolean apply(boolean a, boolean b); + } + + static void assertArraysEquals(boolean[] r, boolean[] a, boolean[] b, FBoolBinOp f) { + int i = 0; + try { + for (; i < a.length; i++) { + Assert.assertEquals(r[i], f.apply(a[i], b[i])); + } + } catch (AssertionError e) { + Assert.assertEquals(r[i], f.apply(a[i], b[i]), "(" + a[i] + ", " + b[i] + ") at index #" + i); + } + } + interface FBinOp { int apply(int a, int b); } @@ -1085,12 +1115,6 @@ public class Int256VectorTests extends AbstractVectorTest { .flatMap(pair -> INT_SATURATING_GENERATORS_ASSOC.stream().map(f -> List.of(pair.get(0), pair.get(1), f))) .collect(Collectors.toList()); - @DataProvider - public Object[][] boolUnaryOpProvider() { - return BOOL_ARRAY_GENERATORS.stream(). - map(f -> new Object[]{f}). - toArray(Object[][]::new); - } static final List>> INT_GENERATOR_TRIPLES = INT_GENERATOR_PAIRS.stream(). @@ -1222,8 +1246,23 @@ public class Int256VectorTests extends AbstractVectorTest { } @DataProvider - public Object[][] maskCompareOpProvider() { - return BOOLEAN_MASK_COMPARE_GENERATOR_PAIRS.stream().map(List::toArray). + public Object[][] longMaskProvider() { + return LONG_MASK_GENERATORS.stream(). + map(f -> new Object[]{f}). + toArray(Object[][]::new); + } + + @DataProvider + public Object[][] boolMaskBinaryOpProvider() { + return BOOLEAN_MASK_COMPARE_GENERATOR_PAIRS.stream(). + map(List::toArray). + toArray(Object[][]::new); + } + + @DataProvider + public Object[][] boolMaskUnaryOpProvider() { + return BOOLEAN_MASK_GENERATORS.stream(). + map(f -> new Object[]{f}). toArray(Object[][]::new); } @@ -4508,7 +4547,7 @@ public class Int256VectorTests extends AbstractVectorTest { return res; } - @Test(dataProvider = "boolUnaryOpProvider") + @Test(dataProvider = "boolMaskUnaryOpProvider") static void anyTrueInt256VectorTests(IntFunction fm) { boolean[] mask = fm.apply(SPECIES.length()); boolean[] r = fmr.apply(SPECIES.length()); @@ -4532,7 +4571,7 @@ public class Int256VectorTests extends AbstractVectorTest { return res; } - @Test(dataProvider = "boolUnaryOpProvider") + @Test(dataProvider = "boolMaskUnaryOpProvider") static void allTrueInt256VectorTests(IntFunction fm) { boolean[] mask = fm.apply(SPECIES.length()); boolean[] r = fmr.apply(SPECIES.length()); @@ -6434,6 +6473,157 @@ public class Int256VectorTests extends AbstractVectorTest { assertArraysEquals(r, a, mask, Int256VectorTests::REVERSE_BYTES); } + static boolean band(boolean a, boolean b) { + return a & b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskandInt256VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.and(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Int256VectorTests::band); + } + + static boolean bor(boolean a, boolean b) { + return a | b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskorInt256VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.or(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Int256VectorTests::bor); + } + + static boolean bxor(boolean a, boolean b) { + return a != b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskxorInt256VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.xor(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Int256VectorTests::bxor); + } + + static boolean bandNot(boolean a, boolean b) { + return a & !b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskandNotInt256VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.andNot(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Int256VectorTests::bandNot); + } + + static boolean beq(boolean a, boolean b) { + return a == b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskeqInt256VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.eq(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Int256VectorTests::beq); + } + + static boolean unot(boolean a) { + return !a; + } + + @Test(dataProvider = "boolMaskUnaryOpProvider") + static void masknotInt256VectorTests(IntFunction fa) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + av.not().intoArray(r, i); + } + } + + assertArraysEquals(r, a, Int256VectorTests::unot); + } + + private static final long LONG_MASK_BITS = 0xFFFFFFFFFFFFFFFFL >>> (64 - SPECIES.length()); + + static void assertArraysEquals(long[] r, long[] a, long bits) { + int i = 0; + try { + for (; i < a.length; i++) { + Assert.assertEquals(r[i], a[i] & bits); + } + } catch (AssertionError e) { + Assert.assertEquals(r[i], a[i] & bits, "(" + a[i] + ") at index #" + i); + } + } + + @Test(dataProvider = "longMaskProvider") + static void maskFromToLongInt256VectorTests(IntFunction fa) { + long[] a = fa.apply(SPECIES.length()); + long[] r = new long[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i++) { + VectorMask vmask = VectorMask.fromLong(SPECIES, a[i]); + r[i] = vmask.toLong(); + } + } + assertArraysEquals(r, a, LONG_MASK_BITS); + } + @Test(dataProvider = "intCompareOpProvider") static void ltInt256VectorTestsBroadcastSmokeTest(IntFunction fa, IntFunction fb) { int[] a = fa.apply(SPECIES.length()); @@ -6733,115 +6923,22 @@ public class Int256VectorTests extends AbstractVectorTest { } } - @Test(dataProvider = "maskCompareOpProvider") - static void maskEqualsInt256VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskEqualsInt256VectorTests(IntFunction fa, IntFunction fb) { boolean[] a = fa.apply(SPECIES.length()); boolean[] b = fb.apply(SPECIES.length()); - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - boolean equals = av.equals(bv); - int to = i + SPECIES.length(); - Assert.assertEquals(equals, Arrays.equals(a, i, to, b, i, to)); + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + var av = SPECIES.loadMask(a, i); + var bv = SPECIES.loadMask(b, i); + boolean equals = av.equals(bv); + int to = i + SPECIES.length(); + Assert.assertEquals(equals, Arrays.equals(a, i, to, b, i, to)); + } } } - static boolean band(boolean a, boolean b) { - return a & b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskAndInt256VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.and(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Int256VectorTests::band); - } - - static boolean bor(boolean a, boolean b) { - return a | b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskOrInt256VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.or(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Int256VectorTests::bor); - } - - static boolean bxor(boolean a, boolean b) { - return a != b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskXorInt256VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.xor(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Int256VectorTests::bxor); - } - - static boolean bandNot(boolean a, boolean b) { - return a & !b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskAndNotInt256VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.andNot(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Int256VectorTests::bandNot); - } - - static boolean beq(boolean a, boolean b) { - return (a == b); - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskEqInt256VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.eq(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Int256VectorTests::beq); - } - @Test(dataProvider = "maskProvider") static void maskHashCodeInt256VectorTestsSmokeTest(IntFunction fa) { boolean[] a = fa.apply(SPECIES.length()); @@ -6946,23 +7043,6 @@ public class Int256VectorTests extends AbstractVectorTest { } } - @DataProvider - public static Object[][] longMaskProvider() { - return new Object[][]{ - {0xFFFFFFFFFFFFFFFFL}, - {0x0000000000000000L}, - {0x5555555555555555L}, - {0x0123456789abcdefL}, - }; - } - - @Test(dataProvider = "longMaskProvider") - static void maskFromToLongInt256VectorTestsSmokeTest(long inputLong) { - var vmask = VectorMask.fromLong(SPECIES, inputLong); - long outputLong = vmask.toLong(); - Assert.assertEquals(outputLong, (inputLong & (((0xFFFFFFFFFFFFFFFFL >>> (64 - SPECIES.length())))))); - } - @DataProvider public static Object[][] offsetProvider() { return new Object[][]{ diff --git a/test/jdk/jdk/incubator/vector/Int512VectorTests.java b/test/jdk/jdk/incubator/vector/Int512VectorTests.java index b56236db322..a1e969fc852 100644 --- a/test/jdk/jdk/incubator/vector/Int512VectorTests.java +++ b/test/jdk/jdk/incubator/vector/Int512VectorTests.java @@ -393,6 +393,36 @@ public class Int512VectorTests extends AbstractVectorTest { } } + interface FBoolUnOp { + boolean apply(boolean a); + } + + static void assertArraysEquals(boolean[] r, boolean[] a, FBoolUnOp f) { + int i = 0; + try { + for (; i < a.length; i++) { + Assert.assertEquals(r[i], f.apply(a[i])); + } + } catch (AssertionError e) { + Assert.assertEquals(r[i], f.apply(a[i]), "(" + a[i] + ") at index #" + i); + } + } + + interface FBoolBinOp { + boolean apply(boolean a, boolean b); + } + + static void assertArraysEquals(boolean[] r, boolean[] a, boolean[] b, FBoolBinOp f) { + int i = 0; + try { + for (; i < a.length; i++) { + Assert.assertEquals(r[i], f.apply(a[i], b[i])); + } + } catch (AssertionError e) { + Assert.assertEquals(r[i], f.apply(a[i], b[i]), "(" + a[i] + ", " + b[i] + ") at index #" + i); + } + } + interface FBinOp { int apply(int a, int b); } @@ -1085,12 +1115,6 @@ public class Int512VectorTests extends AbstractVectorTest { .flatMap(pair -> INT_SATURATING_GENERATORS_ASSOC.stream().map(f -> List.of(pair.get(0), pair.get(1), f))) .collect(Collectors.toList()); - @DataProvider - public Object[][] boolUnaryOpProvider() { - return BOOL_ARRAY_GENERATORS.stream(). - map(f -> new Object[]{f}). - toArray(Object[][]::new); - } static final List>> INT_GENERATOR_TRIPLES = INT_GENERATOR_PAIRS.stream(). @@ -1222,8 +1246,23 @@ public class Int512VectorTests extends AbstractVectorTest { } @DataProvider - public Object[][] maskCompareOpProvider() { - return BOOLEAN_MASK_COMPARE_GENERATOR_PAIRS.stream().map(List::toArray). + public Object[][] longMaskProvider() { + return LONG_MASK_GENERATORS.stream(). + map(f -> new Object[]{f}). + toArray(Object[][]::new); + } + + @DataProvider + public Object[][] boolMaskBinaryOpProvider() { + return BOOLEAN_MASK_COMPARE_GENERATOR_PAIRS.stream(). + map(List::toArray). + toArray(Object[][]::new); + } + + @DataProvider + public Object[][] boolMaskUnaryOpProvider() { + return BOOLEAN_MASK_GENERATORS.stream(). + map(f -> new Object[]{f}). toArray(Object[][]::new); } @@ -4508,7 +4547,7 @@ public class Int512VectorTests extends AbstractVectorTest { return res; } - @Test(dataProvider = "boolUnaryOpProvider") + @Test(dataProvider = "boolMaskUnaryOpProvider") static void anyTrueInt512VectorTests(IntFunction fm) { boolean[] mask = fm.apply(SPECIES.length()); boolean[] r = fmr.apply(SPECIES.length()); @@ -4532,7 +4571,7 @@ public class Int512VectorTests extends AbstractVectorTest { return res; } - @Test(dataProvider = "boolUnaryOpProvider") + @Test(dataProvider = "boolMaskUnaryOpProvider") static void allTrueInt512VectorTests(IntFunction fm) { boolean[] mask = fm.apply(SPECIES.length()); boolean[] r = fmr.apply(SPECIES.length()); @@ -6434,6 +6473,157 @@ public class Int512VectorTests extends AbstractVectorTest { assertArraysEquals(r, a, mask, Int512VectorTests::REVERSE_BYTES); } + static boolean band(boolean a, boolean b) { + return a & b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskandInt512VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.and(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Int512VectorTests::band); + } + + static boolean bor(boolean a, boolean b) { + return a | b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskorInt512VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.or(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Int512VectorTests::bor); + } + + static boolean bxor(boolean a, boolean b) { + return a != b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskxorInt512VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.xor(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Int512VectorTests::bxor); + } + + static boolean bandNot(boolean a, boolean b) { + return a & !b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskandNotInt512VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.andNot(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Int512VectorTests::bandNot); + } + + static boolean beq(boolean a, boolean b) { + return a == b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskeqInt512VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.eq(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Int512VectorTests::beq); + } + + static boolean unot(boolean a) { + return !a; + } + + @Test(dataProvider = "boolMaskUnaryOpProvider") + static void masknotInt512VectorTests(IntFunction fa) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + av.not().intoArray(r, i); + } + } + + assertArraysEquals(r, a, Int512VectorTests::unot); + } + + private static final long LONG_MASK_BITS = 0xFFFFFFFFFFFFFFFFL >>> (64 - SPECIES.length()); + + static void assertArraysEquals(long[] r, long[] a, long bits) { + int i = 0; + try { + for (; i < a.length; i++) { + Assert.assertEquals(r[i], a[i] & bits); + } + } catch (AssertionError e) { + Assert.assertEquals(r[i], a[i] & bits, "(" + a[i] + ") at index #" + i); + } + } + + @Test(dataProvider = "longMaskProvider") + static void maskFromToLongInt512VectorTests(IntFunction fa) { + long[] a = fa.apply(SPECIES.length()); + long[] r = new long[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i++) { + VectorMask vmask = VectorMask.fromLong(SPECIES, a[i]); + r[i] = vmask.toLong(); + } + } + assertArraysEquals(r, a, LONG_MASK_BITS); + } + @Test(dataProvider = "intCompareOpProvider") static void ltInt512VectorTestsBroadcastSmokeTest(IntFunction fa, IntFunction fb) { int[] a = fa.apply(SPECIES.length()); @@ -6733,115 +6923,22 @@ public class Int512VectorTests extends AbstractVectorTest { } } - @Test(dataProvider = "maskCompareOpProvider") - static void maskEqualsInt512VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskEqualsInt512VectorTests(IntFunction fa, IntFunction fb) { boolean[] a = fa.apply(SPECIES.length()); boolean[] b = fb.apply(SPECIES.length()); - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - boolean equals = av.equals(bv); - int to = i + SPECIES.length(); - Assert.assertEquals(equals, Arrays.equals(a, i, to, b, i, to)); + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + var av = SPECIES.loadMask(a, i); + var bv = SPECIES.loadMask(b, i); + boolean equals = av.equals(bv); + int to = i + SPECIES.length(); + Assert.assertEquals(equals, Arrays.equals(a, i, to, b, i, to)); + } } } - static boolean band(boolean a, boolean b) { - return a & b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskAndInt512VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.and(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Int512VectorTests::band); - } - - static boolean bor(boolean a, boolean b) { - return a | b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskOrInt512VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.or(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Int512VectorTests::bor); - } - - static boolean bxor(boolean a, boolean b) { - return a != b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskXorInt512VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.xor(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Int512VectorTests::bxor); - } - - static boolean bandNot(boolean a, boolean b) { - return a & !b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskAndNotInt512VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.andNot(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Int512VectorTests::bandNot); - } - - static boolean beq(boolean a, boolean b) { - return (a == b); - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskEqInt512VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.eq(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Int512VectorTests::beq); - } - @Test(dataProvider = "maskProvider") static void maskHashCodeInt512VectorTestsSmokeTest(IntFunction fa) { boolean[] a = fa.apply(SPECIES.length()); @@ -6946,23 +7043,6 @@ public class Int512VectorTests extends AbstractVectorTest { } } - @DataProvider - public static Object[][] longMaskProvider() { - return new Object[][]{ - {0xFFFFFFFFFFFFFFFFL}, - {0x0000000000000000L}, - {0x5555555555555555L}, - {0x0123456789abcdefL}, - }; - } - - @Test(dataProvider = "longMaskProvider") - static void maskFromToLongInt512VectorTestsSmokeTest(long inputLong) { - var vmask = VectorMask.fromLong(SPECIES, inputLong); - long outputLong = vmask.toLong(); - Assert.assertEquals(outputLong, (inputLong & (((0xFFFFFFFFFFFFFFFFL >>> (64 - SPECIES.length())))))); - } - @DataProvider public static Object[][] offsetProvider() { return new Object[][]{ diff --git a/test/jdk/jdk/incubator/vector/Int64VectorTests.java b/test/jdk/jdk/incubator/vector/Int64VectorTests.java index f87a0eb458c..15b3b68820e 100644 --- a/test/jdk/jdk/incubator/vector/Int64VectorTests.java +++ b/test/jdk/jdk/incubator/vector/Int64VectorTests.java @@ -393,6 +393,36 @@ public class Int64VectorTests extends AbstractVectorTest { } } + interface FBoolUnOp { + boolean apply(boolean a); + } + + static void assertArraysEquals(boolean[] r, boolean[] a, FBoolUnOp f) { + int i = 0; + try { + for (; i < a.length; i++) { + Assert.assertEquals(r[i], f.apply(a[i])); + } + } catch (AssertionError e) { + Assert.assertEquals(r[i], f.apply(a[i]), "(" + a[i] + ") at index #" + i); + } + } + + interface FBoolBinOp { + boolean apply(boolean a, boolean b); + } + + static void assertArraysEquals(boolean[] r, boolean[] a, boolean[] b, FBoolBinOp f) { + int i = 0; + try { + for (; i < a.length; i++) { + Assert.assertEquals(r[i], f.apply(a[i], b[i])); + } + } catch (AssertionError e) { + Assert.assertEquals(r[i], f.apply(a[i], b[i]), "(" + a[i] + ", " + b[i] + ") at index #" + i); + } + } + interface FBinOp { int apply(int a, int b); } @@ -1085,12 +1115,6 @@ public class Int64VectorTests extends AbstractVectorTest { .flatMap(pair -> INT_SATURATING_GENERATORS_ASSOC.stream().map(f -> List.of(pair.get(0), pair.get(1), f))) .collect(Collectors.toList()); - @DataProvider - public Object[][] boolUnaryOpProvider() { - return BOOL_ARRAY_GENERATORS.stream(). - map(f -> new Object[]{f}). - toArray(Object[][]::new); - } static final List>> INT_GENERATOR_TRIPLES = INT_GENERATOR_PAIRS.stream(). @@ -1222,8 +1246,23 @@ public class Int64VectorTests extends AbstractVectorTest { } @DataProvider - public Object[][] maskCompareOpProvider() { - return BOOLEAN_MASK_COMPARE_GENERATOR_PAIRS.stream().map(List::toArray). + public Object[][] longMaskProvider() { + return LONG_MASK_GENERATORS.stream(). + map(f -> new Object[]{f}). + toArray(Object[][]::new); + } + + @DataProvider + public Object[][] boolMaskBinaryOpProvider() { + return BOOLEAN_MASK_COMPARE_GENERATOR_PAIRS.stream(). + map(List::toArray). + toArray(Object[][]::new); + } + + @DataProvider + public Object[][] boolMaskUnaryOpProvider() { + return BOOLEAN_MASK_GENERATORS.stream(). + map(f -> new Object[]{f}). toArray(Object[][]::new); } @@ -4508,7 +4547,7 @@ public class Int64VectorTests extends AbstractVectorTest { return res; } - @Test(dataProvider = "boolUnaryOpProvider") + @Test(dataProvider = "boolMaskUnaryOpProvider") static void anyTrueInt64VectorTests(IntFunction fm) { boolean[] mask = fm.apply(SPECIES.length()); boolean[] r = fmr.apply(SPECIES.length()); @@ -4532,7 +4571,7 @@ public class Int64VectorTests extends AbstractVectorTest { return res; } - @Test(dataProvider = "boolUnaryOpProvider") + @Test(dataProvider = "boolMaskUnaryOpProvider") static void allTrueInt64VectorTests(IntFunction fm) { boolean[] mask = fm.apply(SPECIES.length()); boolean[] r = fmr.apply(SPECIES.length()); @@ -6434,6 +6473,157 @@ public class Int64VectorTests extends AbstractVectorTest { assertArraysEquals(r, a, mask, Int64VectorTests::REVERSE_BYTES); } + static boolean band(boolean a, boolean b) { + return a & b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskandInt64VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.and(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Int64VectorTests::band); + } + + static boolean bor(boolean a, boolean b) { + return a | b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskorInt64VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.or(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Int64VectorTests::bor); + } + + static boolean bxor(boolean a, boolean b) { + return a != b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskxorInt64VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.xor(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Int64VectorTests::bxor); + } + + static boolean bandNot(boolean a, boolean b) { + return a & !b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskandNotInt64VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.andNot(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Int64VectorTests::bandNot); + } + + static boolean beq(boolean a, boolean b) { + return a == b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskeqInt64VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.eq(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Int64VectorTests::beq); + } + + static boolean unot(boolean a) { + return !a; + } + + @Test(dataProvider = "boolMaskUnaryOpProvider") + static void masknotInt64VectorTests(IntFunction fa) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + av.not().intoArray(r, i); + } + } + + assertArraysEquals(r, a, Int64VectorTests::unot); + } + + private static final long LONG_MASK_BITS = 0xFFFFFFFFFFFFFFFFL >>> (64 - SPECIES.length()); + + static void assertArraysEquals(long[] r, long[] a, long bits) { + int i = 0; + try { + for (; i < a.length; i++) { + Assert.assertEquals(r[i], a[i] & bits); + } + } catch (AssertionError e) { + Assert.assertEquals(r[i], a[i] & bits, "(" + a[i] + ") at index #" + i); + } + } + + @Test(dataProvider = "longMaskProvider") + static void maskFromToLongInt64VectorTests(IntFunction fa) { + long[] a = fa.apply(SPECIES.length()); + long[] r = new long[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i++) { + VectorMask vmask = VectorMask.fromLong(SPECIES, a[i]); + r[i] = vmask.toLong(); + } + } + assertArraysEquals(r, a, LONG_MASK_BITS); + } + @Test(dataProvider = "intCompareOpProvider") static void ltInt64VectorTestsBroadcastSmokeTest(IntFunction fa, IntFunction fb) { int[] a = fa.apply(SPECIES.length()); @@ -6733,115 +6923,22 @@ public class Int64VectorTests extends AbstractVectorTest { } } - @Test(dataProvider = "maskCompareOpProvider") - static void maskEqualsInt64VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskEqualsInt64VectorTests(IntFunction fa, IntFunction fb) { boolean[] a = fa.apply(SPECIES.length()); boolean[] b = fb.apply(SPECIES.length()); - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - boolean equals = av.equals(bv); - int to = i + SPECIES.length(); - Assert.assertEquals(equals, Arrays.equals(a, i, to, b, i, to)); + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + var av = SPECIES.loadMask(a, i); + var bv = SPECIES.loadMask(b, i); + boolean equals = av.equals(bv); + int to = i + SPECIES.length(); + Assert.assertEquals(equals, Arrays.equals(a, i, to, b, i, to)); + } } } - static boolean band(boolean a, boolean b) { - return a & b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskAndInt64VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.and(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Int64VectorTests::band); - } - - static boolean bor(boolean a, boolean b) { - return a | b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskOrInt64VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.or(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Int64VectorTests::bor); - } - - static boolean bxor(boolean a, boolean b) { - return a != b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskXorInt64VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.xor(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Int64VectorTests::bxor); - } - - static boolean bandNot(boolean a, boolean b) { - return a & !b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskAndNotInt64VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.andNot(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Int64VectorTests::bandNot); - } - - static boolean beq(boolean a, boolean b) { - return (a == b); - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskEqInt64VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.eq(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Int64VectorTests::beq); - } - @Test(dataProvider = "maskProvider") static void maskHashCodeInt64VectorTestsSmokeTest(IntFunction fa) { boolean[] a = fa.apply(SPECIES.length()); @@ -6946,23 +7043,6 @@ public class Int64VectorTests extends AbstractVectorTest { } } - @DataProvider - public static Object[][] longMaskProvider() { - return new Object[][]{ - {0xFFFFFFFFFFFFFFFFL}, - {0x0000000000000000L}, - {0x5555555555555555L}, - {0x0123456789abcdefL}, - }; - } - - @Test(dataProvider = "longMaskProvider") - static void maskFromToLongInt64VectorTestsSmokeTest(long inputLong) { - var vmask = VectorMask.fromLong(SPECIES, inputLong); - long outputLong = vmask.toLong(); - Assert.assertEquals(outputLong, (inputLong & (((0xFFFFFFFFFFFFFFFFL >>> (64 - SPECIES.length())))))); - } - @DataProvider public static Object[][] offsetProvider() { return new Object[][]{ diff --git a/test/jdk/jdk/incubator/vector/IntMaxVectorTests.java b/test/jdk/jdk/incubator/vector/IntMaxVectorTests.java index c61aab0013e..67368e0f70e 100644 --- a/test/jdk/jdk/incubator/vector/IntMaxVectorTests.java +++ b/test/jdk/jdk/incubator/vector/IntMaxVectorTests.java @@ -398,6 +398,36 @@ public class IntMaxVectorTests extends AbstractVectorTest { } } + interface FBoolUnOp { + boolean apply(boolean a); + } + + static void assertArraysEquals(boolean[] r, boolean[] a, FBoolUnOp f) { + int i = 0; + try { + for (; i < a.length; i++) { + Assert.assertEquals(r[i], f.apply(a[i])); + } + } catch (AssertionError e) { + Assert.assertEquals(r[i], f.apply(a[i]), "(" + a[i] + ") at index #" + i); + } + } + + interface FBoolBinOp { + boolean apply(boolean a, boolean b); + } + + static void assertArraysEquals(boolean[] r, boolean[] a, boolean[] b, FBoolBinOp f) { + int i = 0; + try { + for (; i < a.length; i++) { + Assert.assertEquals(r[i], f.apply(a[i], b[i])); + } + } catch (AssertionError e) { + Assert.assertEquals(r[i], f.apply(a[i], b[i]), "(" + a[i] + ", " + b[i] + ") at index #" + i); + } + } + interface FBinOp { int apply(int a, int b); } @@ -1090,12 +1120,6 @@ public class IntMaxVectorTests extends AbstractVectorTest { .flatMap(pair -> INT_SATURATING_GENERATORS_ASSOC.stream().map(f -> List.of(pair.get(0), pair.get(1), f))) .collect(Collectors.toList()); - @DataProvider - public Object[][] boolUnaryOpProvider() { - return BOOL_ARRAY_GENERATORS.stream(). - map(f -> new Object[]{f}). - toArray(Object[][]::new); - } static final List>> INT_GENERATOR_TRIPLES = INT_GENERATOR_PAIRS.stream(). @@ -1227,8 +1251,23 @@ public class IntMaxVectorTests extends AbstractVectorTest { } @DataProvider - public Object[][] maskCompareOpProvider() { - return BOOLEAN_MASK_COMPARE_GENERATOR_PAIRS.stream().map(List::toArray). + public Object[][] longMaskProvider() { + return LONG_MASK_GENERATORS.stream(). + map(f -> new Object[]{f}). + toArray(Object[][]::new); + } + + @DataProvider + public Object[][] boolMaskBinaryOpProvider() { + return BOOLEAN_MASK_COMPARE_GENERATOR_PAIRS.stream(). + map(List::toArray). + toArray(Object[][]::new); + } + + @DataProvider + public Object[][] boolMaskUnaryOpProvider() { + return BOOLEAN_MASK_GENERATORS.stream(). + map(f -> new Object[]{f}). toArray(Object[][]::new); } @@ -4513,7 +4552,7 @@ public class IntMaxVectorTests extends AbstractVectorTest { return res; } - @Test(dataProvider = "boolUnaryOpProvider") + @Test(dataProvider = "boolMaskUnaryOpProvider") static void anyTrueIntMaxVectorTests(IntFunction fm) { boolean[] mask = fm.apply(SPECIES.length()); boolean[] r = fmr.apply(SPECIES.length()); @@ -4537,7 +4576,7 @@ public class IntMaxVectorTests extends AbstractVectorTest { return res; } - @Test(dataProvider = "boolUnaryOpProvider") + @Test(dataProvider = "boolMaskUnaryOpProvider") static void allTrueIntMaxVectorTests(IntFunction fm) { boolean[] mask = fm.apply(SPECIES.length()); boolean[] r = fmr.apply(SPECIES.length()); @@ -6439,6 +6478,157 @@ public class IntMaxVectorTests extends AbstractVectorTest { assertArraysEquals(r, a, mask, IntMaxVectorTests::REVERSE_BYTES); } + static boolean band(boolean a, boolean b) { + return a & b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskandIntMaxVectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.and(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, IntMaxVectorTests::band); + } + + static boolean bor(boolean a, boolean b) { + return a | b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskorIntMaxVectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.or(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, IntMaxVectorTests::bor); + } + + static boolean bxor(boolean a, boolean b) { + return a != b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskxorIntMaxVectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.xor(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, IntMaxVectorTests::bxor); + } + + static boolean bandNot(boolean a, boolean b) { + return a & !b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskandNotIntMaxVectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.andNot(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, IntMaxVectorTests::bandNot); + } + + static boolean beq(boolean a, boolean b) { + return a == b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskeqIntMaxVectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.eq(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, IntMaxVectorTests::beq); + } + + static boolean unot(boolean a) { + return !a; + } + + @Test(dataProvider = "boolMaskUnaryOpProvider") + static void masknotIntMaxVectorTests(IntFunction fa) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + av.not().intoArray(r, i); + } + } + + assertArraysEquals(r, a, IntMaxVectorTests::unot); + } + + private static final long LONG_MASK_BITS = 0xFFFFFFFFFFFFFFFFL >>> (64 - SPECIES.length()); + + static void assertArraysEquals(long[] r, long[] a, long bits) { + int i = 0; + try { + for (; i < a.length; i++) { + Assert.assertEquals(r[i], a[i] & bits); + } + } catch (AssertionError e) { + Assert.assertEquals(r[i], a[i] & bits, "(" + a[i] + ") at index #" + i); + } + } + + @Test(dataProvider = "longMaskProvider") + static void maskFromToLongIntMaxVectorTests(IntFunction fa) { + long[] a = fa.apply(SPECIES.length()); + long[] r = new long[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i++) { + VectorMask vmask = VectorMask.fromLong(SPECIES, a[i]); + r[i] = vmask.toLong(); + } + } + assertArraysEquals(r, a, LONG_MASK_BITS); + } + @Test(dataProvider = "intCompareOpProvider") static void ltIntMaxVectorTestsBroadcastSmokeTest(IntFunction fa, IntFunction fb) { int[] a = fa.apply(SPECIES.length()); @@ -6738,115 +6928,22 @@ public class IntMaxVectorTests extends AbstractVectorTest { } } - @Test(dataProvider = "maskCompareOpProvider") - static void maskEqualsIntMaxVectorTestsSmokeTest(IntFunction fa, IntFunction fb) { + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskEqualsIntMaxVectorTests(IntFunction fa, IntFunction fb) { boolean[] a = fa.apply(SPECIES.length()); boolean[] b = fb.apply(SPECIES.length()); - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - boolean equals = av.equals(bv); - int to = i + SPECIES.length(); - Assert.assertEquals(equals, Arrays.equals(a, i, to, b, i, to)); + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + var av = SPECIES.loadMask(a, i); + var bv = SPECIES.loadMask(b, i); + boolean equals = av.equals(bv); + int to = i + SPECIES.length(); + Assert.assertEquals(equals, Arrays.equals(a, i, to, b, i, to)); + } } } - static boolean band(boolean a, boolean b) { - return a & b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskAndIntMaxVectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.and(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, IntMaxVectorTests::band); - } - - static boolean bor(boolean a, boolean b) { - return a | b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskOrIntMaxVectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.or(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, IntMaxVectorTests::bor); - } - - static boolean bxor(boolean a, boolean b) { - return a != b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskXorIntMaxVectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.xor(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, IntMaxVectorTests::bxor); - } - - static boolean bandNot(boolean a, boolean b) { - return a & !b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskAndNotIntMaxVectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.andNot(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, IntMaxVectorTests::bandNot); - } - - static boolean beq(boolean a, boolean b) { - return (a == b); - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskEqIntMaxVectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.eq(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, IntMaxVectorTests::beq); - } - @Test(dataProvider = "maskProvider") static void maskHashCodeIntMaxVectorTestsSmokeTest(IntFunction fa) { boolean[] a = fa.apply(SPECIES.length()); @@ -6951,7 +7048,6 @@ public class IntMaxVectorTests extends AbstractVectorTest { } } - @DataProvider public static Object[][] offsetProvider() { return new Object[][]{ diff --git a/test/jdk/jdk/incubator/vector/Long128VectorTests.java b/test/jdk/jdk/incubator/vector/Long128VectorTests.java index a8cf38c003a..6f91fb9ffbf 100644 --- a/test/jdk/jdk/incubator/vector/Long128VectorTests.java +++ b/test/jdk/jdk/incubator/vector/Long128VectorTests.java @@ -350,6 +350,36 @@ public class Long128VectorTests extends AbstractVectorTest { } } + interface FBoolUnOp { + boolean apply(boolean a); + } + + static void assertArraysEquals(boolean[] r, boolean[] a, FBoolUnOp f) { + int i = 0; + try { + for (; i < a.length; i++) { + Assert.assertEquals(r[i], f.apply(a[i])); + } + } catch (AssertionError e) { + Assert.assertEquals(r[i], f.apply(a[i]), "(" + a[i] + ") at index #" + i); + } + } + + interface FBoolBinOp { + boolean apply(boolean a, boolean b); + } + + static void assertArraysEquals(boolean[] r, boolean[] a, boolean[] b, FBoolBinOp f) { + int i = 0; + try { + for (; i < a.length; i++) { + Assert.assertEquals(r[i], f.apply(a[i], b[i])); + } + } catch (AssertionError e) { + Assert.assertEquals(r[i], f.apply(a[i], b[i]), "(" + a[i] + ", " + b[i] + ") at index #" + i); + } + } + interface FBinOp { long apply(long a, long b); } @@ -1075,12 +1105,6 @@ public class Long128VectorTests extends AbstractVectorTest { .flatMap(pair -> LONG_SATURATING_GENERATORS_ASSOC.stream().map(f -> List.of(pair.get(0), pair.get(1), f))) .collect(Collectors.toList()); - @DataProvider - public Object[][] boolUnaryOpProvider() { - return BOOL_ARRAY_GENERATORS.stream(). - map(f -> new Object[]{f}). - toArray(Object[][]::new); - } static final List>> LONG_GENERATOR_TRIPLES = LONG_GENERATOR_PAIRS.stream(). @@ -1219,8 +1243,23 @@ public class Long128VectorTests extends AbstractVectorTest { } @DataProvider - public Object[][] maskCompareOpProvider() { - return BOOLEAN_MASK_COMPARE_GENERATOR_PAIRS.stream().map(List::toArray). + public Object[][] longMaskProvider() { + return LONG_MASK_GENERATORS.stream(). + map(f -> new Object[]{f}). + toArray(Object[][]::new); + } + + @DataProvider + public Object[][] boolMaskBinaryOpProvider() { + return BOOLEAN_MASK_COMPARE_GENERATOR_PAIRS.stream(). + map(List::toArray). + toArray(Object[][]::new); + } + + @DataProvider + public Object[][] boolMaskUnaryOpProvider() { + return BOOLEAN_MASK_GENERATORS.stream(). + map(f -> new Object[]{f}). toArray(Object[][]::new); } @@ -4530,7 +4569,7 @@ public class Long128VectorTests extends AbstractVectorTest { return res; } - @Test(dataProvider = "boolUnaryOpProvider") + @Test(dataProvider = "boolMaskUnaryOpProvider") static void anyTrueLong128VectorTests(IntFunction fm) { boolean[] mask = fm.apply(SPECIES.length()); boolean[] r = fmr.apply(SPECIES.length()); @@ -4554,7 +4593,7 @@ public class Long128VectorTests extends AbstractVectorTest { return res; } - @Test(dataProvider = "boolUnaryOpProvider") + @Test(dataProvider = "boolMaskUnaryOpProvider") static void allTrueLong128VectorTests(IntFunction fm) { boolean[] mask = fm.apply(SPECIES.length()); boolean[] r = fmr.apply(SPECIES.length()); @@ -6386,6 +6425,157 @@ public class Long128VectorTests extends AbstractVectorTest { assertArraysEquals(r, a, mask, Long128VectorTests::REVERSE_BYTES); } + static boolean band(boolean a, boolean b) { + return a & b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskandLong128VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.and(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Long128VectorTests::band); + } + + static boolean bor(boolean a, boolean b) { + return a | b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskorLong128VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.or(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Long128VectorTests::bor); + } + + static boolean bxor(boolean a, boolean b) { + return a != b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskxorLong128VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.xor(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Long128VectorTests::bxor); + } + + static boolean bandNot(boolean a, boolean b) { + return a & !b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskandNotLong128VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.andNot(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Long128VectorTests::bandNot); + } + + static boolean beq(boolean a, boolean b) { + return a == b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskeqLong128VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.eq(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Long128VectorTests::beq); + } + + static boolean unot(boolean a) { + return !a; + } + + @Test(dataProvider = "boolMaskUnaryOpProvider") + static void masknotLong128VectorTests(IntFunction fa) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + av.not().intoArray(r, i); + } + } + + assertArraysEquals(r, a, Long128VectorTests::unot); + } + + private static final long LONG_MASK_BITS = 0xFFFFFFFFFFFFFFFFL >>> (64 - SPECIES.length()); + + static void assertArraysEquals(long[] r, long[] a, long bits) { + int i = 0; + try { + for (; i < a.length; i++) { + Assert.assertEquals(r[i], a[i] & bits); + } + } catch (AssertionError e) { + Assert.assertEquals(r[i], a[i] & bits, "(" + a[i] + ") at index #" + i); + } + } + + @Test(dataProvider = "longMaskProvider") + static void maskFromToLongLong128VectorTests(IntFunction fa) { + long[] a = fa.apply(SPECIES.length()); + long[] r = new long[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i++) { + VectorMask vmask = VectorMask.fromLong(SPECIES, a[i]); + r[i] = vmask.toLong(); + } + } + assertArraysEquals(r, a, LONG_MASK_BITS); + } + @Test(dataProvider = "longCompareOpProvider") static void ltLong128VectorTestsBroadcastSmokeTest(IntFunction fa, IntFunction fb) { long[] a = fa.apply(SPECIES.length()); @@ -6619,115 +6809,22 @@ public class Long128VectorTests extends AbstractVectorTest { } } - @Test(dataProvider = "maskCompareOpProvider") - static void maskEqualsLong128VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskEqualsLong128VectorTests(IntFunction fa, IntFunction fb) { boolean[] a = fa.apply(SPECIES.length()); boolean[] b = fb.apply(SPECIES.length()); - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - boolean equals = av.equals(bv); - int to = i + SPECIES.length(); - Assert.assertEquals(equals, Arrays.equals(a, i, to, b, i, to)); + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + var av = SPECIES.loadMask(a, i); + var bv = SPECIES.loadMask(b, i); + boolean equals = av.equals(bv); + int to = i + SPECIES.length(); + Assert.assertEquals(equals, Arrays.equals(a, i, to, b, i, to)); + } } } - static boolean band(boolean a, boolean b) { - return a & b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskAndLong128VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.and(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Long128VectorTests::band); - } - - static boolean bor(boolean a, boolean b) { - return a | b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskOrLong128VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.or(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Long128VectorTests::bor); - } - - static boolean bxor(boolean a, boolean b) { - return a != b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskXorLong128VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.xor(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Long128VectorTests::bxor); - } - - static boolean bandNot(boolean a, boolean b) { - return a & !b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskAndNotLong128VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.andNot(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Long128VectorTests::bandNot); - } - - static boolean beq(boolean a, boolean b) { - return (a == b); - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskEqLong128VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.eq(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Long128VectorTests::beq); - } - @Test(dataProvider = "maskProvider") static void maskHashCodeLong128VectorTestsSmokeTest(IntFunction fa) { boolean[] a = fa.apply(SPECIES.length()); @@ -6832,23 +6929,6 @@ public class Long128VectorTests extends AbstractVectorTest { } } - @DataProvider - public static Object[][] longMaskProvider() { - return new Object[][]{ - {0xFFFFFFFFFFFFFFFFL}, - {0x0000000000000000L}, - {0x5555555555555555L}, - {0x0123456789abcdefL}, - }; - } - - @Test(dataProvider = "longMaskProvider") - static void maskFromToLongLong128VectorTestsSmokeTest(long inputLong) { - var vmask = VectorMask.fromLong(SPECIES, inputLong); - long outputLong = vmask.toLong(); - Assert.assertEquals(outputLong, (inputLong & (((0xFFFFFFFFFFFFFFFFL >>> (64 - SPECIES.length())))))); - } - @DataProvider public static Object[][] offsetProvider() { return new Object[][]{ diff --git a/test/jdk/jdk/incubator/vector/Long256VectorTests.java b/test/jdk/jdk/incubator/vector/Long256VectorTests.java index a394a59699f..118c955ad24 100644 --- a/test/jdk/jdk/incubator/vector/Long256VectorTests.java +++ b/test/jdk/jdk/incubator/vector/Long256VectorTests.java @@ -350,6 +350,36 @@ public class Long256VectorTests extends AbstractVectorTest { } } + interface FBoolUnOp { + boolean apply(boolean a); + } + + static void assertArraysEquals(boolean[] r, boolean[] a, FBoolUnOp f) { + int i = 0; + try { + for (; i < a.length; i++) { + Assert.assertEquals(r[i], f.apply(a[i])); + } + } catch (AssertionError e) { + Assert.assertEquals(r[i], f.apply(a[i]), "(" + a[i] + ") at index #" + i); + } + } + + interface FBoolBinOp { + boolean apply(boolean a, boolean b); + } + + static void assertArraysEquals(boolean[] r, boolean[] a, boolean[] b, FBoolBinOp f) { + int i = 0; + try { + for (; i < a.length; i++) { + Assert.assertEquals(r[i], f.apply(a[i], b[i])); + } + } catch (AssertionError e) { + Assert.assertEquals(r[i], f.apply(a[i], b[i]), "(" + a[i] + ", " + b[i] + ") at index #" + i); + } + } + interface FBinOp { long apply(long a, long b); } @@ -1075,12 +1105,6 @@ public class Long256VectorTests extends AbstractVectorTest { .flatMap(pair -> LONG_SATURATING_GENERATORS_ASSOC.stream().map(f -> List.of(pair.get(0), pair.get(1), f))) .collect(Collectors.toList()); - @DataProvider - public Object[][] boolUnaryOpProvider() { - return BOOL_ARRAY_GENERATORS.stream(). - map(f -> new Object[]{f}). - toArray(Object[][]::new); - } static final List>> LONG_GENERATOR_TRIPLES = LONG_GENERATOR_PAIRS.stream(). @@ -1219,8 +1243,23 @@ public class Long256VectorTests extends AbstractVectorTest { } @DataProvider - public Object[][] maskCompareOpProvider() { - return BOOLEAN_MASK_COMPARE_GENERATOR_PAIRS.stream().map(List::toArray). + public Object[][] longMaskProvider() { + return LONG_MASK_GENERATORS.stream(). + map(f -> new Object[]{f}). + toArray(Object[][]::new); + } + + @DataProvider + public Object[][] boolMaskBinaryOpProvider() { + return BOOLEAN_MASK_COMPARE_GENERATOR_PAIRS.stream(). + map(List::toArray). + toArray(Object[][]::new); + } + + @DataProvider + public Object[][] boolMaskUnaryOpProvider() { + return BOOLEAN_MASK_GENERATORS.stream(). + map(f -> new Object[]{f}). toArray(Object[][]::new); } @@ -4530,7 +4569,7 @@ public class Long256VectorTests extends AbstractVectorTest { return res; } - @Test(dataProvider = "boolUnaryOpProvider") + @Test(dataProvider = "boolMaskUnaryOpProvider") static void anyTrueLong256VectorTests(IntFunction fm) { boolean[] mask = fm.apply(SPECIES.length()); boolean[] r = fmr.apply(SPECIES.length()); @@ -4554,7 +4593,7 @@ public class Long256VectorTests extends AbstractVectorTest { return res; } - @Test(dataProvider = "boolUnaryOpProvider") + @Test(dataProvider = "boolMaskUnaryOpProvider") static void allTrueLong256VectorTests(IntFunction fm) { boolean[] mask = fm.apply(SPECIES.length()); boolean[] r = fmr.apply(SPECIES.length()); @@ -6386,6 +6425,157 @@ public class Long256VectorTests extends AbstractVectorTest { assertArraysEquals(r, a, mask, Long256VectorTests::REVERSE_BYTES); } + static boolean band(boolean a, boolean b) { + return a & b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskandLong256VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.and(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Long256VectorTests::band); + } + + static boolean bor(boolean a, boolean b) { + return a | b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskorLong256VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.or(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Long256VectorTests::bor); + } + + static boolean bxor(boolean a, boolean b) { + return a != b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskxorLong256VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.xor(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Long256VectorTests::bxor); + } + + static boolean bandNot(boolean a, boolean b) { + return a & !b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskandNotLong256VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.andNot(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Long256VectorTests::bandNot); + } + + static boolean beq(boolean a, boolean b) { + return a == b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskeqLong256VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.eq(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Long256VectorTests::beq); + } + + static boolean unot(boolean a) { + return !a; + } + + @Test(dataProvider = "boolMaskUnaryOpProvider") + static void masknotLong256VectorTests(IntFunction fa) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + av.not().intoArray(r, i); + } + } + + assertArraysEquals(r, a, Long256VectorTests::unot); + } + + private static final long LONG_MASK_BITS = 0xFFFFFFFFFFFFFFFFL >>> (64 - SPECIES.length()); + + static void assertArraysEquals(long[] r, long[] a, long bits) { + int i = 0; + try { + for (; i < a.length; i++) { + Assert.assertEquals(r[i], a[i] & bits); + } + } catch (AssertionError e) { + Assert.assertEquals(r[i], a[i] & bits, "(" + a[i] + ") at index #" + i); + } + } + + @Test(dataProvider = "longMaskProvider") + static void maskFromToLongLong256VectorTests(IntFunction fa) { + long[] a = fa.apply(SPECIES.length()); + long[] r = new long[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i++) { + VectorMask vmask = VectorMask.fromLong(SPECIES, a[i]); + r[i] = vmask.toLong(); + } + } + assertArraysEquals(r, a, LONG_MASK_BITS); + } + @Test(dataProvider = "longCompareOpProvider") static void ltLong256VectorTestsBroadcastSmokeTest(IntFunction fa, IntFunction fb) { long[] a = fa.apply(SPECIES.length()); @@ -6619,115 +6809,22 @@ public class Long256VectorTests extends AbstractVectorTest { } } - @Test(dataProvider = "maskCompareOpProvider") - static void maskEqualsLong256VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskEqualsLong256VectorTests(IntFunction fa, IntFunction fb) { boolean[] a = fa.apply(SPECIES.length()); boolean[] b = fb.apply(SPECIES.length()); - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - boolean equals = av.equals(bv); - int to = i + SPECIES.length(); - Assert.assertEquals(equals, Arrays.equals(a, i, to, b, i, to)); + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + var av = SPECIES.loadMask(a, i); + var bv = SPECIES.loadMask(b, i); + boolean equals = av.equals(bv); + int to = i + SPECIES.length(); + Assert.assertEquals(equals, Arrays.equals(a, i, to, b, i, to)); + } } } - static boolean band(boolean a, boolean b) { - return a & b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskAndLong256VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.and(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Long256VectorTests::band); - } - - static boolean bor(boolean a, boolean b) { - return a | b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskOrLong256VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.or(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Long256VectorTests::bor); - } - - static boolean bxor(boolean a, boolean b) { - return a != b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskXorLong256VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.xor(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Long256VectorTests::bxor); - } - - static boolean bandNot(boolean a, boolean b) { - return a & !b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskAndNotLong256VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.andNot(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Long256VectorTests::bandNot); - } - - static boolean beq(boolean a, boolean b) { - return (a == b); - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskEqLong256VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.eq(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Long256VectorTests::beq); - } - @Test(dataProvider = "maskProvider") static void maskHashCodeLong256VectorTestsSmokeTest(IntFunction fa) { boolean[] a = fa.apply(SPECIES.length()); @@ -6832,23 +6929,6 @@ public class Long256VectorTests extends AbstractVectorTest { } } - @DataProvider - public static Object[][] longMaskProvider() { - return new Object[][]{ - {0xFFFFFFFFFFFFFFFFL}, - {0x0000000000000000L}, - {0x5555555555555555L}, - {0x0123456789abcdefL}, - }; - } - - @Test(dataProvider = "longMaskProvider") - static void maskFromToLongLong256VectorTestsSmokeTest(long inputLong) { - var vmask = VectorMask.fromLong(SPECIES, inputLong); - long outputLong = vmask.toLong(); - Assert.assertEquals(outputLong, (inputLong & (((0xFFFFFFFFFFFFFFFFL >>> (64 - SPECIES.length())))))); - } - @DataProvider public static Object[][] offsetProvider() { return new Object[][]{ diff --git a/test/jdk/jdk/incubator/vector/Long512VectorTests.java b/test/jdk/jdk/incubator/vector/Long512VectorTests.java index 2f12ea98399..1bca0ef0ebd 100644 --- a/test/jdk/jdk/incubator/vector/Long512VectorTests.java +++ b/test/jdk/jdk/incubator/vector/Long512VectorTests.java @@ -350,6 +350,36 @@ public class Long512VectorTests extends AbstractVectorTest { } } + interface FBoolUnOp { + boolean apply(boolean a); + } + + static void assertArraysEquals(boolean[] r, boolean[] a, FBoolUnOp f) { + int i = 0; + try { + for (; i < a.length; i++) { + Assert.assertEquals(r[i], f.apply(a[i])); + } + } catch (AssertionError e) { + Assert.assertEquals(r[i], f.apply(a[i]), "(" + a[i] + ") at index #" + i); + } + } + + interface FBoolBinOp { + boolean apply(boolean a, boolean b); + } + + static void assertArraysEquals(boolean[] r, boolean[] a, boolean[] b, FBoolBinOp f) { + int i = 0; + try { + for (; i < a.length; i++) { + Assert.assertEquals(r[i], f.apply(a[i], b[i])); + } + } catch (AssertionError e) { + Assert.assertEquals(r[i], f.apply(a[i], b[i]), "(" + a[i] + ", " + b[i] + ") at index #" + i); + } + } + interface FBinOp { long apply(long a, long b); } @@ -1075,12 +1105,6 @@ public class Long512VectorTests extends AbstractVectorTest { .flatMap(pair -> LONG_SATURATING_GENERATORS_ASSOC.stream().map(f -> List.of(pair.get(0), pair.get(1), f))) .collect(Collectors.toList()); - @DataProvider - public Object[][] boolUnaryOpProvider() { - return BOOL_ARRAY_GENERATORS.stream(). - map(f -> new Object[]{f}). - toArray(Object[][]::new); - } static final List>> LONG_GENERATOR_TRIPLES = LONG_GENERATOR_PAIRS.stream(). @@ -1219,8 +1243,23 @@ public class Long512VectorTests extends AbstractVectorTest { } @DataProvider - public Object[][] maskCompareOpProvider() { - return BOOLEAN_MASK_COMPARE_GENERATOR_PAIRS.stream().map(List::toArray). + public Object[][] longMaskProvider() { + return LONG_MASK_GENERATORS.stream(). + map(f -> new Object[]{f}). + toArray(Object[][]::new); + } + + @DataProvider + public Object[][] boolMaskBinaryOpProvider() { + return BOOLEAN_MASK_COMPARE_GENERATOR_PAIRS.stream(). + map(List::toArray). + toArray(Object[][]::new); + } + + @DataProvider + public Object[][] boolMaskUnaryOpProvider() { + return BOOLEAN_MASK_GENERATORS.stream(). + map(f -> new Object[]{f}). toArray(Object[][]::new); } @@ -4530,7 +4569,7 @@ public class Long512VectorTests extends AbstractVectorTest { return res; } - @Test(dataProvider = "boolUnaryOpProvider") + @Test(dataProvider = "boolMaskUnaryOpProvider") static void anyTrueLong512VectorTests(IntFunction fm) { boolean[] mask = fm.apply(SPECIES.length()); boolean[] r = fmr.apply(SPECIES.length()); @@ -4554,7 +4593,7 @@ public class Long512VectorTests extends AbstractVectorTest { return res; } - @Test(dataProvider = "boolUnaryOpProvider") + @Test(dataProvider = "boolMaskUnaryOpProvider") static void allTrueLong512VectorTests(IntFunction fm) { boolean[] mask = fm.apply(SPECIES.length()); boolean[] r = fmr.apply(SPECIES.length()); @@ -6386,6 +6425,157 @@ public class Long512VectorTests extends AbstractVectorTest { assertArraysEquals(r, a, mask, Long512VectorTests::REVERSE_BYTES); } + static boolean band(boolean a, boolean b) { + return a & b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskandLong512VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.and(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Long512VectorTests::band); + } + + static boolean bor(boolean a, boolean b) { + return a | b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskorLong512VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.or(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Long512VectorTests::bor); + } + + static boolean bxor(boolean a, boolean b) { + return a != b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskxorLong512VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.xor(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Long512VectorTests::bxor); + } + + static boolean bandNot(boolean a, boolean b) { + return a & !b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskandNotLong512VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.andNot(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Long512VectorTests::bandNot); + } + + static boolean beq(boolean a, boolean b) { + return a == b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskeqLong512VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.eq(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Long512VectorTests::beq); + } + + static boolean unot(boolean a) { + return !a; + } + + @Test(dataProvider = "boolMaskUnaryOpProvider") + static void masknotLong512VectorTests(IntFunction fa) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + av.not().intoArray(r, i); + } + } + + assertArraysEquals(r, a, Long512VectorTests::unot); + } + + private static final long LONG_MASK_BITS = 0xFFFFFFFFFFFFFFFFL >>> (64 - SPECIES.length()); + + static void assertArraysEquals(long[] r, long[] a, long bits) { + int i = 0; + try { + for (; i < a.length; i++) { + Assert.assertEquals(r[i], a[i] & bits); + } + } catch (AssertionError e) { + Assert.assertEquals(r[i], a[i] & bits, "(" + a[i] + ") at index #" + i); + } + } + + @Test(dataProvider = "longMaskProvider") + static void maskFromToLongLong512VectorTests(IntFunction fa) { + long[] a = fa.apply(SPECIES.length()); + long[] r = new long[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i++) { + VectorMask vmask = VectorMask.fromLong(SPECIES, a[i]); + r[i] = vmask.toLong(); + } + } + assertArraysEquals(r, a, LONG_MASK_BITS); + } + @Test(dataProvider = "longCompareOpProvider") static void ltLong512VectorTestsBroadcastSmokeTest(IntFunction fa, IntFunction fb) { long[] a = fa.apply(SPECIES.length()); @@ -6619,115 +6809,22 @@ public class Long512VectorTests extends AbstractVectorTest { } } - @Test(dataProvider = "maskCompareOpProvider") - static void maskEqualsLong512VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskEqualsLong512VectorTests(IntFunction fa, IntFunction fb) { boolean[] a = fa.apply(SPECIES.length()); boolean[] b = fb.apply(SPECIES.length()); - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - boolean equals = av.equals(bv); - int to = i + SPECIES.length(); - Assert.assertEquals(equals, Arrays.equals(a, i, to, b, i, to)); + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + var av = SPECIES.loadMask(a, i); + var bv = SPECIES.loadMask(b, i); + boolean equals = av.equals(bv); + int to = i + SPECIES.length(); + Assert.assertEquals(equals, Arrays.equals(a, i, to, b, i, to)); + } } } - static boolean band(boolean a, boolean b) { - return a & b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskAndLong512VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.and(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Long512VectorTests::band); - } - - static boolean bor(boolean a, boolean b) { - return a | b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskOrLong512VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.or(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Long512VectorTests::bor); - } - - static boolean bxor(boolean a, boolean b) { - return a != b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskXorLong512VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.xor(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Long512VectorTests::bxor); - } - - static boolean bandNot(boolean a, boolean b) { - return a & !b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskAndNotLong512VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.andNot(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Long512VectorTests::bandNot); - } - - static boolean beq(boolean a, boolean b) { - return (a == b); - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskEqLong512VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.eq(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Long512VectorTests::beq); - } - @Test(dataProvider = "maskProvider") static void maskHashCodeLong512VectorTestsSmokeTest(IntFunction fa) { boolean[] a = fa.apply(SPECIES.length()); @@ -6832,23 +6929,6 @@ public class Long512VectorTests extends AbstractVectorTest { } } - @DataProvider - public static Object[][] longMaskProvider() { - return new Object[][]{ - {0xFFFFFFFFFFFFFFFFL}, - {0x0000000000000000L}, - {0x5555555555555555L}, - {0x0123456789abcdefL}, - }; - } - - @Test(dataProvider = "longMaskProvider") - static void maskFromToLongLong512VectorTestsSmokeTest(long inputLong) { - var vmask = VectorMask.fromLong(SPECIES, inputLong); - long outputLong = vmask.toLong(); - Assert.assertEquals(outputLong, (inputLong & (((0xFFFFFFFFFFFFFFFFL >>> (64 - SPECIES.length())))))); - } - @DataProvider public static Object[][] offsetProvider() { return new Object[][]{ diff --git a/test/jdk/jdk/incubator/vector/Long64VectorTests.java b/test/jdk/jdk/incubator/vector/Long64VectorTests.java index 0fda0abed58..212bbb5047c 100644 --- a/test/jdk/jdk/incubator/vector/Long64VectorTests.java +++ b/test/jdk/jdk/incubator/vector/Long64VectorTests.java @@ -350,6 +350,36 @@ public class Long64VectorTests extends AbstractVectorTest { } } + interface FBoolUnOp { + boolean apply(boolean a); + } + + static void assertArraysEquals(boolean[] r, boolean[] a, FBoolUnOp f) { + int i = 0; + try { + for (; i < a.length; i++) { + Assert.assertEquals(r[i], f.apply(a[i])); + } + } catch (AssertionError e) { + Assert.assertEquals(r[i], f.apply(a[i]), "(" + a[i] + ") at index #" + i); + } + } + + interface FBoolBinOp { + boolean apply(boolean a, boolean b); + } + + static void assertArraysEquals(boolean[] r, boolean[] a, boolean[] b, FBoolBinOp f) { + int i = 0; + try { + for (; i < a.length; i++) { + Assert.assertEquals(r[i], f.apply(a[i], b[i])); + } + } catch (AssertionError e) { + Assert.assertEquals(r[i], f.apply(a[i], b[i]), "(" + a[i] + ", " + b[i] + ") at index #" + i); + } + } + interface FBinOp { long apply(long a, long b); } @@ -1075,12 +1105,6 @@ public class Long64VectorTests extends AbstractVectorTest { .flatMap(pair -> LONG_SATURATING_GENERATORS_ASSOC.stream().map(f -> List.of(pair.get(0), pair.get(1), f))) .collect(Collectors.toList()); - @DataProvider - public Object[][] boolUnaryOpProvider() { - return BOOL_ARRAY_GENERATORS.stream(). - map(f -> new Object[]{f}). - toArray(Object[][]::new); - } static final List>> LONG_GENERATOR_TRIPLES = LONG_GENERATOR_PAIRS.stream(). @@ -1219,8 +1243,23 @@ public class Long64VectorTests extends AbstractVectorTest { } @DataProvider - public Object[][] maskCompareOpProvider() { - return BOOLEAN_MASK_COMPARE_GENERATOR_PAIRS.stream().map(List::toArray). + public Object[][] longMaskProvider() { + return LONG_MASK_GENERATORS.stream(). + map(f -> new Object[]{f}). + toArray(Object[][]::new); + } + + @DataProvider + public Object[][] boolMaskBinaryOpProvider() { + return BOOLEAN_MASK_COMPARE_GENERATOR_PAIRS.stream(). + map(List::toArray). + toArray(Object[][]::new); + } + + @DataProvider + public Object[][] boolMaskUnaryOpProvider() { + return BOOLEAN_MASK_GENERATORS.stream(). + map(f -> new Object[]{f}). toArray(Object[][]::new); } @@ -4530,7 +4569,7 @@ public class Long64VectorTests extends AbstractVectorTest { return res; } - @Test(dataProvider = "boolUnaryOpProvider") + @Test(dataProvider = "boolMaskUnaryOpProvider") static void anyTrueLong64VectorTests(IntFunction fm) { boolean[] mask = fm.apply(SPECIES.length()); boolean[] r = fmr.apply(SPECIES.length()); @@ -4554,7 +4593,7 @@ public class Long64VectorTests extends AbstractVectorTest { return res; } - @Test(dataProvider = "boolUnaryOpProvider") + @Test(dataProvider = "boolMaskUnaryOpProvider") static void allTrueLong64VectorTests(IntFunction fm) { boolean[] mask = fm.apply(SPECIES.length()); boolean[] r = fmr.apply(SPECIES.length()); @@ -6386,6 +6425,157 @@ public class Long64VectorTests extends AbstractVectorTest { assertArraysEquals(r, a, mask, Long64VectorTests::REVERSE_BYTES); } + static boolean band(boolean a, boolean b) { + return a & b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskandLong64VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.and(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Long64VectorTests::band); + } + + static boolean bor(boolean a, boolean b) { + return a | b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskorLong64VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.or(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Long64VectorTests::bor); + } + + static boolean bxor(boolean a, boolean b) { + return a != b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskxorLong64VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.xor(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Long64VectorTests::bxor); + } + + static boolean bandNot(boolean a, boolean b) { + return a & !b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskandNotLong64VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.andNot(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Long64VectorTests::bandNot); + } + + static boolean beq(boolean a, boolean b) { + return a == b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskeqLong64VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.eq(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Long64VectorTests::beq); + } + + static boolean unot(boolean a) { + return !a; + } + + @Test(dataProvider = "boolMaskUnaryOpProvider") + static void masknotLong64VectorTests(IntFunction fa) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + av.not().intoArray(r, i); + } + } + + assertArraysEquals(r, a, Long64VectorTests::unot); + } + + private static final long LONG_MASK_BITS = 0xFFFFFFFFFFFFFFFFL >>> (64 - SPECIES.length()); + + static void assertArraysEquals(long[] r, long[] a, long bits) { + int i = 0; + try { + for (; i < a.length; i++) { + Assert.assertEquals(r[i], a[i] & bits); + } + } catch (AssertionError e) { + Assert.assertEquals(r[i], a[i] & bits, "(" + a[i] + ") at index #" + i); + } + } + + @Test(dataProvider = "longMaskProvider") + static void maskFromToLongLong64VectorTests(IntFunction fa) { + long[] a = fa.apply(SPECIES.length()); + long[] r = new long[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i++) { + VectorMask vmask = VectorMask.fromLong(SPECIES, a[i]); + r[i] = vmask.toLong(); + } + } + assertArraysEquals(r, a, LONG_MASK_BITS); + } + @Test(dataProvider = "longCompareOpProvider") static void ltLong64VectorTestsBroadcastSmokeTest(IntFunction fa, IntFunction fb) { long[] a = fa.apply(SPECIES.length()); @@ -6619,115 +6809,22 @@ public class Long64VectorTests extends AbstractVectorTest { } } - @Test(dataProvider = "maskCompareOpProvider") - static void maskEqualsLong64VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskEqualsLong64VectorTests(IntFunction fa, IntFunction fb) { boolean[] a = fa.apply(SPECIES.length()); boolean[] b = fb.apply(SPECIES.length()); - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - boolean equals = av.equals(bv); - int to = i + SPECIES.length(); - Assert.assertEquals(equals, Arrays.equals(a, i, to, b, i, to)); + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + var av = SPECIES.loadMask(a, i); + var bv = SPECIES.loadMask(b, i); + boolean equals = av.equals(bv); + int to = i + SPECIES.length(); + Assert.assertEquals(equals, Arrays.equals(a, i, to, b, i, to)); + } } } - static boolean band(boolean a, boolean b) { - return a & b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskAndLong64VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.and(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Long64VectorTests::band); - } - - static boolean bor(boolean a, boolean b) { - return a | b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskOrLong64VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.or(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Long64VectorTests::bor); - } - - static boolean bxor(boolean a, boolean b) { - return a != b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskXorLong64VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.xor(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Long64VectorTests::bxor); - } - - static boolean bandNot(boolean a, boolean b) { - return a & !b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskAndNotLong64VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.andNot(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Long64VectorTests::bandNot); - } - - static boolean beq(boolean a, boolean b) { - return (a == b); - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskEqLong64VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.eq(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Long64VectorTests::beq); - } - @Test(dataProvider = "maskProvider") static void maskHashCodeLong64VectorTestsSmokeTest(IntFunction fa) { boolean[] a = fa.apply(SPECIES.length()); @@ -6832,23 +6929,6 @@ public class Long64VectorTests extends AbstractVectorTest { } } - @DataProvider - public static Object[][] longMaskProvider() { - return new Object[][]{ - {0xFFFFFFFFFFFFFFFFL}, - {0x0000000000000000L}, - {0x5555555555555555L}, - {0x0123456789abcdefL}, - }; - } - - @Test(dataProvider = "longMaskProvider") - static void maskFromToLongLong64VectorTestsSmokeTest(long inputLong) { - var vmask = VectorMask.fromLong(SPECIES, inputLong); - long outputLong = vmask.toLong(); - Assert.assertEquals(outputLong, (inputLong & (((0xFFFFFFFFFFFFFFFFL >>> (64 - SPECIES.length())))))); - } - @DataProvider public static Object[][] offsetProvider() { return new Object[][]{ diff --git a/test/jdk/jdk/incubator/vector/LongMaxVectorTests.java b/test/jdk/jdk/incubator/vector/LongMaxVectorTests.java index 7aa2bc4c510..3eba905e4f8 100644 --- a/test/jdk/jdk/incubator/vector/LongMaxVectorTests.java +++ b/test/jdk/jdk/incubator/vector/LongMaxVectorTests.java @@ -355,6 +355,36 @@ public class LongMaxVectorTests extends AbstractVectorTest { } } + interface FBoolUnOp { + boolean apply(boolean a); + } + + static void assertArraysEquals(boolean[] r, boolean[] a, FBoolUnOp f) { + int i = 0; + try { + for (; i < a.length; i++) { + Assert.assertEquals(r[i], f.apply(a[i])); + } + } catch (AssertionError e) { + Assert.assertEquals(r[i], f.apply(a[i]), "(" + a[i] + ") at index #" + i); + } + } + + interface FBoolBinOp { + boolean apply(boolean a, boolean b); + } + + static void assertArraysEquals(boolean[] r, boolean[] a, boolean[] b, FBoolBinOp f) { + int i = 0; + try { + for (; i < a.length; i++) { + Assert.assertEquals(r[i], f.apply(a[i], b[i])); + } + } catch (AssertionError e) { + Assert.assertEquals(r[i], f.apply(a[i], b[i]), "(" + a[i] + ", " + b[i] + ") at index #" + i); + } + } + interface FBinOp { long apply(long a, long b); } @@ -1080,12 +1110,6 @@ public class LongMaxVectorTests extends AbstractVectorTest { .flatMap(pair -> LONG_SATURATING_GENERATORS_ASSOC.stream().map(f -> List.of(pair.get(0), pair.get(1), f))) .collect(Collectors.toList()); - @DataProvider - public Object[][] boolUnaryOpProvider() { - return BOOL_ARRAY_GENERATORS.stream(). - map(f -> new Object[]{f}). - toArray(Object[][]::new); - } static final List>> LONG_GENERATOR_TRIPLES = LONG_GENERATOR_PAIRS.stream(). @@ -1224,8 +1248,23 @@ public class LongMaxVectorTests extends AbstractVectorTest { } @DataProvider - public Object[][] maskCompareOpProvider() { - return BOOLEAN_MASK_COMPARE_GENERATOR_PAIRS.stream().map(List::toArray). + public Object[][] longMaskProvider() { + return LONG_MASK_GENERATORS.stream(). + map(f -> new Object[]{f}). + toArray(Object[][]::new); + } + + @DataProvider + public Object[][] boolMaskBinaryOpProvider() { + return BOOLEAN_MASK_COMPARE_GENERATOR_PAIRS.stream(). + map(List::toArray). + toArray(Object[][]::new); + } + + @DataProvider + public Object[][] boolMaskUnaryOpProvider() { + return BOOLEAN_MASK_GENERATORS.stream(). + map(f -> new Object[]{f}). toArray(Object[][]::new); } @@ -4535,7 +4574,7 @@ public class LongMaxVectorTests extends AbstractVectorTest { return res; } - @Test(dataProvider = "boolUnaryOpProvider") + @Test(dataProvider = "boolMaskUnaryOpProvider") static void anyTrueLongMaxVectorTests(IntFunction fm) { boolean[] mask = fm.apply(SPECIES.length()); boolean[] r = fmr.apply(SPECIES.length()); @@ -4559,7 +4598,7 @@ public class LongMaxVectorTests extends AbstractVectorTest { return res; } - @Test(dataProvider = "boolUnaryOpProvider") + @Test(dataProvider = "boolMaskUnaryOpProvider") static void allTrueLongMaxVectorTests(IntFunction fm) { boolean[] mask = fm.apply(SPECIES.length()); boolean[] r = fmr.apply(SPECIES.length()); @@ -6391,6 +6430,157 @@ public class LongMaxVectorTests extends AbstractVectorTest { assertArraysEquals(r, a, mask, LongMaxVectorTests::REVERSE_BYTES); } + static boolean band(boolean a, boolean b) { + return a & b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskandLongMaxVectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.and(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, LongMaxVectorTests::band); + } + + static boolean bor(boolean a, boolean b) { + return a | b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskorLongMaxVectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.or(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, LongMaxVectorTests::bor); + } + + static boolean bxor(boolean a, boolean b) { + return a != b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskxorLongMaxVectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.xor(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, LongMaxVectorTests::bxor); + } + + static boolean bandNot(boolean a, boolean b) { + return a & !b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskandNotLongMaxVectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.andNot(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, LongMaxVectorTests::bandNot); + } + + static boolean beq(boolean a, boolean b) { + return a == b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskeqLongMaxVectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.eq(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, LongMaxVectorTests::beq); + } + + static boolean unot(boolean a) { + return !a; + } + + @Test(dataProvider = "boolMaskUnaryOpProvider") + static void masknotLongMaxVectorTests(IntFunction fa) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + av.not().intoArray(r, i); + } + } + + assertArraysEquals(r, a, LongMaxVectorTests::unot); + } + + private static final long LONG_MASK_BITS = 0xFFFFFFFFFFFFFFFFL >>> (64 - SPECIES.length()); + + static void assertArraysEquals(long[] r, long[] a, long bits) { + int i = 0; + try { + for (; i < a.length; i++) { + Assert.assertEquals(r[i], a[i] & bits); + } + } catch (AssertionError e) { + Assert.assertEquals(r[i], a[i] & bits, "(" + a[i] + ") at index #" + i); + } + } + + @Test(dataProvider = "longMaskProvider") + static void maskFromToLongLongMaxVectorTests(IntFunction fa) { + long[] a = fa.apply(SPECIES.length()); + long[] r = new long[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i++) { + VectorMask vmask = VectorMask.fromLong(SPECIES, a[i]); + r[i] = vmask.toLong(); + } + } + assertArraysEquals(r, a, LONG_MASK_BITS); + } + @Test(dataProvider = "longCompareOpProvider") static void ltLongMaxVectorTestsBroadcastSmokeTest(IntFunction fa, IntFunction fb) { long[] a = fa.apply(SPECIES.length()); @@ -6624,115 +6814,22 @@ public class LongMaxVectorTests extends AbstractVectorTest { } } - @Test(dataProvider = "maskCompareOpProvider") - static void maskEqualsLongMaxVectorTestsSmokeTest(IntFunction fa, IntFunction fb) { + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskEqualsLongMaxVectorTests(IntFunction fa, IntFunction fb) { boolean[] a = fa.apply(SPECIES.length()); boolean[] b = fb.apply(SPECIES.length()); - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - boolean equals = av.equals(bv); - int to = i + SPECIES.length(); - Assert.assertEquals(equals, Arrays.equals(a, i, to, b, i, to)); + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + var av = SPECIES.loadMask(a, i); + var bv = SPECIES.loadMask(b, i); + boolean equals = av.equals(bv); + int to = i + SPECIES.length(); + Assert.assertEquals(equals, Arrays.equals(a, i, to, b, i, to)); + } } } - static boolean band(boolean a, boolean b) { - return a & b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskAndLongMaxVectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.and(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, LongMaxVectorTests::band); - } - - static boolean bor(boolean a, boolean b) { - return a | b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskOrLongMaxVectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.or(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, LongMaxVectorTests::bor); - } - - static boolean bxor(boolean a, boolean b) { - return a != b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskXorLongMaxVectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.xor(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, LongMaxVectorTests::bxor); - } - - static boolean bandNot(boolean a, boolean b) { - return a & !b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskAndNotLongMaxVectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.andNot(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, LongMaxVectorTests::bandNot); - } - - static boolean beq(boolean a, boolean b) { - return (a == b); - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskEqLongMaxVectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.eq(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, LongMaxVectorTests::beq); - } - @Test(dataProvider = "maskProvider") static void maskHashCodeLongMaxVectorTestsSmokeTest(IntFunction fa) { boolean[] a = fa.apply(SPECIES.length()); @@ -6837,7 +6934,6 @@ public class LongMaxVectorTests extends AbstractVectorTest { } } - @DataProvider public static Object[][] offsetProvider() { return new Object[][]{ diff --git a/test/jdk/jdk/incubator/vector/Short128VectorTests.java b/test/jdk/jdk/incubator/vector/Short128VectorTests.java index 5f4c54bb708..50be26b163a 100644 --- a/test/jdk/jdk/incubator/vector/Short128VectorTests.java +++ b/test/jdk/jdk/incubator/vector/Short128VectorTests.java @@ -393,6 +393,36 @@ public class Short128VectorTests extends AbstractVectorTest { } } + interface FBoolUnOp { + boolean apply(boolean a); + } + + static void assertArraysEquals(boolean[] r, boolean[] a, FBoolUnOp f) { + int i = 0; + try { + for (; i < a.length; i++) { + Assert.assertEquals(r[i], f.apply(a[i])); + } + } catch (AssertionError e) { + Assert.assertEquals(r[i], f.apply(a[i]), "(" + a[i] + ") at index #" + i); + } + } + + interface FBoolBinOp { + boolean apply(boolean a, boolean b); + } + + static void assertArraysEquals(boolean[] r, boolean[] a, boolean[] b, FBoolBinOp f) { + int i = 0; + try { + for (; i < a.length; i++) { + Assert.assertEquals(r[i], f.apply(a[i], b[i])); + } + } catch (AssertionError e) { + Assert.assertEquals(r[i], f.apply(a[i], b[i]), "(" + a[i] + ", " + b[i] + ") at index #" + i); + } + } + interface FBinOp { short apply(short a, short b); } @@ -1085,12 +1115,6 @@ public class Short128VectorTests extends AbstractVectorTest { .flatMap(pair -> SHORT_SATURATING_GENERATORS_ASSOC.stream().map(f -> List.of(pair.get(0), pair.get(1), f))) .collect(Collectors.toList()); - @DataProvider - public Object[][] boolUnaryOpProvider() { - return BOOL_ARRAY_GENERATORS.stream(). - map(f -> new Object[]{f}). - toArray(Object[][]::new); - } static final List>> SHORT_GENERATOR_TRIPLES = SHORT_GENERATOR_PAIRS.stream(). @@ -1222,8 +1246,23 @@ public class Short128VectorTests extends AbstractVectorTest { } @DataProvider - public Object[][] maskCompareOpProvider() { - return BOOLEAN_MASK_COMPARE_GENERATOR_PAIRS.stream().map(List::toArray). + public Object[][] longMaskProvider() { + return LONG_MASK_GENERATORS.stream(). + map(f -> new Object[]{f}). + toArray(Object[][]::new); + } + + @DataProvider + public Object[][] boolMaskBinaryOpProvider() { + return BOOLEAN_MASK_COMPARE_GENERATOR_PAIRS.stream(). + map(List::toArray). + toArray(Object[][]::new); + } + + @DataProvider + public Object[][] boolMaskUnaryOpProvider() { + return BOOLEAN_MASK_GENERATORS.stream(). + map(f -> new Object[]{f}). toArray(Object[][]::new); } @@ -4455,7 +4494,7 @@ public class Short128VectorTests extends AbstractVectorTest { return res; } - @Test(dataProvider = "boolUnaryOpProvider") + @Test(dataProvider = "boolMaskUnaryOpProvider") static void anyTrueShort128VectorTests(IntFunction fm) { boolean[] mask = fm.apply(SPECIES.length()); boolean[] r = fmr.apply(SPECIES.length()); @@ -4479,7 +4518,7 @@ public class Short128VectorTests extends AbstractVectorTest { return res; } - @Test(dataProvider = "boolUnaryOpProvider") + @Test(dataProvider = "boolMaskUnaryOpProvider") static void allTrueShort128VectorTests(IntFunction fm) { boolean[] mask = fm.apply(SPECIES.length()); boolean[] r = fmr.apply(SPECIES.length()); @@ -6381,6 +6420,157 @@ public class Short128VectorTests extends AbstractVectorTest { assertArraysEquals(r, a, mask, Short128VectorTests::REVERSE_BYTES); } + static boolean band(boolean a, boolean b) { + return a & b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskandShort128VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.and(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Short128VectorTests::band); + } + + static boolean bor(boolean a, boolean b) { + return a | b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskorShort128VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.or(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Short128VectorTests::bor); + } + + static boolean bxor(boolean a, boolean b) { + return a != b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskxorShort128VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.xor(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Short128VectorTests::bxor); + } + + static boolean bandNot(boolean a, boolean b) { + return a & !b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskandNotShort128VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.andNot(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Short128VectorTests::bandNot); + } + + static boolean beq(boolean a, boolean b) { + return a == b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskeqShort128VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.eq(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Short128VectorTests::beq); + } + + static boolean unot(boolean a) { + return !a; + } + + @Test(dataProvider = "boolMaskUnaryOpProvider") + static void masknotShort128VectorTests(IntFunction fa) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + av.not().intoArray(r, i); + } + } + + assertArraysEquals(r, a, Short128VectorTests::unot); + } + + private static final long LONG_MASK_BITS = 0xFFFFFFFFFFFFFFFFL >>> (64 - SPECIES.length()); + + static void assertArraysEquals(long[] r, long[] a, long bits) { + int i = 0; + try { + for (; i < a.length; i++) { + Assert.assertEquals(r[i], a[i] & bits); + } + } catch (AssertionError e) { + Assert.assertEquals(r[i], a[i] & bits, "(" + a[i] + ") at index #" + i); + } + } + + @Test(dataProvider = "longMaskProvider") + static void maskFromToLongShort128VectorTests(IntFunction fa) { + long[] a = fa.apply(SPECIES.length()); + long[] r = new long[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i++) { + VectorMask vmask = VectorMask.fromLong(SPECIES, a[i]); + r[i] = vmask.toLong(); + } + } + assertArraysEquals(r, a, LONG_MASK_BITS); + } + @Test(dataProvider = "shortCompareOpProvider") static void ltShort128VectorTestsBroadcastSmokeTest(IntFunction fa, IntFunction fb) { short[] a = fa.apply(SPECIES.length()); @@ -6680,115 +6870,22 @@ public class Short128VectorTests extends AbstractVectorTest { } } - @Test(dataProvider = "maskCompareOpProvider") - static void maskEqualsShort128VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskEqualsShort128VectorTests(IntFunction fa, IntFunction fb) { boolean[] a = fa.apply(SPECIES.length()); boolean[] b = fb.apply(SPECIES.length()); - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - boolean equals = av.equals(bv); - int to = i + SPECIES.length(); - Assert.assertEquals(equals, Arrays.equals(a, i, to, b, i, to)); + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + var av = SPECIES.loadMask(a, i); + var bv = SPECIES.loadMask(b, i); + boolean equals = av.equals(bv); + int to = i + SPECIES.length(); + Assert.assertEquals(equals, Arrays.equals(a, i, to, b, i, to)); + } } } - static boolean band(boolean a, boolean b) { - return a & b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskAndShort128VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.and(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Short128VectorTests::band); - } - - static boolean bor(boolean a, boolean b) { - return a | b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskOrShort128VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.or(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Short128VectorTests::bor); - } - - static boolean bxor(boolean a, boolean b) { - return a != b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskXorShort128VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.xor(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Short128VectorTests::bxor); - } - - static boolean bandNot(boolean a, boolean b) { - return a & !b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskAndNotShort128VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.andNot(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Short128VectorTests::bandNot); - } - - static boolean beq(boolean a, boolean b) { - return (a == b); - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskEqShort128VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.eq(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Short128VectorTests::beq); - } - @Test(dataProvider = "maskProvider") static void maskHashCodeShort128VectorTestsSmokeTest(IntFunction fa) { boolean[] a = fa.apply(SPECIES.length()); @@ -6893,23 +6990,6 @@ public class Short128VectorTests extends AbstractVectorTest { } } - @DataProvider - public static Object[][] longMaskProvider() { - return new Object[][]{ - {0xFFFFFFFFFFFFFFFFL}, - {0x0000000000000000L}, - {0x5555555555555555L}, - {0x0123456789abcdefL}, - }; - } - - @Test(dataProvider = "longMaskProvider") - static void maskFromToLongShort128VectorTestsSmokeTest(long inputLong) { - var vmask = VectorMask.fromLong(SPECIES, inputLong); - long outputLong = vmask.toLong(); - Assert.assertEquals(outputLong, (inputLong & (((0xFFFFFFFFFFFFFFFFL >>> (64 - SPECIES.length())))))); - } - @DataProvider public static Object[][] offsetProvider() { return new Object[][]{ diff --git a/test/jdk/jdk/incubator/vector/Short256VectorTests.java b/test/jdk/jdk/incubator/vector/Short256VectorTests.java index 88986575f60..5f63164755b 100644 --- a/test/jdk/jdk/incubator/vector/Short256VectorTests.java +++ b/test/jdk/jdk/incubator/vector/Short256VectorTests.java @@ -393,6 +393,36 @@ public class Short256VectorTests extends AbstractVectorTest { } } + interface FBoolUnOp { + boolean apply(boolean a); + } + + static void assertArraysEquals(boolean[] r, boolean[] a, FBoolUnOp f) { + int i = 0; + try { + for (; i < a.length; i++) { + Assert.assertEquals(r[i], f.apply(a[i])); + } + } catch (AssertionError e) { + Assert.assertEquals(r[i], f.apply(a[i]), "(" + a[i] + ") at index #" + i); + } + } + + interface FBoolBinOp { + boolean apply(boolean a, boolean b); + } + + static void assertArraysEquals(boolean[] r, boolean[] a, boolean[] b, FBoolBinOp f) { + int i = 0; + try { + for (; i < a.length; i++) { + Assert.assertEquals(r[i], f.apply(a[i], b[i])); + } + } catch (AssertionError e) { + Assert.assertEquals(r[i], f.apply(a[i], b[i]), "(" + a[i] + ", " + b[i] + ") at index #" + i); + } + } + interface FBinOp { short apply(short a, short b); } @@ -1085,12 +1115,6 @@ public class Short256VectorTests extends AbstractVectorTest { .flatMap(pair -> SHORT_SATURATING_GENERATORS_ASSOC.stream().map(f -> List.of(pair.get(0), pair.get(1), f))) .collect(Collectors.toList()); - @DataProvider - public Object[][] boolUnaryOpProvider() { - return BOOL_ARRAY_GENERATORS.stream(). - map(f -> new Object[]{f}). - toArray(Object[][]::new); - } static final List>> SHORT_GENERATOR_TRIPLES = SHORT_GENERATOR_PAIRS.stream(). @@ -1222,8 +1246,23 @@ public class Short256VectorTests extends AbstractVectorTest { } @DataProvider - public Object[][] maskCompareOpProvider() { - return BOOLEAN_MASK_COMPARE_GENERATOR_PAIRS.stream().map(List::toArray). + public Object[][] longMaskProvider() { + return LONG_MASK_GENERATORS.stream(). + map(f -> new Object[]{f}). + toArray(Object[][]::new); + } + + @DataProvider + public Object[][] boolMaskBinaryOpProvider() { + return BOOLEAN_MASK_COMPARE_GENERATOR_PAIRS.stream(). + map(List::toArray). + toArray(Object[][]::new); + } + + @DataProvider + public Object[][] boolMaskUnaryOpProvider() { + return BOOLEAN_MASK_GENERATORS.stream(). + map(f -> new Object[]{f}). toArray(Object[][]::new); } @@ -4455,7 +4494,7 @@ public class Short256VectorTests extends AbstractVectorTest { return res; } - @Test(dataProvider = "boolUnaryOpProvider") + @Test(dataProvider = "boolMaskUnaryOpProvider") static void anyTrueShort256VectorTests(IntFunction fm) { boolean[] mask = fm.apply(SPECIES.length()); boolean[] r = fmr.apply(SPECIES.length()); @@ -4479,7 +4518,7 @@ public class Short256VectorTests extends AbstractVectorTest { return res; } - @Test(dataProvider = "boolUnaryOpProvider") + @Test(dataProvider = "boolMaskUnaryOpProvider") static void allTrueShort256VectorTests(IntFunction fm) { boolean[] mask = fm.apply(SPECIES.length()); boolean[] r = fmr.apply(SPECIES.length()); @@ -6381,6 +6420,157 @@ public class Short256VectorTests extends AbstractVectorTest { assertArraysEquals(r, a, mask, Short256VectorTests::REVERSE_BYTES); } + static boolean band(boolean a, boolean b) { + return a & b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskandShort256VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.and(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Short256VectorTests::band); + } + + static boolean bor(boolean a, boolean b) { + return a | b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskorShort256VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.or(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Short256VectorTests::bor); + } + + static boolean bxor(boolean a, boolean b) { + return a != b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskxorShort256VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.xor(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Short256VectorTests::bxor); + } + + static boolean bandNot(boolean a, boolean b) { + return a & !b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskandNotShort256VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.andNot(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Short256VectorTests::bandNot); + } + + static boolean beq(boolean a, boolean b) { + return a == b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskeqShort256VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.eq(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Short256VectorTests::beq); + } + + static boolean unot(boolean a) { + return !a; + } + + @Test(dataProvider = "boolMaskUnaryOpProvider") + static void masknotShort256VectorTests(IntFunction fa) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + av.not().intoArray(r, i); + } + } + + assertArraysEquals(r, a, Short256VectorTests::unot); + } + + private static final long LONG_MASK_BITS = 0xFFFFFFFFFFFFFFFFL >>> (64 - SPECIES.length()); + + static void assertArraysEquals(long[] r, long[] a, long bits) { + int i = 0; + try { + for (; i < a.length; i++) { + Assert.assertEquals(r[i], a[i] & bits); + } + } catch (AssertionError e) { + Assert.assertEquals(r[i], a[i] & bits, "(" + a[i] + ") at index #" + i); + } + } + + @Test(dataProvider = "longMaskProvider") + static void maskFromToLongShort256VectorTests(IntFunction fa) { + long[] a = fa.apply(SPECIES.length()); + long[] r = new long[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i++) { + VectorMask vmask = VectorMask.fromLong(SPECIES, a[i]); + r[i] = vmask.toLong(); + } + } + assertArraysEquals(r, a, LONG_MASK_BITS); + } + @Test(dataProvider = "shortCompareOpProvider") static void ltShort256VectorTestsBroadcastSmokeTest(IntFunction fa, IntFunction fb) { short[] a = fa.apply(SPECIES.length()); @@ -6680,115 +6870,22 @@ public class Short256VectorTests extends AbstractVectorTest { } } - @Test(dataProvider = "maskCompareOpProvider") - static void maskEqualsShort256VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskEqualsShort256VectorTests(IntFunction fa, IntFunction fb) { boolean[] a = fa.apply(SPECIES.length()); boolean[] b = fb.apply(SPECIES.length()); - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - boolean equals = av.equals(bv); - int to = i + SPECIES.length(); - Assert.assertEquals(equals, Arrays.equals(a, i, to, b, i, to)); + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + var av = SPECIES.loadMask(a, i); + var bv = SPECIES.loadMask(b, i); + boolean equals = av.equals(bv); + int to = i + SPECIES.length(); + Assert.assertEquals(equals, Arrays.equals(a, i, to, b, i, to)); + } } } - static boolean band(boolean a, boolean b) { - return a & b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskAndShort256VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.and(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Short256VectorTests::band); - } - - static boolean bor(boolean a, boolean b) { - return a | b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskOrShort256VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.or(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Short256VectorTests::bor); - } - - static boolean bxor(boolean a, boolean b) { - return a != b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskXorShort256VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.xor(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Short256VectorTests::bxor); - } - - static boolean bandNot(boolean a, boolean b) { - return a & !b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskAndNotShort256VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.andNot(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Short256VectorTests::bandNot); - } - - static boolean beq(boolean a, boolean b) { - return (a == b); - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskEqShort256VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.eq(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Short256VectorTests::beq); - } - @Test(dataProvider = "maskProvider") static void maskHashCodeShort256VectorTestsSmokeTest(IntFunction fa) { boolean[] a = fa.apply(SPECIES.length()); @@ -6893,23 +6990,6 @@ public class Short256VectorTests extends AbstractVectorTest { } } - @DataProvider - public static Object[][] longMaskProvider() { - return new Object[][]{ - {0xFFFFFFFFFFFFFFFFL}, - {0x0000000000000000L}, - {0x5555555555555555L}, - {0x0123456789abcdefL}, - }; - } - - @Test(dataProvider = "longMaskProvider") - static void maskFromToLongShort256VectorTestsSmokeTest(long inputLong) { - var vmask = VectorMask.fromLong(SPECIES, inputLong); - long outputLong = vmask.toLong(); - Assert.assertEquals(outputLong, (inputLong & (((0xFFFFFFFFFFFFFFFFL >>> (64 - SPECIES.length())))))); - } - @DataProvider public static Object[][] offsetProvider() { return new Object[][]{ diff --git a/test/jdk/jdk/incubator/vector/Short512VectorTests.java b/test/jdk/jdk/incubator/vector/Short512VectorTests.java index 0f474375a47..5044f8db482 100644 --- a/test/jdk/jdk/incubator/vector/Short512VectorTests.java +++ b/test/jdk/jdk/incubator/vector/Short512VectorTests.java @@ -393,6 +393,36 @@ public class Short512VectorTests extends AbstractVectorTest { } } + interface FBoolUnOp { + boolean apply(boolean a); + } + + static void assertArraysEquals(boolean[] r, boolean[] a, FBoolUnOp f) { + int i = 0; + try { + for (; i < a.length; i++) { + Assert.assertEquals(r[i], f.apply(a[i])); + } + } catch (AssertionError e) { + Assert.assertEquals(r[i], f.apply(a[i]), "(" + a[i] + ") at index #" + i); + } + } + + interface FBoolBinOp { + boolean apply(boolean a, boolean b); + } + + static void assertArraysEquals(boolean[] r, boolean[] a, boolean[] b, FBoolBinOp f) { + int i = 0; + try { + for (; i < a.length; i++) { + Assert.assertEquals(r[i], f.apply(a[i], b[i])); + } + } catch (AssertionError e) { + Assert.assertEquals(r[i], f.apply(a[i], b[i]), "(" + a[i] + ", " + b[i] + ") at index #" + i); + } + } + interface FBinOp { short apply(short a, short b); } @@ -1085,12 +1115,6 @@ public class Short512VectorTests extends AbstractVectorTest { .flatMap(pair -> SHORT_SATURATING_GENERATORS_ASSOC.stream().map(f -> List.of(pair.get(0), pair.get(1), f))) .collect(Collectors.toList()); - @DataProvider - public Object[][] boolUnaryOpProvider() { - return BOOL_ARRAY_GENERATORS.stream(). - map(f -> new Object[]{f}). - toArray(Object[][]::new); - } static final List>> SHORT_GENERATOR_TRIPLES = SHORT_GENERATOR_PAIRS.stream(). @@ -1222,8 +1246,23 @@ public class Short512VectorTests extends AbstractVectorTest { } @DataProvider - public Object[][] maskCompareOpProvider() { - return BOOLEAN_MASK_COMPARE_GENERATOR_PAIRS.stream().map(List::toArray). + public Object[][] longMaskProvider() { + return LONG_MASK_GENERATORS.stream(). + map(f -> new Object[]{f}). + toArray(Object[][]::new); + } + + @DataProvider + public Object[][] boolMaskBinaryOpProvider() { + return BOOLEAN_MASK_COMPARE_GENERATOR_PAIRS.stream(). + map(List::toArray). + toArray(Object[][]::new); + } + + @DataProvider + public Object[][] boolMaskUnaryOpProvider() { + return BOOLEAN_MASK_GENERATORS.stream(). + map(f -> new Object[]{f}). toArray(Object[][]::new); } @@ -4455,7 +4494,7 @@ public class Short512VectorTests extends AbstractVectorTest { return res; } - @Test(dataProvider = "boolUnaryOpProvider") + @Test(dataProvider = "boolMaskUnaryOpProvider") static void anyTrueShort512VectorTests(IntFunction fm) { boolean[] mask = fm.apply(SPECIES.length()); boolean[] r = fmr.apply(SPECIES.length()); @@ -4479,7 +4518,7 @@ public class Short512VectorTests extends AbstractVectorTest { return res; } - @Test(dataProvider = "boolUnaryOpProvider") + @Test(dataProvider = "boolMaskUnaryOpProvider") static void allTrueShort512VectorTests(IntFunction fm) { boolean[] mask = fm.apply(SPECIES.length()); boolean[] r = fmr.apply(SPECIES.length()); @@ -6381,6 +6420,157 @@ public class Short512VectorTests extends AbstractVectorTest { assertArraysEquals(r, a, mask, Short512VectorTests::REVERSE_BYTES); } + static boolean band(boolean a, boolean b) { + return a & b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskandShort512VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.and(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Short512VectorTests::band); + } + + static boolean bor(boolean a, boolean b) { + return a | b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskorShort512VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.or(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Short512VectorTests::bor); + } + + static boolean bxor(boolean a, boolean b) { + return a != b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskxorShort512VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.xor(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Short512VectorTests::bxor); + } + + static boolean bandNot(boolean a, boolean b) { + return a & !b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskandNotShort512VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.andNot(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Short512VectorTests::bandNot); + } + + static boolean beq(boolean a, boolean b) { + return a == b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskeqShort512VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.eq(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Short512VectorTests::beq); + } + + static boolean unot(boolean a) { + return !a; + } + + @Test(dataProvider = "boolMaskUnaryOpProvider") + static void masknotShort512VectorTests(IntFunction fa) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + av.not().intoArray(r, i); + } + } + + assertArraysEquals(r, a, Short512VectorTests::unot); + } + + private static final long LONG_MASK_BITS = 0xFFFFFFFFFFFFFFFFL >>> (64 - SPECIES.length()); + + static void assertArraysEquals(long[] r, long[] a, long bits) { + int i = 0; + try { + for (; i < a.length; i++) { + Assert.assertEquals(r[i], a[i] & bits); + } + } catch (AssertionError e) { + Assert.assertEquals(r[i], a[i] & bits, "(" + a[i] + ") at index #" + i); + } + } + + @Test(dataProvider = "longMaskProvider") + static void maskFromToLongShort512VectorTests(IntFunction fa) { + long[] a = fa.apply(SPECIES.length()); + long[] r = new long[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i++) { + VectorMask vmask = VectorMask.fromLong(SPECIES, a[i]); + r[i] = vmask.toLong(); + } + } + assertArraysEquals(r, a, LONG_MASK_BITS); + } + @Test(dataProvider = "shortCompareOpProvider") static void ltShort512VectorTestsBroadcastSmokeTest(IntFunction fa, IntFunction fb) { short[] a = fa.apply(SPECIES.length()); @@ -6680,115 +6870,22 @@ public class Short512VectorTests extends AbstractVectorTest { } } - @Test(dataProvider = "maskCompareOpProvider") - static void maskEqualsShort512VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskEqualsShort512VectorTests(IntFunction fa, IntFunction fb) { boolean[] a = fa.apply(SPECIES.length()); boolean[] b = fb.apply(SPECIES.length()); - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - boolean equals = av.equals(bv); - int to = i + SPECIES.length(); - Assert.assertEquals(equals, Arrays.equals(a, i, to, b, i, to)); + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + var av = SPECIES.loadMask(a, i); + var bv = SPECIES.loadMask(b, i); + boolean equals = av.equals(bv); + int to = i + SPECIES.length(); + Assert.assertEquals(equals, Arrays.equals(a, i, to, b, i, to)); + } } } - static boolean band(boolean a, boolean b) { - return a & b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskAndShort512VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.and(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Short512VectorTests::band); - } - - static boolean bor(boolean a, boolean b) { - return a | b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskOrShort512VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.or(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Short512VectorTests::bor); - } - - static boolean bxor(boolean a, boolean b) { - return a != b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskXorShort512VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.xor(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Short512VectorTests::bxor); - } - - static boolean bandNot(boolean a, boolean b) { - return a & !b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskAndNotShort512VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.andNot(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Short512VectorTests::bandNot); - } - - static boolean beq(boolean a, boolean b) { - return (a == b); - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskEqShort512VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.eq(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Short512VectorTests::beq); - } - @Test(dataProvider = "maskProvider") static void maskHashCodeShort512VectorTestsSmokeTest(IntFunction fa) { boolean[] a = fa.apply(SPECIES.length()); @@ -6893,23 +6990,6 @@ public class Short512VectorTests extends AbstractVectorTest { } } - @DataProvider - public static Object[][] longMaskProvider() { - return new Object[][]{ - {0xFFFFFFFFFFFFFFFFL}, - {0x0000000000000000L}, - {0x5555555555555555L}, - {0x0123456789abcdefL}, - }; - } - - @Test(dataProvider = "longMaskProvider") - static void maskFromToLongShort512VectorTestsSmokeTest(long inputLong) { - var vmask = VectorMask.fromLong(SPECIES, inputLong); - long outputLong = vmask.toLong(); - Assert.assertEquals(outputLong, (inputLong & (((0xFFFFFFFFFFFFFFFFL >>> (64 - SPECIES.length())))))); - } - @DataProvider public static Object[][] offsetProvider() { return new Object[][]{ diff --git a/test/jdk/jdk/incubator/vector/Short64VectorTests.java b/test/jdk/jdk/incubator/vector/Short64VectorTests.java index 4b99ed6d84c..bc12c3f0938 100644 --- a/test/jdk/jdk/incubator/vector/Short64VectorTests.java +++ b/test/jdk/jdk/incubator/vector/Short64VectorTests.java @@ -393,6 +393,36 @@ public class Short64VectorTests extends AbstractVectorTest { } } + interface FBoolUnOp { + boolean apply(boolean a); + } + + static void assertArraysEquals(boolean[] r, boolean[] a, FBoolUnOp f) { + int i = 0; + try { + for (; i < a.length; i++) { + Assert.assertEquals(r[i], f.apply(a[i])); + } + } catch (AssertionError e) { + Assert.assertEquals(r[i], f.apply(a[i]), "(" + a[i] + ") at index #" + i); + } + } + + interface FBoolBinOp { + boolean apply(boolean a, boolean b); + } + + static void assertArraysEquals(boolean[] r, boolean[] a, boolean[] b, FBoolBinOp f) { + int i = 0; + try { + for (; i < a.length; i++) { + Assert.assertEquals(r[i], f.apply(a[i], b[i])); + } + } catch (AssertionError e) { + Assert.assertEquals(r[i], f.apply(a[i], b[i]), "(" + a[i] + ", " + b[i] + ") at index #" + i); + } + } + interface FBinOp { short apply(short a, short b); } @@ -1085,12 +1115,6 @@ public class Short64VectorTests extends AbstractVectorTest { .flatMap(pair -> SHORT_SATURATING_GENERATORS_ASSOC.stream().map(f -> List.of(pair.get(0), pair.get(1), f))) .collect(Collectors.toList()); - @DataProvider - public Object[][] boolUnaryOpProvider() { - return BOOL_ARRAY_GENERATORS.stream(). - map(f -> new Object[]{f}). - toArray(Object[][]::new); - } static final List>> SHORT_GENERATOR_TRIPLES = SHORT_GENERATOR_PAIRS.stream(). @@ -1222,8 +1246,23 @@ public class Short64VectorTests extends AbstractVectorTest { } @DataProvider - public Object[][] maskCompareOpProvider() { - return BOOLEAN_MASK_COMPARE_GENERATOR_PAIRS.stream().map(List::toArray). + public Object[][] longMaskProvider() { + return LONG_MASK_GENERATORS.stream(). + map(f -> new Object[]{f}). + toArray(Object[][]::new); + } + + @DataProvider + public Object[][] boolMaskBinaryOpProvider() { + return BOOLEAN_MASK_COMPARE_GENERATOR_PAIRS.stream(). + map(List::toArray). + toArray(Object[][]::new); + } + + @DataProvider + public Object[][] boolMaskUnaryOpProvider() { + return BOOLEAN_MASK_GENERATORS.stream(). + map(f -> new Object[]{f}). toArray(Object[][]::new); } @@ -4455,7 +4494,7 @@ public class Short64VectorTests extends AbstractVectorTest { return res; } - @Test(dataProvider = "boolUnaryOpProvider") + @Test(dataProvider = "boolMaskUnaryOpProvider") static void anyTrueShort64VectorTests(IntFunction fm) { boolean[] mask = fm.apply(SPECIES.length()); boolean[] r = fmr.apply(SPECIES.length()); @@ -4479,7 +4518,7 @@ public class Short64VectorTests extends AbstractVectorTest { return res; } - @Test(dataProvider = "boolUnaryOpProvider") + @Test(dataProvider = "boolMaskUnaryOpProvider") static void allTrueShort64VectorTests(IntFunction fm) { boolean[] mask = fm.apply(SPECIES.length()); boolean[] r = fmr.apply(SPECIES.length()); @@ -6381,6 +6420,157 @@ public class Short64VectorTests extends AbstractVectorTest { assertArraysEquals(r, a, mask, Short64VectorTests::REVERSE_BYTES); } + static boolean band(boolean a, boolean b) { + return a & b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskandShort64VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.and(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Short64VectorTests::band); + } + + static boolean bor(boolean a, boolean b) { + return a | b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskorShort64VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.or(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Short64VectorTests::bor); + } + + static boolean bxor(boolean a, boolean b) { + return a != b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskxorShort64VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.xor(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Short64VectorTests::bxor); + } + + static boolean bandNot(boolean a, boolean b) { + return a & !b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskandNotShort64VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.andNot(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Short64VectorTests::bandNot); + } + + static boolean beq(boolean a, boolean b) { + return a == b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskeqShort64VectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.eq(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, Short64VectorTests::beq); + } + + static boolean unot(boolean a) { + return !a; + } + + @Test(dataProvider = "boolMaskUnaryOpProvider") + static void masknotShort64VectorTests(IntFunction fa) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + av.not().intoArray(r, i); + } + } + + assertArraysEquals(r, a, Short64VectorTests::unot); + } + + private static final long LONG_MASK_BITS = 0xFFFFFFFFFFFFFFFFL >>> (64 - SPECIES.length()); + + static void assertArraysEquals(long[] r, long[] a, long bits) { + int i = 0; + try { + for (; i < a.length; i++) { + Assert.assertEquals(r[i], a[i] & bits); + } + } catch (AssertionError e) { + Assert.assertEquals(r[i], a[i] & bits, "(" + a[i] + ") at index #" + i); + } + } + + @Test(dataProvider = "longMaskProvider") + static void maskFromToLongShort64VectorTests(IntFunction fa) { + long[] a = fa.apply(SPECIES.length()); + long[] r = new long[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i++) { + VectorMask vmask = VectorMask.fromLong(SPECIES, a[i]); + r[i] = vmask.toLong(); + } + } + assertArraysEquals(r, a, LONG_MASK_BITS); + } + @Test(dataProvider = "shortCompareOpProvider") static void ltShort64VectorTestsBroadcastSmokeTest(IntFunction fa, IntFunction fb) { short[] a = fa.apply(SPECIES.length()); @@ -6680,115 +6870,22 @@ public class Short64VectorTests extends AbstractVectorTest { } } - @Test(dataProvider = "maskCompareOpProvider") - static void maskEqualsShort64VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskEqualsShort64VectorTests(IntFunction fa, IntFunction fb) { boolean[] a = fa.apply(SPECIES.length()); boolean[] b = fb.apply(SPECIES.length()); - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - boolean equals = av.equals(bv); - int to = i + SPECIES.length(); - Assert.assertEquals(equals, Arrays.equals(a, i, to, b, i, to)); + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + var av = SPECIES.loadMask(a, i); + var bv = SPECIES.loadMask(b, i); + boolean equals = av.equals(bv); + int to = i + SPECIES.length(); + Assert.assertEquals(equals, Arrays.equals(a, i, to, b, i, to)); + } } } - static boolean band(boolean a, boolean b) { - return a & b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskAndShort64VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.and(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Short64VectorTests::band); - } - - static boolean bor(boolean a, boolean b) { - return a | b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskOrShort64VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.or(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Short64VectorTests::bor); - } - - static boolean bxor(boolean a, boolean b) { - return a != b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskXorShort64VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.xor(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Short64VectorTests::bxor); - } - - static boolean bandNot(boolean a, boolean b) { - return a & !b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskAndNotShort64VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.andNot(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Short64VectorTests::bandNot); - } - - static boolean beq(boolean a, boolean b) { - return (a == b); - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskEqShort64VectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.eq(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, Short64VectorTests::beq); - } - @Test(dataProvider = "maskProvider") static void maskHashCodeShort64VectorTestsSmokeTest(IntFunction fa) { boolean[] a = fa.apply(SPECIES.length()); @@ -6893,23 +6990,6 @@ public class Short64VectorTests extends AbstractVectorTest { } } - @DataProvider - public static Object[][] longMaskProvider() { - return new Object[][]{ - {0xFFFFFFFFFFFFFFFFL}, - {0x0000000000000000L}, - {0x5555555555555555L}, - {0x0123456789abcdefL}, - }; - } - - @Test(dataProvider = "longMaskProvider") - static void maskFromToLongShort64VectorTestsSmokeTest(long inputLong) { - var vmask = VectorMask.fromLong(SPECIES, inputLong); - long outputLong = vmask.toLong(); - Assert.assertEquals(outputLong, (inputLong & (((0xFFFFFFFFFFFFFFFFL >>> (64 - SPECIES.length())))))); - } - @DataProvider public static Object[][] offsetProvider() { return new Object[][]{ diff --git a/test/jdk/jdk/incubator/vector/ShortMaxVectorTests.java b/test/jdk/jdk/incubator/vector/ShortMaxVectorTests.java index 2bb3b9c1557..ec2df02b171 100644 --- a/test/jdk/jdk/incubator/vector/ShortMaxVectorTests.java +++ b/test/jdk/jdk/incubator/vector/ShortMaxVectorTests.java @@ -398,6 +398,36 @@ public class ShortMaxVectorTests extends AbstractVectorTest { } } + interface FBoolUnOp { + boolean apply(boolean a); + } + + static void assertArraysEquals(boolean[] r, boolean[] a, FBoolUnOp f) { + int i = 0; + try { + for (; i < a.length; i++) { + Assert.assertEquals(r[i], f.apply(a[i])); + } + } catch (AssertionError e) { + Assert.assertEquals(r[i], f.apply(a[i]), "(" + a[i] + ") at index #" + i); + } + } + + interface FBoolBinOp { + boolean apply(boolean a, boolean b); + } + + static void assertArraysEquals(boolean[] r, boolean[] a, boolean[] b, FBoolBinOp f) { + int i = 0; + try { + for (; i < a.length; i++) { + Assert.assertEquals(r[i], f.apply(a[i], b[i])); + } + } catch (AssertionError e) { + Assert.assertEquals(r[i], f.apply(a[i], b[i]), "(" + a[i] + ", " + b[i] + ") at index #" + i); + } + } + interface FBinOp { short apply(short a, short b); } @@ -1090,12 +1120,6 @@ public class ShortMaxVectorTests extends AbstractVectorTest { .flatMap(pair -> SHORT_SATURATING_GENERATORS_ASSOC.stream().map(f -> List.of(pair.get(0), pair.get(1), f))) .collect(Collectors.toList()); - @DataProvider - public Object[][] boolUnaryOpProvider() { - return BOOL_ARRAY_GENERATORS.stream(). - map(f -> new Object[]{f}). - toArray(Object[][]::new); - } static final List>> SHORT_GENERATOR_TRIPLES = SHORT_GENERATOR_PAIRS.stream(). @@ -1227,8 +1251,23 @@ public class ShortMaxVectorTests extends AbstractVectorTest { } @DataProvider - public Object[][] maskCompareOpProvider() { - return BOOLEAN_MASK_COMPARE_GENERATOR_PAIRS.stream().map(List::toArray). + public Object[][] longMaskProvider() { + return LONG_MASK_GENERATORS.stream(). + map(f -> new Object[]{f}). + toArray(Object[][]::new); + } + + @DataProvider + public Object[][] boolMaskBinaryOpProvider() { + return BOOLEAN_MASK_COMPARE_GENERATOR_PAIRS.stream(). + map(List::toArray). + toArray(Object[][]::new); + } + + @DataProvider + public Object[][] boolMaskUnaryOpProvider() { + return BOOLEAN_MASK_GENERATORS.stream(). + map(f -> new Object[]{f}). toArray(Object[][]::new); } @@ -4460,7 +4499,7 @@ public class ShortMaxVectorTests extends AbstractVectorTest { return res; } - @Test(dataProvider = "boolUnaryOpProvider") + @Test(dataProvider = "boolMaskUnaryOpProvider") static void anyTrueShortMaxVectorTests(IntFunction fm) { boolean[] mask = fm.apply(SPECIES.length()); boolean[] r = fmr.apply(SPECIES.length()); @@ -4484,7 +4523,7 @@ public class ShortMaxVectorTests extends AbstractVectorTest { return res; } - @Test(dataProvider = "boolUnaryOpProvider") + @Test(dataProvider = "boolMaskUnaryOpProvider") static void allTrueShortMaxVectorTests(IntFunction fm) { boolean[] mask = fm.apply(SPECIES.length()); boolean[] r = fmr.apply(SPECIES.length()); @@ -6386,6 +6425,157 @@ public class ShortMaxVectorTests extends AbstractVectorTest { assertArraysEquals(r, a, mask, ShortMaxVectorTests::REVERSE_BYTES); } + static boolean band(boolean a, boolean b) { + return a & b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskandShortMaxVectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.and(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, ShortMaxVectorTests::band); + } + + static boolean bor(boolean a, boolean b) { + return a | b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskorShortMaxVectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.or(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, ShortMaxVectorTests::bor); + } + + static boolean bxor(boolean a, boolean b) { + return a != b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskxorShortMaxVectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.xor(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, ShortMaxVectorTests::bxor); + } + + static boolean bandNot(boolean a, boolean b) { + return a & !b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskandNotShortMaxVectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.andNot(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, ShortMaxVectorTests::bandNot); + } + + static boolean beq(boolean a, boolean b) { + return a == b; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskeqShortMaxVectorTests(IntFunction fa, IntFunction fb) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.eq(bv).intoArray(r, i); + } + } + + assertArraysEquals(r, a, b, ShortMaxVectorTests::beq); + } + + static boolean unot(boolean a) { + return !a; + } + + @Test(dataProvider = "boolMaskUnaryOpProvider") + static void masknotShortMaxVectorTests(IntFunction fa) { + boolean[] a = fa.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + av.not().intoArray(r, i); + } + } + + assertArraysEquals(r, a, ShortMaxVectorTests::unot); + } + + private static final long LONG_MASK_BITS = 0xFFFFFFFFFFFFFFFFL >>> (64 - SPECIES.length()); + + static void assertArraysEquals(long[] r, long[] a, long bits) { + int i = 0; + try { + for (; i < a.length; i++) { + Assert.assertEquals(r[i], a[i] & bits); + } + } catch (AssertionError e) { + Assert.assertEquals(r[i], a[i] & bits, "(" + a[i] + ") at index #" + i); + } + } + + @Test(dataProvider = "longMaskProvider") + static void maskFromToLongShortMaxVectorTests(IntFunction fa) { + long[] a = fa.apply(SPECIES.length()); + long[] r = new long[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i++) { + VectorMask vmask = VectorMask.fromLong(SPECIES, a[i]); + r[i] = vmask.toLong(); + } + } + assertArraysEquals(r, a, LONG_MASK_BITS); + } + @Test(dataProvider = "shortCompareOpProvider") static void ltShortMaxVectorTestsBroadcastSmokeTest(IntFunction fa, IntFunction fb) { short[] a = fa.apply(SPECIES.length()); @@ -6685,115 +6875,22 @@ public class ShortMaxVectorTests extends AbstractVectorTest { } } - @Test(dataProvider = "maskCompareOpProvider") - static void maskEqualsShortMaxVectorTestsSmokeTest(IntFunction fa, IntFunction fb) { + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskEqualsShortMaxVectorTests(IntFunction fa, IntFunction fb) { boolean[] a = fa.apply(SPECIES.length()); boolean[] b = fb.apply(SPECIES.length()); - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - boolean equals = av.equals(bv); - int to = i + SPECIES.length(); - Assert.assertEquals(equals, Arrays.equals(a, i, to, b, i, to)); + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + var av = SPECIES.loadMask(a, i); + var bv = SPECIES.loadMask(b, i); + boolean equals = av.equals(bv); + int to = i + SPECIES.length(); + Assert.assertEquals(equals, Arrays.equals(a, i, to, b, i, to)); + } } } - static boolean band(boolean a, boolean b) { - return a & b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskAndShortMaxVectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.and(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, ShortMaxVectorTests::band); - } - - static boolean bor(boolean a, boolean b) { - return a | b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskOrShortMaxVectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.or(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, ShortMaxVectorTests::bor); - } - - static boolean bxor(boolean a, boolean b) { - return a != b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskXorShortMaxVectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.xor(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, ShortMaxVectorTests::bxor); - } - - static boolean bandNot(boolean a, boolean b) { - return a & !b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskAndNotShortMaxVectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.andNot(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, ShortMaxVectorTests::bandNot); - } - - static boolean beq(boolean a, boolean b) { - return (a == b); - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskEqShortMaxVectorTestsSmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.eq(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, ShortMaxVectorTests::beq); - } - @Test(dataProvider = "maskProvider") static void maskHashCodeShortMaxVectorTestsSmokeTest(IntFunction fa) { boolean[] a = fa.apply(SPECIES.length()); @@ -6898,7 +6995,6 @@ public class ShortMaxVectorTests extends AbstractVectorTest { } } - @DataProvider public static Object[][] offsetProvider() { return new Object[][]{ diff --git a/test/jdk/jdk/incubator/vector/gen-template.sh b/test/jdk/jdk/incubator/vector/gen-template.sh index a6f794a5559..46ccc0c8550 100644 --- a/test/jdk/jdk/incubator/vector/gen-template.sh +++ b/test/jdk/jdk/incubator/vector/gen-template.sh @@ -73,6 +73,9 @@ binary_math_template="Binary-op-math" binary_math_broadcast_template="Binary-Broadcast-op-math" bool_reduction_scalar="BoolReduction-Scalar-op" bool_reduction_template="BoolReduction-op" +bool_binary_template="BoolBinary-op" +bool_unary_template="BoolUnary-op" +mask_fromtolong_template="Mask-FromToLong" with_op_template="With-Op" shift_template="Shift-op" shift_masked_template="Shift-Masked-op" @@ -230,7 +233,8 @@ function gen_op_tmpl { local gen_perf_tests=$generate_perf_tests if [[ $template == *"-Broadcast-"* ]] || [[ $template == "Miscellaneous" ]] || - [[ $template == *"Compare-Masked"* ]] || [[ $template == *"Compare-Broadcast"* ]]; then + [[ $template == *"Compare-Masked"* ]] || [[ $template == *"Compare-Broadcast"* ]] || + [[ $template == *"Mask-Binary"* ]]; then gen_perf_tests=false fi if [ $gen_perf_tests == true ]; then @@ -625,6 +629,15 @@ gen_unary_alu_op "REVERSE_BYTES" "\$Boxtype\$.reverseBytes(a)" "intOrLong" gen_unary_alu_op "REVERSE_BYTES" "\$Boxtype\$.reverseBytes(a)" "short" gen_unary_alu_op "REVERSE_BYTES" "a" "byte" +# Mask operations +gen_op_tmpl $bool_binary_template "and" "a \& b" +gen_op_tmpl $bool_binary_template "or" "a | b" +gen_op_tmpl $bool_binary_template "xor" "a != b" +gen_op_tmpl $bool_binary_template "andNot" "a \& !b" +gen_op_tmpl $bool_binary_template "eq" "a == b" +gen_op_tmpl $bool_unary_template "not" "!a" +gen_op_tmpl $mask_fromtolong_template "FromToLong" "" + # Miscellaneous Smoke Tests gen_op_tmpl $miscellaneous_template "MISC" "" "" diff --git a/test/jdk/jdk/incubator/vector/templates/Kernel-BoolBinary-op.template b/test/jdk/jdk/incubator/vector/templates/Kernel-BoolBinary-op.template new file mode 100644 index 00000000000..3f5bc428cdd --- /dev/null +++ b/test/jdk/jdk/incubator/vector/templates/Kernel-BoolBinary-op.template @@ -0,0 +1,11 @@ + boolean[] a = fa.apply(SPECIES.length()); + boolean[] b = fb.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + VectorMask bv = SPECIES.loadMask(b, i); + av.[[TEST]](bv).intoArray(r, i); + } + } diff --git a/test/jdk/jdk/incubator/vector/templates/Kernel-BoolUnary-op.template b/test/jdk/jdk/incubator/vector/templates/Kernel-BoolUnary-op.template new file mode 100644 index 00000000000..836db281c1b --- /dev/null +++ b/test/jdk/jdk/incubator/vector/templates/Kernel-BoolUnary-op.template @@ -0,0 +1,9 @@ + boolean[] a = fa.apply(SPECIES.length()); + boolean[] r = new boolean[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + VectorMask av = SPECIES.loadMask(a, i); + av.[[TEST]]().intoArray(r, i); + } + } diff --git a/test/jdk/jdk/incubator/vector/templates/Unit-BoolBinary-op.template b/test/jdk/jdk/incubator/vector/templates/Unit-BoolBinary-op.template new file mode 100644 index 00000000000..9ee79e05363 --- /dev/null +++ b/test/jdk/jdk/incubator/vector/templates/Unit-BoolBinary-op.template @@ -0,0 +1,10 @@ + + static boolean b[[TEST]](boolean a, boolean b) { + return [[TEST_OP]]; + } + + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void mask[[TEST]]$vectorteststype$(IntFunction fa, IntFunction fb) { +[[KERNEL]] + assertArraysEquals(r, a, b, $vectorteststype$::b[[TEST]]); + } diff --git a/test/jdk/jdk/incubator/vector/templates/Unit-BoolUnary-op.template b/test/jdk/jdk/incubator/vector/templates/Unit-BoolUnary-op.template new file mode 100644 index 00000000000..6b1f2185528 --- /dev/null +++ b/test/jdk/jdk/incubator/vector/templates/Unit-BoolUnary-op.template @@ -0,0 +1,10 @@ + + static boolean u[[TEST]](boolean a) { + return [[TEST_OP]]; + } + + @Test(dataProvider = "boolMaskUnaryOpProvider") + static void mask[[TEST]]$vectorteststype$(IntFunction fa) { +[[KERNEL]] + assertArraysEquals(r, a, $vectorteststype$::u[[TEST]]); + } diff --git a/test/jdk/jdk/incubator/vector/templates/Unit-Mask-FromToLong.template b/test/jdk/jdk/incubator/vector/templates/Unit-Mask-FromToLong.template new file mode 100644 index 00000000000..784ef5f81b9 --- /dev/null +++ b/test/jdk/jdk/incubator/vector/templates/Unit-Mask-FromToLong.template @@ -0,0 +1,27 @@ + + private static final long LONG_MASK_BITS = 0xFFFFFFFFFFFFFFFFL >>> (64 - SPECIES.length()); + + static void assertArraysEquals(long[] r, long[] a, long bits) { + int i = 0; + try { + for (; i < a.length; i++) { + Assert.assertEquals(r[i], a[i] & bits); + } + } catch (AssertionError e) { + Assert.assertEquals(r[i], a[i] & bits, "(" + a[i] + ") at index #" + i); + } + } + + @Test(dataProvider = "longMaskProvider") + static void mask[[TEST]]$vectorteststype$(IntFunction fa) { + long[] a = fa.apply(SPECIES.length()); + long[] r = new long[a.length]; + + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i++) { + VectorMask vmask = VectorMask.fromLong(SPECIES, a[i]); + r[i] = vmask.toLong(); + } + } + assertArraysEquals(r, a, LONG_MASK_BITS); + } diff --git a/test/jdk/jdk/incubator/vector/templates/Unit-Miscellaneous.template b/test/jdk/jdk/incubator/vector/templates/Unit-Miscellaneous.template index 9a020c66d52..460f7624f2c 100644 --- a/test/jdk/jdk/incubator/vector/templates/Unit-Miscellaneous.template +++ b/test/jdk/jdk/incubator/vector/templates/Unit-Miscellaneous.template @@ -382,115 +382,22 @@ } } - @Test(dataProvider = "maskCompareOpProvider") - static void maskEquals$vectorteststype$SmokeTest(IntFunction fa, IntFunction fb) { + @Test(dataProvider = "boolMaskBinaryOpProvider") + static void maskEquals$vectorteststype$(IntFunction fa, IntFunction fb) { boolean[] a = fa.apply(SPECIES.length()); boolean[] b = fb.apply(SPECIES.length()); - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - boolean equals = av.equals(bv); - int to = i + SPECIES.length(); - Assert.assertEquals(equals, Arrays.equals(a, i, to, b, i, to)); + for (int ic = 0; ic < INVOC_COUNT; ic++) { + for (int i = 0; i < a.length; i += SPECIES.length()) { + var av = SPECIES.loadMask(a, i); + var bv = SPECIES.loadMask(b, i); + boolean equals = av.equals(bv); + int to = i + SPECIES.length(); + Assert.assertEquals(equals, Arrays.equals(a, i, to, b, i, to)); + } } } - static boolean band(boolean a, boolean b) { - return a & b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskAnd$vectorteststype$SmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.and(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, $vectorteststype$::band); - } - - static boolean bor(boolean a, boolean b) { - return a | b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskOr$vectorteststype$SmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.or(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, $vectorteststype$::bor); - } - - static boolean bxor(boolean a, boolean b) { - return a != b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskXor$vectorteststype$SmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.xor(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, $vectorteststype$::bxor); - } - - static boolean bandNot(boolean a, boolean b) { - return a & !b; - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskAndNot$vectorteststype$SmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.andNot(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, $vectorteststype$::bandNot); - } - - static boolean beq(boolean a, boolean b) { - return (a == b); - } - - @Test(dataProvider = "maskCompareOpProvider") - static void maskEq$vectorteststype$SmokeTest(IntFunction fa, IntFunction fb) { - boolean[] a = fa.apply(SPECIES.length()); - boolean[] b = fb.apply(SPECIES.length()); - boolean[] r = new boolean[a.length]; - - for (int i = 0; i < a.length; i += SPECIES.length()) { - var av = SPECIES.loadMask(a, i); - var bv = SPECIES.loadMask(b, i); - var cv = av.eq(bv); - cv.intoArray(r, i); - } - assertArraysEquals(r, a, b, $vectorteststype$::beq); - } - @Test(dataProvider = "maskProvider") static void maskHashCode$vectorteststype$SmokeTest(IntFunction fa) { boolean[] a = fa.apply(SPECIES.length()); @@ -595,25 +502,6 @@ } } -#if[!MaxBit] - @DataProvider - public static Object[][] longMaskProvider() { - return new Object[][]{ - {0xFFFFFFFFFFFFFFFFL}, - {0x0000000000000000L}, - {0x5555555555555555L}, - {0x0123456789abcdefL}, - }; - } - - @Test(dataProvider = "longMaskProvider") - static void maskFromToLong$vectorteststype$SmokeTest(long inputLong) { - var vmask = VectorMask.fromLong(SPECIES, inputLong); - long outputLong = vmask.toLong(); - Assert.assertEquals(outputLong, (inputLong & (((0xFFFFFFFFFFFFFFFFL >>> (64 - SPECIES.length())))))); - } -#end[!MaxBit] - @DataProvider public static Object[][] offsetProvider() { return new Object[][]{ diff --git a/test/jdk/jdk/incubator/vector/templates/Unit-header.template b/test/jdk/jdk/incubator/vector/templates/Unit-header.template index 33c52f18c1c..328a8335df3 100644 --- a/test/jdk/jdk/incubator/vector/templates/Unit-header.template +++ b/test/jdk/jdk/incubator/vector/templates/Unit-header.template @@ -490,6 +490,36 @@ relativeError)); } } + interface FBoolUnOp { + boolean apply(boolean a); + } + + static void assertArraysEquals(boolean[] r, boolean[] a, FBoolUnOp f) { + int i = 0; + try { + for (; i < a.length; i++) { + Assert.assertEquals(r[i], f.apply(a[i])); + } + } catch (AssertionError e) { + Assert.assertEquals(r[i], f.apply(a[i]), "(" + a[i] + ") at index #" + i); + } + } + + interface FBoolBinOp { + boolean apply(boolean a, boolean b); + } + + static void assertArraysEquals(boolean[] r, boolean[] a, boolean[] b, FBoolBinOp f) { + int i = 0; + try { + for (; i < a.length; i++) { + Assert.assertEquals(r[i], f.apply(a[i], b[i])); + } + } catch (AssertionError e) { + Assert.assertEquals(r[i], f.apply(a[i], b[i]), "(" + a[i] + ", " + b[i] + ") at index #" + i); + } + } + interface FBinOp { $type$ apply($type$ a, $type$ b); } @@ -1521,8 +1551,23 @@ relativeError)); } @DataProvider - public Object[][] maskCompareOpProvider() { - return BOOLEAN_MASK_COMPARE_GENERATOR_PAIRS.stream().map(List::toArray). + public Object[][] longMaskProvider() { + return LONG_MASK_GENERATORS.stream(). + map(f -> new Object[]{f}). + toArray(Object[][]::new); + } + + @DataProvider + public Object[][] boolMaskBinaryOpProvider() { + return BOOLEAN_MASK_COMPARE_GENERATOR_PAIRS.stream(). + map(List::toArray). + toArray(Object[][]::new); + } + + @DataProvider + public Object[][] boolMaskUnaryOpProvider() { + return BOOLEAN_MASK_GENERATORS.stream(). + map(f -> new Object[]{f}). toArray(Object[][]::new); }