< prev index next >

test/jdk/jdk/incubator/vector/IntMaxVectorTests.java

Print this page




 229 
 230     interface FBinMaskOp {
 231         int apply(int a, int b, boolean m);
 232 
 233         static FBinMaskOp lift(FBinOp f) {
 234             return (a, b, m) -> m ? f.apply(a, b) : a;
 235         }
 236     }
 237 
 238     static void assertArraysEquals(int[] a, int[] b, int[] r, FBinOp f) {
 239         int i = 0;
 240         try {
 241             for (; i < a.length; i++) {
 242                 Assert.assertEquals(r[i], f.apply(a[i], b[i]));
 243             }
 244         } catch (AssertionError e) {
 245             Assert.assertEquals(r[i], f.apply(a[i], b[i]), "(" + a[i] + ", " + b[i] + ") at index #" + i);
 246         }
 247     }
 248 












 249     static void assertArraysEquals(int[] a, int[] b, int[] r, boolean[] mask, FBinOp f) {
 250         assertArraysEquals(a, b, r, mask, FBinMaskOp.lift(f));
 251     }
 252 
 253     static void assertArraysEquals(int[] a, int[] b, int[] r, boolean[] mask, FBinMaskOp f) {
 254         int i = 0;
 255         try {
 256             for (; i < a.length; i++) {
 257                 Assert.assertEquals(r[i], f.apply(a[i], b[i], mask[i % SPECIES.length()]));
 258             }
 259         } catch (AssertionError err) {
 260             Assert.assertEquals(r[i], f.apply(a[i], b[i], mask[i % SPECIES.length()]), "at index #" + i + ", input1 = " + a[i] + ", input2 = " + b[i] + ", mask = " + mask[i % SPECIES.length()]);
 261         }
 262     }
 263 


















 264     static void assertShiftArraysEquals(int[] a, int[] b, int[] r, FBinOp f) {
 265         int i = 0;
 266         int j = 0;
 267         try {
 268             for (; j < a.length; j += SPECIES.length()) {
 269                 for (i = 0; i < SPECIES.length(); i++) {
 270                     Assert.assertEquals(r[i+j], f.apply(a[i+j], b[j]));
 271                 }
 272             }
 273         } catch (AssertionError e) {
 274             Assert.assertEquals(r[i+j], f.apply(a[i+j], b[j]), "at index #" + i + ", " + j);
 275         }
 276     }
 277 
 278     static void assertShiftArraysEquals(int[] a, int[] b, int[] r, boolean[] mask, FBinOp f) {
 279         assertShiftArraysEquals(a, b, r, mask, FBinMaskOp.lift(f));
 280     }
 281 
 282     static void assertShiftArraysEquals(int[] a, int[] b, int[] r, boolean[] mask, FBinMaskOp f) {
 283         int i = 0;


1362     static int OR(int a, int b) {
1363         return (int)(a | b);
1364     }
1365 
1366     @Test(dataProvider = "intBinaryOpProvider")
1367     static void ORIntMaxVectorTests(IntFunction<int[]> fa, IntFunction<int[]> fb) {
1368         int[] a = fa.apply(SPECIES.length());
1369         int[] b = fb.apply(SPECIES.length());
1370         int[] r = fr.apply(SPECIES.length());
1371 
1372         for (int ic = 0; ic < INVOC_COUNT; ic++) {
1373             for (int i = 0; i < a.length; i += SPECIES.length()) {
1374                 IntVector av = IntVector.fromArray(SPECIES, a, i);
1375                 IntVector bv = IntVector.fromArray(SPECIES, b, i);
1376                 av.lanewise(VectorOperators.OR, bv).intoArray(r, i);
1377             }
1378         }
1379 
1380         assertArraysEquals(a, b, r, IntMaxVectorTests::OR);
1381     }




















1382 
1383 
1384 
1385     @Test(dataProvider = "intBinaryOpMaskProvider")
1386     static void ORIntMaxVectorTestsMasked(IntFunction<int[]> fa, IntFunction<int[]> fb,
1387                                           IntFunction<boolean[]> fm) {
1388         int[] a = fa.apply(SPECIES.length());
1389         int[] b = fb.apply(SPECIES.length());
1390         int[] r = fr.apply(SPECIES.length());
1391         boolean[] mask = fm.apply(SPECIES.length());
1392         VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);
1393 
1394         for (int ic = 0; ic < INVOC_COUNT; ic++) {
1395             for (int i = 0; i < a.length; i += SPECIES.length()) {
1396                 IntVector av = IntVector.fromArray(SPECIES, a, i);
1397                 IntVector bv = IntVector.fromArray(SPECIES, b, i);
1398                 av.lanewise(VectorOperators.OR, bv, vmask).intoArray(r, i);
1399             }
1400         }
1401 


1430     static void XORIntMaxVectorTestsMasked(IntFunction<int[]> fa, IntFunction<int[]> fb,
1431                                           IntFunction<boolean[]> fm) {
1432         int[] a = fa.apply(SPECIES.length());
1433         int[] b = fb.apply(SPECIES.length());
1434         int[] r = fr.apply(SPECIES.length());
1435         boolean[] mask = fm.apply(SPECIES.length());
1436         VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);
1437 
1438         for (int ic = 0; ic < INVOC_COUNT; ic++) {
1439             for (int i = 0; i < a.length; i += SPECIES.length()) {
1440                 IntVector av = IntVector.fromArray(SPECIES, a, i);
1441                 IntVector bv = IntVector.fromArray(SPECIES, b, i);
1442                 av.lanewise(VectorOperators.XOR, bv, vmask).intoArray(r, i);
1443             }
1444         }
1445 
1446         assertArraysEquals(a, b, r, mask, IntMaxVectorTests::XOR);
1447     }
1448 
1449 























































































































































































1450     static int LSHL(int a, int b) {
1451         return (int)((a << b));
1452     }
1453 
1454     @Test(dataProvider = "intBinaryOpProvider")
1455     static void LSHLIntMaxVectorTests(IntFunction<int[]> fa, IntFunction<int[]> fb) {
1456         int[] a = fa.apply(SPECIES.length());
1457         int[] b = fb.apply(SPECIES.length());
1458         int[] r = fr.apply(SPECIES.length());
1459 
1460         for (int ic = 0; ic < INVOC_COUNT; ic++) {
1461             for (int i = 0; i < a.length; i += SPECIES.length()) {
1462                 IntVector av = IntVector.fromArray(SPECIES, a, i);
1463                 IntVector bv = IntVector.fromArray(SPECIES, b, i);
1464                 av.lanewise(VectorOperators.LSHL, bv).intoArray(r, i);
1465             }
1466         }
1467 
1468         assertArraysEquals(a, b, r, IntMaxVectorTests::LSHL);
1469     }


1792         return (int)(Math.max(a, b));
1793     }
1794 
1795     @Test(dataProvider = "intBinaryOpProvider")
1796     static void maxIntMaxVectorTests(IntFunction<int[]> fa, IntFunction<int[]> fb) {
1797         int[] a = fa.apply(SPECIES.length());
1798         int[] b = fb.apply(SPECIES.length());
1799         int[] r = fr.apply(SPECIES.length());
1800 
1801         for (int ic = 0; ic < INVOC_COUNT; ic++) {
1802             for (int i = 0; i < a.length; i += SPECIES.length()) {
1803                 IntVector av = IntVector.fromArray(SPECIES, a, i);
1804                 IntVector bv = IntVector.fromArray(SPECIES, b, i);
1805                 av.max(bv).intoArray(r, i);
1806             }
1807         }
1808 
1809         assertArraysEquals(a, b, r, IntMaxVectorTests::max);
1810     }
1811 
























































1812     static int AND(int[] a, int idx) {
1813         int res = -1;
1814         for (int i = idx; i < (idx + SPECIES.length()); i++) {
1815             res &= a[i];
1816         }
1817 
1818         return res;
1819     }
1820 
1821     static int AND(int[] a) {
1822         int res = -1;
1823         for (int i = 0; i < a.length; i += SPECIES.length()) {
1824             int tmp = -1;
1825             for (int j = 0; j < SPECIES.length(); j++) {
1826                 tmp &= a[i + j];
1827             }
1828             res &= tmp;
1829         }
1830 
1831         return res;


3236         boolean[] mask = fm.apply(SPECIES.length());
3237         VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);
3238 
3239         for (int ic = 0; ic < INVOC_COUNT; ic++) {
3240             for (int i = 0; i < a.length; i += SPECIES.length()) {
3241                 IntVector av = IntVector.fromArray(SPECIES, a, i);
3242                 IntVector bv = IntVector.fromArray(SPECIES, b, i);
3243                 IntVector cv = IntVector.fromArray(SPECIES, c, i);
3244                 av.lanewise(VectorOperators.BITWISE_BLEND, bv, cv, vmask).intoArray(r, i);
3245             }
3246         }
3247 
3248         assertArraysEquals(a, b, c, r, mask, IntMaxVectorTests::BITWISE_BLEND);
3249     }
3250 
3251 
3252     static int NEG(int a) {
3253         return (int)(-((int)a));
3254     }
3255 




3256     @Test(dataProvider = "intUnaryOpProvider")
3257     static void NEGIntMaxVectorTests(IntFunction<int[]> fa) {
3258         int[] a = fa.apply(SPECIES.length());
3259         int[] r = fr.apply(SPECIES.length());
3260 
3261         for (int ic = 0; ic < INVOC_COUNT; ic++) {
3262             for (int i = 0; i < a.length; i += SPECIES.length()) {
3263                 IntVector av = IntVector.fromArray(SPECIES, a, i);
3264                 av.lanewise(VectorOperators.NEG).intoArray(r, i);
3265             }
3266         }
3267 
3268         assertArraysEquals(a, r, IntMaxVectorTests::NEG);
3269     }
3270 















3271     @Test(dataProvider = "intUnaryOpMaskProvider")
3272     static void NEGMaskedIntMaxVectorTests(IntFunction<int[]> fa,
3273                                                 IntFunction<boolean[]> fm) {
3274         int[] a = fa.apply(SPECIES.length());
3275         int[] r = fr.apply(SPECIES.length());
3276         boolean[] mask = fm.apply(SPECIES.length());
3277         VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);
3278 
3279         for (int ic = 0; ic < INVOC_COUNT; ic++) {
3280             for (int i = 0; i < a.length; i += SPECIES.length()) {
3281                 IntVector av = IntVector.fromArray(SPECIES, a, i);
3282                 av.lanewise(VectorOperators.NEG, vmask).intoArray(r, i);
3283             }
3284         }
3285 
3286         assertArraysEquals(a, r, mask, IntMaxVectorTests::NEG);
3287     }
3288 
3289     static int ABS(int a) {
3290         return (int)(Math.abs((int)a));


3330         int[] a = fa.apply(SPECIES.length());
3331         int[] r = fr.apply(SPECIES.length());
3332         boolean[] mask = fm.apply(SPECIES.length());
3333         VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);
3334 
3335         for (int ic = 0; ic < INVOC_COUNT; ic++) {
3336             for (int i = 0; i < a.length; i += SPECIES.length()) {
3337                 IntVector av = IntVector.fromArray(SPECIES, a, i);
3338                 av.lanewise(VectorOperators.ABS, vmask).intoArray(r, i);
3339             }
3340         }
3341 
3342         assertArraysEquals(a, r, mask, IntMaxVectorTests::ABS);
3343     }
3344 
3345 
3346     static int NOT(int a) {
3347         return (int)(~((int)a));
3348     }
3349 




3350 
3351 
3352     @Test(dataProvider = "intUnaryOpProvider")
3353     static void NOTIntMaxVectorTests(IntFunction<int[]> fa) {
3354         int[] a = fa.apply(SPECIES.length());
3355         int[] r = fr.apply(SPECIES.length());
3356 
3357         for (int ic = 0; ic < INVOC_COUNT; ic++) {
3358             for (int i = 0; i < a.length; i += SPECIES.length()) {
3359                 IntVector av = IntVector.fromArray(SPECIES, a, i);
3360                 av.lanewise(VectorOperators.NOT).intoArray(r, i);
3361             }
3362         }
3363 
3364         assertArraysEquals(a, r, IntMaxVectorTests::NOT);















3365     }
3366 
3367 
3368 
3369     @Test(dataProvider = "intUnaryOpMaskProvider")
3370     static void NOTMaskedIntMaxVectorTests(IntFunction<int[]> fa,
3371                                                 IntFunction<boolean[]> fm) {
3372         int[] a = fa.apply(SPECIES.length());
3373         int[] r = fr.apply(SPECIES.length());
3374         boolean[] mask = fm.apply(SPECIES.length());
3375         VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);
3376 
3377         for (int ic = 0; ic < INVOC_COUNT; ic++) {
3378             for (int i = 0; i < a.length; i += SPECIES.length()) {
3379                 IntVector av = IntVector.fromArray(SPECIES, a, i);
3380                 av.lanewise(VectorOperators.NOT, vmask).intoArray(r, i);
3381             }
3382         }
3383 
3384         assertArraysEquals(a, r, mask, IntMaxVectorTests::NOT);




 229 
 230     interface FBinMaskOp {
 231         int apply(int a, int b, boolean m);
 232 
 233         static FBinMaskOp lift(FBinOp f) {
 234             return (a, b, m) -> m ? f.apply(a, b) : a;
 235         }
 236     }
 237 
 238     static void assertArraysEquals(int[] a, int[] b, int[] r, FBinOp f) {
 239         int i = 0;
 240         try {
 241             for (; i < a.length; i++) {
 242                 Assert.assertEquals(r[i], f.apply(a[i], b[i]));
 243             }
 244         } catch (AssertionError e) {
 245             Assert.assertEquals(r[i], f.apply(a[i], b[i]), "(" + a[i] + ", " + b[i] + ") at index #" + i);
 246         }
 247     }
 248 
 249     static void assertBroadcastArraysEquals(int[] a, int[] b, int[] r, FBinOp f) {
 250         int i = 0;
 251         try {
 252             for (; i < a.length; i++) {
 253                 Assert.assertEquals(r[i], f.apply(a[i], b[(i / SPECIES.length()) * SPECIES.length()]));
 254             }
 255         } catch (AssertionError e) {
 256             Assert.assertEquals(r[i], f.apply(a[i], b[(i / SPECIES.length()) * SPECIES.length()]),
 257                                 "(" + a[i] + ", " + b[(i / SPECIES.length()) * SPECIES.length()] + ") at index #" + i);
 258         }
 259     }
 260 
 261     static void assertArraysEquals(int[] a, int[] b, int[] r, boolean[] mask, FBinOp f) {
 262         assertArraysEquals(a, b, r, mask, FBinMaskOp.lift(f));
 263     }
 264 
 265     static void assertArraysEquals(int[] a, int[] b, int[] r, boolean[] mask, FBinMaskOp f) {
 266         int i = 0;
 267         try {
 268             for (; i < a.length; i++) {
 269                 Assert.assertEquals(r[i], f.apply(a[i], b[i], mask[i % SPECIES.length()]));
 270             }
 271         } catch (AssertionError err) {
 272             Assert.assertEquals(r[i], f.apply(a[i], b[i], mask[i % SPECIES.length()]), "at index #" + i + ", input1 = " + a[i] + ", input2 = " + b[i] + ", mask = " + mask[i % SPECIES.length()]);
 273         }
 274     }
 275 
 276     static void assertBroadcastArraysEquals(int[] a, int[] b, int[] r, boolean[] mask, FBinOp f) {
 277         assertBroadcastArraysEquals(a, b, r, mask, FBinMaskOp.lift(f));
 278     }
 279 
 280     static void assertBroadcastArraysEquals(int[] a, int[] b, int[] r, boolean[] mask, FBinMaskOp f) {
 281         int i = 0;
 282         try {
 283             for (; i < a.length; i++) {
 284                 Assert.assertEquals(r[i], f.apply(a[i], b[(i / SPECIES.length()) * SPECIES.length()], mask[i % SPECIES.length()]));
 285             }
 286         } catch (AssertionError err) {
 287             Assert.assertEquals(r[i], f.apply(a[i], b[(i / SPECIES.length()) * SPECIES.length()], 
 288                                 mask[i % SPECIES.length()]), "at index #" + i + ", input1 = " + a[i] + 
 289                                 ", input2 = " + b[(i / SPECIES.length()) * SPECIES.length()] + ", mask = " +
 290                                 mask[i % SPECIES.length()]);
 291         }
 292     }
 293 
 294     static void assertShiftArraysEquals(int[] a, int[] b, int[] r, FBinOp f) {
 295         int i = 0;
 296         int j = 0;
 297         try {
 298             for (; j < a.length; j += SPECIES.length()) {
 299                 for (i = 0; i < SPECIES.length(); i++) {
 300                     Assert.assertEquals(r[i+j], f.apply(a[i+j], b[j]));
 301                 }
 302             }
 303         } catch (AssertionError e) {
 304             Assert.assertEquals(r[i+j], f.apply(a[i+j], b[j]), "at index #" + i + ", " + j);
 305         }
 306     }
 307 
 308     static void assertShiftArraysEquals(int[] a, int[] b, int[] r, boolean[] mask, FBinOp f) {
 309         assertShiftArraysEquals(a, b, r, mask, FBinMaskOp.lift(f));
 310     }
 311 
 312     static void assertShiftArraysEquals(int[] a, int[] b, int[] r, boolean[] mask, FBinMaskOp f) {
 313         int i = 0;


1392     static int OR(int a, int b) {
1393         return (int)(a | b);
1394     }
1395 
1396     @Test(dataProvider = "intBinaryOpProvider")
1397     static void ORIntMaxVectorTests(IntFunction<int[]> fa, IntFunction<int[]> fb) {
1398         int[] a = fa.apply(SPECIES.length());
1399         int[] b = fb.apply(SPECIES.length());
1400         int[] r = fr.apply(SPECIES.length());
1401 
1402         for (int ic = 0; ic < INVOC_COUNT; ic++) {
1403             for (int i = 0; i < a.length; i += SPECIES.length()) {
1404                 IntVector av = IntVector.fromArray(SPECIES, a, i);
1405                 IntVector bv = IntVector.fromArray(SPECIES, b, i);
1406                 av.lanewise(VectorOperators.OR, bv).intoArray(r, i);
1407             }
1408         }
1409 
1410         assertArraysEquals(a, b, r, IntMaxVectorTests::OR);
1411     }
1412     static int or(int a, int b) {
1413         return (int)(a | b);
1414     }
1415 
1416     @Test(dataProvider = "intBinaryOpProvider")
1417     static void orIntMaxVectorTests(IntFunction<int[]> fa, IntFunction<int[]> fb) {
1418         int[] a = fa.apply(SPECIES.length());
1419         int[] b = fb.apply(SPECIES.length());
1420         int[] r = fr.apply(SPECIES.length());
1421 
1422         for (int ic = 0; ic < INVOC_COUNT; ic++) {
1423             for (int i = 0; i < a.length; i += SPECIES.length()) {
1424                 IntVector av = IntVector.fromArray(SPECIES, a, i);
1425                 IntVector bv = IntVector.fromArray(SPECIES, b, i);
1426                 av.or(bv).intoArray(r, i);
1427             }
1428         }
1429 
1430         assertArraysEquals(a, b, r, IntMaxVectorTests::or);
1431     }
1432 
1433 
1434 
1435     @Test(dataProvider = "intBinaryOpMaskProvider")
1436     static void ORIntMaxVectorTestsMasked(IntFunction<int[]> fa, IntFunction<int[]> fb,
1437                                           IntFunction<boolean[]> fm) {
1438         int[] a = fa.apply(SPECIES.length());
1439         int[] b = fb.apply(SPECIES.length());
1440         int[] r = fr.apply(SPECIES.length());
1441         boolean[] mask = fm.apply(SPECIES.length());
1442         VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);
1443 
1444         for (int ic = 0; ic < INVOC_COUNT; ic++) {
1445             for (int i = 0; i < a.length; i += SPECIES.length()) {
1446                 IntVector av = IntVector.fromArray(SPECIES, a, i);
1447                 IntVector bv = IntVector.fromArray(SPECIES, b, i);
1448                 av.lanewise(VectorOperators.OR, bv, vmask).intoArray(r, i);
1449             }
1450         }
1451 


1480     static void XORIntMaxVectorTestsMasked(IntFunction<int[]> fa, IntFunction<int[]> fb,
1481                                           IntFunction<boolean[]> fm) {
1482         int[] a = fa.apply(SPECIES.length());
1483         int[] b = fb.apply(SPECIES.length());
1484         int[] r = fr.apply(SPECIES.length());
1485         boolean[] mask = fm.apply(SPECIES.length());
1486         VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);
1487 
1488         for (int ic = 0; ic < INVOC_COUNT; ic++) {
1489             for (int i = 0; i < a.length; i += SPECIES.length()) {
1490                 IntVector av = IntVector.fromArray(SPECIES, a, i);
1491                 IntVector bv = IntVector.fromArray(SPECIES, b, i);
1492                 av.lanewise(VectorOperators.XOR, bv, vmask).intoArray(r, i);
1493             }
1494         }
1495 
1496         assertArraysEquals(a, b, r, mask, IntMaxVectorTests::XOR);
1497     }
1498 
1499 
1500     @Test(dataProvider = "intBinaryOpProvider")
1501     static void addIntMaxVectorTestsBroadcastSmokeTest(IntFunction<int[]> fa, IntFunction<int[]> fb) {
1502         int[] a = fa.apply(SPECIES.length());
1503         int[] b = fb.apply(SPECIES.length());
1504         int[] r = fr.apply(SPECIES.length());
1505 
1506         for (int i = 0; i < a.length; i += SPECIES.length()) {
1507             IntVector av = IntVector.fromArray(SPECIES, a, i);
1508             av.add(b[i]).intoArray(r, i);
1509         }
1510 
1511         assertBroadcastArraysEquals(a, b, r, IntMaxVectorTests::add);
1512     }
1513 
1514     @Test(dataProvider = "intBinaryOpMaskProvider")
1515     static void addIntMaxVectorTestsBroadcastMaskedSmokeTest(IntFunction<int[]> fa, IntFunction<int[]> fb,
1516                                           IntFunction<boolean[]> fm) {
1517         int[] a = fa.apply(SPECIES.length());
1518         int[] b = fb.apply(SPECIES.length());
1519         int[] r = fr.apply(SPECIES.length());
1520         boolean[] mask = fm.apply(SPECIES.length());
1521         VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);
1522 
1523         for (int i = 0; i < a.length; i += SPECIES.length()) {
1524             IntVector av = IntVector.fromArray(SPECIES, a, i);
1525             av.add(b[i], vmask).intoArray(r, i);
1526         }
1527 
1528         assertBroadcastArraysEquals(a, b, r, mask, IntMaxVectorTests::add);
1529     }
1530 
1531     @Test(dataProvider = "intBinaryOpProvider")
1532     static void subIntMaxVectorTestsBroadcastSmokeTest(IntFunction<int[]> fa, IntFunction<int[]> fb) {
1533         int[] a = fa.apply(SPECIES.length());
1534         int[] b = fb.apply(SPECIES.length());
1535         int[] r = fr.apply(SPECIES.length());
1536 
1537         for (int i = 0; i < a.length; i += SPECIES.length()) {
1538             IntVector av = IntVector.fromArray(SPECIES, a, i);
1539             av.sub(b[i]).intoArray(r, i);
1540         }
1541 
1542         assertBroadcastArraysEquals(a, b, r, IntMaxVectorTests::sub);
1543     }
1544 
1545     @Test(dataProvider = "intBinaryOpMaskProvider")
1546     static void subIntMaxVectorTestsBroadcastMaskedSmokeTest(IntFunction<int[]> fa, IntFunction<int[]> fb,
1547                                           IntFunction<boolean[]> fm) {
1548         int[] a = fa.apply(SPECIES.length());
1549         int[] b = fb.apply(SPECIES.length());
1550         int[] r = fr.apply(SPECIES.length());
1551         boolean[] mask = fm.apply(SPECIES.length());
1552         VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);
1553 
1554         for (int i = 0; i < a.length; i += SPECIES.length()) {
1555             IntVector av = IntVector.fromArray(SPECIES, a, i);
1556             av.sub(b[i], vmask).intoArray(r, i);
1557         }
1558 
1559         assertBroadcastArraysEquals(a, b, r, mask, IntMaxVectorTests::sub);
1560     }
1561 
1562     @Test(dataProvider = "intBinaryOpProvider")
1563     static void mulIntMaxVectorTestsBroadcastSmokeTest(IntFunction<int[]> fa, IntFunction<int[]> fb) {
1564         int[] a = fa.apply(SPECIES.length());
1565         int[] b = fb.apply(SPECIES.length());
1566         int[] r = fr.apply(SPECIES.length());
1567 
1568         for (int i = 0; i < a.length; i += SPECIES.length()) {
1569             IntVector av = IntVector.fromArray(SPECIES, a, i);
1570             av.mul(b[i]).intoArray(r, i);
1571         }
1572 
1573         assertBroadcastArraysEquals(a, b, r, IntMaxVectorTests::mul);
1574     }
1575 
1576     @Test(dataProvider = "intBinaryOpMaskProvider")
1577     static void mulIntMaxVectorTestsBroadcastMaskedSmokeTest(IntFunction<int[]> fa, IntFunction<int[]> fb,
1578                                           IntFunction<boolean[]> fm) {
1579         int[] a = fa.apply(SPECIES.length());
1580         int[] b = fb.apply(SPECIES.length());
1581         int[] r = fr.apply(SPECIES.length());
1582         boolean[] mask = fm.apply(SPECIES.length());
1583         VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);
1584 
1585         for (int i = 0; i < a.length; i += SPECIES.length()) {
1586             IntVector av = IntVector.fromArray(SPECIES, a, i);
1587             av.mul(b[i], vmask).intoArray(r, i);
1588         }
1589 
1590         assertBroadcastArraysEquals(a, b, r, mask, IntMaxVectorTests::mul);
1591     }
1592 
1593 
1594 
1595 
1596     @Test(dataProvider = "intBinaryOpProvider")
1597     static void divIntMaxVectorTestsBroadcastSmokeTest(IntFunction<int[]> fa, IntFunction<int[]> fb) {
1598         int[] a = fa.apply(SPECIES.length());
1599         int[] b = fb.apply(SPECIES.length());
1600         int[] r = fr.apply(SPECIES.length());
1601 
1602         replaceZero(b, (int) 1);
1603 
1604         for (int i = 0; i < a.length; i += SPECIES.length()) {
1605             IntVector av = IntVector.fromArray(SPECIES, a, i);
1606             av.div(b[i]).intoArray(r, i);
1607         }
1608 
1609         assertBroadcastArraysEquals(a, b, r, IntMaxVectorTests::div);
1610     }
1611 
1612 
1613 
1614     @Test(dataProvider = "intBinaryOpMaskProvider")
1615     static void divIntMaxVectorTestsBroadcastMaskedSmokeTest(IntFunction<int[]> fa, IntFunction<int[]> fb,
1616                                           IntFunction<boolean[]> fm) {
1617         int[] a = fa.apply(SPECIES.length());
1618         int[] b = fb.apply(SPECIES.length());
1619         int[] r = fr.apply(SPECIES.length());
1620         boolean[] mask = fm.apply(SPECIES.length());
1621         VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);
1622 
1623         replaceZero(b, (int) 1);
1624 
1625        for (int i = 0; i < a.length; i += SPECIES.length()) {
1626            IntVector av = IntVector.fromArray(SPECIES, a, i);
1627            av.div(b[i], vmask).intoArray(r, i);
1628        }
1629 
1630         assertBroadcastArraysEquals(a, b, r, mask, IntMaxVectorTests::div);
1631     }
1632 
1633 
1634 
1635     @Test(dataProvider = "intBinaryOpProvider")
1636     static void ORIntMaxVectorTestsBroadcastSmokeTest(IntFunction<int[]> fa, IntFunction<int[]> fb) {
1637         int[] a = fa.apply(SPECIES.length());
1638         int[] b = fb.apply(SPECIES.length());
1639         int[] r = fr.apply(SPECIES.length());
1640 
1641         for (int i = 0; i < a.length; i += SPECIES.length()) {
1642             IntVector av = IntVector.fromArray(SPECIES, a, i);
1643             av.lanewise(VectorOperators.OR, b[i]).intoArray(r, i);
1644         }
1645 
1646         assertBroadcastArraysEquals(a, b, r, IntMaxVectorTests::OR);
1647     }
1648 
1649     @Test(dataProvider = "intBinaryOpProvider")
1650     static void orIntMaxVectorTestsBroadcastSmokeTest(IntFunction<int[]> fa, IntFunction<int[]> fb) {
1651         int[] a = fa.apply(SPECIES.length());
1652         int[] b = fb.apply(SPECIES.length());
1653         int[] r = fr.apply(SPECIES.length());
1654 
1655         for (int i = 0; i < a.length; i += SPECIES.length()) {
1656             IntVector av = IntVector.fromArray(SPECIES, a, i);
1657             av.or(b[i]).intoArray(r, i);
1658         }
1659 
1660         assertBroadcastArraysEquals(a, b, r, IntMaxVectorTests::or);
1661     }
1662 
1663 
1664 
1665     @Test(dataProvider = "intBinaryOpMaskProvider")
1666     static void ORIntMaxVectorTestsBroadcastMaskedSmokeTest(IntFunction<int[]> fa, IntFunction<int[]> fb,
1667                                           IntFunction<boolean[]> fm) {
1668         int[] a = fa.apply(SPECIES.length());
1669         int[] b = fb.apply(SPECIES.length());
1670         int[] r = fr.apply(SPECIES.length());
1671         boolean[] mask = fm.apply(SPECIES.length());
1672         VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);
1673 
1674         for (int i = 0; i < a.length; i += SPECIES.length()) {
1675             IntVector av = IntVector.fromArray(SPECIES, a, i);
1676             av.lanewise(VectorOperators.OR, b[i], vmask).intoArray(r, i);
1677         }
1678 
1679         assertBroadcastArraysEquals(a, b, r, mask, IntMaxVectorTests::OR);
1680     }
1681 
1682 
1683     static int LSHL(int a, int b) {
1684         return (int)((a << b));
1685     }
1686 
1687     @Test(dataProvider = "intBinaryOpProvider")
1688     static void LSHLIntMaxVectorTests(IntFunction<int[]> fa, IntFunction<int[]> fb) {
1689         int[] a = fa.apply(SPECIES.length());
1690         int[] b = fb.apply(SPECIES.length());
1691         int[] r = fr.apply(SPECIES.length());
1692 
1693         for (int ic = 0; ic < INVOC_COUNT; ic++) {
1694             for (int i = 0; i < a.length; i += SPECIES.length()) {
1695                 IntVector av = IntVector.fromArray(SPECIES, a, i);
1696                 IntVector bv = IntVector.fromArray(SPECIES, b, i);
1697                 av.lanewise(VectorOperators.LSHL, bv).intoArray(r, i);
1698             }
1699         }
1700 
1701         assertArraysEquals(a, b, r, IntMaxVectorTests::LSHL);
1702     }


2025         return (int)(Math.max(a, b));
2026     }
2027 
2028     @Test(dataProvider = "intBinaryOpProvider")
2029     static void maxIntMaxVectorTests(IntFunction<int[]> fa, IntFunction<int[]> fb) {
2030         int[] a = fa.apply(SPECIES.length());
2031         int[] b = fb.apply(SPECIES.length());
2032         int[] r = fr.apply(SPECIES.length());
2033 
2034         for (int ic = 0; ic < INVOC_COUNT; ic++) {
2035             for (int i = 0; i < a.length; i += SPECIES.length()) {
2036                 IntVector av = IntVector.fromArray(SPECIES, a, i);
2037                 IntVector bv = IntVector.fromArray(SPECIES, b, i);
2038                 av.max(bv).intoArray(r, i);
2039             }
2040         }
2041 
2042         assertArraysEquals(a, b, r, IntMaxVectorTests::max);
2043     }
2044 
2045     @Test(dataProvider = "intBinaryOpProvider")
2046     static void MINIntMaxVectorTestsBroadcastSmokeTest(IntFunction<int[]> fa, IntFunction<int[]> fb) {
2047         int[] a = fa.apply(SPECIES.length());
2048         int[] b = fb.apply(SPECIES.length());
2049         int[] r = fr.apply(SPECIES.length());
2050 
2051         for (int i = 0; i < a.length; i += SPECIES.length()) {
2052             IntVector av = IntVector.fromArray(SPECIES, a, i);
2053             av.lanewise(VectorOperators.MIN, b[i]).intoArray(r, i);
2054         }
2055 
2056         assertBroadcastArraysEquals(a, b, r, IntMaxVectorTests::MIN);
2057     }
2058 
2059     @Test(dataProvider = "intBinaryOpProvider")
2060     static void minIntMaxVectorTestsBroadcastSmokeTest(IntFunction<int[]> fa, IntFunction<int[]> fb) {
2061         int[] a = fa.apply(SPECIES.length());
2062         int[] b = fb.apply(SPECIES.length());
2063         int[] r = fr.apply(SPECIES.length());
2064 
2065         for (int i = 0; i < a.length; i += SPECIES.length()) {
2066             IntVector av = IntVector.fromArray(SPECIES, a, i);
2067             av.min(b[i]).intoArray(r, i);
2068         }
2069 
2070         assertBroadcastArraysEquals(a, b, r, IntMaxVectorTests::min);
2071     }
2072 
2073     @Test(dataProvider = "intBinaryOpProvider")
2074     static void MAXIntMaxVectorTestsBroadcastSmokeTest(IntFunction<int[]> fa, IntFunction<int[]> fb) {
2075         int[] a = fa.apply(SPECIES.length());
2076         int[] b = fb.apply(SPECIES.length());
2077         int[] r = fr.apply(SPECIES.length());
2078 
2079         for (int i = 0; i < a.length; i += SPECIES.length()) {
2080             IntVector av = IntVector.fromArray(SPECIES, a, i);
2081             av.lanewise(VectorOperators.MAX, b[i]).intoArray(r, i);
2082         }
2083 
2084         assertBroadcastArraysEquals(a, b, r, IntMaxVectorTests::MAX);
2085     }
2086 
2087     @Test(dataProvider = "intBinaryOpProvider")
2088     static void maxIntMaxVectorTestsBroadcastSmokeTest(IntFunction<int[]> fa, IntFunction<int[]> fb) {
2089         int[] a = fa.apply(SPECIES.length());
2090         int[] b = fb.apply(SPECIES.length());
2091         int[] r = fr.apply(SPECIES.length());
2092 
2093         for (int i = 0; i < a.length; i += SPECIES.length()) {
2094             IntVector av = IntVector.fromArray(SPECIES, a, i);
2095             av.max(b[i]).intoArray(r, i);
2096         }
2097 
2098         assertBroadcastArraysEquals(a, b, r, IntMaxVectorTests::max);
2099     }
2100 
2101     static int AND(int[] a, int idx) {
2102         int res = -1;
2103         for (int i = idx; i < (idx + SPECIES.length()); i++) {
2104             res &= a[i];
2105         }
2106 
2107         return res;
2108     }
2109 
2110     static int AND(int[] a) {
2111         int res = -1;
2112         for (int i = 0; i < a.length; i += SPECIES.length()) {
2113             int tmp = -1;
2114             for (int j = 0; j < SPECIES.length(); j++) {
2115                 tmp &= a[i + j];
2116             }
2117             res &= tmp;
2118         }
2119 
2120         return res;


3525         boolean[] mask = fm.apply(SPECIES.length());
3526         VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);
3527 
3528         for (int ic = 0; ic < INVOC_COUNT; ic++) {
3529             for (int i = 0; i < a.length; i += SPECIES.length()) {
3530                 IntVector av = IntVector.fromArray(SPECIES, a, i);
3531                 IntVector bv = IntVector.fromArray(SPECIES, b, i);
3532                 IntVector cv = IntVector.fromArray(SPECIES, c, i);
3533                 av.lanewise(VectorOperators.BITWISE_BLEND, bv, cv, vmask).intoArray(r, i);
3534             }
3535         }
3536 
3537         assertArraysEquals(a, b, c, r, mask, IntMaxVectorTests::BITWISE_BLEND);
3538     }
3539 
3540 
3541     static int NEG(int a) {
3542         return (int)(-((int)a));
3543     }
3544 
3545     static int neg(int a) {
3546         return (int)(-((int)a));
3547     }
3548 
3549     @Test(dataProvider = "intUnaryOpProvider")
3550     static void NEGIntMaxVectorTests(IntFunction<int[]> fa) {
3551         int[] a = fa.apply(SPECIES.length());
3552         int[] r = fr.apply(SPECIES.length());
3553 
3554         for (int ic = 0; ic < INVOC_COUNT; ic++) {
3555             for (int i = 0; i < a.length; i += SPECIES.length()) {
3556                 IntVector av = IntVector.fromArray(SPECIES, a, i);
3557                 av.lanewise(VectorOperators.NEG).intoArray(r, i);
3558             }
3559         }
3560 
3561         assertArraysEquals(a, r, IntMaxVectorTests::NEG);
3562     }
3563 
3564     @Test(dataProvider = "intUnaryOpProvider")
3565     static void negIntMaxVectorTests(IntFunction<int[]> fa) {
3566         int[] a = fa.apply(SPECIES.length());
3567         int[] r = fr.apply(SPECIES.length());
3568 
3569         for (int ic = 0; ic < INVOC_COUNT; ic++) {
3570             for (int i = 0; i < a.length; i += SPECIES.length()) {
3571                 IntVector av = IntVector.fromArray(SPECIES, a, i);
3572                 av.neg().intoArray(r, i);
3573             }
3574         }
3575 
3576         assertArraysEquals(a, r, IntMaxVectorTests::neg);
3577     }
3578 
3579     @Test(dataProvider = "intUnaryOpMaskProvider")
3580     static void NEGMaskedIntMaxVectorTests(IntFunction<int[]> fa,
3581                                                 IntFunction<boolean[]> fm) {
3582         int[] a = fa.apply(SPECIES.length());
3583         int[] r = fr.apply(SPECIES.length());
3584         boolean[] mask = fm.apply(SPECIES.length());
3585         VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);
3586 
3587         for (int ic = 0; ic < INVOC_COUNT; ic++) {
3588             for (int i = 0; i < a.length; i += SPECIES.length()) {
3589                 IntVector av = IntVector.fromArray(SPECIES, a, i);
3590                 av.lanewise(VectorOperators.NEG, vmask).intoArray(r, i);
3591             }
3592         }
3593 
3594         assertArraysEquals(a, r, mask, IntMaxVectorTests::NEG);
3595     }
3596 
3597     static int ABS(int a) {
3598         return (int)(Math.abs((int)a));


3638         int[] a = fa.apply(SPECIES.length());
3639         int[] r = fr.apply(SPECIES.length());
3640         boolean[] mask = fm.apply(SPECIES.length());
3641         VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);
3642 
3643         for (int ic = 0; ic < INVOC_COUNT; ic++) {
3644             for (int i = 0; i < a.length; i += SPECIES.length()) {
3645                 IntVector av = IntVector.fromArray(SPECIES, a, i);
3646                 av.lanewise(VectorOperators.ABS, vmask).intoArray(r, i);
3647             }
3648         }
3649 
3650         assertArraysEquals(a, r, mask, IntMaxVectorTests::ABS);
3651     }
3652 
3653 
3654     static int NOT(int a) {
3655         return (int)(~((int)a));
3656     }
3657 
3658     static int not(int a) {
3659         return (int)(~((int)a));
3660     }
3661 
3662 
3663 
3664     @Test(dataProvider = "intUnaryOpProvider")
3665     static void NOTIntMaxVectorTests(IntFunction<int[]> fa) {
3666         int[] a = fa.apply(SPECIES.length());
3667         int[] r = fr.apply(SPECIES.length());
3668 
3669         for (int ic = 0; ic < INVOC_COUNT; ic++) {
3670             for (int i = 0; i < a.length; i += SPECIES.length()) {
3671                 IntVector av = IntVector.fromArray(SPECIES, a, i);
3672                 av.lanewise(VectorOperators.NOT).intoArray(r, i);
3673             }
3674         }
3675 
3676         assertArraysEquals(a, r, IntMaxVectorTests::NOT);
3677     }
3678 
3679     @Test(dataProvider = "intUnaryOpProvider")
3680     static void notIntMaxVectorTests(IntFunction<int[]> fa) {
3681         int[] a = fa.apply(SPECIES.length());
3682         int[] r = fr.apply(SPECIES.length());
3683 
3684         for (int ic = 0; ic < INVOC_COUNT; ic++) {
3685             for (int i = 0; i < a.length; i += SPECIES.length()) {
3686                 IntVector av = IntVector.fromArray(SPECIES, a, i);
3687                 av.not().intoArray(r, i);
3688             }
3689         }
3690 
3691         assertArraysEquals(a, r, IntMaxVectorTests::not);
3692     }
3693 
3694 
3695 
3696     @Test(dataProvider = "intUnaryOpMaskProvider")
3697     static void NOTMaskedIntMaxVectorTests(IntFunction<int[]> fa,
3698                                                 IntFunction<boolean[]> fm) {
3699         int[] a = fa.apply(SPECIES.length());
3700         int[] r = fr.apply(SPECIES.length());
3701         boolean[] mask = fm.apply(SPECIES.length());
3702         VectorMask<Integer> vmask = VectorMask.fromArray(SPECIES, mask, 0);
3703 
3704         for (int ic = 0; ic < INVOC_COUNT; ic++) {
3705             for (int i = 0; i < a.length; i += SPECIES.length()) {
3706                 IntVector av = IntVector.fromArray(SPECIES, a, i);
3707                 av.lanewise(VectorOperators.NOT, vmask).intoArray(r, i);
3708             }
3709         }
3710 
3711         assertArraysEquals(a, r, mask, IntMaxVectorTests::NOT);


< prev index next >