1 /*
2 * Copyright (c) 2018, 2025, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.
8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 */
23
24 /*
25 * @test
26 * @key randomness
27 *
28 * @library /test/lib
29 * @modules jdk.incubator.vector
30 * @run testng/othervm/timeout=300 -ea -esa -Xbatch -XX:-TieredCompilation LongMaxVectorTests
31 */
32
33 // -- This file was mechanically generated: Do not edit! -- //
34
35 import jdk.incubator.vector.VectorShape;
36 import jdk.incubator.vector.VectorSpecies;
37 import jdk.incubator.vector.VectorShuffle;
38 import jdk.incubator.vector.VectorMask;
39 import jdk.incubator.vector.VectorOperators;
40 import jdk.incubator.vector.Vector;
41 import jdk.incubator.vector.VectorMath;
42
43 import jdk.incubator.vector.LongVector;
44
45 import org.testng.Assert;
46 import org.testng.annotations.DataProvider;
47 import org.testng.annotations.Test;
48
49 import java.lang.Integer;
50 import java.util.List;
51 import java.util.Arrays;
52 import java.util.function.BiFunction;
53 import java.util.function.IntFunction;
54 import java.util.Objects;
55 import java.util.stream.Collectors;
56 import java.util.stream.Stream;
57
58 @Test
59 public class LongMaxVectorTests extends AbstractVectorTest {
60
61 static final VectorSpecies<Long> SPECIES =
62 LongVector.SPECIES_MAX;
63
64 static final int INVOC_COUNT = Integer.getInteger("jdk.incubator.vector.test.loop-iterations", 100);
65
66 static LongVector bcast_vec = LongVector.broadcast(SPECIES, (long)10);
67
68 static VectorShape getMaxBit() {
69 return VectorShape.S_Max_BIT;
70 }
71
72 private static final int Max = 256; // juts so we can do N/Max
73
74 private static final long CONST_SHIFT = Long.SIZE / 2;
75
76 static final int BUFFER_REPS = Integer.getInteger("jdk.incubator.vector.test.buffer-vectors", 25000 / Max);
77
78 static void assertArraysStrictlyEquals(long[] r, long[] a) {
79 for (int i = 0; i < a.length; i++) {
80 if (r[i] != a[i]) {
81 Assert.fail("at index #" + i + ", expected = " + a[i] + ", actual = " + r[i]);
82 }
83 }
84 }
85
86 interface FUnOp {
87 long apply(long a);
88 }
89
90 static void assertArraysEquals(long[] r, long[] a, FUnOp f) {
91 int i = 0;
92 try {
93 for (; i < a.length; i++) {
94 Assert.assertEquals(r[i], f.apply(a[i]));
95 }
96 } catch (AssertionError e) {
97 Assert.assertEquals(r[i], f.apply(a[i]), "at index #" + i + ", input = " + a[i]);
98 }
99 }
100
101 interface FUnArrayOp {
102 long[] apply(long a);
103 }
104
105 static void assertArraysEquals(long[] r, long[] a, FUnArrayOp f) {
106 int i = 0;
107 try {
108 for (; i < a.length; i += SPECIES.length()) {
109 Assert.assertEquals(Arrays.copyOfRange(r, i, i+SPECIES.length()),
110 f.apply(a[i]));
111 }
112 } catch (AssertionError e) {
113 long[] ref = f.apply(a[i]);
114 long[] res = Arrays.copyOfRange(r, i, i+SPECIES.length());
115 Assert.assertEquals(res, ref, "(ref: " + Arrays.toString(ref)
116 + ", res: " + Arrays.toString(res)
117 + "), at index #" + i);
118 }
119 }
120
121 static void assertArraysEquals(long[] r, long[] a, boolean[] mask, FUnOp f) {
122 int i = 0;
123 try {
124 for (; i < a.length; i++) {
125 Assert.assertEquals(r[i], mask[i % SPECIES.length()] ? f.apply(a[i]) : a[i]);
126 }
127 } catch (AssertionError e) {
128 Assert.assertEquals(r[i], mask[i % SPECIES.length()] ? f.apply(a[i]) : a[i], "at index #" + i + ", input = " + a[i] + ", mask = " + mask[i % SPECIES.length()]);
129 }
130 }
131
132 interface FReductionOp {
133 long apply(long[] a, int idx);
134 }
135
136 interface FReductionAllOp {
137 long apply(long[] a);
138 }
139
140 static void assertReductionArraysEquals(long[] r, long rc, long[] a,
141 FReductionOp f, FReductionAllOp fa) {
142 int i = 0;
143 try {
144 Assert.assertEquals(rc, fa.apply(a));
145 for (; i < a.length; i += SPECIES.length()) {
146 Assert.assertEquals(r[i], f.apply(a, i));
147 }
148 } catch (AssertionError e) {
149 Assert.assertEquals(rc, fa.apply(a), "Final result is incorrect!");
150 Assert.assertEquals(r[i], f.apply(a, i), "at index #" + i);
151 }
152 }
153
154 interface FReductionMaskedOp {
155 long apply(long[] a, int idx, boolean[] mask);
156 }
157
158 interface FReductionAllMaskedOp {
159 long apply(long[] a, boolean[] mask);
160 }
161
162 static void assertReductionArraysEqualsMasked(long[] r, long rc, long[] a, boolean[] mask,
163 FReductionMaskedOp f, FReductionAllMaskedOp fa) {
164 int i = 0;
165 try {
166 Assert.assertEquals(rc, fa.apply(a, mask));
167 for (; i < a.length; i += SPECIES.length()) {
168 Assert.assertEquals(r[i], f.apply(a, i, mask));
169 }
170 } catch (AssertionError e) {
171 Assert.assertEquals(rc, fa.apply(a, mask), "Final result is incorrect!");
172 Assert.assertEquals(r[i], f.apply(a, i, mask), "at index #" + i);
173 }
174 }
175
176
177 interface FBoolReductionOp {
178 boolean apply(boolean[] a, int idx);
179 }
180
181 static void assertReductionBoolArraysEquals(boolean[] r, boolean[] a, FBoolReductionOp f) {
182 int i = 0;
183 try {
184 for (; i < a.length; i += SPECIES.length()) {
185 Assert.assertEquals(r[i], f.apply(a, i));
186 }
187 } catch (AssertionError e) {
188 Assert.assertEquals(r[i], f.apply(a, i), "at index #" + i);
189 }
190 }
191
192 interface FMaskReductionOp {
193 int apply(boolean[] a, int idx);
194 }
195
196 static void assertMaskReductionArraysEquals(int[] r, boolean[] a, FMaskReductionOp f) {
197 int i = 0;
198 try {
199 for (; i < a.length; i += SPECIES.length()) {
200 Assert.assertEquals(r[i], f.apply(a, i));
201 }
202 } catch (AssertionError e) {
203 Assert.assertEquals(r[i], f.apply(a, i), "at index #" + i);
204 }
205 }
206
207 static void assertRearrangeArraysEquals(long[] r, long[] a, int[] order, int vector_len) {
208 int i = 0, j = 0;
209 try {
210 for (; i < a.length; i += vector_len) {
211 for (j = 0; j < vector_len; j++) {
212 Assert.assertEquals(r[i+j], a[i+order[i+j]]);
213 }
214 }
215 } catch (AssertionError e) {
216 int idx = i + j;
217 Assert.assertEquals(r[i+j], a[i+order[i+j]], "at index #" + idx + ", input = " + a[i+order[i+j]]);
218 }
219 }
220
221 static void assertcompressArraysEquals(long[] r, long[] a, boolean[] m, int vector_len) {
222 int i = 0, j = 0, k = 0;
223 try {
224 for (; i < a.length; i += vector_len) {
225 k = 0;
226 for (j = 0; j < vector_len; j++) {
227 if (m[(i + j) % SPECIES.length()]) {
228 Assert.assertEquals(r[i + k], a[i + j]);
229 k++;
230 }
231 }
232 for (; k < vector_len; k++) {
233 Assert.assertEquals(r[i + k], (long)0);
234 }
235 }
236 } catch (AssertionError e) {
237 int idx = i + k;
238 if (m[(i + j) % SPECIES.length()]) {
239 Assert.assertEquals(r[idx], a[i + j], "at index #" + idx);
240 } else {
241 Assert.assertEquals(r[idx], (long)0, "at index #" + idx);
242 }
243 }
244 }
245
246 static void assertexpandArraysEquals(long[] r, long[] a, boolean[] m, int vector_len) {
247 int i = 0, j = 0, k = 0;
248 try {
249 for (; i < a.length; i += vector_len) {
250 k = 0;
251 for (j = 0; j < vector_len; j++) {
252 if (m[(i + j) % SPECIES.length()]) {
253 Assert.assertEquals(r[i + j], a[i + k]);
254 k++;
255 } else {
256 Assert.assertEquals(r[i + j], (long)0);
257 }
258 }
259 }
260 } catch (AssertionError e) {
261 int idx = i + j;
262 if (m[idx % SPECIES.length()]) {
263 Assert.assertEquals(r[idx], a[i + k], "at index #" + idx);
264 } else {
265 Assert.assertEquals(r[idx], (long)0, "at index #" + idx);
266 }
267 }
268 }
269
270 static void assertSelectFromTwoVectorEquals(long[] r, long[] order, long[] a, long[] b, int vector_len) {
271 int i = 0, j = 0;
272 boolean is_exceptional_idx = false;
273 int idx = 0, wrapped_index = 0, oidx = 0;
274 try {
275 for (; i < a.length; i += vector_len) {
276 for (j = 0; j < vector_len; j++) {
277 idx = i + j;
278 wrapped_index = Math.floorMod((int)order[idx], 2 * vector_len);
279 is_exceptional_idx = wrapped_index >= vector_len;
280 oidx = is_exceptional_idx ? (wrapped_index - vector_len) : wrapped_index;
281 Assert.assertEquals(r[idx], (is_exceptional_idx ? b[i + oidx] : a[i + oidx]));
282 }
283 }
284 } catch (AssertionError e) {
285 Assert.assertEquals(r[idx], (is_exceptional_idx ? b[i + oidx] : a[i + oidx]), "at index #" + idx + ", order = " + order[idx] + ", a = " + a[i + oidx] + ", b = " + b[i + oidx]);
286 }
287 }
288
289 static void assertSelectFromArraysEquals(long[] r, long[] a, long[] order, int vector_len) {
290 int i = 0, j = 0;
291 try {
292 for (; i < a.length; i += vector_len) {
293 for (j = 0; j < vector_len; j++) {
294 Assert.assertEquals(r[i+j], a[i+(int)order[i+j]]);
295 }
296 }
297 } catch (AssertionError e) {
298 int idx = i + j;
299 Assert.assertEquals(r[i+j], a[i+(int)order[i+j]], "at index #" + idx + ", input = " + a[i+(int)order[i+j]]);
300 }
301 }
302
303 static void assertRearrangeArraysEquals(long[] r, long[] a, int[] order, boolean[] mask, int vector_len) {
304 int i = 0, j = 0;
305 try {
306 for (; i < a.length; i += vector_len) {
307 for (j = 0; j < vector_len; j++) {
308 if (mask[j % SPECIES.length()])
309 Assert.assertEquals(r[i+j], a[i+order[i+j]]);
310 else
311 Assert.assertEquals(r[i+j], (long)0);
312 }
313 }
314 } catch (AssertionError e) {
315 int idx = i + j;
316 if (mask[j % SPECIES.length()])
317 Assert.assertEquals(r[i+j], a[i+order[i+j]], "at index #" + idx + ", input = " + a[i+order[i+j]] + ", mask = " + mask[j % SPECIES.length()]);
318 else
319 Assert.assertEquals(r[i+j], (long)0, "at index #" + idx + ", input = " + a[i+order[i+j]] + ", mask = " + mask[j % SPECIES.length()]);
320 }
321 }
322
323 static void assertSelectFromArraysEquals(long[] r, long[] a, long[] order, boolean[] mask, int vector_len) {
324 int i = 0, j = 0;
325 try {
326 for (; i < a.length; i += vector_len) {
327 for (j = 0; j < vector_len; j++) {
328 if (mask[j % SPECIES.length()])
329 Assert.assertEquals(r[i+j], a[i+(int)order[i+j]]);
330 else
331 Assert.assertEquals(r[i+j], (long)0);
332 }
333 }
334 } catch (AssertionError e) {
335 int idx = i + j;
336 if (mask[j % SPECIES.length()])
337 Assert.assertEquals(r[i+j], a[i+(int)order[i+j]], "at index #" + idx + ", input = " + a[i+(int)order[i+j]] + ", mask = " + mask[j % SPECIES.length()]);
338 else
339 Assert.assertEquals(r[i+j], (long)0, "at index #" + idx + ", input = " + a[i+(int)order[i+j]] + ", mask = " + mask[j % SPECIES.length()]);
340 }
341 }
342
343 static void assertBroadcastArraysEquals(long[] r, long[] a) {
344 int i = 0;
345 for (; i < a.length; i += SPECIES.length()) {
346 int idx = i;
347 for (int j = idx; j < (idx + SPECIES.length()); j++)
348 a[j]=a[idx];
349 }
350
351 try {
352 for (i = 0; i < a.length; i++) {
353 Assert.assertEquals(r[i], a[i]);
354 }
355 } catch (AssertionError e) {
356 Assert.assertEquals(r[i], a[i], "at index #" + i + ", input = " + a[i]);
357 }
358 }
359
360 interface FBinOp {
361 long apply(long a, long b);
362 }
363
364 interface FBinMaskOp {
365 long apply(long a, long b, boolean m);
366
367 static FBinMaskOp lift(FBinOp f) {
368 return (a, b, m) -> m ? f.apply(a, b) : a;
369 }
370 }
371
372 static void assertArraysEqualsAssociative(long[] rl, long[] rr, long[] a, long[] b, long[] c, FBinOp f) {
373 int i = 0;
374 try {
375 for (; i < a.length; i++) {
376 //Left associative
377 Assert.assertEquals(rl[i], f.apply(f.apply(a[i], b[i]), c[i]));
378
379 //Right associative
380 Assert.assertEquals(rr[i], f.apply(a[i], f.apply(b[i], c[i])));
381
382 //Results equal sanity check
383 Assert.assertEquals(rl[i], rr[i]);
384 }
385 } catch (AssertionError e) {
386 Assert.assertEquals(rl[i], f.apply(f.apply(a[i], b[i]), c[i]), "left associative test at index #" + i + ", input1 = " + a[i] + ", input2 = " + b[i] + ", input3 = " + c[i]);
387 Assert.assertEquals(rr[i], f.apply(a[i], f.apply(b[i], c[i])), "right associative test at index #" + i + ", input1 = " + a[i] + ", input2 = " + b[i] + ", input3 = " + c[i]);
388 Assert.assertEquals(rl[i], rr[i], "Result checks not equal at index #" + i + "leftRes = " + rl[i] + ", rightRes = " + rr[i]);
389 }
390 }
391
392 static void assertArraysEqualsAssociative(long[] rl, long[] rr, long[] a, long[] b, long[] c, boolean[] mask, FBinOp f) {
393 assertArraysEqualsAssociative(rl, rr, a, b, c, mask, FBinMaskOp.lift(f));
394 }
395
396 static void assertArraysEqualsAssociative(long[] rl, long[] rr, long[] a, long[] b, long[] c, boolean[] mask, FBinMaskOp f) {
397 int i = 0;
398 boolean mask_bit = false;
399 try {
400 for (; i < a.length; i++) {
401 mask_bit = mask[i % SPECIES.length()];
402 //Left associative
403 Assert.assertEquals(rl[i], f.apply(f.apply(a[i], b[i], mask_bit), c[i], mask_bit));
404
405 //Right associative
406 Assert.assertEquals(rr[i], f.apply(a[i], f.apply(b[i], c[i], mask_bit), mask_bit));
407
408 //Results equal sanity check
409 Assert.assertEquals(rl[i], rr[i]);
410 }
411 } catch (AssertionError e) {
412 Assert.assertEquals(rl[i], f.apply(f.apply(a[i], b[i], mask_bit), c[i], mask_bit), "left associative masked test at index #" + i + ", input1 = " + a[i] + ", input2 = " + b[i] + ", input3 = " + c[i] + ", mask = " + mask_bit);
413 Assert.assertEquals(rr[i], f.apply(a[i], f.apply(b[i], c[i], mask_bit), mask_bit), "right associative masked test at index #" + i + ", input1 = " + a[i] + ", input2 = " + b[i] + ", input3 = " + c[i] + ", mask = " + mask_bit);
414 Assert.assertEquals(rl[i], rr[i], "Result checks not equal at index #" + i + "leftRes = " + rl[i] + ", rightRes = " + rr[i]);
415 }
416 }
417
418 static void assertArraysEquals(long[] r, long[] a, long[] b, FBinOp f) {
419 int i = 0;
420 try {
421 for (; i < a.length; i++) {
422 Assert.assertEquals(r[i], f.apply(a[i], b[i]));
423 }
424 } catch (AssertionError e) {
425 Assert.assertEquals(r[i], f.apply(a[i], b[i]), "(" + a[i] + ", " + b[i] + ") at index #" + i);
426 }
427 }
428
429 static void assertArraysEquals(long[] r, long[] a, long b, FBinOp f) {
430 int i = 0;
431 try {
432 for (; i < a.length; i++) {
433 Assert.assertEquals(r[i], f.apply(a[i], b));
434 }
435 } catch (AssertionError e) {
436 Assert.assertEquals(r[i], f.apply(a[i], b), "(" + a[i] + ", " + b + ") at index #" + i);
437 }
438 }
439
440 static void assertBroadcastArraysEquals(long[] r, long[] a, long[] b, FBinOp f) {
441 int i = 0;
442 try {
443 for (; i < a.length; i++) {
444 Assert.assertEquals(r[i], f.apply(a[i], b[(i / SPECIES.length()) * SPECIES.length()]));
445 }
446 } catch (AssertionError e) {
447 Assert.assertEquals(r[i], f.apply(a[i], b[(i / SPECIES.length()) * SPECIES.length()]),
448 "(" + a[i] + ", " + b[(i / SPECIES.length()) * SPECIES.length()] + ") at index #" + i);
449 }
450 }
451
452 static void assertBroadcastLongArraysEquals(long[] r, long[] a, long[] b, FBinOp f) {
453 int i = 0;
454 try {
455 for (; i < a.length; i++) {
456 Assert.assertEquals(r[i], f.apply(a[i], (long)((long)b[(i / SPECIES.length()) * SPECIES.length()])));
457 }
458 } catch (AssertionError e) {
459 Assert.assertEquals(r[i], f.apply(a[i], (long)((long)b[(i / SPECIES.length()) * SPECIES.length()])),
460 "(" + a[i] + ", " + b[(i / SPECIES.length()) * SPECIES.length()] + ") at index #" + i);
461 }
462 }
463
464 static void assertArraysEquals(long[] r, long[] a, long[] b, boolean[] mask, FBinOp f) {
465 assertArraysEquals(r, a, b, mask, FBinMaskOp.lift(f));
466 }
467
468 static void assertArraysEquals(long[] r, long[] a, long[] b, boolean[] mask, FBinMaskOp f) {
469 int i = 0;
470 try {
471 for (; i < a.length; i++) {
472 Assert.assertEquals(r[i], f.apply(a[i], b[i], mask[i % SPECIES.length()]));
473 }
474 } catch (AssertionError err) {
475 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()]);
476 }
477 }
478
479 static void assertArraysEquals(long[] r, long[] a, long b, boolean[] mask, FBinOp f) {
480 assertArraysEquals(r, a, b, mask, FBinMaskOp.lift(f));
481 }
482
483 static void assertArraysEquals(long[] r, long[] a, long b, boolean[] mask, FBinMaskOp f) {
484 int i = 0;
485 try {
486 for (; i < a.length; i++) {
487 Assert.assertEquals(r[i], f.apply(a[i], b, mask[i % SPECIES.length()]));
488 }
489 } catch (AssertionError err) {
490 Assert.assertEquals(r[i], f.apply(a[i], b, mask[i % SPECIES.length()]), "at index #" + i + ", input1 = " + a[i] + ", input2 = " + b + ", mask = " + mask[i % SPECIES.length()]);
491 }
492 }
493
494 static void assertBroadcastArraysEquals(long[] r, long[] a, long[] b, boolean[] mask, FBinOp f) {
495 assertBroadcastArraysEquals(r, a, b, mask, FBinMaskOp.lift(f));
496 }
497
498 static void assertBroadcastArraysEquals(long[] r, long[] a, long[] b, boolean[] mask, FBinMaskOp f) {
499 int i = 0;
500 try {
501 for (; i < a.length; i++) {
502 Assert.assertEquals(r[i], f.apply(a[i], b[(i / SPECIES.length()) * SPECIES.length()], mask[i % SPECIES.length()]));
503 }
504 } catch (AssertionError err) {
505 Assert.assertEquals(r[i], f.apply(a[i], b[(i / SPECIES.length()) * SPECIES.length()],
506 mask[i % SPECIES.length()]), "at index #" + i + ", input1 = " + a[i] +
507 ", input2 = " + b[(i / SPECIES.length()) * SPECIES.length()] + ", mask = " +
508 mask[i % SPECIES.length()]);
509 }
510 }
511
512 static void assertBroadcastLongArraysEquals(long[] r, long[] a, long[] b, boolean[] mask, FBinOp f) {
513 assertBroadcastLongArraysEquals(r, a, b, mask, FBinMaskOp.lift(f));
514 }
515
516 static void assertBroadcastLongArraysEquals(long[] r, long[] a, long[] b, boolean[] mask, FBinMaskOp f) {
517 int i = 0;
518 try {
519 for (; i < a.length; i++) {
520 Assert.assertEquals(r[i], f.apply(a[i], (long)((long)b[(i / SPECIES.length()) * SPECIES.length()]), mask[i % SPECIES.length()]));
521 }
522 } catch (AssertionError err) {
523 Assert.assertEquals(r[i], f.apply(a[i], (long)((long)b[(i / SPECIES.length()) * SPECIES.length()]),
524 mask[i % SPECIES.length()]), "at index #" + i + ", input1 = " + a[i] +
525 ", input2 = " + b[(i / SPECIES.length()) * SPECIES.length()] + ", mask = " +
526 mask[i % SPECIES.length()]);
527 }
528 }
529
530 static void assertShiftArraysEquals(long[] r, long[] a, long[] b, FBinOp f) {
531 int i = 0;
532 int j = 0;
533 try {
534 for (; j < a.length; j += SPECIES.length()) {
535 for (i = 0; i < SPECIES.length(); i++) {
536 Assert.assertEquals(r[i+j], f.apply(a[i+j], b[j]));
537 }
538 }
539 } catch (AssertionError e) {
540 Assert.assertEquals(r[i+j], f.apply(a[i+j], b[j]), "at index #" + i + ", " + j);
541 }
542 }
543
544 static void assertShiftArraysEquals(long[] r, long[] a, long[] b, boolean[] mask, FBinOp f) {
545 assertShiftArraysEquals(r, a, b, mask, FBinMaskOp.lift(f));
546 }
547
548 static void assertShiftArraysEquals(long[] r, long[] a, long[] b, boolean[] mask, FBinMaskOp f) {
549 int i = 0;
550 int j = 0;
551 try {
552 for (; j < a.length; j += SPECIES.length()) {
553 for (i = 0; i < SPECIES.length(); i++) {
554 Assert.assertEquals(r[i+j], f.apply(a[i+j], b[j], mask[i]));
555 }
556 }
557 } catch (AssertionError err) {
558 Assert.assertEquals(r[i+j], f.apply(a[i+j], b[j], mask[i]), "at index #" + i + ", input1 = " + a[i+j] + ", input2 = " + b[j] + ", mask = " + mask[i]);
559 }
560 }
561
562 interface FBinConstOp {
563 long apply(long a);
564 }
565
566 interface FBinConstMaskOp {
567 long apply(long a, boolean m);
568
569 static FBinConstMaskOp lift(FBinConstOp f) {
570 return (a, m) -> m ? f.apply(a) : a;
571 }
572 }
573
574 static void assertShiftConstEquals(long[] r, long[] a, FBinConstOp f) {
575 int i = 0;
576 int j = 0;
577 try {
578 for (; j < a.length; j += SPECIES.length()) {
579 for (i = 0; i < SPECIES.length(); i++) {
580 Assert.assertEquals(r[i+j], f.apply(a[i+j]));
581 }
582 }
583 } catch (AssertionError e) {
584 Assert.assertEquals(r[i+j], f.apply(a[i+j]), "at index #" + i + ", " + j);
585 }
586 }
587
588 static void assertShiftConstEquals(long[] r, long[] a, boolean[] mask, FBinConstOp f) {
589 assertShiftConstEquals(r, a, mask, FBinConstMaskOp.lift(f));
590 }
591
592 static void assertShiftConstEquals(long[] r, long[] a, boolean[] mask, FBinConstMaskOp f) {
593 int i = 0;
594 int j = 0;
595 try {
596 for (; j < a.length; j += SPECIES.length()) {
597 for (i = 0; i < SPECIES.length(); i++) {
598 Assert.assertEquals(r[i+j], f.apply(a[i+j], mask[i]));
599 }
600 }
601 } catch (AssertionError err) {
602 Assert.assertEquals(r[i+j], f.apply(a[i+j], mask[i]), "at index #" + i + ", input1 = " + a[i+j] + ", mask = " + mask[i]);
603 }
604 }
605
606 interface FTernOp {
607 long apply(long a, long b, long c);
608 }
609
610 interface FTernMaskOp {
611 long apply(long a, long b, long c, boolean m);
612
613 static FTernMaskOp lift(FTernOp f) {
614 return (a, b, c, m) -> m ? f.apply(a, b, c) : a;
615 }
616 }
617
618 static void assertArraysEquals(long[] r, long[] a, long[] b, long[] c, FTernOp f) {
619 int i = 0;
620 try {
621 for (; i < a.length; i++) {
622 Assert.assertEquals(r[i], f.apply(a[i], b[i], c[i]));
623 }
624 } catch (AssertionError e) {
625 Assert.assertEquals(r[i], f.apply(a[i], b[i], c[i]), "at index #" + i + ", input1 = " + a[i] + ", input2 = " + b[i] + ", input3 = " + c[i]);
626 }
627 }
628
629 static void assertArraysEquals(long[] r, long[] a, long[] b, long[] c, boolean[] mask, FTernOp f) {
630 assertArraysEquals(r, a, b, c, mask, FTernMaskOp.lift(f));
631 }
632
633 static void assertArraysEquals(long[] r, long[] a, long[] b, long[] c, boolean[] mask, FTernMaskOp f) {
634 int i = 0;
635 try {
636 for (; i < a.length; i++) {
637 Assert.assertEquals(r[i], f.apply(a[i], b[i], c[i], mask[i % SPECIES.length()]));
638 }
639 } catch (AssertionError err) {
640 Assert.assertEquals(r[i], f.apply(a[i], b[i], c[i], mask[i % SPECIES.length()]), "at index #" + i + ", input1 = " + a[i] + ", input2 = "
641 + b[i] + ", input3 = " + c[i] + ", mask = " + mask[i % SPECIES.length()]);
642 }
643 }
644
645 static void assertBroadcastArraysEquals(long[] r, long[] a, long[] b, long[] c, FTernOp f) {
646 int i = 0;
647 try {
648 for (; i < a.length; i++) {
649 Assert.assertEquals(r[i], f.apply(a[i], b[i], c[(i / SPECIES.length()) * SPECIES.length()]));
650 }
651 } catch (AssertionError e) {
652 Assert.assertEquals(r[i], f.apply(a[i], b[i], c[(i / SPECIES.length()) * SPECIES.length()]), "at index #" +
653 i + ", input1 = " + a[i] + ", input2 = " + b[i] + ", input3 = " +
654 c[(i / SPECIES.length()) * SPECIES.length()]);
655 }
656 }
657
658 static void assertAltBroadcastArraysEquals(long[] r, long[] a, long[] b, long[] c, FTernOp f) {
659 int i = 0;
660 try {
661 for (; i < a.length; i++) {
662 Assert.assertEquals(r[i], f.apply(a[i], b[(i / SPECIES.length()) * SPECIES.length()], c[i]));
663 }
664 } catch (AssertionError e) {
665 Assert.assertEquals(r[i], f.apply(a[i], b[(i / SPECIES.length()) * SPECIES.length()], c[i]), "at index #" +
666 i + ", input1 = " + a[i] + ", input2 = " +
667 b[(i / SPECIES.length()) * SPECIES.length()] + ", input3 = " + c[i]);
668 }
669 }
670
671 static void assertBroadcastArraysEquals(long[] r, long[] a, long[] b, long[] c, boolean[] mask,
672 FTernOp f) {
673 assertBroadcastArraysEquals(r, a, b, c, mask, FTernMaskOp.lift(f));
674 }
675
676 static void assertBroadcastArraysEquals(long[] r, long[] a, long[] b, long[] c, boolean[] mask,
677 FTernMaskOp f) {
678 int i = 0;
679 try {
680 for (; i < a.length; i++) {
681 Assert.assertEquals(r[i], f.apply(a[i], b[i], c[(i / SPECIES.length()) * SPECIES.length()],
682 mask[i % SPECIES.length()]));
683 }
684 } catch (AssertionError err) {
685 Assert.assertEquals(r[i], f.apply(a[i], b[i], c[(i / SPECIES.length()) * SPECIES.length()],
686 mask[i % SPECIES.length()]), "at index #" + i + ", input1 = " + a[i] + ", input2 = " +
687 b[i] + ", input3 = " + c[(i / SPECIES.length()) * SPECIES.length()] + ", mask = " +
688 mask[i % SPECIES.length()]);
689 }
690 }
691
692 static void assertAltBroadcastArraysEquals(long[] r, long[] a, long[] b, long[] c, boolean[] mask,
693 FTernOp f) {
694 assertAltBroadcastArraysEquals(r, a, b, c, mask, FTernMaskOp.lift(f));
695 }
696
697 static void assertAltBroadcastArraysEquals(long[] r, long[] a, long[] b, long[] c, boolean[] mask,
698 FTernMaskOp f) {
699 int i = 0;
700 try {
701 for (; i < a.length; i++) {
702 Assert.assertEquals(r[i], f.apply(a[i], b[(i / SPECIES.length()) * SPECIES.length()], c[i],
703 mask[i % SPECIES.length()]));
704 }
705 } catch (AssertionError err) {
706 Assert.assertEquals(r[i], f.apply(a[i], b[(i / SPECIES.length()) * SPECIES.length()], c[i],
707 mask[i % SPECIES.length()]), "at index #" + i + ", input1 = " + a[i] +
708 ", input2 = " + b[(i / SPECIES.length()) * SPECIES.length()] +
709 ", input3 = " + c[i] + ", mask = " + mask[i % SPECIES.length()]);
710 }
711 }
712
713 static void assertDoubleBroadcastArraysEquals(long[] r, long[] a, long[] b, long[] c, FTernOp f) {
714 int i = 0;
715 try {
716 for (; i < a.length; i++) {
717 Assert.assertEquals(r[i], f.apply(a[i], b[(i / SPECIES.length()) * SPECIES.length()],
718 c[(i / SPECIES.length()) * SPECIES.length()]));
719 }
720 } catch (AssertionError e) {
721 Assert.assertEquals(r[i], f.apply(a[i], b[(i / SPECIES.length()) * SPECIES.length()],
722 c[(i / SPECIES.length()) * SPECIES.length()]), "at index #" + i + ", input1 = " + a[i]
723 + ", input2 = " + b[(i / SPECIES.length()) * SPECIES.length()] + ", input3 = " +
724 c[(i / SPECIES.length()) * SPECIES.length()]);
725 }
726 }
727
728 static void assertDoubleBroadcastArraysEquals(long[] r, long[] a, long[] b, long[] c, boolean[] mask,
729 FTernOp f) {
730 assertDoubleBroadcastArraysEquals(r, a, b, c, mask, FTernMaskOp.lift(f));
731 }
732
733 static void assertDoubleBroadcastArraysEquals(long[] r, long[] a, long[] b, long[] c, boolean[] mask,
734 FTernMaskOp f) {
735 int i = 0;
736 try {
737 for (; i < a.length; i++) {
738 Assert.assertEquals(r[i], f.apply(a[i], b[(i / SPECIES.length()) * SPECIES.length()],
739 c[(i / SPECIES.length()) * SPECIES.length()], mask[i % SPECIES.length()]));
740 }
741 } catch (AssertionError err) {
742 Assert.assertEquals(r[i], f.apply(a[i], b[(i / SPECIES.length()) * SPECIES.length()],
743 c[(i / SPECIES.length()) * SPECIES.length()], mask[i % SPECIES.length()]), "at index #"
744 + i + ", input1 = " + a[i] + ", input2 = " + b[(i / SPECIES.length()) * SPECIES.length()] +
745 ", input3 = " + c[(i / SPECIES.length()) * SPECIES.length()] + ", mask = " +
746 mask[i % SPECIES.length()]);
747 }
748 }
749
750
751
752 interface FGatherScatterOp {
753 long[] apply(long[] a, int ix, int[] b, int iy);
754 }
755
756 static void assertArraysEquals(long[] r, long[] a, int[] b, FGatherScatterOp f) {
757 int i = 0;
758 try {
759 for (; i < a.length; i += SPECIES.length()) {
760 Assert.assertEquals(Arrays.copyOfRange(r, i, i+SPECIES.length()),
761 f.apply(a, i, b, i));
762 }
763 } catch (AssertionError e) {
764 long[] ref = f.apply(a, i, b, i);
765 long[] res = Arrays.copyOfRange(r, i, i+SPECIES.length());
766 Assert.assertEquals(res, ref,
767 "(ref: " + Arrays.toString(ref) + ", res: " + Arrays.toString(res) + ", a: "
768 + Arrays.toString(Arrays.copyOfRange(a, i, i+SPECIES.length()))
769 + ", b: "
770 + Arrays.toString(Arrays.copyOfRange(b, i, i+SPECIES.length()))
771 + " at index #" + i);
772 }
773 }
774
775 interface FGatherMaskedOp {
776 long[] apply(long[] a, int ix, boolean[] mask, int[] b, int iy);
777 }
778
779 interface FScatterMaskedOp {
780 long[] apply(long[] r, long[] a, int ix, boolean[] mask, int[] b, int iy);
781 }
782
783 static void assertArraysEquals(long[] r, long[] a, int[] b, boolean[] mask, FGatherMaskedOp f) {
784 int i = 0;
785 try {
786 for (; i < a.length; i += SPECIES.length()) {
787 Assert.assertEquals(Arrays.copyOfRange(r, i, i+SPECIES.length()),
788 f.apply(a, i, mask, b, i));
789 }
790 } catch (AssertionError e) {
791 long[] ref = f.apply(a, i, mask, b, i);
792 long[] res = Arrays.copyOfRange(r, i, i+SPECIES.length());
793 Assert.assertEquals(res, ref,
794 "(ref: " + Arrays.toString(ref) + ", res: " + Arrays.toString(res) + ", a: "
795 + Arrays.toString(Arrays.copyOfRange(a, i, i+SPECIES.length()))
796 + ", b: "
797 + Arrays.toString(Arrays.copyOfRange(b, i, i+SPECIES.length()))
798 + ", mask: "
799 + Arrays.toString(mask)
800 + " at index #" + i);
801 }
802 }
803
804 static void assertArraysEquals(long[] r, long[] a, int[] b, boolean[] mask, FScatterMaskedOp f) {
805 int i = 0;
806 try {
807 for (; i < a.length; i += SPECIES.length()) {
808 Assert.assertEquals(Arrays.copyOfRange(r, i, i+SPECIES.length()),
809 f.apply(r, a, i, mask, b, i));
810 }
811 } catch (AssertionError e) {
812 long[] ref = f.apply(r, a, i, mask, b, i);
813 long[] res = Arrays.copyOfRange(r, i, i+SPECIES.length());
814 Assert.assertEquals(res, ref,
815 "(ref: " + Arrays.toString(ref) + ", res: " + Arrays.toString(res) + ", a: "
816 + Arrays.toString(Arrays.copyOfRange(a, i, i+SPECIES.length()))
817 + ", b: "
818 + Arrays.toString(Arrays.copyOfRange(b, i, i+SPECIES.length()))
819 + ", r: "
820 + Arrays.toString(Arrays.copyOfRange(r, i, i+SPECIES.length()))
821 + ", mask: "
822 + Arrays.toString(mask)
823 + " at index #" + i);
824 }
825 }
826
827 interface FLaneOp {
828 long[] apply(long[] a, int origin, int idx);
829 }
830
831 static void assertArraysEquals(long[] r, long[] a, int origin, FLaneOp f) {
832 int i = 0;
833 try {
834 for (; i < a.length; i += SPECIES.length()) {
835 Assert.assertEquals(Arrays.copyOfRange(r, i, i+SPECIES.length()),
836 f.apply(a, origin, i));
837 }
838 } catch (AssertionError e) {
839 long[] ref = f.apply(a, origin, i);
840 long[] res = Arrays.copyOfRange(r, i, i+SPECIES.length());
841 Assert.assertEquals(res, ref, "(ref: " + Arrays.toString(ref)
842 + ", res: " + Arrays.toString(res)
843 + "), at index #" + i);
844 }
845 }
846
847 interface FLaneBop {
848 long[] apply(long[] a, long[] b, int origin, int idx);
849 }
850
851 static void assertArraysEquals(long[] r, long[] a, long[] b, int origin, FLaneBop f) {
852 int i = 0;
853 try {
854 for (; i < a.length; i += SPECIES.length()) {
855 Assert.assertEquals(Arrays.copyOfRange(r, i, i+SPECIES.length()),
856 f.apply(a, b, origin, i));
857 }
858 } catch (AssertionError e) {
859 long[] ref = f.apply(a, b, origin, i);
860 long[] res = Arrays.copyOfRange(r, i, i+SPECIES.length());
861 Assert.assertEquals(res, ref, "(ref: " + Arrays.toString(ref)
862 + ", res: " + Arrays.toString(res)
863 + "), at index #" + i
864 + ", at origin #" + origin);
865 }
866 }
867
868 interface FLaneMaskedBop {
869 long[] apply(long[] a, long[] b, int origin, boolean[] mask, int idx);
870 }
871
872 static void assertArraysEquals(long[] r, long[] a, long[] b, int origin, boolean[] mask, FLaneMaskedBop f) {
873 int i = 0;
874 try {
875 for (; i < a.length; i += SPECIES.length()) {
876 Assert.assertEquals(Arrays.copyOfRange(r, i, i+SPECIES.length()),
877 f.apply(a, b, origin, mask, i));
878 }
879 } catch (AssertionError e) {
880 long[] ref = f.apply(a, b, origin, mask, i);
881 long[] res = Arrays.copyOfRange(r, i, i+SPECIES.length());
882 Assert.assertEquals(res, ref, "(ref: " + Arrays.toString(ref)
883 + ", res: " + Arrays.toString(res)
884 + "), at index #" + i
885 + ", at origin #" + origin);
886 }
887 }
888
889 interface FLanePartBop {
890 long[] apply(long[] a, long[] b, int origin, int part, int idx);
891 }
892
893 static void assertArraysEquals(long[] r, long[] a, long[] b, int origin, int part, FLanePartBop f) {
894 int i = 0;
895 try {
896 for (; i < a.length; i += SPECIES.length()) {
897 Assert.assertEquals(Arrays.copyOfRange(r, i, i+SPECIES.length()),
898 f.apply(a, b, origin, part, i));
899 }
900 } catch (AssertionError e) {
901 long[] ref = f.apply(a, b, origin, part, i);
902 long[] res = Arrays.copyOfRange(r, i, i+SPECIES.length());
903 Assert.assertEquals(res, ref, "(ref: " + Arrays.toString(ref)
904 + ", res: " + Arrays.toString(res)
905 + "), at index #" + i
906 + ", at origin #" + origin
907 + ", with part #" + part);
908 }
909 }
910
911 interface FLanePartMaskedBop {
912 long[] apply(long[] a, long[] b, int origin, int part, boolean[] mask, int idx);
913 }
914
915 static void assertArraysEquals(long[] r, long[] a, long[] b, int origin, int part, boolean[] mask, FLanePartMaskedBop f) {
916 int i = 0;
917 try {
918 for (; i < a.length; i += SPECIES.length()) {
919 Assert.assertEquals(Arrays.copyOfRange(r, i, i+SPECIES.length()),
920 f.apply(a, b, origin, part, mask, i));
921 }
922 } catch (AssertionError e) {
923 long[] ref = f.apply(a, b, origin, part, mask, i);
924 long[] res = Arrays.copyOfRange(r, i, i+SPECIES.length());
925 Assert.assertEquals(res, ref, "(ref: " + Arrays.toString(ref)
926 + ", res: " + Arrays.toString(res)
927 + "), at index #" + i
928 + ", at origin #" + origin
929 + ", with part #" + part);
930 }
931 }
932
933 static int intCornerCaseValue(int i) {
934 switch(i % 5) {
935 case 0:
936 return Integer.MAX_VALUE;
937 case 1:
938 return Integer.MIN_VALUE;
939 case 2:
940 return Integer.MIN_VALUE;
941 case 3:
942 return Integer.MAX_VALUE;
943 default:
944 return (int)0;
945 }
946 }
947
948 static final List<IntFunction<long[]>> INT_LONG_GENERATORS = List.of(
949 withToString("long[-i * 5]", (int s) -> {
950 return fill(s * BUFFER_REPS,
951 i -> (long)(-i * 5));
952 }),
953 withToString("long[i * 5]", (int s) -> {
954 return fill(s * BUFFER_REPS,
955 i -> (long)(i * 5));
956 }),
957 withToString("long[i + 1]", (int s) -> {
958 return fill(s * BUFFER_REPS,
959 i -> (((long)(i + 1) == 0) ? 1 : (long)(i + 1)));
960 }),
961 withToString("long[intCornerCaseValue(i)]", (int s) -> {
962 return fill(s * BUFFER_REPS,
963 i -> (long)intCornerCaseValue(i));
964 })
965 );
966
967 static void assertArraysEquals(int[] r, long[] a, int offs) {
968 int i = 0;
969 try {
970 for (; i < r.length; i++) {
971 Assert.assertEquals(r[i], (int)(a[i+offs]));
972 }
973 } catch (AssertionError e) {
974 Assert.assertEquals(r[i], (int)(a[i+offs]), "at index #" + i + ", input = " + a[i+offs]);
975 }
976 }
977
978
979
980 static void assertArraysEquals(long[] r, long[] a, int offs) {
981 int i = 0;
982 try {
983 for (; i < r.length; i++) {
984 Assert.assertEquals(r[i], (long)(a[i+offs]));
985 }
986 } catch (AssertionError e) {
987 Assert.assertEquals(r[i], (long)(a[i+offs]), "at index #" + i + ", input = " + a[i+offs]);
988 }
989 }
990
991 static void assertArraysEquals(double[] r, long[] a, int offs) {
992 int i = 0;
993 try {
994 for (; i < r.length; i++) {
995 Assert.assertEquals(r[i], (double)(a[i+offs]));
996 }
997 } catch (AssertionError e) {
998 Assert.assertEquals(r[i], (double)(a[i+offs]), "at index #" + i + ", input = " + a[i+offs]);
999 }
1000 }
1001
1002 static long bits(long e) {
1003 return e;
1004 }
1005
1006 static final List<IntFunction<long[]>> LONG_GENERATORS = List.of(
1007 withToString("long[-i * 5]", (int s) -> {
1008 return fill(s * BUFFER_REPS,
1009 i -> (long)(-i * 5));
1010 }),
1011 withToString("long[i * 5]", (int s) -> {
1012 return fill(s * BUFFER_REPS,
1013 i -> (long)(i * 5));
1014 }),
1015 withToString("long[i + 1]", (int s) -> {
1016 return fill(s * BUFFER_REPS,
1017 i -> (((long)(i + 1) == 0) ? 1 : (long)(i + 1)));
1018 }),
1019 withToString("long[cornerCaseValue(i)]", (int s) -> {
1020 return fill(s * BUFFER_REPS,
1021 i -> cornerCaseValue(i));
1022 })
1023 );
1024
1025 static final List<IntFunction<long[]>> LONG_SATURATING_GENERATORS = List.of(
1026 withToString("long[Long.MIN_VALUE]", (int s) -> {
1027 return fill(s * BUFFER_REPS,
1028 i -> (long)(Long.MIN_VALUE));
1029 }),
1030 withToString("long[Long.MAX_VALUE]", (int s) -> {
1031 return fill(s * BUFFER_REPS,
1032 i -> (long)(Long.MAX_VALUE));
1033 }),
1034 withToString("long[Long.MAX_VALUE - 100]", (int s) -> {
1035 return fill(s * BUFFER_REPS,
1036 i -> (long)(Long.MAX_VALUE - 100));
1037 }),
1038 withToString("long[Long.MIN_VALUE + 100]", (int s) -> {
1039 return fill(s * BUFFER_REPS,
1040 i -> (long)(Long.MIN_VALUE + 100));
1041 }),
1042 withToString("long[-i * 5]", (int s) -> {
1043 return fill(s * BUFFER_REPS,
1044 i -> (long)(-i * 5));
1045 }),
1046 withToString("long[i * 5]", (int s) -> {
1047 return fill(s * BUFFER_REPS,
1048 i -> (long)(i * 5));
1049 })
1050 );
1051
1052 static final List<IntFunction<long[]>> LONG_SATURATING_GENERATORS_ASSOC = List.of(
1053 withToString("long[Long.MAX_VALUE]", (int s) -> {
1054 return fill(s * BUFFER_REPS,
1055 i -> (long)(Long.MAX_VALUE));
1056 }),
1057 withToString("long[Long.MAX_VALUE - 100]", (int s) -> {
1058 return fill(s * BUFFER_REPS,
1059 i -> (long)(Long.MAX_VALUE - 100));
1060 }),
1061 withToString("long[-1]", (int s) -> {
1062 return fill(s * BUFFER_REPS,
1063 i -> (long)(-1));
1064 })
1065 );
1066
1067 // Create combinations of pairs
1068 // @@@ Might be sensitive to order e.g. div by 0
1069 static final List<List<IntFunction<long[]>>> LONG_GENERATOR_PAIRS =
1070 Stream.of(LONG_GENERATORS.get(0)).
1071 flatMap(fa -> LONG_GENERATORS.stream().skip(1).map(fb -> List.of(fa, fb))).
1072 collect(Collectors.toList());
1073
1074 static final List<List<IntFunction<long[]>>> LONG_SATURATING_GENERATOR_PAIRS =
1075 Stream.of(LONG_GENERATORS.get(0)).
1076 flatMap(fa -> LONG_SATURATING_GENERATORS.stream().skip(1).map(fb -> List.of(fa, fb))).
1077 collect(Collectors.toList());
1078
1079 static final List<List<IntFunction<long[]>>> LONG_SATURATING_GENERATOR_TRIPLETS =
1080 Stream.of(LONG_GENERATORS.get(1))
1081 .flatMap(fa -> LONG_SATURATING_GENERATORS_ASSOC.stream().map(fb -> List.of(fa, fb)))
1082 .flatMap(pair -> LONG_SATURATING_GENERATORS_ASSOC.stream().map(f -> List.of(pair.get(0), pair.get(1), f)))
1083 .collect(Collectors.toList());
1084
1085 @DataProvider
1086 public Object[][] boolUnaryOpProvider() {
1087 return BOOL_ARRAY_GENERATORS.stream().
1088 map(f -> new Object[]{f}).
1089 toArray(Object[][]::new);
1090 }
1091
1092 static final List<List<IntFunction<long[]>>> LONG_GENERATOR_TRIPLES =
1093 LONG_GENERATOR_PAIRS.stream().
1094 flatMap(pair -> LONG_GENERATORS.stream().map(f -> List.of(pair.get(0), pair.get(1), f))).
1095 collect(Collectors.toList());
1096
1097 static final List<IntFunction<long[]>> SELECT_FROM_INDEX_GENERATORS = List.of(
1098 withToString("long[0..VECLEN*2)", (int s) -> {
1099 return fill(s * BUFFER_REPS,
1100 i -> (long)(RAND.nextInt()));
1101 })
1102 );
1103
1104 static final List<List<IntFunction<long[]>>> LONG_GENERATOR_SELECT_FROM_TRIPLES =
1105 LONG_GENERATOR_PAIRS.stream().
1106 flatMap(pair -> SELECT_FROM_INDEX_GENERATORS.stream().map(f -> List.of(pair.get(0), pair.get(1), f))).
1107 collect(Collectors.toList());
1108
1109 @DataProvider
1110 public Object[][] longBinaryOpProvider() {
1111 return LONG_GENERATOR_PAIRS.stream().map(List::toArray).
1112 toArray(Object[][]::new);
1113 }
1114
1115 @DataProvider
1116 public Object[][] longSaturatingBinaryOpProvider() {
1117 return LONG_SATURATING_GENERATOR_PAIRS.stream().map(List::toArray).
1118 toArray(Object[][]::new);
1119 }
1120
1121 @DataProvider
1122 public Object[][] longSaturatingBinaryOpAssocProvider() {
1123 return LONG_SATURATING_GENERATOR_TRIPLETS.stream().map(List::toArray).
1124 toArray(Object[][]::new);
1125 }
1126
1127 @DataProvider
1128 public Object[][] longSaturatingBinaryOpAssocMaskProvider() {
1129 return BOOLEAN_MASK_GENERATORS.stream().
1130 flatMap(fm -> LONG_SATURATING_GENERATOR_TRIPLETS.stream().map(lfa -> {
1131 return Stream.concat(lfa.stream(), Stream.of(fm)).toArray();
1132 })).
1133 toArray(Object[][]::new);
1134 }
1135
1136
1137 @DataProvider
1138 public Object[][] longIndexedOpProvider() {
1139 return LONG_GENERATOR_PAIRS.stream().map(List::toArray).
1140 toArray(Object[][]::new);
1141 }
1142
1143 @DataProvider
1144 public Object[][] longSaturatingBinaryOpMaskProvider() {
1145 return BOOLEAN_MASK_GENERATORS.stream().
1146 flatMap(fm -> LONG_SATURATING_GENERATOR_PAIRS.stream().map(lfa -> {
1147 return Stream.concat(lfa.stream(), Stream.of(fm)).toArray();
1148 })).
1149 toArray(Object[][]::new);
1150 }
1151
1152 @DataProvider
1153 public Object[][] longSaturatingUnaryOpProvider() {
1154 return LONG_SATURATING_GENERATORS.stream().
1155 map(f -> new Object[]{f}).
1156 toArray(Object[][]::new);
1157 }
1158
1159 @DataProvider
1160 public Object[][] longSaturatingUnaryOpMaskProvider() {
1161 return BOOLEAN_MASK_GENERATORS.stream().
1162 flatMap(fm -> LONG_SATURATING_GENERATORS.stream().map(fa -> {
1163 return new Object[] {fa, fm};
1164 })).
1165 toArray(Object[][]::new);
1166 }
1167
1168 @DataProvider
1169 public Object[][] longBinaryOpMaskProvider() {
1170 return BOOLEAN_MASK_GENERATORS.stream().
1171 flatMap(fm -> LONG_GENERATOR_PAIRS.stream().map(lfa -> {
1172 return Stream.concat(lfa.stream(), Stream.of(fm)).toArray();
1173 })).
1174 toArray(Object[][]::new);
1175 }
1176
1177 @DataProvider
1178 public Object[][] longTernaryOpProvider() {
1179 return LONG_GENERATOR_TRIPLES.stream().map(List::toArray).
1180 toArray(Object[][]::new);
1181 }
1182
1183 @DataProvider
1184 public Object[][] longSelectFromTwoVectorOpProvider() {
1185 return LONG_GENERATOR_SELECT_FROM_TRIPLES.stream().map(List::toArray).
1186 toArray(Object[][]::new);
1187 }
1188
1189 @DataProvider
1190 public Object[][] longTernaryOpMaskProvider() {
1191 return BOOLEAN_MASK_GENERATORS.stream().
1192 flatMap(fm -> LONG_GENERATOR_TRIPLES.stream().map(lfa -> {
1193 return Stream.concat(lfa.stream(), Stream.of(fm)).toArray();
1194 })).
1195 toArray(Object[][]::new);
1196 }
1197
1198 @DataProvider
1199 public Object[][] longUnaryOpProvider() {
1200 return LONG_GENERATORS.stream().
1201 map(f -> new Object[]{f}).
1202 toArray(Object[][]::new);
1203 }
1204
1205 @DataProvider
1206 public Object[][] longUnaryOpMaskProvider() {
1207 return BOOLEAN_MASK_GENERATORS.stream().
1208 flatMap(fm -> LONG_GENERATORS.stream().map(fa -> {
1209 return new Object[] {fa, fm};
1210 })).
1211 toArray(Object[][]::new);
1212 }
1213
1214 @DataProvider
1215 public Object[][] longtoIntUnaryOpProvider() {
1216 return INT_LONG_GENERATORS.stream().
1217 map(f -> new Object[]{f}).
1218 toArray(Object[][]::new);
1219 }
1220
1221 @DataProvider
1222 public Object[][] maskProvider() {
1223 return BOOLEAN_MASK_GENERATORS.stream().
1224 map(f -> new Object[]{f}).
1225 toArray(Object[][]::new);
1226 }
1227
1228 @DataProvider
1229 public Object[][] maskCompareOpProvider() {
1230 return BOOLEAN_MASK_COMPARE_GENERATOR_PAIRS.stream().map(List::toArray).
1231 toArray(Object[][]::new);
1232 }
1233
1234 @DataProvider
1235 public Object[][] shuffleProvider() {
1236 return INT_SHUFFLE_GENERATORS.stream().
1237 map(f -> new Object[]{f}).
1238 toArray(Object[][]::new);
1239 }
1240
1241 @DataProvider
1242 public Object[][] shuffleCompareOpProvider() {
1243 return INT_SHUFFLE_COMPARE_GENERATOR_PAIRS.stream().map(List::toArray).
1244 toArray(Object[][]::new);
1245 }
1246
1247 @DataProvider
1248 public Object[][] longUnaryOpShuffleProvider() {
1249 return INT_SHUFFLE_GENERATORS.stream().
1250 flatMap(fs -> LONG_GENERATORS.stream().map(fa -> {
1251 return new Object[] {fa, fs};
1252 })).
1253 toArray(Object[][]::new);
1254 }
1255
1256 @DataProvider
1257 public Object[][] longUnaryOpShuffleMaskProvider() {
1258 return BOOLEAN_MASK_GENERATORS.stream().
1259 flatMap(fm -> INT_SHUFFLE_GENERATORS.stream().
1260 flatMap(fs -> LONG_GENERATORS.stream().map(fa -> {
1261 return new Object[] {fa, fs, fm};
1262 }))).
1263 toArray(Object[][]::new);
1264 }
1265
1266 static final List<BiFunction<Integer,Integer,long[]>> LONG_SHUFFLE_GENERATORS = List.of(
1267 withToStringBi("shuffle[random]", (Integer l, Integer m) -> {
1268 long[] a = new long[l];
1269 int upper = m;
1270 for (int i = 0; i < 1; i++) {
1271 a[i] = (long)RAND.nextInt(upper);
1272 }
1273 return a;
1274 })
1275 );
1276
1277 @DataProvider
1278 public Object[][] longUnaryOpSelectFromProvider() {
1279 return LONG_SHUFFLE_GENERATORS.stream().
1280 flatMap(fs -> LONG_GENERATORS.stream().map(fa -> {
1281 return new Object[] {fa, fs};
1282 })).
1283 toArray(Object[][]::new);
1284 }
1285
1286 @DataProvider
1287 public Object[][] longUnaryOpSelectFromMaskProvider() {
1288 return BOOLEAN_MASK_GENERATORS.stream().
1289 flatMap(fm -> LONG_SHUFFLE_GENERATORS.stream().
1290 flatMap(fs -> LONG_GENERATORS.stream().map(fa -> {
1291 return new Object[] {fa, fs, fm};
1292 }))).
1293 toArray(Object[][]::new);
1294 }
1295
1296 static final List<IntFunction<long[]>> LONG_COMPARE_GENERATORS = List.of(
1297 withToString("long[i]", (int s) -> {
1298 return fill(s * BUFFER_REPS,
1299 i -> (long)i);
1300 }),
1301 withToString("long[i - length / 2]", (int s) -> {
1302 return fill(s * BUFFER_REPS,
1303 i -> (long)(i - (s * BUFFER_REPS / 2)));
1304 }),
1305 withToString("long[i + 1]", (int s) -> {
1306 return fill(s * BUFFER_REPS,
1307 i -> (long)(i + 1));
1308 }),
1309 withToString("long[i - 2]", (int s) -> {
1310 return fill(s * BUFFER_REPS,
1311 i -> (long)(i - 2));
1312 }),
1313 withToString("long[zigZag(i)]", (int s) -> {
1314 return fill(s * BUFFER_REPS,
1315 i -> i%3 == 0 ? (long)i : (i%3 == 1 ? (long)(i + 1) : (long)(i - 2)));
1316 }),
1317 withToString("long[cornerCaseValue(i)]", (int s) -> {
1318 return fill(s * BUFFER_REPS,
1319 i -> cornerCaseValue(i));
1320 })
1321 );
1322
1323 static final List<List<IntFunction<long[]>>> LONG_TEST_GENERATOR_ARGS =
1324 LONG_COMPARE_GENERATORS.stream().
1325 map(fa -> List.of(fa)).
1326 collect(Collectors.toList());
1327
1328 @DataProvider
1329 public Object[][] longTestOpProvider() {
1330 return LONG_TEST_GENERATOR_ARGS.stream().map(List::toArray).
1331 toArray(Object[][]::new);
1332 }
1333
1334 @DataProvider
1335 public Object[][] longTestOpMaskProvider() {
1336 return BOOLEAN_MASK_GENERATORS.stream().
1337 flatMap(fm -> LONG_TEST_GENERATOR_ARGS.stream().map(lfa -> {
1338 return Stream.concat(lfa.stream(), Stream.of(fm)).toArray();
1339 })).
1340 toArray(Object[][]::new);
1341 }
1342
1343 static final List<List<IntFunction<long[]>>> LONG_COMPARE_GENERATOR_PAIRS =
1344 LONG_COMPARE_GENERATORS.stream().
1345 flatMap(fa -> LONG_COMPARE_GENERATORS.stream().map(fb -> List.of(fa, fb))).
1346 collect(Collectors.toList());
1347
1348 @DataProvider
1349 public Object[][] longCompareOpProvider() {
1350 return LONG_COMPARE_GENERATOR_PAIRS.stream().map(List::toArray).
1351 toArray(Object[][]::new);
1352 }
1353
1354 @DataProvider
1355 public Object[][] longCompareOpMaskProvider() {
1356 return BOOLEAN_MASK_GENERATORS.stream().
1357 flatMap(fm -> LONG_COMPARE_GENERATOR_PAIRS.stream().map(lfa -> {
1358 return Stream.concat(lfa.stream(), Stream.of(fm)).toArray();
1359 })).
1360 toArray(Object[][]::new);
1361 }
1362
1363 interface ToLongF {
1364 long apply(int i);
1365 }
1366
1367 static long[] fill(int s , ToLongF f) {
1368 return fill(new long[s], f);
1369 }
1370
1371 static long[] fill(long[] a, ToLongF f) {
1372 for (int i = 0; i < a.length; i++) {
1373 a[i] = f.apply(i);
1374 }
1375 return a;
1376 }
1377
1378 static long cornerCaseValue(int i) {
1379 switch(i % 5) {
1380 case 0:
1381 return Long.MAX_VALUE;
1382 case 1:
1383 return Long.MIN_VALUE;
1384 case 2:
1385 return Long.MIN_VALUE;
1386 case 3:
1387 return Long.MAX_VALUE;
1388 default:
1389 return (long)0;
1390 }
1391 }
1392
1393 static final IntFunction<long[]> fr = (vl) -> {
1394 int length = BUFFER_REPS * vl;
1395 return new long[length];
1396 };
1397
1398 static final IntFunction<boolean[]> fmr = (vl) -> {
1399 int length = BUFFER_REPS * vl;
1400 return new boolean[length];
1401 };
1402
1403 static void replaceZero(long[] a, long v) {
1404 for (int i = 0; i < a.length; i++) {
1405 if (a[i] == 0) {
1406 a[i] = v;
1407 }
1408 }
1409 }
1410
1411 static void replaceZero(long[] a, boolean[] mask, long v) {
1412 for (int i = 0; i < a.length; i++) {
1413 if (mask[i % mask.length] && a[i] == 0) {
1414 a[i] = v;
1415 }
1416 }
1417 }
1418
1419 static long ROL_scalar(long a, long b) {
1420 return Long.rotateLeft(a, ((int)b));
1421 }
1422
1423 static long ROR_scalar(long a, long b) {
1424 return Long.rotateRight(a, ((int)b));
1425 }
1426
1427 static long TRAILING_ZEROS_COUNT_scalar(long a) {
1428 return Long.numberOfTrailingZeros(a);
1429 }
1430
1431 static long LEADING_ZEROS_COUNT_scalar(long a) {
1432 return Long.numberOfLeadingZeros(a);
1433 }
1434
1435 static long REVERSE_scalar(long a) {
1436 return Long.reverse(a);
1437 }
1438
1439 static boolean eq(long a, long b) {
1440 return a == b;
1441 }
1442
1443 static boolean neq(long a, long b) {
1444 return a != b;
1445 }
1446
1447 static boolean lt(long a, long b) {
1448 return a < b;
1449 }
1450
1451 static boolean le(long a, long b) {
1452 return a <= b;
1453 }
1454
1455 static boolean gt(long a, long b) {
1456 return a > b;
1457 }
1458
1459 static boolean ge(long a, long b) {
1460 return a >= b;
1461 }
1462
1463 static boolean ult(long a, long b) {
1464 return Long.compareUnsigned(a, b) < 0;
1465 }
1466
1467 static boolean ule(long a, long b) {
1468 return Long.compareUnsigned(a, b) <= 0;
1469 }
1470
1471 static boolean ugt(long a, long b) {
1472 return Long.compareUnsigned(a, b) > 0;
1473 }
1474
1475 static boolean uge(long a, long b) {
1476 return Long.compareUnsigned(a, b) >= 0;
1477 }
1478
1479 static long firstNonZero(long a, long b) {
1480 return Long.compare(a, (long) 0) != 0 ? a : b;
1481 }
1482
1483 @Test
1484 static void smokeTest1() {
1485 LongVector three = LongVector.broadcast(SPECIES, (byte)-3);
1486 LongVector three2 = (LongVector) SPECIES.broadcast(-3);
1487 assert(three.eq(three2).allTrue());
1488 LongVector three3 = three2.broadcast(1).broadcast(-3);
1489 assert(three.eq(three3).allTrue());
1490 int scale = 2;
1491 Class<?> ETYPE = long.class;
1492 if (ETYPE == double.class || ETYPE == long.class)
1493 scale = 1000000;
1494 else if (ETYPE == byte.class && SPECIES.length() >= 64)
1495 scale = 1;
1496 LongVector higher = three.addIndex(scale);
1497 VectorMask<Long> m = three.compare(VectorOperators.LE, higher);
1498 assert(m.allTrue());
1499 m = higher.min((long)-1).test(VectorOperators.IS_NEGATIVE);
1500 assert(m.allTrue());
1501 long max = higher.reduceLanes(VectorOperators.MAX);
1502 assert(max == -3 + scale * (SPECIES.length()-1));
1503 }
1504
1505 private static long[]
1506 bothToArray(LongVector a, LongVector b) {
1507 long[] r = new long[a.length() + b.length()];
1508 a.intoArray(r, 0);
1509 b.intoArray(r, a.length());
1510 return r;
1511 }
1512
1513 @Test
1514 static void smokeTest2() {
1515 // Do some zipping and shuffling.
1516 LongVector io = (LongVector) SPECIES.broadcast(0).addIndex(1);
1517 LongVector io2 = (LongVector) VectorShuffle.iota(SPECIES,0,1,false).toVector();
1518 Assert.assertEquals(io, io2);
1519 LongVector a = io.add((long)1); //[1,2]
1520 LongVector b = a.neg(); //[-1,-2]
1521 long[] abValues = bothToArray(a,b); //[1,2,-1,-2]
1522 VectorShuffle<Long> zip0 = VectorShuffle.makeZip(SPECIES, 0);
1523 VectorShuffle<Long> zip1 = VectorShuffle.makeZip(SPECIES, 1);
1524 LongVector zab0 = a.rearrange(zip0,b); //[1,-1]
1525 LongVector zab1 = a.rearrange(zip1,b); //[2,-2]
1526 long[] zabValues = bothToArray(zab0, zab1); //[1,-1,2,-2]
1527 // manually zip
1528 long[] manual = new long[zabValues.length];
1529 for (int i = 0; i < manual.length; i += 2) {
1530 manual[i+0] = abValues[i/2];
1531 manual[i+1] = abValues[a.length() + i/2];
1532 }
1533 Assert.assertEquals(Arrays.toString(zabValues), Arrays.toString(manual));
1534 VectorShuffle<Long> unz0 = VectorShuffle.makeUnzip(SPECIES, 0);
1535 VectorShuffle<Long> unz1 = VectorShuffle.makeUnzip(SPECIES, 1);
1536 LongVector uab0 = zab0.rearrange(unz0,zab1);
1537 LongVector uab1 = zab0.rearrange(unz1,zab1);
1538 long[] abValues1 = bothToArray(uab0, uab1);
1539 Assert.assertEquals(Arrays.toString(abValues), Arrays.toString(abValues1));
1540 }
1541
1542 static void iotaShuffle() {
1543 LongVector io = (LongVector) SPECIES.broadcast(0).addIndex(1);
1544 LongVector io2 = (LongVector) VectorShuffle.iota(SPECIES, 0 , 1, false).toVector();
1545 Assert.assertEquals(io, io2);
1546 }
1547
1548 @Test
1549 // Test all shuffle related operations.
1550 static void shuffleTest() {
1551 // To test backend instructions, make sure that C2 is used.
1552 for (int loop = 0; loop < INVOC_COUNT * INVOC_COUNT; loop++) {
1553 iotaShuffle();
1554 }
1555 }
1556
1557 @Test
1558 void viewAsIntegeralLanesTest() {
1559 Vector<?> asIntegral = SPECIES.zero().viewAsIntegralLanes();
1560 Assert.assertEquals(asIntegral.species(), SPECIES);
1561 }
1562
1563 @Test
1564 void viewAsFloatingLanesTest() {
1565 Vector<?> asFloating = SPECIES.zero().viewAsFloatingLanes();
1566 VectorSpecies<?> asFloatingSpecies = asFloating.species();
1567 Assert.assertNotEquals(asFloatingSpecies.elementType(), SPECIES.elementType());
1568 Assert.assertEquals(asFloatingSpecies.vectorShape(), SPECIES.vectorShape());
1569 Assert.assertEquals(asFloatingSpecies.length(), SPECIES.length());
1570 Assert.assertEquals(asFloating.viewAsIntegralLanes().species(), SPECIES);
1571 }
1572
1573 @Test
1574 // Test div by 0.
1575 static void bitwiseDivByZeroSmokeTest() {
1576 try {
1577 LongVector a = (LongVector) SPECIES.broadcast(0).addIndex(1);
1578 LongVector b = (LongVector) SPECIES.broadcast(0);
1579 a.div(b);
1580 Assert.fail();
1581 } catch (ArithmeticException e) {
1582 }
1583
1584 try {
1585 LongVector a = (LongVector) SPECIES.broadcast(0).addIndex(1);
1586 LongVector b = (LongVector) SPECIES.broadcast(0);
1587 VectorMask<Long> m = a.lt((long) 1);
1588 a.div(b, m);
1589 Assert.fail();
1590 } catch (ArithmeticException e) {
1591 }
1592 }
1593
1594 static long ADD(long a, long b) {
1595 return (long)(a + b);
1596 }
1597
1598 @Test(dataProvider = "longBinaryOpProvider")
1599 static void ADDLongMaxVectorTests(IntFunction<long[]> fa, IntFunction<long[]> fb) {
1600 long[] a = fa.apply(SPECIES.length());
1601 long[] b = fb.apply(SPECIES.length());
1602 long[] r = fr.apply(SPECIES.length());
1603
1604 for (int ic = 0; ic < INVOC_COUNT; ic++) {
1605 for (int i = 0; i < a.length; i += SPECIES.length()) {
1606 LongVector av = LongVector.fromArray(SPECIES, a, i);
1607 LongVector bv = LongVector.fromArray(SPECIES, b, i);
1608 av.lanewise(VectorOperators.ADD, bv).intoArray(r, i);
1609 }
1610 }
1611
1612 assertArraysEquals(r, a, b, LongMaxVectorTests::ADD);
1613 }
1614
1615 static long add(long a, long b) {
1616 return (long)(a + b);
1617 }
1618
1619 @Test(dataProvider = "longBinaryOpProvider")
1620 static void addLongMaxVectorTests(IntFunction<long[]> fa, IntFunction<long[]> fb) {
1621 long[] a = fa.apply(SPECIES.length());
1622 long[] b = fb.apply(SPECIES.length());
1623 long[] r = fr.apply(SPECIES.length());
1624
1625 for (int i = 0; i < a.length; i += SPECIES.length()) {
1626 LongVector av = LongVector.fromArray(SPECIES, a, i);
1627 LongVector bv = LongVector.fromArray(SPECIES, b, i);
1628 av.add(bv).intoArray(r, i);
1629 }
1630
1631 assertArraysEquals(r, a, b, LongMaxVectorTests::add);
1632 }
1633
1634 @Test(dataProvider = "longBinaryOpMaskProvider")
1635 static void ADDLongMaxVectorTestsMasked(IntFunction<long[]> fa, IntFunction<long[]> fb,
1636 IntFunction<boolean[]> fm) {
1637 long[] a = fa.apply(SPECIES.length());
1638 long[] b = fb.apply(SPECIES.length());
1639 long[] r = fr.apply(SPECIES.length());
1640 boolean[] mask = fm.apply(SPECIES.length());
1641 VectorMask<Long> vmask = VectorMask.fromArray(SPECIES, mask, 0);
1642
1643 for (int ic = 0; ic < INVOC_COUNT; ic++) {
1644 for (int i = 0; i < a.length; i += SPECIES.length()) {
1645 LongVector av = LongVector.fromArray(SPECIES, a, i);
1646 LongVector bv = LongVector.fromArray(SPECIES, b, i);
1647 av.lanewise(VectorOperators.ADD, bv, vmask).intoArray(r, i);
1648 }
1649 }
1650
1651 assertArraysEquals(r, a, b, mask, LongMaxVectorTests::ADD);
1652 }
1653
1654 @Test(dataProvider = "longBinaryOpMaskProvider")
1655 static void addLongMaxVectorTestsMasked(IntFunction<long[]> fa, IntFunction<long[]> fb,
1656 IntFunction<boolean[]> fm) {
1657 long[] a = fa.apply(SPECIES.length());
1658 long[] b = fb.apply(SPECIES.length());
1659 long[] r = fr.apply(SPECIES.length());
1660 boolean[] mask = fm.apply(SPECIES.length());
1661 VectorMask<Long> vmask = VectorMask.fromArray(SPECIES, mask, 0);
1662
1663 for (int i = 0; i < a.length; i += SPECIES.length()) {
1664 LongVector av = LongVector.fromArray(SPECIES, a, i);
1665 LongVector bv = LongVector.fromArray(SPECIES, b, i);
1666 av.add(bv, vmask).intoArray(r, i);
1667 }
1668
1669 assertArraysEquals(r, a, b, mask, LongMaxVectorTests::add);
1670 }
1671
1672 static long SUB(long a, long b) {
1673 return (long)(a - b);
1674 }
1675
1676 @Test(dataProvider = "longBinaryOpProvider")
1677 static void SUBLongMaxVectorTests(IntFunction<long[]> fa, IntFunction<long[]> fb) {
1678 long[] a = fa.apply(SPECIES.length());
1679 long[] b = fb.apply(SPECIES.length());
1680 long[] r = fr.apply(SPECIES.length());
1681
1682 for (int ic = 0; ic < INVOC_COUNT; ic++) {
1683 for (int i = 0; i < a.length; i += SPECIES.length()) {
1684 LongVector av = LongVector.fromArray(SPECIES, a, i);
1685 LongVector bv = LongVector.fromArray(SPECIES, b, i);
1686 av.lanewise(VectorOperators.SUB, bv).intoArray(r, i);
1687 }
1688 }
1689
1690 assertArraysEquals(r, a, b, LongMaxVectorTests::SUB);
1691 }
1692
1693 static long sub(long a, long b) {
1694 return (long)(a - b);
1695 }
1696
1697 @Test(dataProvider = "longBinaryOpProvider")
1698 static void subLongMaxVectorTests(IntFunction<long[]> fa, IntFunction<long[]> fb) {
1699 long[] a = fa.apply(SPECIES.length());
1700 long[] b = fb.apply(SPECIES.length());
1701 long[] r = fr.apply(SPECIES.length());
1702
1703 for (int i = 0; i < a.length; i += SPECIES.length()) {
1704 LongVector av = LongVector.fromArray(SPECIES, a, i);
1705 LongVector bv = LongVector.fromArray(SPECIES, b, i);
1706 av.sub(bv).intoArray(r, i);
1707 }
1708
1709 assertArraysEquals(r, a, b, LongMaxVectorTests::sub);
1710 }
1711
1712 @Test(dataProvider = "longBinaryOpMaskProvider")
1713 static void SUBLongMaxVectorTestsMasked(IntFunction<long[]> fa, IntFunction<long[]> fb,
1714 IntFunction<boolean[]> fm) {
1715 long[] a = fa.apply(SPECIES.length());
1716 long[] b = fb.apply(SPECIES.length());
1717 long[] r = fr.apply(SPECIES.length());
1718 boolean[] mask = fm.apply(SPECIES.length());
1719 VectorMask<Long> vmask = VectorMask.fromArray(SPECIES, mask, 0);
1720
1721 for (int ic = 0; ic < INVOC_COUNT; ic++) {
1722 for (int i = 0; i < a.length; i += SPECIES.length()) {
1723 LongVector av = LongVector.fromArray(SPECIES, a, i);
1724 LongVector bv = LongVector.fromArray(SPECIES, b, i);
1725 av.lanewise(VectorOperators.SUB, bv, vmask).intoArray(r, i);
1726 }
1727 }
1728
1729 assertArraysEquals(r, a, b, mask, LongMaxVectorTests::SUB);
1730 }
1731
1732 @Test(dataProvider = "longBinaryOpMaskProvider")
1733 static void subLongMaxVectorTestsMasked(IntFunction<long[]> fa, IntFunction<long[]> fb,
1734 IntFunction<boolean[]> fm) {
1735 long[] a = fa.apply(SPECIES.length());
1736 long[] b = fb.apply(SPECIES.length());
1737 long[] r = fr.apply(SPECIES.length());
1738 boolean[] mask = fm.apply(SPECIES.length());
1739 VectorMask<Long> vmask = VectorMask.fromArray(SPECIES, mask, 0);
1740
1741 for (int i = 0; i < a.length; i += SPECIES.length()) {
1742 LongVector av = LongVector.fromArray(SPECIES, a, i);
1743 LongVector bv = LongVector.fromArray(SPECIES, b, i);
1744 av.sub(bv, vmask).intoArray(r, i);
1745 }
1746
1747 assertArraysEquals(r, a, b, mask, LongMaxVectorTests::sub);
1748 }
1749
1750 static long MUL(long a, long b) {
1751 return (long)(a * b);
1752 }
1753
1754 @Test(dataProvider = "longBinaryOpProvider")
1755 static void MULLongMaxVectorTests(IntFunction<long[]> fa, IntFunction<long[]> fb) {
1756 long[] a = fa.apply(SPECIES.length());
1757 long[] b = fb.apply(SPECIES.length());
1758 long[] r = fr.apply(SPECIES.length());
1759
1760 for (int ic = 0; ic < INVOC_COUNT; ic++) {
1761 for (int i = 0; i < a.length; i += SPECIES.length()) {
1762 LongVector av = LongVector.fromArray(SPECIES, a, i);
1763 LongVector bv = LongVector.fromArray(SPECIES, b, i);
1764 av.lanewise(VectorOperators.MUL, bv).intoArray(r, i);
1765 }
1766 }
1767
1768 assertArraysEquals(r, a, b, LongMaxVectorTests::MUL);
1769 }
1770
1771 static long mul(long a, long b) {
1772 return (long)(a * b);
1773 }
1774
1775 @Test(dataProvider = "longBinaryOpProvider")
1776 static void mulLongMaxVectorTests(IntFunction<long[]> fa, IntFunction<long[]> fb) {
1777 long[] a = fa.apply(SPECIES.length());
1778 long[] b = fb.apply(SPECIES.length());
1779 long[] r = fr.apply(SPECIES.length());
1780
1781 for (int i = 0; i < a.length; i += SPECIES.length()) {
1782 LongVector av = LongVector.fromArray(SPECIES, a, i);
1783 LongVector bv = LongVector.fromArray(SPECIES, b, i);
1784 av.mul(bv).intoArray(r, i);
1785 }
1786
1787 assertArraysEquals(r, a, b, LongMaxVectorTests::mul);
1788 }
1789
1790 @Test(dataProvider = "longBinaryOpMaskProvider")
1791 static void MULLongMaxVectorTestsMasked(IntFunction<long[]> fa, IntFunction<long[]> fb,
1792 IntFunction<boolean[]> fm) {
1793 long[] a = fa.apply(SPECIES.length());
1794 long[] b = fb.apply(SPECIES.length());
1795 long[] r = fr.apply(SPECIES.length());
1796 boolean[] mask = fm.apply(SPECIES.length());
1797 VectorMask<Long> vmask = VectorMask.fromArray(SPECIES, mask, 0);
1798
1799 for (int ic = 0; ic < INVOC_COUNT; ic++) {
1800 for (int i = 0; i < a.length; i += SPECIES.length()) {
1801 LongVector av = LongVector.fromArray(SPECIES, a, i);
1802 LongVector bv = LongVector.fromArray(SPECIES, b, i);
1803 av.lanewise(VectorOperators.MUL, bv, vmask).intoArray(r, i);
1804 }
1805 }
1806
1807 assertArraysEquals(r, a, b, mask, LongMaxVectorTests::MUL);
1808 }
1809
1810 @Test(dataProvider = "longBinaryOpMaskProvider")
1811 static void mulLongMaxVectorTestsMasked(IntFunction<long[]> fa, IntFunction<long[]> fb,
1812 IntFunction<boolean[]> fm) {
1813 long[] a = fa.apply(SPECIES.length());
1814 long[] b = fb.apply(SPECIES.length());
1815 long[] r = fr.apply(SPECIES.length());
1816 boolean[] mask = fm.apply(SPECIES.length());
1817 VectorMask<Long> vmask = VectorMask.fromArray(SPECIES, mask, 0);
1818
1819 for (int i = 0; i < a.length; i += SPECIES.length()) {
1820 LongVector av = LongVector.fromArray(SPECIES, a, i);
1821 LongVector bv = LongVector.fromArray(SPECIES, b, i);
1822 av.mul(bv, vmask).intoArray(r, i);
1823 }
1824
1825 assertArraysEquals(r, a, b, mask, LongMaxVectorTests::mul);
1826 }
1827
1828 static long DIV(long a, long b) {
1829 return (long)(a / b);
1830 }
1831
1832 @Test(dataProvider = "longBinaryOpProvider")
1833 static void DIVLongMaxVectorTests(IntFunction<long[]> fa, IntFunction<long[]> fb) {
1834 long[] a = fa.apply(SPECIES.length());
1835 long[] b = fb.apply(SPECIES.length());
1836 long[] r = fr.apply(SPECIES.length());
1837
1838 replaceZero(b, (long) 1);
1839
1840 for (int ic = 0; ic < INVOC_COUNT; ic++) {
1841 for (int i = 0; i < a.length; i += SPECIES.length()) {
1842 LongVector av = LongVector.fromArray(SPECIES, a, i);
1843 LongVector bv = LongVector.fromArray(SPECIES, b, i);
1844 av.lanewise(VectorOperators.DIV, bv).intoArray(r, i);
1845 }
1846 }
1847
1848 assertArraysEquals(r, a, b, LongMaxVectorTests::DIV);
1849 }
1850
1851 static long div(long a, long b) {
1852 return (long)(a / b);
1853 }
1854
1855 @Test(dataProvider = "longBinaryOpProvider")
1856 static void divLongMaxVectorTests(IntFunction<long[]> fa, IntFunction<long[]> fb) {
1857 long[] a = fa.apply(SPECIES.length());
1858 long[] b = fb.apply(SPECIES.length());
1859 long[] r = fr.apply(SPECIES.length());
1860
1861 replaceZero(b, (long) 1);
1862
1863 for (int ic = 0; ic < INVOC_COUNT; ic++) {
1864 for (int i = 0; i < a.length; i += SPECIES.length()) {
1865 LongVector av = LongVector.fromArray(SPECIES, a, i);
1866 LongVector bv = LongVector.fromArray(SPECIES, b, i);
1867 av.div(bv).intoArray(r, i);
1868 }
1869 }
1870
1871 assertArraysEquals(r, a, b, LongMaxVectorTests::div);
1872 }
1873
1874 @Test(dataProvider = "longBinaryOpMaskProvider")
1875 static void DIVLongMaxVectorTestsMasked(IntFunction<long[]> fa, IntFunction<long[]> fb,
1876 IntFunction<boolean[]> fm) {
1877 long[] a = fa.apply(SPECIES.length());
1878 long[] b = fb.apply(SPECIES.length());
1879 long[] r = fr.apply(SPECIES.length());
1880 boolean[] mask = fm.apply(SPECIES.length());
1881 VectorMask<Long> vmask = VectorMask.fromArray(SPECIES, mask, 0);
1882
1883 replaceZero(b, mask, (long) 1);
1884
1885 for (int ic = 0; ic < INVOC_COUNT; ic++) {
1886 for (int i = 0; i < a.length; i += SPECIES.length()) {
1887 LongVector av = LongVector.fromArray(SPECIES, a, i);
1888 LongVector bv = LongVector.fromArray(SPECIES, b, i);
1889 av.lanewise(VectorOperators.DIV, bv, vmask).intoArray(r, i);
1890 }
1891 }
1892
1893 assertArraysEquals(r, a, b, mask, LongMaxVectorTests::DIV);
1894 }
1895
1896 @Test(dataProvider = "longBinaryOpMaskProvider")
1897 static void divLongMaxVectorTestsMasked(IntFunction<long[]> fa, IntFunction<long[]> fb,
1898 IntFunction<boolean[]> fm) {
1899 long[] a = fa.apply(SPECIES.length());
1900 long[] b = fb.apply(SPECIES.length());
1901 long[] r = fr.apply(SPECIES.length());
1902 boolean[] mask = fm.apply(SPECIES.length());
1903 VectorMask<Long> vmask = VectorMask.fromArray(SPECIES, mask, 0);
1904
1905 replaceZero(b, mask, (long) 1);
1906
1907 for (int ic = 0; ic < INVOC_COUNT; ic++) {
1908 for (int i = 0; i < a.length; i += SPECIES.length()) {
1909 LongVector av = LongVector.fromArray(SPECIES, a, i);
1910 LongVector bv = LongVector.fromArray(SPECIES, b, i);
1911 av.div(bv, vmask).intoArray(r, i);
1912 }
1913 }
1914
1915 assertArraysEquals(r, a, b, mask, LongMaxVectorTests::div);
1916 }
1917
1918 static long FIRST_NONZERO(long a, long b) {
1919 return (long)((a)!=0?a:b);
1920 }
1921
1922 @Test(dataProvider = "longBinaryOpProvider")
1923 static void FIRST_NONZEROLongMaxVectorTests(IntFunction<long[]> fa, IntFunction<long[]> fb) {
1924 long[] a = fa.apply(SPECIES.length());
1925 long[] b = fb.apply(SPECIES.length());
1926 long[] r = fr.apply(SPECIES.length());
1927
1928 for (int ic = 0; ic < INVOC_COUNT; ic++) {
1929 for (int i = 0; i < a.length; i += SPECIES.length()) {
1930 LongVector av = LongVector.fromArray(SPECIES, a, i);
1931 LongVector bv = LongVector.fromArray(SPECIES, b, i);
1932 av.lanewise(VectorOperators.FIRST_NONZERO, bv).intoArray(r, i);
1933 }
1934 }
1935
1936 assertArraysEquals(r, a, b, LongMaxVectorTests::FIRST_NONZERO);
1937 }
1938
1939 @Test(dataProvider = "longBinaryOpMaskProvider")
1940 static void FIRST_NONZEROLongMaxVectorTestsMasked(IntFunction<long[]> fa, IntFunction<long[]> fb,
1941 IntFunction<boolean[]> fm) {
1942 long[] a = fa.apply(SPECIES.length());
1943 long[] b = fb.apply(SPECIES.length());
1944 long[] r = fr.apply(SPECIES.length());
1945 boolean[] mask = fm.apply(SPECIES.length());
1946 VectorMask<Long> vmask = VectorMask.fromArray(SPECIES, mask, 0);
1947
1948 for (int ic = 0; ic < INVOC_COUNT; ic++) {
1949 for (int i = 0; i < a.length; i += SPECIES.length()) {
1950 LongVector av = LongVector.fromArray(SPECIES, a, i);
1951 LongVector bv = LongVector.fromArray(SPECIES, b, i);
1952 av.lanewise(VectorOperators.FIRST_NONZERO, bv, vmask).intoArray(r, i);
1953 }
1954 }
1955
1956 assertArraysEquals(r, a, b, mask, LongMaxVectorTests::FIRST_NONZERO);
1957 }
1958
1959 static long AND(long a, long b) {
1960 return (long)(a & b);
1961 }
1962
1963 @Test(dataProvider = "longBinaryOpProvider")
1964 static void ANDLongMaxVectorTests(IntFunction<long[]> fa, IntFunction<long[]> fb) {
1965 long[] a = fa.apply(SPECIES.length());
1966 long[] b = fb.apply(SPECIES.length());
1967 long[] r = fr.apply(SPECIES.length());
1968
1969 for (int ic = 0; ic < INVOC_COUNT; ic++) {
1970 for (int i = 0; i < a.length; i += SPECIES.length()) {
1971 LongVector av = LongVector.fromArray(SPECIES, a, i);
1972 LongVector bv = LongVector.fromArray(SPECIES, b, i);
1973 av.lanewise(VectorOperators.AND, bv).intoArray(r, i);
1974 }
1975 }
1976
1977 assertArraysEquals(r, a, b, LongMaxVectorTests::AND);
1978 }
1979
1980 static long and(long a, long b) {
1981 return (long)(a & b);
1982 }
1983
1984 @Test(dataProvider = "longBinaryOpProvider")
1985 static void andLongMaxVectorTests(IntFunction<long[]> fa, IntFunction<long[]> fb) {
1986 long[] a = fa.apply(SPECIES.length());
1987 long[] b = fb.apply(SPECIES.length());
1988 long[] r = fr.apply(SPECIES.length());
1989
1990 for (int i = 0; i < a.length; i += SPECIES.length()) {
1991 LongVector av = LongVector.fromArray(SPECIES, a, i);
1992 LongVector bv = LongVector.fromArray(SPECIES, b, i);
1993 av.and(bv).intoArray(r, i);
1994 }
1995
1996 assertArraysEquals(r, a, b, LongMaxVectorTests::and);
1997 }
1998
1999 @Test(dataProvider = "longBinaryOpMaskProvider")
2000 static void ANDLongMaxVectorTestsMasked(IntFunction<long[]> fa, IntFunction<long[]> fb,
2001 IntFunction<boolean[]> fm) {
2002 long[] a = fa.apply(SPECIES.length());
2003 long[] b = fb.apply(SPECIES.length());
2004 long[] r = fr.apply(SPECIES.length());
2005 boolean[] mask = fm.apply(SPECIES.length());
2006 VectorMask<Long> vmask = VectorMask.fromArray(SPECIES, mask, 0);
2007
2008 for (int ic = 0; ic < INVOC_COUNT; ic++) {
2009 for (int i = 0; i < a.length; i += SPECIES.length()) {
2010 LongVector av = LongVector.fromArray(SPECIES, a, i);
2011 LongVector bv = LongVector.fromArray(SPECIES, b, i);
2012 av.lanewise(VectorOperators.AND, bv, vmask).intoArray(r, i);
2013 }
2014 }
2015
2016 assertArraysEquals(r, a, b, mask, LongMaxVectorTests::AND);
2017 }
2018
2019 static long AND_NOT(long a, long b) {
2020 return (long)(a & ~b);
2021 }
2022
2023 @Test(dataProvider = "longBinaryOpProvider")
2024 static void AND_NOTLongMaxVectorTests(IntFunction<long[]> fa, IntFunction<long[]> fb) {
2025 long[] a = fa.apply(SPECIES.length());
2026 long[] b = fb.apply(SPECIES.length());
2027 long[] r = fr.apply(SPECIES.length());
2028
2029 for (int ic = 0; ic < INVOC_COUNT; ic++) {
2030 for (int i = 0; i < a.length; i += SPECIES.length()) {
2031 LongVector av = LongVector.fromArray(SPECIES, a, i);
2032 LongVector bv = LongVector.fromArray(SPECIES, b, i);
2033 av.lanewise(VectorOperators.AND_NOT, bv).intoArray(r, i);
2034 }
2035 }
2036
2037 assertArraysEquals(r, a, b, LongMaxVectorTests::AND_NOT);
2038 }
2039
2040 @Test(dataProvider = "longBinaryOpMaskProvider")
2041 static void AND_NOTLongMaxVectorTestsMasked(IntFunction<long[]> fa, IntFunction<long[]> fb,
2042 IntFunction<boolean[]> fm) {
2043 long[] a = fa.apply(SPECIES.length());
2044 long[] b = fb.apply(SPECIES.length());
2045 long[] r = fr.apply(SPECIES.length());
2046 boolean[] mask = fm.apply(SPECIES.length());
2047 VectorMask<Long> vmask = VectorMask.fromArray(SPECIES, mask, 0);
2048
2049 for (int ic = 0; ic < INVOC_COUNT; ic++) {
2050 for (int i = 0; i < a.length; i += SPECIES.length()) {
2051 LongVector av = LongVector.fromArray(SPECIES, a, i);
2052 LongVector bv = LongVector.fromArray(SPECIES, b, i);
2053 av.lanewise(VectorOperators.AND_NOT, bv, vmask).intoArray(r, i);
2054 }
2055 }
2056
2057 assertArraysEquals(r, a, b, mask, LongMaxVectorTests::AND_NOT);
2058 }
2059
2060 static long OR(long a, long b) {
2061 return (long)(a | b);
2062 }
2063
2064 @Test(dataProvider = "longBinaryOpProvider")
2065 static void ORLongMaxVectorTests(IntFunction<long[]> fa, IntFunction<long[]> fb) {
2066 long[] a = fa.apply(SPECIES.length());
2067 long[] b = fb.apply(SPECIES.length());
2068 long[] r = fr.apply(SPECIES.length());
2069
2070 for (int ic = 0; ic < INVOC_COUNT; ic++) {
2071 for (int i = 0; i < a.length; i += SPECIES.length()) {
2072 LongVector av = LongVector.fromArray(SPECIES, a, i);
2073 LongVector bv = LongVector.fromArray(SPECIES, b, i);
2074 av.lanewise(VectorOperators.OR, bv).intoArray(r, i);
2075 }
2076 }
2077
2078 assertArraysEquals(r, a, b, LongMaxVectorTests::OR);
2079 }
2080
2081 static long or(long a, long b) {
2082 return (long)(a | b);
2083 }
2084
2085 @Test(dataProvider = "longBinaryOpProvider")
2086 static void orLongMaxVectorTests(IntFunction<long[]> fa, IntFunction<long[]> fb) {
2087 long[] a = fa.apply(SPECIES.length());
2088 long[] b = fb.apply(SPECIES.length());
2089 long[] r = fr.apply(SPECIES.length());
2090
2091 for (int i = 0; i < a.length; i += SPECIES.length()) {
2092 LongVector av = LongVector.fromArray(SPECIES, a, i);
2093 LongVector bv = LongVector.fromArray(SPECIES, b, i);
2094 av.or(bv).intoArray(r, i);
2095 }
2096
2097 assertArraysEquals(r, a, b, LongMaxVectorTests::or);
2098 }
2099
2100 @Test(dataProvider = "longBinaryOpMaskProvider")
2101 static void ORLongMaxVectorTestsMasked(IntFunction<long[]> fa, IntFunction<long[]> fb,
2102 IntFunction<boolean[]> fm) {
2103 long[] a = fa.apply(SPECIES.length());
2104 long[] b = fb.apply(SPECIES.length());
2105 long[] r = fr.apply(SPECIES.length());
2106 boolean[] mask = fm.apply(SPECIES.length());
2107 VectorMask<Long> vmask = VectorMask.fromArray(SPECIES, mask, 0);
2108
2109 for (int ic = 0; ic < INVOC_COUNT; ic++) {
2110 for (int i = 0; i < a.length; i += SPECIES.length()) {
2111 LongVector av = LongVector.fromArray(SPECIES, a, i);
2112 LongVector bv = LongVector.fromArray(SPECIES, b, i);
2113 av.lanewise(VectorOperators.OR, bv, vmask).intoArray(r, i);
2114 }
2115 }
2116
2117 assertArraysEquals(r, a, b, mask, LongMaxVectorTests::OR);
2118 }
2119
2120 static long XOR(long a, long b) {
2121 return (long)(a ^ b);
2122 }
2123
2124 @Test(dataProvider = "longBinaryOpProvider")
2125 static void XORLongMaxVectorTests(IntFunction<long[]> fa, IntFunction<long[]> fb) {
2126 long[] a = fa.apply(SPECIES.length());
2127 long[] b = fb.apply(SPECIES.length());
2128 long[] r = fr.apply(SPECIES.length());
2129
2130 for (int ic = 0; ic < INVOC_COUNT; ic++) {
2131 for (int i = 0; i < a.length; i += SPECIES.length()) {
2132 LongVector av = LongVector.fromArray(SPECIES, a, i);
2133 LongVector bv = LongVector.fromArray(SPECIES, b, i);
2134 av.lanewise(VectorOperators.XOR, bv).intoArray(r, i);
2135 }
2136 }
2137
2138 assertArraysEquals(r, a, b, LongMaxVectorTests::XOR);
2139 }
2140
2141 @Test(dataProvider = "longBinaryOpMaskProvider")
2142 static void XORLongMaxVectorTestsMasked(IntFunction<long[]> fa, IntFunction<long[]> fb,
2143 IntFunction<boolean[]> fm) {
2144 long[] a = fa.apply(SPECIES.length());
2145 long[] b = fb.apply(SPECIES.length());
2146 long[] r = fr.apply(SPECIES.length());
2147 boolean[] mask = fm.apply(SPECIES.length());
2148 VectorMask<Long> vmask = VectorMask.fromArray(SPECIES, mask, 0);
2149
2150 for (int ic = 0; ic < INVOC_COUNT; ic++) {
2151 for (int i = 0; i < a.length; i += SPECIES.length()) {
2152 LongVector av = LongVector.fromArray(SPECIES, a, i);
2153 LongVector bv = LongVector.fromArray(SPECIES, b, i);
2154 av.lanewise(VectorOperators.XOR, bv, vmask).intoArray(r, i);
2155 }
2156 }
2157
2158 assertArraysEquals(r, a, b, mask, LongMaxVectorTests::XOR);
2159 }
2160
2161 static long COMPRESS_BITS(long a, long b) {
2162 return (long)(Long.compress(a, b));
2163 }
2164
2165 @Test(dataProvider = "longBinaryOpProvider")
2166 static void COMPRESS_BITSLongMaxVectorTests(IntFunction<long[]> fa, IntFunction<long[]> fb) {
2167 long[] a = fa.apply(SPECIES.length());
2168 long[] b = fb.apply(SPECIES.length());
2169 long[] r = fr.apply(SPECIES.length());
2170
2171 for (int ic = 0; ic < INVOC_COUNT; ic++) {
2172 for (int i = 0; i < a.length; i += SPECIES.length()) {
2173 LongVector av = LongVector.fromArray(SPECIES, a, i);
2174 LongVector bv = LongVector.fromArray(SPECIES, b, i);
2175 av.lanewise(VectorOperators.COMPRESS_BITS, bv).intoArray(r, i);
2176 }
2177 }
2178
2179 assertArraysEquals(r, a, b, LongMaxVectorTests::COMPRESS_BITS);
2180 }
2181
2182 @Test(dataProvider = "longBinaryOpMaskProvider")
2183 static void COMPRESS_BITSLongMaxVectorTestsMasked(IntFunction<long[]> fa, IntFunction<long[]> fb,
2184 IntFunction<boolean[]> fm) {
2185 long[] a = fa.apply(SPECIES.length());
2186 long[] b = fb.apply(SPECIES.length());
2187 long[] r = fr.apply(SPECIES.length());
2188 boolean[] mask = fm.apply(SPECIES.length());
2189 VectorMask<Long> vmask = VectorMask.fromArray(SPECIES, mask, 0);
2190
2191 for (int ic = 0; ic < INVOC_COUNT; ic++) {
2192 for (int i = 0; i < a.length; i += SPECIES.length()) {
2193 LongVector av = LongVector.fromArray(SPECIES, a, i);
2194 LongVector bv = LongVector.fromArray(SPECIES, b, i);
2195 av.lanewise(VectorOperators.COMPRESS_BITS, bv, vmask).intoArray(r, i);
2196 }
2197 }
2198
2199 assertArraysEquals(r, a, b, mask, LongMaxVectorTests::COMPRESS_BITS);
2200 }
2201
2202 static long EXPAND_BITS(long a, long b) {
2203 return (long)(Long.expand(a, b));
2204 }
2205
2206 @Test(dataProvider = "longBinaryOpProvider")
2207 static void EXPAND_BITSLongMaxVectorTests(IntFunction<long[]> fa, IntFunction<long[]> fb) {
2208 long[] a = fa.apply(SPECIES.length());
2209 long[] b = fb.apply(SPECIES.length());
2210 long[] r = fr.apply(SPECIES.length());
2211
2212 for (int ic = 0; ic < INVOC_COUNT; ic++) {
2213 for (int i = 0; i < a.length; i += SPECIES.length()) {
2214 LongVector av = LongVector.fromArray(SPECIES, a, i);
2215 LongVector bv = LongVector.fromArray(SPECIES, b, i);
2216 av.lanewise(VectorOperators.EXPAND_BITS, bv).intoArray(r, i);
2217 }
2218 }
2219
2220 assertArraysEquals(r, a, b, LongMaxVectorTests::EXPAND_BITS);
2221 }
2222
2223 @Test(dataProvider = "longBinaryOpMaskProvider")
2224 static void EXPAND_BITSLongMaxVectorTestsMasked(IntFunction<long[]> fa, IntFunction<long[]> fb,
2225 IntFunction<boolean[]> fm) {
2226 long[] a = fa.apply(SPECIES.length());
2227 long[] b = fb.apply(SPECIES.length());
2228 long[] r = fr.apply(SPECIES.length());
2229 boolean[] mask = fm.apply(SPECIES.length());
2230 VectorMask<Long> vmask = VectorMask.fromArray(SPECIES, mask, 0);
2231
2232 for (int ic = 0; ic < INVOC_COUNT; ic++) {
2233 for (int i = 0; i < a.length; i += SPECIES.length()) {
2234 LongVector av = LongVector.fromArray(SPECIES, a, i);
2235 LongVector bv = LongVector.fromArray(SPECIES, b, i);
2236 av.lanewise(VectorOperators.EXPAND_BITS, bv, vmask).intoArray(r, i);
2237 }
2238 }
2239
2240 assertArraysEquals(r, a, b, mask, LongMaxVectorTests::EXPAND_BITS);
2241 }
2242
2243 @Test(dataProvider = "longBinaryOpProvider")
2244 static void addLongMaxVectorTestsBroadcastSmokeTest(IntFunction<long[]> fa, IntFunction<long[]> fb) {
2245 long[] a = fa.apply(SPECIES.length());
2246 long[] b = fb.apply(SPECIES.length());
2247 long[] r = fr.apply(SPECIES.length());
2248
2249 for (int i = 0; i < a.length; i += SPECIES.length()) {
2250 LongVector av = LongVector.fromArray(SPECIES, a, i);
2251 av.add(b[i]).intoArray(r, i);
2252 }
2253
2254 assertBroadcastArraysEquals(r, a, b, LongMaxVectorTests::add);
2255 }
2256
2257 @Test(dataProvider = "longBinaryOpMaskProvider")
2258 static void addLongMaxVectorTestsBroadcastMaskedSmokeTest(IntFunction<long[]> fa, IntFunction<long[]> fb,
2259 IntFunction<boolean[]> fm) {
2260 long[] a = fa.apply(SPECIES.length());
2261 long[] b = fb.apply(SPECIES.length());
2262 long[] r = fr.apply(SPECIES.length());
2263 boolean[] mask = fm.apply(SPECIES.length());
2264 VectorMask<Long> vmask = VectorMask.fromArray(SPECIES, mask, 0);
2265
2266 for (int i = 0; i < a.length; i += SPECIES.length()) {
2267 LongVector av = LongVector.fromArray(SPECIES, a, i);
2268 av.add(b[i], vmask).intoArray(r, i);
2269 }
2270
2271 assertBroadcastArraysEquals(r, a, b, mask, LongMaxVectorTests::add);
2272 }
2273
2274 @Test(dataProvider = "longBinaryOpProvider")
2275 static void subLongMaxVectorTestsBroadcastSmokeTest(IntFunction<long[]> fa, IntFunction<long[]> fb) {
2276 long[] a = fa.apply(SPECIES.length());
2277 long[] b = fb.apply(SPECIES.length());
2278 long[] r = fr.apply(SPECIES.length());
2279
2280 for (int i = 0; i < a.length; i += SPECIES.length()) {
2281 LongVector av = LongVector.fromArray(SPECIES, a, i);
2282 av.sub(b[i]).intoArray(r, i);
2283 }
2284
2285 assertBroadcastArraysEquals(r, a, b, LongMaxVectorTests::sub);
2286 }
2287
2288 @Test(dataProvider = "longBinaryOpMaskProvider")
2289 static void subLongMaxVectorTestsBroadcastMaskedSmokeTest(IntFunction<long[]> fa, IntFunction<long[]> fb,
2290 IntFunction<boolean[]> fm) {
2291 long[] a = fa.apply(SPECIES.length());
2292 long[] b = fb.apply(SPECIES.length());
2293 long[] r = fr.apply(SPECIES.length());
2294 boolean[] mask = fm.apply(SPECIES.length());
2295 VectorMask<Long> vmask = VectorMask.fromArray(SPECIES, mask, 0);
2296
2297 for (int i = 0; i < a.length; i += SPECIES.length()) {
2298 LongVector av = LongVector.fromArray(SPECIES, a, i);
2299 av.sub(b[i], vmask).intoArray(r, i);
2300 }
2301
2302 assertBroadcastArraysEquals(r, a, b, mask, LongMaxVectorTests::sub);
2303 }
2304
2305 @Test(dataProvider = "longBinaryOpProvider")
2306 static void mulLongMaxVectorTestsBroadcastSmokeTest(IntFunction<long[]> fa, IntFunction<long[]> fb) {
2307 long[] a = fa.apply(SPECIES.length());
2308 long[] b = fb.apply(SPECIES.length());
2309 long[] r = fr.apply(SPECIES.length());
2310
2311 for (int i = 0; i < a.length; i += SPECIES.length()) {
2312 LongVector av = LongVector.fromArray(SPECIES, a, i);
2313 av.mul(b[i]).intoArray(r, i);
2314 }
2315
2316 assertBroadcastArraysEquals(r, a, b, LongMaxVectorTests::mul);
2317 }
2318
2319 @Test(dataProvider = "longBinaryOpMaskProvider")
2320 static void mulLongMaxVectorTestsBroadcastMaskedSmokeTest(IntFunction<long[]> fa, IntFunction<long[]> fb,
2321 IntFunction<boolean[]> fm) {
2322 long[] a = fa.apply(SPECIES.length());
2323 long[] b = fb.apply(SPECIES.length());
2324 long[] r = fr.apply(SPECIES.length());
2325 boolean[] mask = fm.apply(SPECIES.length());
2326 VectorMask<Long> vmask = VectorMask.fromArray(SPECIES, mask, 0);
2327
2328 for (int i = 0; i < a.length; i += SPECIES.length()) {
2329 LongVector av = LongVector.fromArray(SPECIES, a, i);
2330 av.mul(b[i], vmask).intoArray(r, i);
2331 }
2332
2333 assertBroadcastArraysEquals(r, a, b, mask, LongMaxVectorTests::mul);
2334 }
2335
2336 @Test(dataProvider = "longBinaryOpProvider")
2337 static void divLongMaxVectorTestsBroadcastSmokeTest(IntFunction<long[]> fa, IntFunction<long[]> fb) {
2338 long[] a = fa.apply(SPECIES.length());
2339 long[] b = fb.apply(SPECIES.length());
2340 long[] r = fr.apply(SPECIES.length());
2341
2342 replaceZero(b, (long) 1);
2343
2344 for (int i = 0; i < a.length; i += SPECIES.length()) {
2345 LongVector av = LongVector.fromArray(SPECIES, a, i);
2346 av.div(b[i]).intoArray(r, i);
2347 }
2348
2349 assertBroadcastArraysEquals(r, a, b, LongMaxVectorTests::div);
2350 }
2351
2352 @Test(dataProvider = "longBinaryOpMaskProvider")
2353 static void divLongMaxVectorTestsBroadcastMaskedSmokeTest(IntFunction<long[]> fa, IntFunction<long[]> fb,
2354 IntFunction<boolean[]> fm) {
2355 long[] a = fa.apply(SPECIES.length());
2356 long[] b = fb.apply(SPECIES.length());
2357 long[] r = fr.apply(SPECIES.length());
2358 boolean[] mask = fm.apply(SPECIES.length());
2359 VectorMask<Long> vmask = VectorMask.fromArray(SPECIES, mask, 0);
2360
2361 replaceZero(b, (long) 1);
2362
2363 for (int i = 0; i < a.length; i += SPECIES.length()) {
2364 LongVector av = LongVector.fromArray(SPECIES, a, i);
2365 av.div(b[i], vmask).intoArray(r, i);
2366 }
2367
2368 assertBroadcastArraysEquals(r, a, b, mask, LongMaxVectorTests::div);
2369 }
2370
2371 @Test(dataProvider = "longBinaryOpProvider")
2372 static void ORLongMaxVectorTestsBroadcastSmokeTest(IntFunction<long[]> fa, IntFunction<long[]> fb) {
2373 long[] a = fa.apply(SPECIES.length());
2374 long[] b = fb.apply(SPECIES.length());
2375 long[] r = fr.apply(SPECIES.length());
2376
2377 for (int i = 0; i < a.length; i += SPECIES.length()) {
2378 LongVector av = LongVector.fromArray(SPECIES, a, i);
2379 av.lanewise(VectorOperators.OR, b[i]).intoArray(r, i);
2380 }
2381
2382 assertBroadcastArraysEquals(r, a, b, LongMaxVectorTests::OR);
2383 }
2384
2385 @Test(dataProvider = "longBinaryOpProvider")
2386 static void orLongMaxVectorTestsBroadcastSmokeTest(IntFunction<long[]> fa, IntFunction<long[]> fb) {
2387 long[] a = fa.apply(SPECIES.length());
2388 long[] b = fb.apply(SPECIES.length());
2389 long[] r = fr.apply(SPECIES.length());
2390
2391 for (int i = 0; i < a.length; i += SPECIES.length()) {
2392 LongVector av = LongVector.fromArray(SPECIES, a, i);
2393 av.or(b[i]).intoArray(r, i);
2394 }
2395
2396 assertBroadcastArraysEquals(r, a, b, LongMaxVectorTests::or);
2397 }
2398
2399 @Test(dataProvider = "longBinaryOpMaskProvider")
2400 static void ORLongMaxVectorTestsBroadcastMaskedSmokeTest(IntFunction<long[]> fa, IntFunction<long[]> fb,
2401 IntFunction<boolean[]> fm) {
2402 long[] a = fa.apply(SPECIES.length());
2403 long[] b = fb.apply(SPECIES.length());
2404 long[] r = fr.apply(SPECIES.length());
2405 boolean[] mask = fm.apply(SPECIES.length());
2406 VectorMask<Long> vmask = VectorMask.fromArray(SPECIES, mask, 0);
2407
2408 for (int i = 0; i < a.length; i += SPECIES.length()) {
2409 LongVector av = LongVector.fromArray(SPECIES, a, i);
2410 av.lanewise(VectorOperators.OR, b[i], vmask).intoArray(r, i);
2411 }
2412
2413 assertBroadcastArraysEquals(r, a, b, mask, LongMaxVectorTests::OR);
2414 }
2415
2416 @Test(dataProvider = "longBinaryOpProvider")
2417 static void ANDLongMaxVectorTestsBroadcastSmokeTest(IntFunction<long[]> fa, IntFunction<long[]> fb) {
2418 long[] a = fa.apply(SPECIES.length());
2419 long[] b = fb.apply(SPECIES.length());
2420 long[] r = fr.apply(SPECIES.length());
2421
2422 for (int i = 0; i < a.length; i += SPECIES.length()) {
2423 LongVector av = LongVector.fromArray(SPECIES, a, i);
2424 av.lanewise(VectorOperators.AND, b[i]).intoArray(r, i);
2425 }
2426
2427 assertBroadcastArraysEquals(r, a, b, LongMaxVectorTests::AND);
2428 }
2429
2430 @Test(dataProvider = "longBinaryOpProvider")
2431 static void andLongMaxVectorTestsBroadcastSmokeTest(IntFunction<long[]> fa, IntFunction<long[]> fb) {
2432 long[] a = fa.apply(SPECIES.length());
2433 long[] b = fb.apply(SPECIES.length());
2434 long[] r = fr.apply(SPECIES.length());
2435
2436 for (int i = 0; i < a.length; i += SPECIES.length()) {
2437 LongVector av = LongVector.fromArray(SPECIES, a, i);
2438 av.and(b[i]).intoArray(r, i);
2439 }
2440
2441 assertBroadcastArraysEquals(r, a, b, LongMaxVectorTests::and);
2442 }
2443
2444 @Test(dataProvider = "longBinaryOpMaskProvider")
2445 static void ANDLongMaxVectorTestsBroadcastMaskedSmokeTest(IntFunction<long[]> fa, IntFunction<long[]> fb,
2446 IntFunction<boolean[]> fm) {
2447 long[] a = fa.apply(SPECIES.length());
2448 long[] b = fb.apply(SPECIES.length());
2449 long[] r = fr.apply(SPECIES.length());
2450 boolean[] mask = fm.apply(SPECIES.length());
2451 VectorMask<Long> vmask = VectorMask.fromArray(SPECIES, mask, 0);
2452
2453 for (int i = 0; i < a.length; i += SPECIES.length()) {
2454 LongVector av = LongVector.fromArray(SPECIES, a, i);
2455 av.lanewise(VectorOperators.AND, b[i], vmask).intoArray(r, i);
2456 }
2457
2458 assertBroadcastArraysEquals(r, a, b, mask, LongMaxVectorTests::AND);
2459 }
2460
2461 @Test(dataProvider = "longBinaryOpProvider")
2462 static void ORLongMaxVectorTestsBroadcastLongSmokeTest(IntFunction<long[]> fa, IntFunction<long[]> fb) {
2463 long[] a = fa.apply(SPECIES.length());
2464 long[] b = fb.apply(SPECIES.length());
2465 long[] r = fr.apply(SPECIES.length());
2466
2467 for (int i = 0; i < a.length; i += SPECIES.length()) {
2468 LongVector av = LongVector.fromArray(SPECIES, a, i);
2469 av.lanewise(VectorOperators.OR, (long)b[i]).intoArray(r, i);
2470 }
2471
2472 assertBroadcastLongArraysEquals(r, a, b, LongMaxVectorTests::OR);
2473 }
2474
2475 @Test(dataProvider = "longBinaryOpMaskProvider")
2476 static void ORLongMaxVectorTestsBroadcastMaskedLongSmokeTest(IntFunction<long[]> fa, IntFunction<long[]> fb,
2477 IntFunction<boolean[]> fm) {
2478 long[] a = fa.apply(SPECIES.length());
2479 long[] b = fb.apply(SPECIES.length());
2480 long[] r = fr.apply(SPECIES.length());
2481 boolean[] mask = fm.apply(SPECIES.length());
2482 VectorMask<Long> vmask = VectorMask.fromArray(SPECIES, mask, 0);
2483
2484 for (int i = 0; i < a.length; i += SPECIES.length()) {
2485 LongVector av = LongVector.fromArray(SPECIES, a, i);
2486 av.lanewise(VectorOperators.OR, (long)b[i], vmask).intoArray(r, i);
2487 }
2488
2489 assertBroadcastLongArraysEquals(r, a, b, mask, LongMaxVectorTests::OR);
2490 }
2491
2492 @Test(dataProvider = "longBinaryOpProvider")
2493 static void ADDLongMaxVectorTestsBroadcastLongSmokeTest(IntFunction<long[]> fa, IntFunction<long[]> fb) {
2494 long[] a = fa.apply(SPECIES.length());
2495 long[] b = fb.apply(SPECIES.length());
2496 long[] r = fr.apply(SPECIES.length());
2497
2498 for (int i = 0; i < a.length; i += SPECIES.length()) {
2499 LongVector av = LongVector.fromArray(SPECIES, a, i);
2500 av.lanewise(VectorOperators.ADD, (long)b[i]).intoArray(r, i);
2501 }
2502
2503 assertBroadcastLongArraysEquals(r, a, b, LongMaxVectorTests::ADD);
2504 }
2505
2506 @Test(dataProvider = "longBinaryOpMaskProvider")
2507 static void ADDLongMaxVectorTestsBroadcastMaskedLongSmokeTest(IntFunction<long[]> fa, IntFunction<long[]> fb,
2508 IntFunction<boolean[]> fm) {
2509 long[] a = fa.apply(SPECIES.length());
2510 long[] b = fb.apply(SPECIES.length());
2511 long[] r = fr.apply(SPECIES.length());
2512 boolean[] mask = fm.apply(SPECIES.length());
2513 VectorMask<Long> vmask = VectorMask.fromArray(SPECIES, mask, 0);
2514
2515 for (int i = 0; i < a.length; i += SPECIES.length()) {
2516 LongVector av = LongVector.fromArray(SPECIES, a, i);
2517 av.lanewise(VectorOperators.ADD, (long)b[i], vmask).intoArray(r, i);
2518 }
2519
2520 assertBroadcastLongArraysEquals(r, a, b, mask, LongMaxVectorTests::ADD);
2521 }
2522
2523 static long LSHL(long a, long b) {
2524 return (long)((a << b));
2525 }
2526
2527 @Test(dataProvider = "longBinaryOpProvider")
2528 static void LSHLLongMaxVectorTests(IntFunction<long[]> fa, IntFunction<long[]> fb) {
2529 long[] a = fa.apply(SPECIES.length());
2530 long[] b = fb.apply(SPECIES.length());
2531 long[] r = fr.apply(SPECIES.length());
2532
2533 for (int ic = 0; ic < INVOC_COUNT; ic++) {
2534 for (int i = 0; i < a.length; i += SPECIES.length()) {
2535 LongVector av = LongVector.fromArray(SPECIES, a, i);
2536 LongVector bv = LongVector.fromArray(SPECIES, b, i);
2537 av.lanewise(VectorOperators.LSHL, bv).intoArray(r, i);
2538 }
2539 }
2540
2541 assertArraysEquals(r, a, b, LongMaxVectorTests::LSHL);
2542 }
2543
2544 @Test(dataProvider = "longBinaryOpMaskProvider")
2545 static void LSHLLongMaxVectorTestsMasked(IntFunction<long[]> fa, IntFunction<long[]> fb,
2546 IntFunction<boolean[]> fm) {
2547 long[] a = fa.apply(SPECIES.length());
2548 long[] b = fb.apply(SPECIES.length());
2549 long[] r = fr.apply(SPECIES.length());
2550 boolean[] mask = fm.apply(SPECIES.length());
2551 VectorMask<Long> vmask = VectorMask.fromArray(SPECIES, mask, 0);
2552
2553 for (int ic = 0; ic < INVOC_COUNT; ic++) {
2554 for (int i = 0; i < a.length; i += SPECIES.length()) {
2555 LongVector av = LongVector.fromArray(SPECIES, a, i);
2556 LongVector bv = LongVector.fromArray(SPECIES, b, i);
2557 av.lanewise(VectorOperators.LSHL, bv, vmask).intoArray(r, i);
2558 }
2559 }
2560
2561 assertArraysEquals(r, a, b, mask, LongMaxVectorTests::LSHL);
2562 }
2563
2564 static long ASHR(long a, long b) {
2565 return (long)((a >> b));
2566 }
2567
2568 @Test(dataProvider = "longBinaryOpProvider")
2569 static void ASHRLongMaxVectorTests(IntFunction<long[]> fa, IntFunction<long[]> fb) {
2570 long[] a = fa.apply(SPECIES.length());
2571 long[] b = fb.apply(SPECIES.length());
2572 long[] r = fr.apply(SPECIES.length());
2573
2574 for (int ic = 0; ic < INVOC_COUNT; ic++) {
2575 for (int i = 0; i < a.length; i += SPECIES.length()) {
2576 LongVector av = LongVector.fromArray(SPECIES, a, i);
2577 LongVector bv = LongVector.fromArray(SPECIES, b, i);
2578 av.lanewise(VectorOperators.ASHR, bv).intoArray(r, i);
2579 }
2580 }
2581
2582 assertArraysEquals(r, a, b, LongMaxVectorTests::ASHR);
2583 }
2584
2585 @Test(dataProvider = "longBinaryOpMaskProvider")
2586 static void ASHRLongMaxVectorTestsMasked(IntFunction<long[]> fa, IntFunction<long[]> fb,
2587 IntFunction<boolean[]> fm) {
2588 long[] a = fa.apply(SPECIES.length());
2589 long[] b = fb.apply(SPECIES.length());
2590 long[] r = fr.apply(SPECIES.length());
2591 boolean[] mask = fm.apply(SPECIES.length());
2592 VectorMask<Long> vmask = VectorMask.fromArray(SPECIES, mask, 0);
2593
2594 for (int ic = 0; ic < INVOC_COUNT; ic++) {
2595 for (int i = 0; i < a.length; i += SPECIES.length()) {
2596 LongVector av = LongVector.fromArray(SPECIES, a, i);
2597 LongVector bv = LongVector.fromArray(SPECIES, b, i);
2598 av.lanewise(VectorOperators.ASHR, bv, vmask).intoArray(r, i);
2599 }
2600 }
2601
2602 assertArraysEquals(r, a, b, mask, LongMaxVectorTests::ASHR);
2603 }
2604
2605 static long LSHR(long a, long b) {
2606 return (long)((a >>> b));
2607 }
2608
2609 @Test(dataProvider = "longBinaryOpProvider")
2610 static void LSHRLongMaxVectorTests(IntFunction<long[]> fa, IntFunction<long[]> fb) {
2611 long[] a = fa.apply(SPECIES.length());
2612 long[] b = fb.apply(SPECIES.length());
2613 long[] r = fr.apply(SPECIES.length());
2614
2615 for (int ic = 0; ic < INVOC_COUNT; ic++) {
2616 for (int i = 0; i < a.length; i += SPECIES.length()) {
2617 LongVector av = LongVector.fromArray(SPECIES, a, i);
2618 LongVector bv = LongVector.fromArray(SPECIES, b, i);
2619 av.lanewise(VectorOperators.LSHR, bv).intoArray(r, i);
2620 }
2621 }
2622
2623 assertArraysEquals(r, a, b, LongMaxVectorTests::LSHR);
2624 }
2625
2626 @Test(dataProvider = "longBinaryOpMaskProvider")
2627 static void LSHRLongMaxVectorTestsMasked(IntFunction<long[]> fa, IntFunction<long[]> fb,
2628 IntFunction<boolean[]> fm) {
2629 long[] a = fa.apply(SPECIES.length());
2630 long[] b = fb.apply(SPECIES.length());
2631 long[] r = fr.apply(SPECIES.length());
2632 boolean[] mask = fm.apply(SPECIES.length());
2633 VectorMask<Long> vmask = VectorMask.fromArray(SPECIES, mask, 0);
2634
2635 for (int ic = 0; ic < INVOC_COUNT; ic++) {
2636 for (int i = 0; i < a.length; i += SPECIES.length()) {
2637 LongVector av = LongVector.fromArray(SPECIES, a, i);
2638 LongVector bv = LongVector.fromArray(SPECIES, b, i);
2639 av.lanewise(VectorOperators.LSHR, bv, vmask).intoArray(r, i);
2640 }
2641 }
2642
2643 assertArraysEquals(r, a, b, mask, LongMaxVectorTests::LSHR);
2644 }
2645
2646 static long LSHL_unary(long a, long b) {
2647 return (long)((a << b));
2648 }
2649
2650 @Test(dataProvider = "longBinaryOpProvider")
2651 static void LSHLLongMaxVectorTestsScalarShift(IntFunction<long[]> fa, IntFunction<long[]> fb) {
2652 long[] a = fa.apply(SPECIES.length());
2653 long[] b = fb.apply(SPECIES.length());
2654 long[] r = fr.apply(SPECIES.length());
2655
2656 for (int ic = 0; ic < INVOC_COUNT; ic++) {
2657 for (int i = 0; i < a.length; i += SPECIES.length()) {
2658 LongVector av = LongVector.fromArray(SPECIES, a, i);
2659 av.lanewise(VectorOperators.LSHL, (int)b[i]).intoArray(r, i);
2660 }
2661 }
2662
2663 assertShiftArraysEquals(r, a, b, LongMaxVectorTests::LSHL_unary);
2664 }
2665
2666 @Test(dataProvider = "longBinaryOpMaskProvider")
2667 static void LSHLLongMaxVectorTestsScalarShiftMasked(IntFunction<long[]> fa, IntFunction<long[]> fb,
2668 IntFunction<boolean[]> fm) {
2669 long[] a = fa.apply(SPECIES.length());
2670 long[] b = fb.apply(SPECIES.length());
2671 long[] r = fr.apply(SPECIES.length());
2672 boolean[] mask = fm.apply(SPECIES.length());
2673 VectorMask<Long> vmask = VectorMask.fromArray(SPECIES, mask, 0);
2674
2675 for (int ic = 0; ic < INVOC_COUNT; ic++) {
2676 for (int i = 0; i < a.length; i += SPECIES.length()) {
2677 LongVector av = LongVector.fromArray(SPECIES, a, i);
2678 av.lanewise(VectorOperators.LSHL, (int)b[i], vmask).intoArray(r, i);
2679 }
2680 }
2681
2682 assertShiftArraysEquals(r, a, b, mask, LongMaxVectorTests::LSHL_unary);
2683 }
2684
2685 static long LSHR_unary(long a, long b) {
2686 return (long)((a >>> b));
2687 }
2688
2689 @Test(dataProvider = "longBinaryOpProvider")
2690 static void LSHRLongMaxVectorTestsScalarShift(IntFunction<long[]> fa, IntFunction<long[]> fb) {
2691 long[] a = fa.apply(SPECIES.length());
2692 long[] b = fb.apply(SPECIES.length());
2693 long[] r = fr.apply(SPECIES.length());
2694
2695 for (int ic = 0; ic < INVOC_COUNT; ic++) {
2696 for (int i = 0; i < a.length; i += SPECIES.length()) {
2697 LongVector av = LongVector.fromArray(SPECIES, a, i);
2698 av.lanewise(VectorOperators.LSHR, (int)b[i]).intoArray(r, i);
2699 }
2700 }
2701
2702 assertShiftArraysEquals(r, a, b, LongMaxVectorTests::LSHR_unary);
2703 }
2704
2705 @Test(dataProvider = "longBinaryOpMaskProvider")
2706 static void LSHRLongMaxVectorTestsScalarShiftMasked(IntFunction<long[]> fa, IntFunction<long[]> fb,
2707 IntFunction<boolean[]> fm) {
2708 long[] a = fa.apply(SPECIES.length());
2709 long[] b = fb.apply(SPECIES.length());
2710 long[] r = fr.apply(SPECIES.length());
2711 boolean[] mask = fm.apply(SPECIES.length());
2712 VectorMask<Long> vmask = VectorMask.fromArray(SPECIES, mask, 0);
2713
2714 for (int ic = 0; ic < INVOC_COUNT; ic++) {
2715 for (int i = 0; i < a.length; i += SPECIES.length()) {
2716 LongVector av = LongVector.fromArray(SPECIES, a, i);
2717 av.lanewise(VectorOperators.LSHR, (int)b[i], vmask).intoArray(r, i);
2718 }
2719 }
2720
2721 assertShiftArraysEquals(r, a, b, mask, LongMaxVectorTests::LSHR_unary);
2722 }
2723
2724 static long ASHR_unary(long a, long b) {
2725 return (long)((a >> b));
2726 }
2727
2728 @Test(dataProvider = "longBinaryOpProvider")
2729 static void ASHRLongMaxVectorTestsScalarShift(IntFunction<long[]> fa, IntFunction<long[]> fb) {
2730 long[] a = fa.apply(SPECIES.length());
2731 long[] b = fb.apply(SPECIES.length());
2732 long[] r = fr.apply(SPECIES.length());
2733
2734 for (int ic = 0; ic < INVOC_COUNT; ic++) {
2735 for (int i = 0; i < a.length; i += SPECIES.length()) {
2736 LongVector av = LongVector.fromArray(SPECIES, a, i);
2737 av.lanewise(VectorOperators.ASHR, (int)b[i]).intoArray(r, i);
2738 }
2739 }
2740
2741 assertShiftArraysEquals(r, a, b, LongMaxVectorTests::ASHR_unary);
2742 }
2743
2744 @Test(dataProvider = "longBinaryOpMaskProvider")
2745 static void ASHRLongMaxVectorTestsScalarShiftMasked(IntFunction<long[]> fa, IntFunction<long[]> fb,
2746 IntFunction<boolean[]> fm) {
2747 long[] a = fa.apply(SPECIES.length());
2748 long[] b = fb.apply(SPECIES.length());
2749 long[] r = fr.apply(SPECIES.length());
2750 boolean[] mask = fm.apply(SPECIES.length());
2751 VectorMask<Long> vmask = VectorMask.fromArray(SPECIES, mask, 0);
2752
2753 for (int ic = 0; ic < INVOC_COUNT; ic++) {
2754 for (int i = 0; i < a.length; i += SPECIES.length()) {
2755 LongVector av = LongVector.fromArray(SPECIES, a, i);
2756 av.lanewise(VectorOperators.ASHR, (int)b[i], vmask).intoArray(r, i);
2757 }
2758 }
2759
2760 assertShiftArraysEquals(r, a, b, mask, LongMaxVectorTests::ASHR_unary);
2761 }
2762
2763 static long ROR(long a, long b) {
2764 return (long)(ROR_scalar(a,b));
2765 }
2766
2767 @Test(dataProvider = "longBinaryOpProvider")
2768 static void RORLongMaxVectorTests(IntFunction<long[]> fa, IntFunction<long[]> fb) {
2769 long[] a = fa.apply(SPECIES.length());
2770 long[] b = fb.apply(SPECIES.length());
2771 long[] r = fr.apply(SPECIES.length());
2772
2773 for (int ic = 0; ic < INVOC_COUNT; ic++) {
2774 for (int i = 0; i < a.length; i += SPECIES.length()) {
2775 LongVector av = LongVector.fromArray(SPECIES, a, i);
2776 LongVector bv = LongVector.fromArray(SPECIES, b, i);
2777 av.lanewise(VectorOperators.ROR, bv).intoArray(r, i);
2778 }
2779 }
2780
2781 assertArraysEquals(r, a, b, LongMaxVectorTests::ROR);
2782 }
2783
2784 @Test(dataProvider = "longBinaryOpMaskProvider")
2785 static void RORLongMaxVectorTestsMasked(IntFunction<long[]> fa, IntFunction<long[]> fb,
2786 IntFunction<boolean[]> fm) {
2787 long[] a = fa.apply(SPECIES.length());
2788 long[] b = fb.apply(SPECIES.length());
2789 long[] r = fr.apply(SPECIES.length());
2790 boolean[] mask = fm.apply(SPECIES.length());
2791 VectorMask<Long> vmask = VectorMask.fromArray(SPECIES, mask, 0);
2792
2793 for (int ic = 0; ic < INVOC_COUNT; ic++) {
2794 for (int i = 0; i < a.length; i += SPECIES.length()) {
2795 LongVector av = LongVector.fromArray(SPECIES, a, i);
2796 LongVector bv = LongVector.fromArray(SPECIES, b, i);
2797 av.lanewise(VectorOperators.ROR, bv, vmask).intoArray(r, i);
2798 }
2799 }
2800
2801 assertArraysEquals(r, a, b, mask, LongMaxVectorTests::ROR);
2802 }
2803
2804 static long ROL(long a, long b) {
2805 return (long)(ROL_scalar(a,b));
2806 }
2807
2808 @Test(dataProvider = "longBinaryOpProvider")
2809 static void ROLLongMaxVectorTests(IntFunction<long[]> fa, IntFunction<long[]> fb) {
2810 long[] a = fa.apply(SPECIES.length());
2811 long[] b = fb.apply(SPECIES.length());
2812 long[] r = fr.apply(SPECIES.length());
2813
2814 for (int ic = 0; ic < INVOC_COUNT; ic++) {
2815 for (int i = 0; i < a.length; i += SPECIES.length()) {
2816 LongVector av = LongVector.fromArray(SPECIES, a, i);
2817 LongVector bv = LongVector.fromArray(SPECIES, b, i);
2818 av.lanewise(VectorOperators.ROL, bv).intoArray(r, i);
2819 }
2820 }
2821
2822 assertArraysEquals(r, a, b, LongMaxVectorTests::ROL);
2823 }
2824
2825 @Test(dataProvider = "longBinaryOpMaskProvider")
2826 static void ROLLongMaxVectorTestsMasked(IntFunction<long[]> fa, IntFunction<long[]> fb,
2827 IntFunction<boolean[]> fm) {
2828 long[] a = fa.apply(SPECIES.length());
2829 long[] b = fb.apply(SPECIES.length());
2830 long[] r = fr.apply(SPECIES.length());
2831 boolean[] mask = fm.apply(SPECIES.length());
2832 VectorMask<Long> vmask = VectorMask.fromArray(SPECIES, mask, 0);
2833
2834 for (int ic = 0; ic < INVOC_COUNT; ic++) {
2835 for (int i = 0; i < a.length; i += SPECIES.length()) {
2836 LongVector av = LongVector.fromArray(SPECIES, a, i);
2837 LongVector bv = LongVector.fromArray(SPECIES, b, i);
2838 av.lanewise(VectorOperators.ROL, bv, vmask).intoArray(r, i);
2839 }
2840 }
2841
2842 assertArraysEquals(r, a, b, mask, LongMaxVectorTests::ROL);
2843 }
2844
2845 static long ROR_unary(long a, long b) {
2846 return (long)(ROR_scalar(a, b));
2847 }
2848
2849 @Test(dataProvider = "longBinaryOpProvider")
2850 static void RORLongMaxVectorTestsScalarShift(IntFunction<long[]> fa, IntFunction<long[]> fb) {
2851 long[] a = fa.apply(SPECIES.length());
2852 long[] b = fb.apply(SPECIES.length());
2853 long[] r = fr.apply(SPECIES.length());
2854
2855 for (int ic = 0; ic < INVOC_COUNT; ic++) {
2856 for (int i = 0; i < a.length; i += SPECIES.length()) {
2857 LongVector av = LongVector.fromArray(SPECIES, a, i);
2858 av.lanewise(VectorOperators.ROR, (int)b[i]).intoArray(r, i);
2859 }
2860 }
2861
2862 assertShiftArraysEquals(r, a, b, LongMaxVectorTests::ROR_unary);
2863 }
2864
2865 @Test(dataProvider = "longBinaryOpMaskProvider")
2866 static void RORLongMaxVectorTestsScalarShiftMasked(IntFunction<long[]> fa, IntFunction<long[]> fb,
2867 IntFunction<boolean[]> fm) {
2868 long[] a = fa.apply(SPECIES.length());
2869 long[] b = fb.apply(SPECIES.length());
2870 long[] r = fr.apply(SPECIES.length());
2871 boolean[] mask = fm.apply(SPECIES.length());
2872 VectorMask<Long> vmask = VectorMask.fromArray(SPECIES, mask, 0);
2873
2874 for (int ic = 0; ic < INVOC_COUNT; ic++) {
2875 for (int i = 0; i < a.length; i += SPECIES.length()) {
2876 LongVector av = LongVector.fromArray(SPECIES, a, i);
2877 av.lanewise(VectorOperators.ROR, (int)b[i], vmask).intoArray(r, i);
2878 }
2879 }
2880
2881 assertShiftArraysEquals(r, a, b, mask, LongMaxVectorTests::ROR_unary);
2882 }
2883
2884 static long ROL_unary(long a, long b) {
2885 return (long)(ROL_scalar(a, b));
2886 }
2887
2888 @Test(dataProvider = "longBinaryOpProvider")
2889 static void ROLLongMaxVectorTestsScalarShift(IntFunction<long[]> fa, IntFunction<long[]> fb) {
2890 long[] a = fa.apply(SPECIES.length());
2891 long[] b = fb.apply(SPECIES.length());
2892 long[] r = fr.apply(SPECIES.length());
2893
2894 for (int ic = 0; ic < INVOC_COUNT; ic++) {
2895 for (int i = 0; i < a.length; i += SPECIES.length()) {
2896 LongVector av = LongVector.fromArray(SPECIES, a, i);
2897 av.lanewise(VectorOperators.ROL, (int)b[i]).intoArray(r, i);
2898 }
2899 }
2900
2901 assertShiftArraysEquals(r, a, b, LongMaxVectorTests::ROL_unary);
2902 }
2903
2904 @Test(dataProvider = "longBinaryOpMaskProvider")
2905 static void ROLLongMaxVectorTestsScalarShiftMasked(IntFunction<long[]> fa, IntFunction<long[]> fb,
2906 IntFunction<boolean[]> fm) {
2907 long[] a = fa.apply(SPECIES.length());
2908 long[] b = fb.apply(SPECIES.length());
2909 long[] r = fr.apply(SPECIES.length());
2910 boolean[] mask = fm.apply(SPECIES.length());
2911 VectorMask<Long> vmask = VectorMask.fromArray(SPECIES, mask, 0);
2912
2913 for (int ic = 0; ic < INVOC_COUNT; ic++) {
2914 for (int i = 0; i < a.length; i += SPECIES.length()) {
2915 LongVector av = LongVector.fromArray(SPECIES, a, i);
2916 av.lanewise(VectorOperators.ROL, (int)b[i], vmask).intoArray(r, i);
2917 }
2918 }
2919
2920 assertShiftArraysEquals(r, a, b, mask, LongMaxVectorTests::ROL_unary);
2921 }
2922 static long LSHR_binary_const(long a) {
2923 return (long)((a >>> CONST_SHIFT));
2924 }
2925
2926 @Test(dataProvider = "longUnaryOpProvider")
2927 static void LSHRLongMaxVectorTestsScalarShiftConst(IntFunction<long[]> fa) {
2928 long[] a = fa.apply(SPECIES.length());
2929 long[] r = fr.apply(SPECIES.length());
2930
2931 for (int ic = 0; ic < INVOC_COUNT; ic++) {
2932 for (int i = 0; i < a.length; i += SPECIES.length()) {
2933 LongVector av = LongVector.fromArray(SPECIES, a, i);
2934 av.lanewise(VectorOperators.LSHR, CONST_SHIFT).intoArray(r, i);
2935 }
2936 }
2937
2938 assertShiftConstEquals(r, a, LongMaxVectorTests::LSHR_binary_const);
2939 }
2940
2941 @Test(dataProvider = "longUnaryOpMaskProvider")
2942 static void LSHRLongMaxVectorTestsScalarShiftMaskedConst(IntFunction<long[]> fa,
2943 IntFunction<boolean[]> fm) {
2944 long[] a = fa.apply(SPECIES.length());
2945 long[] r = fr.apply(SPECIES.length());
2946 boolean[] mask = fm.apply(SPECIES.length());
2947 VectorMask<Long> vmask = VectorMask.fromArray(SPECIES, mask, 0);
2948
2949 for (int ic = 0; ic < INVOC_COUNT; ic++) {
2950 for (int i = 0; i < a.length; i += SPECIES.length()) {
2951 LongVector av = LongVector.fromArray(SPECIES, a, i);
2952 av.lanewise(VectorOperators.LSHR, CONST_SHIFT, vmask).intoArray(r, i);
2953 }
2954 }
2955
2956 assertShiftConstEquals(r, a, mask, LongMaxVectorTests::LSHR_binary_const);
2957 }
2958
2959 static long LSHL_binary_const(long a) {
2960 return (long)((a << CONST_SHIFT));
2961 }
2962
2963 @Test(dataProvider = "longUnaryOpProvider")
2964 static void LSHLLongMaxVectorTestsScalarShiftConst(IntFunction<long[]> fa) {
2965 long[] a = fa.apply(SPECIES.length());
2966 long[] r = fr.apply(SPECIES.length());
2967
2968 for (int ic = 0; ic < INVOC_COUNT; ic++) {
2969 for (int i = 0; i < a.length; i += SPECIES.length()) {
2970 LongVector av = LongVector.fromArray(SPECIES, a, i);
2971 av.lanewise(VectorOperators.LSHL, CONST_SHIFT).intoArray(r, i);
2972 }
2973 }
2974
2975 assertShiftConstEquals(r, a, LongMaxVectorTests::LSHL_binary_const);
2976 }
2977
2978 @Test(dataProvider = "longUnaryOpMaskProvider")
2979 static void LSHLLongMaxVectorTestsScalarShiftMaskedConst(IntFunction<long[]> fa,
2980 IntFunction<boolean[]> fm) {
2981 long[] a = fa.apply(SPECIES.length());
2982 long[] r = fr.apply(SPECIES.length());
2983 boolean[] mask = fm.apply(SPECIES.length());
2984 VectorMask<Long> vmask = VectorMask.fromArray(SPECIES, mask, 0);
2985
2986 for (int ic = 0; ic < INVOC_COUNT; ic++) {
2987 for (int i = 0; i < a.length; i += SPECIES.length()) {
2988 LongVector av = LongVector.fromArray(SPECIES, a, i);
2989 av.lanewise(VectorOperators.LSHL, CONST_SHIFT, vmask).intoArray(r, i);
2990 }
2991 }
2992
2993 assertShiftConstEquals(r, a, mask, LongMaxVectorTests::LSHL_binary_const);
2994 }
2995
2996 static long ASHR_binary_const(long a) {
2997 return (long)((a >> CONST_SHIFT));
2998 }
2999
3000 @Test(dataProvider = "longUnaryOpProvider")
3001 static void ASHRLongMaxVectorTestsScalarShiftConst(IntFunction<long[]> fa) {
3002 long[] a = fa.apply(SPECIES.length());
3003 long[] r = fr.apply(SPECIES.length());
3004
3005 for (int ic = 0; ic < INVOC_COUNT; ic++) {
3006 for (int i = 0; i < a.length; i += SPECIES.length()) {
3007 LongVector av = LongVector.fromArray(SPECIES, a, i);
3008 av.lanewise(VectorOperators.ASHR, CONST_SHIFT).intoArray(r, i);
3009 }
3010 }
3011
3012 assertShiftConstEquals(r, a, LongMaxVectorTests::ASHR_binary_const);
3013 }
3014
3015 @Test(dataProvider = "longUnaryOpMaskProvider")
3016 static void ASHRLongMaxVectorTestsScalarShiftMaskedConst(IntFunction<long[]> fa,
3017 IntFunction<boolean[]> fm) {
3018 long[] a = fa.apply(SPECIES.length());
3019 long[] r = fr.apply(SPECIES.length());
3020 boolean[] mask = fm.apply(SPECIES.length());
3021 VectorMask<Long> vmask = VectorMask.fromArray(SPECIES, mask, 0);
3022
3023 for (int ic = 0; ic < INVOC_COUNT; ic++) {
3024 for (int i = 0; i < a.length; i += SPECIES.length()) {
3025 LongVector av = LongVector.fromArray(SPECIES, a, i);
3026 av.lanewise(VectorOperators.ASHR, CONST_SHIFT, vmask).intoArray(r, i);
3027 }
3028 }
3029
3030 assertShiftConstEquals(r, a, mask, LongMaxVectorTests::ASHR_binary_const);
3031 }
3032
3033 static long ROR_binary_const(long a) {
3034 return (long)(ROR_scalar(a, CONST_SHIFT));
3035 }
3036
3037 @Test(dataProvider = "longUnaryOpProvider")
3038 static void RORLongMaxVectorTestsScalarShiftConst(IntFunction<long[]> fa) {
3039 long[] a = fa.apply(SPECIES.length());
3040 long[] r = fr.apply(SPECIES.length());
3041
3042 for (int ic = 0; ic < INVOC_COUNT; ic++) {
3043 for (int i = 0; i < a.length; i += SPECIES.length()) {
3044 LongVector av = LongVector.fromArray(SPECIES, a, i);
3045 av.lanewise(VectorOperators.ROR, CONST_SHIFT).intoArray(r, i);
3046 }
3047 }
3048
3049 assertShiftConstEquals(r, a, LongMaxVectorTests::ROR_binary_const);
3050 }
3051
3052 @Test(dataProvider = "longUnaryOpMaskProvider")
3053 static void RORLongMaxVectorTestsScalarShiftMaskedConst(IntFunction<long[]> fa,
3054 IntFunction<boolean[]> fm) {
3055 long[] a = fa.apply(SPECIES.length());
3056 long[] r = fr.apply(SPECIES.length());
3057 boolean[] mask = fm.apply(SPECIES.length());
3058 VectorMask<Long> vmask = VectorMask.fromArray(SPECIES, mask, 0);
3059
3060 for (int ic = 0; ic < INVOC_COUNT; ic++) {
3061 for (int i = 0; i < a.length; i += SPECIES.length()) {
3062 LongVector av = LongVector.fromArray(SPECIES, a, i);
3063 av.lanewise(VectorOperators.ROR, CONST_SHIFT, vmask).intoArray(r, i);
3064 }
3065 }
3066
3067 assertShiftConstEquals(r, a, mask, LongMaxVectorTests::ROR_binary_const);
3068 }
3069
3070 static long ROL_binary_const(long a) {
3071 return (long)(ROL_scalar(a, CONST_SHIFT));
3072 }
3073
3074 @Test(dataProvider = "longUnaryOpProvider")
3075 static void ROLLongMaxVectorTestsScalarShiftConst(IntFunction<long[]> fa) {
3076 long[] a = fa.apply(SPECIES.length());
3077 long[] r = fr.apply(SPECIES.length());
3078
3079 for (int ic = 0; ic < INVOC_COUNT; ic++) {
3080 for (int i = 0; i < a.length; i += SPECIES.length()) {
3081 LongVector av = LongVector.fromArray(SPECIES, a, i);
3082 av.lanewise(VectorOperators.ROL, CONST_SHIFT).intoArray(r, i);
3083 }
3084 }
3085
3086 assertShiftConstEquals(r, a, LongMaxVectorTests::ROL_binary_const);
3087 }
3088
3089 @Test(dataProvider = "longUnaryOpMaskProvider")
3090 static void ROLLongMaxVectorTestsScalarShiftMaskedConst(IntFunction<long[]> fa,
3091 IntFunction<boolean[]> fm) {
3092 long[] a = fa.apply(SPECIES.length());
3093 long[] r = fr.apply(SPECIES.length());
3094 boolean[] mask = fm.apply(SPECIES.length());
3095 VectorMask<Long> vmask = VectorMask.fromArray(SPECIES, mask, 0);
3096
3097 for (int ic = 0; ic < INVOC_COUNT; ic++) {
3098 for (int i = 0; i < a.length; i += SPECIES.length()) {
3099 LongVector av = LongVector.fromArray(SPECIES, a, i);
3100 av.lanewise(VectorOperators.ROL, CONST_SHIFT, vmask).intoArray(r, i);
3101 }
3102 }
3103
3104 assertShiftConstEquals(r, a, mask, LongMaxVectorTests::ROL_binary_const);
3105 }
3106
3107
3108 @Test(dataProvider = "longUnaryOpProvider")
3109 static void MINLongMaxVectorTestsWithMemOp(IntFunction<long[]> fa) {
3110 long[] a = fa.apply(SPECIES.length());
3111 long[] r = fr.apply(SPECIES.length());
3112
3113 for (int ic = 0; ic < INVOC_COUNT; ic++) {
3114 for (int i = 0; i < a.length; i += SPECIES.length()) {
3115 LongVector av = LongVector.fromArray(SPECIES, a, i);
3116 av.lanewise(VectorOperators.MIN, bcast_vec).intoArray(r, i);
3117 }
3118 }
3119
3120 assertArraysEquals(r, a, (long)10, LongMaxVectorTests::MIN);
3121 }
3122
3123 @Test(dataProvider = "longUnaryOpProvider")
3124 static void minLongMaxVectorTestsWithMemOp(IntFunction<long[]> fa) {
3125 long[] a = fa.apply(SPECIES.length());
3126 long[] r = fr.apply(SPECIES.length());
3127
3128 for (int ic = 0; ic < INVOC_COUNT; ic++) {
3129 for (int i = 0; i < a.length; i += SPECIES.length()) {
3130 LongVector av = LongVector.fromArray(SPECIES, a, i);
3131 av.min(bcast_vec).intoArray(r, i);
3132 }
3133 }
3134
3135 assertArraysEquals(r, a, (long)10, LongMaxVectorTests::min);
3136 }
3137
3138 @Test(dataProvider = "longUnaryOpMaskProvider")
3139 static void MINLongMaxVectorTestsMaskedWithMemOp(IntFunction<long[]> fa, IntFunction<boolean[]> fm) {
3140 long[] a = fa.apply(SPECIES.length());
3141 long[] r = fr.apply(SPECIES.length());
3142 boolean[] mask = fm.apply(SPECIES.length());
3143 VectorMask<Long> vmask = VectorMask.fromArray(SPECIES, mask, 0);
3144
3145 for (int ic = 0; ic < INVOC_COUNT; ic++) {
3146 for (int i = 0; i < a.length; i += SPECIES.length()) {
3147 LongVector av = LongVector.fromArray(SPECIES, a, i);
3148 av.lanewise(VectorOperators.MIN, bcast_vec, vmask).intoArray(r, i);
3149 }
3150 }
3151
3152 assertArraysEquals(r, a, (long)10, mask, LongMaxVectorTests::MIN);
3153 }
3154
3155 @Test(dataProvider = "longUnaryOpProvider")
3156 static void MAXLongMaxVectorTestsWithMemOp(IntFunction<long[]> fa) {
3157 long[] a = fa.apply(SPECIES.length());
3158 long[] r = fr.apply(SPECIES.length());
3159
3160 for (int ic = 0; ic < INVOC_COUNT; ic++) {
3161 for (int i = 0; i < a.length; i += SPECIES.length()) {
3162 LongVector av = LongVector.fromArray(SPECIES, a, i);
3163 av.lanewise(VectorOperators.MAX, bcast_vec).intoArray(r, i);
3164 }
3165 }
3166
3167 assertArraysEquals(r, a, (long)10, LongMaxVectorTests::MAX);
3168 }
3169
3170 @Test(dataProvider = "longUnaryOpProvider")
3171 static void maxLongMaxVectorTestsWithMemOp(IntFunction<long[]> fa) {
3172 long[] a = fa.apply(SPECIES.length());
3173 long[] r = fr.apply(SPECIES.length());
3174
3175 for (int ic = 0; ic < INVOC_COUNT; ic++) {
3176 for (int i = 0; i < a.length; i += SPECIES.length()) {
3177 LongVector av = LongVector.fromArray(SPECIES, a, i);
3178 av.max(bcast_vec).intoArray(r, i);
3179 }
3180 }
3181
3182 assertArraysEquals(r, a, (long)10, LongMaxVectorTests::max);
3183 }
3184
3185 @Test(dataProvider = "longUnaryOpMaskProvider")
3186 static void MAXLongMaxVectorTestsMaskedWithMemOp(IntFunction<long[]> fa, IntFunction<boolean[]> fm) {
3187 long[] a = fa.apply(SPECIES.length());
3188 long[] r = fr.apply(SPECIES.length());
3189 boolean[] mask = fm.apply(SPECIES.length());
3190 VectorMask<Long> vmask = VectorMask.fromArray(SPECIES, mask, 0);
3191
3192 for (int ic = 0; ic < INVOC_COUNT; ic++) {
3193 for (int i = 0; i < a.length; i += SPECIES.length()) {
3194 LongVector av = LongVector.fromArray(SPECIES, a, i);
3195 av.lanewise(VectorOperators.MAX, bcast_vec, vmask).intoArray(r, i);
3196 }
3197 }
3198
3199 assertArraysEquals(r, a, (long)10, mask, LongMaxVectorTests::MAX);
3200 }
3201
3202 static long MIN(long a, long b) {
3203 return (long)(Math.min(a, b));
3204 }
3205
3206 @Test(dataProvider = "longBinaryOpProvider")
3207 static void MINLongMaxVectorTests(IntFunction<long[]> fa, IntFunction<long[]> fb) {
3208 long[] a = fa.apply(SPECIES.length());
3209 long[] b = fb.apply(SPECIES.length());
3210 long[] r = fr.apply(SPECIES.length());
3211
3212 for (int ic = 0; ic < INVOC_COUNT; ic++) {
3213 for (int i = 0; i < a.length; i += SPECIES.length()) {
3214 LongVector av = LongVector.fromArray(SPECIES, a, i);
3215 LongVector bv = LongVector.fromArray(SPECIES, b, i);
3216 av.lanewise(VectorOperators.MIN, bv).intoArray(r, i);
3217 }
3218 }
3219
3220 assertArraysEquals(r, a, b, LongMaxVectorTests::MIN);
3221 }
3222
3223 static long min(long a, long b) {
3224 return (long)(Math.min(a, b));
3225 }
3226
3227 @Test(dataProvider = "longBinaryOpProvider")
3228 static void minLongMaxVectorTests(IntFunction<long[]> fa, IntFunction<long[]> fb) {
3229 long[] a = fa.apply(SPECIES.length());
3230 long[] b = fb.apply(SPECIES.length());
3231 long[] r = fr.apply(SPECIES.length());
3232
3233 for (int i = 0; i < a.length; i += SPECIES.length()) {
3234 LongVector av = LongVector.fromArray(SPECIES, a, i);
3235 LongVector bv = LongVector.fromArray(SPECIES, b, i);
3236 av.min(bv).intoArray(r, i);
3237 }
3238
3239 assertArraysEquals(r, a, b, LongMaxVectorTests::min);
3240 }
3241
3242 static long MAX(long a, long b) {
3243 return (long)(Math.max(a, b));
3244 }
3245
3246 @Test(dataProvider = "longBinaryOpProvider")
3247 static void MAXLongMaxVectorTests(IntFunction<long[]> fa, IntFunction<long[]> fb) {
3248 long[] a = fa.apply(SPECIES.length());
3249 long[] b = fb.apply(SPECIES.length());
3250 long[] r = fr.apply(SPECIES.length());
3251
3252 for (int ic = 0; ic < INVOC_COUNT; ic++) {
3253 for (int i = 0; i < a.length; i += SPECIES.length()) {
3254 LongVector av = LongVector.fromArray(SPECIES, a, i);
3255 LongVector bv = LongVector.fromArray(SPECIES, b, i);
3256 av.lanewise(VectorOperators.MAX, bv).intoArray(r, i);
3257 }
3258 }
3259
3260 assertArraysEquals(r, a, b, LongMaxVectorTests::MAX);
3261 }
3262
3263 static long max(long a, long b) {
3264 return (long)(Math.max(a, b));
3265 }
3266
3267 @Test(dataProvider = "longBinaryOpProvider")
3268 static void maxLongMaxVectorTests(IntFunction<long[]> fa, IntFunction<long[]> fb) {
3269 long[] a = fa.apply(SPECIES.length());
3270 long[] b = fb.apply(SPECIES.length());
3271 long[] r = fr.apply(SPECIES.length());
3272
3273 for (int i = 0; i < a.length; i += SPECIES.length()) {
3274 LongVector av = LongVector.fromArray(SPECIES, a, i);
3275 LongVector bv = LongVector.fromArray(SPECIES, b, i);
3276 av.max(bv).intoArray(r, i);
3277 }
3278
3279 assertArraysEquals(r, a, b, LongMaxVectorTests::max);
3280 }
3281
3282 static long UMIN(long a, long b) {
3283 return (long)(VectorMath.minUnsigned(a, b));
3284 }
3285
3286 @Test(dataProvider = "longBinaryOpProvider")
3287 static void UMINLongMaxVectorTests(IntFunction<long[]> fa, IntFunction<long[]> fb) {
3288 long[] a = fa.apply(SPECIES.length());
3289 long[] b = fb.apply(SPECIES.length());
3290 long[] r = fr.apply(SPECIES.length());
3291
3292 for (int ic = 0; ic < INVOC_COUNT; ic++) {
3293 for (int i = 0; i < a.length; i += SPECIES.length()) {
3294 LongVector av = LongVector.fromArray(SPECIES, a, i);
3295 LongVector bv = LongVector.fromArray(SPECIES, b, i);
3296 av.lanewise(VectorOperators.UMIN, bv).intoArray(r, i);
3297 }
3298 }
3299
3300 assertArraysEquals(r, a, b, LongMaxVectorTests::UMIN);
3301 }
3302
3303 @Test(dataProvider = "longBinaryOpMaskProvider")
3304 static void UMINLongMaxVectorTestsMasked(IntFunction<long[]> fa, IntFunction<long[]> fb,
3305 IntFunction<boolean[]> fm) {
3306 long[] a = fa.apply(SPECIES.length());
3307 long[] b = fb.apply(SPECIES.length());
3308 long[] r = fr.apply(SPECIES.length());
3309 boolean[] mask = fm.apply(SPECIES.length());
3310 VectorMask<Long> vmask = VectorMask.fromArray(SPECIES, mask, 0);
3311
3312 for (int ic = 0; ic < INVOC_COUNT; ic++) {
3313 for (int i = 0; i < a.length; i += SPECIES.length()) {
3314 LongVector av = LongVector.fromArray(SPECIES, a, i);
3315 LongVector bv = LongVector.fromArray(SPECIES, b, i);
3316 av.lanewise(VectorOperators.UMIN, bv, vmask).intoArray(r, i);
3317 }
3318 }
3319
3320 assertArraysEquals(r, a, b, mask, LongMaxVectorTests::UMIN);
3321 }
3322
3323 static long UMAX(long a, long b) {
3324 return (long)(VectorMath.maxUnsigned(a, b));
3325 }
3326
3327 @Test(dataProvider = "longBinaryOpProvider")
3328 static void UMAXLongMaxVectorTests(IntFunction<long[]> fa, IntFunction<long[]> fb) {
3329 long[] a = fa.apply(SPECIES.length());
3330 long[] b = fb.apply(SPECIES.length());
3331 long[] r = fr.apply(SPECIES.length());
3332
3333 for (int ic = 0; ic < INVOC_COUNT; ic++) {
3334 for (int i = 0; i < a.length; i += SPECIES.length()) {
3335 LongVector av = LongVector.fromArray(SPECIES, a, i);
3336 LongVector bv = LongVector.fromArray(SPECIES, b, i);
3337 av.lanewise(VectorOperators.UMAX, bv).intoArray(r, i);
3338 }
3339 }
3340
3341 assertArraysEquals(r, a, b, LongMaxVectorTests::UMAX);
3342 }
3343
3344 @Test(dataProvider = "longBinaryOpMaskProvider")
3345 static void UMAXLongMaxVectorTestsMasked(IntFunction<long[]> fa, IntFunction<long[]> fb,
3346 IntFunction<boolean[]> fm) {
3347 long[] a = fa.apply(SPECIES.length());
3348 long[] b = fb.apply(SPECIES.length());
3349 long[] r = fr.apply(SPECIES.length());
3350 boolean[] mask = fm.apply(SPECIES.length());
3351 VectorMask<Long> vmask = VectorMask.fromArray(SPECIES, mask, 0);
3352
3353 for (int ic = 0; ic < INVOC_COUNT; ic++) {
3354 for (int i = 0; i < a.length; i += SPECIES.length()) {
3355 LongVector av = LongVector.fromArray(SPECIES, a, i);
3356 LongVector bv = LongVector.fromArray(SPECIES, b, i);
3357 av.lanewise(VectorOperators.UMAX, bv, vmask).intoArray(r, i);
3358 }
3359 }
3360
3361 assertArraysEquals(r, a, b, mask, LongMaxVectorTests::UMAX);
3362 }
3363
3364 static long SADD(long a, long b) {
3365 return (long)(VectorMath.addSaturating(a, b));
3366 }
3367
3368 @Test(dataProvider = "longSaturatingBinaryOpProvider")
3369 static void SADDLongMaxVectorTests(IntFunction<long[]> fa, IntFunction<long[]> fb) {
3370 long[] a = fa.apply(SPECIES.length());
3371 long[] b = fb.apply(SPECIES.length());
3372 long[] r = fr.apply(SPECIES.length());
3373
3374 for (int ic = 0; ic < INVOC_COUNT; ic++) {
3375 for (int i = 0; i < a.length; i += SPECIES.length()) {
3376 LongVector av = LongVector.fromArray(SPECIES, a, i);
3377 LongVector bv = LongVector.fromArray(SPECIES, b, i);
3378 av.lanewise(VectorOperators.SADD, bv).intoArray(r, i);
3379 }
3380 }
3381
3382 assertArraysEquals(r, a, b, LongMaxVectorTests::SADD);
3383 }
3384
3385 @Test(dataProvider = "longSaturatingBinaryOpMaskProvider")
3386 static void SADDLongMaxVectorTestsMasked(IntFunction<long[]> fa, IntFunction<long[]> fb,
3387 IntFunction<boolean[]> fm) {
3388 long[] a = fa.apply(SPECIES.length());
3389 long[] b = fb.apply(SPECIES.length());
3390 long[] r = fr.apply(SPECIES.length());
3391 boolean[] mask = fm.apply(SPECIES.length());
3392 VectorMask<Long> vmask = VectorMask.fromArray(SPECIES, mask, 0);
3393
3394 for (int ic = 0; ic < INVOC_COUNT; ic++) {
3395 for (int i = 0; i < a.length; i += SPECIES.length()) {
3396 LongVector av = LongVector.fromArray(SPECIES, a, i);
3397 LongVector bv = LongVector.fromArray(SPECIES, b, i);
3398 av.lanewise(VectorOperators.SADD, bv, vmask).intoArray(r, i);
3399 }
3400 }
3401
3402 assertArraysEquals(r, a, b, mask, LongMaxVectorTests::SADD);
3403 }
3404
3405 static long SSUB(long a, long b) {
3406 return (long)(VectorMath.subSaturating(a, b));
3407 }
3408
3409 @Test(dataProvider = "longSaturatingBinaryOpProvider")
3410 static void SSUBLongMaxVectorTests(IntFunction<long[]> fa, IntFunction<long[]> fb) {
3411 long[] a = fa.apply(SPECIES.length());
3412 long[] b = fb.apply(SPECIES.length());
3413 long[] r = fr.apply(SPECIES.length());
3414
3415 for (int ic = 0; ic < INVOC_COUNT; ic++) {
3416 for (int i = 0; i < a.length; i += SPECIES.length()) {
3417 LongVector av = LongVector.fromArray(SPECIES, a, i);
3418 LongVector bv = LongVector.fromArray(SPECIES, b, i);
3419 av.lanewise(VectorOperators.SSUB, bv).intoArray(r, i);
3420 }
3421 }
3422
3423 assertArraysEquals(r, a, b, LongMaxVectorTests::SSUB);
3424 }
3425
3426 @Test(dataProvider = "longSaturatingBinaryOpMaskProvider")
3427 static void SSUBLongMaxVectorTestsMasked(IntFunction<long[]> fa, IntFunction<long[]> fb,
3428 IntFunction<boolean[]> fm) {
3429 long[] a = fa.apply(SPECIES.length());
3430 long[] b = fb.apply(SPECIES.length());
3431 long[] r = fr.apply(SPECIES.length());
3432 boolean[] mask = fm.apply(SPECIES.length());
3433 VectorMask<Long> vmask = VectorMask.fromArray(SPECIES, mask, 0);
3434
3435 for (int ic = 0; ic < INVOC_COUNT; ic++) {
3436 for (int i = 0; i < a.length; i += SPECIES.length()) {
3437 LongVector av = LongVector.fromArray(SPECIES, a, i);
3438 LongVector bv = LongVector.fromArray(SPECIES, b, i);
3439 av.lanewise(VectorOperators.SSUB, bv, vmask).intoArray(r, i);
3440 }
3441 }
3442
3443 assertArraysEquals(r, a, b, mask, LongMaxVectorTests::SSUB);
3444 }
3445
3446 static long SUADD(long a, long b) {
3447 return (long)(VectorMath.addSaturatingUnsigned(a, b));
3448 }
3449
3450 @Test(dataProvider = "longSaturatingBinaryOpProvider")
3451 static void SUADDLongMaxVectorTests(IntFunction<long[]> fa, IntFunction<long[]> fb) {
3452 long[] a = fa.apply(SPECIES.length());
3453 long[] b = fb.apply(SPECIES.length());
3454 long[] r = fr.apply(SPECIES.length());
3455
3456 for (int ic = 0; ic < INVOC_COUNT; ic++) {
3457 for (int i = 0; i < a.length; i += SPECIES.length()) {
3458 LongVector av = LongVector.fromArray(SPECIES, a, i);
3459 LongVector bv = LongVector.fromArray(SPECIES, b, i);
3460 av.lanewise(VectorOperators.SUADD, bv).intoArray(r, i);
3461 }
3462 }
3463
3464 assertArraysEquals(r, a, b, LongMaxVectorTests::SUADD);
3465 }
3466
3467 @Test(dataProvider = "longSaturatingBinaryOpMaskProvider")
3468 static void SUADDLongMaxVectorTestsMasked(IntFunction<long[]> fa, IntFunction<long[]> fb,
3469 IntFunction<boolean[]> fm) {
3470 long[] a = fa.apply(SPECIES.length());
3471 long[] b = fb.apply(SPECIES.length());
3472 long[] r = fr.apply(SPECIES.length());
3473 boolean[] mask = fm.apply(SPECIES.length());
3474 VectorMask<Long> vmask = VectorMask.fromArray(SPECIES, mask, 0);
3475
3476 for (int ic = 0; ic < INVOC_COUNT; ic++) {
3477 for (int i = 0; i < a.length; i += SPECIES.length()) {
3478 LongVector av = LongVector.fromArray(SPECIES, a, i);
3479 LongVector bv = LongVector.fromArray(SPECIES, b, i);
3480 av.lanewise(VectorOperators.SUADD, bv, vmask).intoArray(r, i);
3481 }
3482 }
3483
3484 assertArraysEquals(r, a, b, mask, LongMaxVectorTests::SUADD);
3485 }
3486
3487 static long SUSUB(long a, long b) {
3488 return (long)(VectorMath.subSaturatingUnsigned(a, b));
3489 }
3490
3491 @Test(dataProvider = "longSaturatingBinaryOpProvider")
3492 static void SUSUBLongMaxVectorTests(IntFunction<long[]> fa, IntFunction<long[]> fb) {
3493 long[] a = fa.apply(SPECIES.length());
3494 long[] b = fb.apply(SPECIES.length());
3495 long[] r = fr.apply(SPECIES.length());
3496
3497 for (int ic = 0; ic < INVOC_COUNT; ic++) {
3498 for (int i = 0; i < a.length; i += SPECIES.length()) {
3499 LongVector av = LongVector.fromArray(SPECIES, a, i);
3500 LongVector bv = LongVector.fromArray(SPECIES, b, i);
3501 av.lanewise(VectorOperators.SUSUB, bv).intoArray(r, i);
3502 }
3503 }
3504
3505 assertArraysEquals(r, a, b, LongMaxVectorTests::SUSUB);
3506 }
3507
3508 @Test(dataProvider = "longSaturatingBinaryOpMaskProvider")
3509 static void SUSUBLongMaxVectorTestsMasked(IntFunction<long[]> fa, IntFunction<long[]> fb,
3510 IntFunction<boolean[]> fm) {
3511 long[] a = fa.apply(SPECIES.length());
3512 long[] b = fb.apply(SPECIES.length());
3513 long[] r = fr.apply(SPECIES.length());
3514 boolean[] mask = fm.apply(SPECIES.length());
3515 VectorMask<Long> vmask = VectorMask.fromArray(SPECIES, mask, 0);
3516
3517 for (int ic = 0; ic < INVOC_COUNT; ic++) {
3518 for (int i = 0; i < a.length; i += SPECIES.length()) {
3519 LongVector av = LongVector.fromArray(SPECIES, a, i);
3520 LongVector bv = LongVector.fromArray(SPECIES, b, i);
3521 av.lanewise(VectorOperators.SUSUB, bv, vmask).intoArray(r, i);
3522 }
3523 }
3524
3525 assertArraysEquals(r, a, b, mask, LongMaxVectorTests::SUSUB);
3526 }
3527
3528 @Test(dataProvider = "longBinaryOpProvider")
3529 static void MINLongMaxVectorTestsBroadcastSmokeTest(IntFunction<long[]> fa, IntFunction<long[]> fb) {
3530 long[] a = fa.apply(SPECIES.length());
3531 long[] b = fb.apply(SPECIES.length());
3532 long[] r = fr.apply(SPECIES.length());
3533
3534 for (int i = 0; i < a.length; i += SPECIES.length()) {
3535 LongVector av = LongVector.fromArray(SPECIES, a, i);
3536 av.lanewise(VectorOperators.MIN, b[i]).intoArray(r, i);
3537 }
3538
3539 assertBroadcastArraysEquals(r, a, b, LongMaxVectorTests::MIN);
3540 }
3541
3542 @Test(dataProvider = "longBinaryOpProvider")
3543 static void minLongMaxVectorTestsBroadcastSmokeTest(IntFunction<long[]> fa, IntFunction<long[]> fb) {
3544 long[] a = fa.apply(SPECIES.length());
3545 long[] b = fb.apply(SPECIES.length());
3546 long[] r = fr.apply(SPECIES.length());
3547
3548 for (int i = 0; i < a.length; i += SPECIES.length()) {
3549 LongVector av = LongVector.fromArray(SPECIES, a, i);
3550 av.min(b[i]).intoArray(r, i);
3551 }
3552
3553 assertBroadcastArraysEquals(r, a, b, LongMaxVectorTests::min);
3554 }
3555
3556 @Test(dataProvider = "longBinaryOpProvider")
3557 static void MAXLongMaxVectorTestsBroadcastSmokeTest(IntFunction<long[]> fa, IntFunction<long[]> fb) {
3558 long[] a = fa.apply(SPECIES.length());
3559 long[] b = fb.apply(SPECIES.length());
3560 long[] r = fr.apply(SPECIES.length());
3561
3562 for (int i = 0; i < a.length; i += SPECIES.length()) {
3563 LongVector av = LongVector.fromArray(SPECIES, a, i);
3564 av.lanewise(VectorOperators.MAX, b[i]).intoArray(r, i);
3565 }
3566
3567 assertBroadcastArraysEquals(r, a, b, LongMaxVectorTests::MAX);
3568 }
3569
3570 @Test(dataProvider = "longBinaryOpProvider")
3571 static void maxLongMaxVectorTestsBroadcastSmokeTest(IntFunction<long[]> fa, IntFunction<long[]> fb) {
3572 long[] a = fa.apply(SPECIES.length());
3573 long[] b = fb.apply(SPECIES.length());
3574 long[] r = fr.apply(SPECIES.length());
3575
3576 for (int i = 0; i < a.length; i += SPECIES.length()) {
3577 LongVector av = LongVector.fromArray(SPECIES, a, i);
3578 av.max(b[i]).intoArray(r, i);
3579 }
3580
3581 assertBroadcastArraysEquals(r, a, b, LongMaxVectorTests::max);
3582 }
3583 @Test(dataProvider = "longSaturatingBinaryOpAssocProvider")
3584 static void SUADDAssocLongMaxVectorTests(IntFunction<long[]> fa, IntFunction<long[]> fb, IntFunction<long[]> fc) {
3585 long[] a = fa.apply(SPECIES.length());
3586 long[] b = fb.apply(SPECIES.length());
3587 long[] c = fc.apply(SPECIES.length());
3588 long[] rl = fr.apply(SPECIES.length());
3589 long[] rr = fr.apply(SPECIES.length());
3590
3591 for (int ic = 0; ic < INVOC_COUNT; ic++) {
3592 for (int i = 0; i < a.length; i += SPECIES.length()) {
3593 LongVector av = LongVector.fromArray(SPECIES, a, i);
3594 LongVector bv = LongVector.fromArray(SPECIES, b, i);
3595 LongVector cv = LongVector.fromArray(SPECIES, c, i);
3596 av.lanewise(VectorOperators.SUADD, bv).lanewise(VectorOperators.SUADD, cv).intoArray(rl, i);
3597 av.lanewise(VectorOperators.SUADD, bv.lanewise(VectorOperators.SUADD, cv)).intoArray(rr, i);
3598 }
3599 }
3600
3601 assertArraysEqualsAssociative(rl, rr, a, b, c, LongMaxVectorTests::SUADD);
3602 }
3603
3604 @Test(dataProvider = "longSaturatingBinaryOpAssocMaskProvider")
3605 static void SUADDAssocLongMaxVectorTestsMasked(IntFunction<long[]> fa, IntFunction<long[]> fb,
3606 IntFunction<long[]> fc, IntFunction<boolean[]> fm) {
3607 long[] a = fa.apply(SPECIES.length());
3608 long[] b = fb.apply(SPECIES.length());
3609 long[] c = fc.apply(SPECIES.length());
3610 boolean[] mask = fm.apply(SPECIES.length());
3611 long[] rl = fr.apply(SPECIES.length());
3612 long[] rr = fr.apply(SPECIES.length());
3613
3614 VectorMask<Long> vmask = VectorMask.fromArray(SPECIES, mask, 0);
3615
3616 for (int ic = 0; ic < INVOC_COUNT; ic++) {
3617 for (int i = 0; i < a.length; i += SPECIES.length()) {
3618 LongVector av = LongVector.fromArray(SPECIES, a, i);
3619 LongVector bv = LongVector.fromArray(SPECIES, b, i);
3620 LongVector cv = LongVector.fromArray(SPECIES, c, i);
3621 av.lanewise(VectorOperators.SUADD, bv, vmask).lanewise(VectorOperators.SUADD, cv, vmask).intoArray(rl, i);
3622 av.lanewise(VectorOperators.SUADD, bv.lanewise(VectorOperators.SUADD, cv, vmask), vmask).intoArray(rr, i);
3623 }
3624 }
3625
3626 assertArraysEqualsAssociative(rl, rr, a, b, c, mask, LongMaxVectorTests::SUADD);
3627 }
3628
3629 static long ANDReduce(long[] a, int idx) {
3630 long res = -1;
3631 for (int i = idx; i < (idx + SPECIES.length()); i++) {
3632 res &= a[i];
3633 }
3634
3635 return res;
3636 }
3637
3638 static long ANDReduceAll(long[] a) {
3639 long res = -1;
3640 for (int i = 0; i < a.length; i += SPECIES.length()) {
3641 res &= ANDReduce(a, i);
3642 }
3643
3644 return res;
3645 }
3646
3647 @Test(dataProvider = "longUnaryOpProvider")
3648 static void ANDReduceLongMaxVectorTests(IntFunction<long[]> fa) {
3649 long[] a = fa.apply(SPECIES.length());
3650 long[] r = fr.apply(SPECIES.length());
3651 long ra = -1;
3652
3653 for (int ic = 0; ic < INVOC_COUNT; ic++) {
3654 for (int i = 0; i < a.length; i += SPECIES.length()) {
3655 LongVector av = LongVector.fromArray(SPECIES, a, i);
3656 r[i] = av.reduceLanes(VectorOperators.AND);
3657 }
3658 }
3659
3660 for (int ic = 0; ic < INVOC_COUNT; ic++) {
3661 ra = -1;
3662 for (int i = 0; i < a.length; i += SPECIES.length()) {
3663 LongVector av = LongVector.fromArray(SPECIES, a, i);
3664 ra &= av.reduceLanes(VectorOperators.AND);
3665 }
3666 }
3667
3668 assertReductionArraysEquals(r, ra, a,
3669 LongMaxVectorTests::ANDReduce, LongMaxVectorTests::ANDReduceAll);
3670 }
3671
3672 static long ANDReduceMasked(long[] a, int idx, boolean[] mask) {
3673 long res = -1;
3674 for (int i = idx; i < (idx + SPECIES.length()); i++) {
3675 if (mask[i % SPECIES.length()])
3676 res &= a[i];
3677 }
3678
3679 return res;
3680 }
3681
3682 static long ANDReduceAllMasked(long[] a, boolean[] mask) {
3683 long res = -1;
3684 for (int i = 0; i < a.length; i += SPECIES.length()) {
3685 res &= ANDReduceMasked(a, i, mask);
3686 }
3687
3688 return res;
3689 }
3690
3691 @Test(dataProvider = "longUnaryOpMaskProvider")
3692 static void ANDReduceLongMaxVectorTestsMasked(IntFunction<long[]> fa, IntFunction<boolean[]> fm) {
3693 long[] a = fa.apply(SPECIES.length());
3694 long[] r = fr.apply(SPECIES.length());
3695 boolean[] mask = fm.apply(SPECIES.length());
3696 VectorMask<Long> vmask = VectorMask.fromArray(SPECIES, mask, 0);
3697 long ra = -1;
3698
3699 for (int ic = 0; ic < INVOC_COUNT; ic++) {
3700 for (int i = 0; i < a.length; i += SPECIES.length()) {
3701 LongVector av = LongVector.fromArray(SPECIES, a, i);
3702 r[i] = av.reduceLanes(VectorOperators.AND, vmask);
3703 }
3704 }
3705
3706 for (int ic = 0; ic < INVOC_COUNT; ic++) {
3707 ra = -1;
3708 for (int i = 0; i < a.length; i += SPECIES.length()) {
3709 LongVector av = LongVector.fromArray(SPECIES, a, i);
3710 ra &= av.reduceLanes(VectorOperators.AND, vmask);
3711 }
3712 }
3713
3714 assertReductionArraysEqualsMasked(r, ra, a, mask,
3715 LongMaxVectorTests::ANDReduceMasked, LongMaxVectorTests::ANDReduceAllMasked);
3716 }
3717
3718 static long ORReduce(long[] a, int idx) {
3719 long res = 0;
3720 for (int i = idx; i < (idx + SPECIES.length()); i++) {
3721 res |= a[i];
3722 }
3723
3724 return res;
3725 }
3726
3727 static long ORReduceAll(long[] a) {
3728 long res = 0;
3729 for (int i = 0; i < a.length; i += SPECIES.length()) {
3730 res |= ORReduce(a, i);
3731 }
3732
3733 return res;
3734 }
3735
3736 @Test(dataProvider = "longUnaryOpProvider")
3737 static void ORReduceLongMaxVectorTests(IntFunction<long[]> fa) {
3738 long[] a = fa.apply(SPECIES.length());
3739 long[] r = fr.apply(SPECIES.length());
3740 long ra = 0;
3741
3742 for (int ic = 0; ic < INVOC_COUNT; ic++) {
3743 for (int i = 0; i < a.length; i += SPECIES.length()) {
3744 LongVector av = LongVector.fromArray(SPECIES, a, i);
3745 r[i] = av.reduceLanes(VectorOperators.OR);
3746 }
3747 }
3748
3749 for (int ic = 0; ic < INVOC_COUNT; ic++) {
3750 ra = 0;
3751 for (int i = 0; i < a.length; i += SPECIES.length()) {
3752 LongVector av = LongVector.fromArray(SPECIES, a, i);
3753 ra |= av.reduceLanes(VectorOperators.OR);
3754 }
3755 }
3756
3757 assertReductionArraysEquals(r, ra, a,
3758 LongMaxVectorTests::ORReduce, LongMaxVectorTests::ORReduceAll);
3759 }
3760
3761 static long ORReduceMasked(long[] a, int idx, boolean[] mask) {
3762 long res = 0;
3763 for (int i = idx; i < (idx + SPECIES.length()); i++) {
3764 if (mask[i % SPECIES.length()])
3765 res |= a[i];
3766 }
3767
3768 return res;
3769 }
3770
3771 static long ORReduceAllMasked(long[] a, boolean[] mask) {
3772 long res = 0;
3773 for (int i = 0; i < a.length; i += SPECIES.length()) {
3774 res |= ORReduceMasked(a, i, mask);
3775 }
3776
3777 return res;
3778 }
3779
3780 @Test(dataProvider = "longUnaryOpMaskProvider")
3781 static void ORReduceLongMaxVectorTestsMasked(IntFunction<long[]> fa, IntFunction<boolean[]> fm) {
3782 long[] a = fa.apply(SPECIES.length());
3783 long[] r = fr.apply(SPECIES.length());
3784 boolean[] mask = fm.apply(SPECIES.length());
3785 VectorMask<Long> vmask = VectorMask.fromArray(SPECIES, mask, 0);
3786 long ra = 0;
3787
3788 for (int ic = 0; ic < INVOC_COUNT; ic++) {
3789 for (int i = 0; i < a.length; i += SPECIES.length()) {
3790 LongVector av = LongVector.fromArray(SPECIES, a, i);
3791 r[i] = av.reduceLanes(VectorOperators.OR, vmask);
3792 }
3793 }
3794
3795 for (int ic = 0; ic < INVOC_COUNT; ic++) {
3796 ra = 0;
3797 for (int i = 0; i < a.length; i += SPECIES.length()) {
3798 LongVector av = LongVector.fromArray(SPECIES, a, i);
3799 ra |= av.reduceLanes(VectorOperators.OR, vmask);
3800 }
3801 }
3802
3803 assertReductionArraysEqualsMasked(r, ra, a, mask,
3804 LongMaxVectorTests::ORReduceMasked, LongMaxVectorTests::ORReduceAllMasked);
3805 }
3806
3807 static long XORReduce(long[] a, int idx) {
3808 long res = 0;
3809 for (int i = idx; i < (idx + SPECIES.length()); i++) {
3810 res ^= a[i];
3811 }
3812
3813 return res;
3814 }
3815
3816 static long XORReduceAll(long[] a) {
3817 long res = 0;
3818 for (int i = 0; i < a.length; i += SPECIES.length()) {
3819 res ^= XORReduce(a, i);
3820 }
3821
3822 return res;
3823 }
3824
3825 @Test(dataProvider = "longUnaryOpProvider")
3826 static void XORReduceLongMaxVectorTests(IntFunction<long[]> fa) {
3827 long[] a = fa.apply(SPECIES.length());
3828 long[] r = fr.apply(SPECIES.length());
3829 long ra = 0;
3830
3831 for (int ic = 0; ic < INVOC_COUNT; ic++) {
3832 for (int i = 0; i < a.length; i += SPECIES.length()) {
3833 LongVector av = LongVector.fromArray(SPECIES, a, i);
3834 r[i] = av.reduceLanes(VectorOperators.XOR);
3835 }
3836 }
3837
3838 for (int ic = 0; ic < INVOC_COUNT; ic++) {
3839 ra = 0;
3840 for (int i = 0; i < a.length; i += SPECIES.length()) {
3841 LongVector av = LongVector.fromArray(SPECIES, a, i);
3842 ra ^= av.reduceLanes(VectorOperators.XOR);
3843 }
3844 }
3845
3846 assertReductionArraysEquals(r, ra, a,
3847 LongMaxVectorTests::XORReduce, LongMaxVectorTests::XORReduceAll);
3848 }
3849
3850 static long XORReduceMasked(long[] a, int idx, boolean[] mask) {
3851 long res = 0;
3852 for (int i = idx; i < (idx + SPECIES.length()); i++) {
3853 if (mask[i % SPECIES.length()])
3854 res ^= a[i];
3855 }
3856
3857 return res;
3858 }
3859
3860 static long XORReduceAllMasked(long[] a, boolean[] mask) {
3861 long res = 0;
3862 for (int i = 0; i < a.length; i += SPECIES.length()) {
3863 res ^= XORReduceMasked(a, i, mask);
3864 }
3865
3866 return res;
3867 }
3868
3869 @Test(dataProvider = "longUnaryOpMaskProvider")
3870 static void XORReduceLongMaxVectorTestsMasked(IntFunction<long[]> fa, IntFunction<boolean[]> fm) {
3871 long[] a = fa.apply(SPECIES.length());
3872 long[] r = fr.apply(SPECIES.length());
3873 boolean[] mask = fm.apply(SPECIES.length());
3874 VectorMask<Long> vmask = VectorMask.fromArray(SPECIES, mask, 0);
3875 long ra = 0;
3876
3877 for (int ic = 0; ic < INVOC_COUNT; ic++) {
3878 for (int i = 0; i < a.length; i += SPECIES.length()) {
3879 LongVector av = LongVector.fromArray(SPECIES, a, i);
3880 r[i] = av.reduceLanes(VectorOperators.XOR, vmask);
3881 }
3882 }
3883
3884 for (int ic = 0; ic < INVOC_COUNT; ic++) {
3885 ra = 0;
3886 for (int i = 0; i < a.length; i += SPECIES.length()) {
3887 LongVector av = LongVector.fromArray(SPECIES, a, i);
3888 ra ^= av.reduceLanes(VectorOperators.XOR, vmask);
3889 }
3890 }
3891
3892 assertReductionArraysEqualsMasked(r, ra, a, mask,
3893 LongMaxVectorTests::XORReduceMasked, LongMaxVectorTests::XORReduceAllMasked);
3894 }
3895
3896 static long ADDReduce(long[] a, int idx) {
3897 long res = 0;
3898 for (int i = idx; i < (idx + SPECIES.length()); i++) {
3899 res += a[i];
3900 }
3901
3902 return res;
3903 }
3904
3905 static long ADDReduceAll(long[] a) {
3906 long res = 0;
3907 for (int i = 0; i < a.length; i += SPECIES.length()) {
3908 res += ADDReduce(a, i);
3909 }
3910
3911 return res;
3912 }
3913
3914 @Test(dataProvider = "longUnaryOpProvider")
3915 static void ADDReduceLongMaxVectorTests(IntFunction<long[]> fa) {
3916 long[] a = fa.apply(SPECIES.length());
3917 long[] r = fr.apply(SPECIES.length());
3918 long ra = 0;
3919
3920 for (int ic = 0; ic < INVOC_COUNT; ic++) {
3921 for (int i = 0; i < a.length; i += SPECIES.length()) {
3922 LongVector av = LongVector.fromArray(SPECIES, a, i);
3923 r[i] = av.reduceLanes(VectorOperators.ADD);
3924 }
3925 }
3926
3927 for (int ic = 0; ic < INVOC_COUNT; ic++) {
3928 ra = 0;
3929 for (int i = 0; i < a.length; i += SPECIES.length()) {
3930 LongVector av = LongVector.fromArray(SPECIES, a, i);
3931 ra += av.reduceLanes(VectorOperators.ADD);
3932 }
3933 }
3934
3935 assertReductionArraysEquals(r, ra, a,
3936 LongMaxVectorTests::ADDReduce, LongMaxVectorTests::ADDReduceAll);
3937 }
3938
3939 static long ADDReduceMasked(long[] a, int idx, boolean[] mask) {
3940 long res = 0;
3941 for (int i = idx; i < (idx + SPECIES.length()); i++) {
3942 if (mask[i % SPECIES.length()])
3943 res += a[i];
3944 }
3945
3946 return res;
3947 }
3948
3949 static long ADDReduceAllMasked(long[] a, boolean[] mask) {
3950 long res = 0;
3951 for (int i = 0; i < a.length; i += SPECIES.length()) {
3952 res += ADDReduceMasked(a, i, mask);
3953 }
3954
3955 return res;
3956 }
3957
3958 @Test(dataProvider = "longUnaryOpMaskProvider")
3959 static void ADDReduceLongMaxVectorTestsMasked(IntFunction<long[]> fa, IntFunction<boolean[]> fm) {
3960 long[] a = fa.apply(SPECIES.length());
3961 long[] r = fr.apply(SPECIES.length());
3962 boolean[] mask = fm.apply(SPECIES.length());
3963 VectorMask<Long> vmask = VectorMask.fromArray(SPECIES, mask, 0);
3964 long ra = 0;
3965
3966 for (int ic = 0; ic < INVOC_COUNT; ic++) {
3967 for (int i = 0; i < a.length; i += SPECIES.length()) {
3968 LongVector av = LongVector.fromArray(SPECIES, a, i);
3969 r[i] = av.reduceLanes(VectorOperators.ADD, vmask);
3970 }
3971 }
3972
3973 for (int ic = 0; ic < INVOC_COUNT; ic++) {
3974 ra = 0;
3975 for (int i = 0; i < a.length; i += SPECIES.length()) {
3976 LongVector av = LongVector.fromArray(SPECIES, a, i);
3977 ra += av.reduceLanes(VectorOperators.ADD, vmask);
3978 }
3979 }
3980
3981 assertReductionArraysEqualsMasked(r, ra, a, mask,
3982 LongMaxVectorTests::ADDReduceMasked, LongMaxVectorTests::ADDReduceAllMasked);
3983 }
3984
3985 static long MULReduce(long[] a, int idx) {
3986 long res = 1;
3987 for (int i = idx; i < (idx + SPECIES.length()); i++) {
3988 res *= a[i];
3989 }
3990
3991 return res;
3992 }
3993
3994 static long MULReduceAll(long[] a) {
3995 long res = 1;
3996 for (int i = 0; i < a.length; i += SPECIES.length()) {
3997 res *= MULReduce(a, i);
3998 }
3999
4000 return res;
4001 }
4002
4003 @Test(dataProvider = "longUnaryOpProvider")
4004 static void MULReduceLongMaxVectorTests(IntFunction<long[]> fa) {
4005 long[] a = fa.apply(SPECIES.length());
4006 long[] r = fr.apply(SPECIES.length());
4007 long ra = 1;
4008
4009 for (int ic = 0; ic < INVOC_COUNT; ic++) {
4010 for (int i = 0; i < a.length; i += SPECIES.length()) {
4011 LongVector av = LongVector.fromArray(SPECIES, a, i);
4012 r[i] = av.reduceLanes(VectorOperators.MUL);
4013 }
4014 }
4015
4016 for (int ic = 0; ic < INVOC_COUNT; ic++) {
4017 ra = 1;
4018 for (int i = 0; i < a.length; i += SPECIES.length()) {
4019 LongVector av = LongVector.fromArray(SPECIES, a, i);
4020 ra *= av.reduceLanes(VectorOperators.MUL);
4021 }
4022 }
4023
4024 assertReductionArraysEquals(r, ra, a,
4025 LongMaxVectorTests::MULReduce, LongMaxVectorTests::MULReduceAll);
4026 }
4027
4028 static long MULReduceMasked(long[] a, int idx, boolean[] mask) {
4029 long res = 1;
4030 for (int i = idx; i < (idx + SPECIES.length()); i++) {
4031 if (mask[i % SPECIES.length()])
4032 res *= a[i];
4033 }
4034
4035 return res;
4036 }
4037
4038 static long MULReduceAllMasked(long[] a, boolean[] mask) {
4039 long res = 1;
4040 for (int i = 0; i < a.length; i += SPECIES.length()) {
4041 res *= MULReduceMasked(a, i, mask);
4042 }
4043
4044 return res;
4045 }
4046
4047 @Test(dataProvider = "longUnaryOpMaskProvider")
4048 static void MULReduceLongMaxVectorTestsMasked(IntFunction<long[]> fa, IntFunction<boolean[]> fm) {
4049 long[] a = fa.apply(SPECIES.length());
4050 long[] r = fr.apply(SPECIES.length());
4051 boolean[] mask = fm.apply(SPECIES.length());
4052 VectorMask<Long> vmask = VectorMask.fromArray(SPECIES, mask, 0);
4053 long ra = 1;
4054
4055 for (int ic = 0; ic < INVOC_COUNT; ic++) {
4056 for (int i = 0; i < a.length; i += SPECIES.length()) {
4057 LongVector av = LongVector.fromArray(SPECIES, a, i);
4058 r[i] = av.reduceLanes(VectorOperators.MUL, vmask);
4059 }
4060 }
4061
4062 for (int ic = 0; ic < INVOC_COUNT; ic++) {
4063 ra = 1;
4064 for (int i = 0; i < a.length; i += SPECIES.length()) {
4065 LongVector av = LongVector.fromArray(SPECIES, a, i);
4066 ra *= av.reduceLanes(VectorOperators.MUL, vmask);
4067 }
4068 }
4069
4070 assertReductionArraysEqualsMasked(r, ra, a, mask,
4071 LongMaxVectorTests::MULReduceMasked, LongMaxVectorTests::MULReduceAllMasked);
4072 }
4073
4074 static long MINReduce(long[] a, int idx) {
4075 long res = Long.MAX_VALUE;
4076 for (int i = idx; i < (idx + SPECIES.length()); i++) {
4077 res = (long) Math.min(res, a[i]);
4078 }
4079
4080 return res;
4081 }
4082
4083 static long MINReduceAll(long[] a) {
4084 long res = Long.MAX_VALUE;
4085 for (int i = 0; i < a.length; i += SPECIES.length()) {
4086 res = (long) Math.min(res, MINReduce(a, i));
4087 }
4088
4089 return res;
4090 }
4091
4092 @Test(dataProvider = "longUnaryOpProvider")
4093 static void MINReduceLongMaxVectorTests(IntFunction<long[]> fa) {
4094 long[] a = fa.apply(SPECIES.length());
4095 long[] r = fr.apply(SPECIES.length());
4096 long ra = Long.MAX_VALUE;
4097
4098 for (int ic = 0; ic < INVOC_COUNT; ic++) {
4099 for (int i = 0; i < a.length; i += SPECIES.length()) {
4100 LongVector av = LongVector.fromArray(SPECIES, a, i);
4101 r[i] = av.reduceLanes(VectorOperators.MIN);
4102 }
4103 }
4104
4105 for (int ic = 0; ic < INVOC_COUNT; ic++) {
4106 ra = Long.MAX_VALUE;
4107 for (int i = 0; i < a.length; i += SPECIES.length()) {
4108 LongVector av = LongVector.fromArray(SPECIES, a, i);
4109 ra = (long) Math.min(ra, av.reduceLanes(VectorOperators.MIN));
4110 }
4111 }
4112
4113 assertReductionArraysEquals(r, ra, a,
4114 LongMaxVectorTests::MINReduce, LongMaxVectorTests::MINReduceAll);
4115 }
4116
4117 static long MINReduceMasked(long[] a, int idx, boolean[] mask) {
4118 long res = Long.MAX_VALUE;
4119 for (int i = idx; i < (idx + SPECIES.length()); i++) {
4120 if (mask[i % SPECIES.length()])
4121 res = (long) Math.min(res, a[i]);
4122 }
4123
4124 return res;
4125 }
4126
4127 static long MINReduceAllMasked(long[] a, boolean[] mask) {
4128 long res = Long.MAX_VALUE;
4129 for (int i = 0; i < a.length; i += SPECIES.length()) {
4130 res = (long) Math.min(res, MINReduceMasked(a, i, mask));
4131 }
4132
4133 return res;
4134 }
4135
4136 @Test(dataProvider = "longUnaryOpMaskProvider")
4137 static void MINReduceLongMaxVectorTestsMasked(IntFunction<long[]> fa, IntFunction<boolean[]> fm) {
4138 long[] a = fa.apply(SPECIES.length());
4139 long[] r = fr.apply(SPECIES.length());
4140 boolean[] mask = fm.apply(SPECIES.length());
4141 VectorMask<Long> vmask = VectorMask.fromArray(SPECIES, mask, 0);
4142 long ra = Long.MAX_VALUE;
4143
4144 for (int ic = 0; ic < INVOC_COUNT; ic++) {
4145 for (int i = 0; i < a.length; i += SPECIES.length()) {
4146 LongVector av = LongVector.fromArray(SPECIES, a, i);
4147 r[i] = av.reduceLanes(VectorOperators.MIN, vmask);
4148 }
4149 }
4150
4151 for (int ic = 0; ic < INVOC_COUNT; ic++) {
4152 ra = Long.MAX_VALUE;
4153 for (int i = 0; i < a.length; i += SPECIES.length()) {
4154 LongVector av = LongVector.fromArray(SPECIES, a, i);
4155 ra = (long) Math.min(ra, av.reduceLanes(VectorOperators.MIN, vmask));
4156 }
4157 }
4158
4159 assertReductionArraysEqualsMasked(r, ra, a, mask,
4160 LongMaxVectorTests::MINReduceMasked, LongMaxVectorTests::MINReduceAllMasked);
4161 }
4162
4163 static long MAXReduce(long[] a, int idx) {
4164 long res = Long.MIN_VALUE;
4165 for (int i = idx; i < (idx + SPECIES.length()); i++) {
4166 res = (long) Math.max(res, a[i]);
4167 }
4168
4169 return res;
4170 }
4171
4172 static long MAXReduceAll(long[] a) {
4173 long res = Long.MIN_VALUE;
4174 for (int i = 0; i < a.length; i += SPECIES.length()) {
4175 res = (long) Math.max(res, MAXReduce(a, i));
4176 }
4177
4178 return res;
4179 }
4180
4181 @Test(dataProvider = "longUnaryOpProvider")
4182 static void MAXReduceLongMaxVectorTests(IntFunction<long[]> fa) {
4183 long[] a = fa.apply(SPECIES.length());
4184 long[] r = fr.apply(SPECIES.length());
4185 long ra = Long.MIN_VALUE;
4186
4187 for (int ic = 0; ic < INVOC_COUNT; ic++) {
4188 for (int i = 0; i < a.length; i += SPECIES.length()) {
4189 LongVector av = LongVector.fromArray(SPECIES, a, i);
4190 r[i] = av.reduceLanes(VectorOperators.MAX);
4191 }
4192 }
4193
4194 for (int ic = 0; ic < INVOC_COUNT; ic++) {
4195 ra = Long.MIN_VALUE;
4196 for (int i = 0; i < a.length; i += SPECIES.length()) {
4197 LongVector av = LongVector.fromArray(SPECIES, a, i);
4198 ra = (long) Math.max(ra, av.reduceLanes(VectorOperators.MAX));
4199 }
4200 }
4201
4202 assertReductionArraysEquals(r, ra, a,
4203 LongMaxVectorTests::MAXReduce, LongMaxVectorTests::MAXReduceAll);
4204 }
4205
4206 static long MAXReduceMasked(long[] a, int idx, boolean[] mask) {
4207 long res = Long.MIN_VALUE;
4208 for (int i = idx; i < (idx + SPECIES.length()); i++) {
4209 if (mask[i % SPECIES.length()])
4210 res = (long) Math.max(res, a[i]);
4211 }
4212
4213 return res;
4214 }
4215
4216 static long MAXReduceAllMasked(long[] a, boolean[] mask) {
4217 long res = Long.MIN_VALUE;
4218 for (int i = 0; i < a.length; i += SPECIES.length()) {
4219 res = (long) Math.max(res, MAXReduceMasked(a, i, mask));
4220 }
4221
4222 return res;
4223 }
4224
4225 @Test(dataProvider = "longUnaryOpMaskProvider")
4226 static void MAXReduceLongMaxVectorTestsMasked(IntFunction<long[]> fa, IntFunction<boolean[]> fm) {
4227 long[] a = fa.apply(SPECIES.length());
4228 long[] r = fr.apply(SPECIES.length());
4229 boolean[] mask = fm.apply(SPECIES.length());
4230 VectorMask<Long> vmask = VectorMask.fromArray(SPECIES, mask, 0);
4231 long ra = Long.MIN_VALUE;
4232
4233 for (int ic = 0; ic < INVOC_COUNT; ic++) {
4234 for (int i = 0; i < a.length; i += SPECIES.length()) {
4235 LongVector av = LongVector.fromArray(SPECIES, a, i);
4236 r[i] = av.reduceLanes(VectorOperators.MAX, vmask);
4237 }
4238 }
4239
4240 for (int ic = 0; ic < INVOC_COUNT; ic++) {
4241 ra = Long.MIN_VALUE;
4242 for (int i = 0; i < a.length; i += SPECIES.length()) {
4243 LongVector av = LongVector.fromArray(SPECIES, a, i);
4244 ra = (long) Math.max(ra, av.reduceLanes(VectorOperators.MAX, vmask));
4245 }
4246 }
4247
4248 assertReductionArraysEqualsMasked(r, ra, a, mask,
4249 LongMaxVectorTests::MAXReduceMasked, LongMaxVectorTests::MAXReduceAllMasked);
4250 }
4251
4252 static long UMINReduce(long[] a, int idx) {
4253 long res = Long.MAX_VALUE;
4254 for (int i = idx; i < (idx + SPECIES.length()); i++) {
4255 res = (long) VectorMath.minUnsigned(res, a[i]);
4256 }
4257
4258 return res;
4259 }
4260
4261 static long UMINReduceAll(long[] a) {
4262 long res = Long.MAX_VALUE;
4263 for (int i = 0; i < a.length; i += SPECIES.length()) {
4264 res = (long) VectorMath.minUnsigned(res, UMINReduce(a, i));
4265 }
4266
4267 return res;
4268 }
4269
4270 @Test(dataProvider = "longUnaryOpProvider")
4271 static void UMINReduceLongMaxVectorTests(IntFunction<long[]> fa) {
4272 long[] a = fa.apply(SPECIES.length());
4273 long[] r = fr.apply(SPECIES.length());
4274 long ra = Long.MAX_VALUE;
4275
4276 for (int ic = 0; ic < INVOC_COUNT; ic++) {
4277 for (int i = 0; i < a.length; i += SPECIES.length()) {
4278 LongVector av = LongVector.fromArray(SPECIES, a, i);
4279 r[i] = av.reduceLanes(VectorOperators.UMIN);
4280 }
4281 }
4282
4283 for (int ic = 0; ic < INVOC_COUNT; ic++) {
4284 ra = Long.MAX_VALUE;
4285 for (int i = 0; i < a.length; i += SPECIES.length()) {
4286 LongVector av = LongVector.fromArray(SPECIES, a, i);
4287 ra = (long) VectorMath.minUnsigned(ra, av.reduceLanes(VectorOperators.UMIN));
4288 }
4289 }
4290
4291 assertReductionArraysEquals(r, ra, a,
4292 LongMaxVectorTests::UMINReduce, LongMaxVectorTests::UMINReduceAll);
4293 }
4294
4295 static long UMINReduceMasked(long[] a, int idx, boolean[] mask) {
4296 long res = Long.MAX_VALUE;
4297 for (int i = idx; i < (idx + SPECIES.length()); i++) {
4298 if (mask[i % SPECIES.length()])
4299 res = (long) VectorMath.minUnsigned(res, a[i]);
4300 }
4301
4302 return res;
4303 }
4304
4305 static long UMINReduceAllMasked(long[] a, boolean[] mask) {
4306 long res = Long.MAX_VALUE;
4307 for (int i = 0; i < a.length; i += SPECIES.length()) {
4308 res = (long) VectorMath.minUnsigned(res, UMINReduceMasked(a, i, mask));
4309 }
4310
4311 return res;
4312 }
4313
4314 @Test(dataProvider = "longUnaryOpMaskProvider")
4315 static void UMINReduceLongMaxVectorTestsMasked(IntFunction<long[]> fa, IntFunction<boolean[]> fm) {
4316 long[] a = fa.apply(SPECIES.length());
4317 long[] r = fr.apply(SPECIES.length());
4318 boolean[] mask = fm.apply(SPECIES.length());
4319 VectorMask<Long> vmask = VectorMask.fromArray(SPECIES, mask, 0);
4320 long ra = Long.MAX_VALUE;
4321
4322 for (int ic = 0; ic < INVOC_COUNT; ic++) {
4323 for (int i = 0; i < a.length; i += SPECIES.length()) {
4324 LongVector av = LongVector.fromArray(SPECIES, a, i);
4325 r[i] = av.reduceLanes(VectorOperators.UMIN, vmask);
4326 }
4327 }
4328
4329 for (int ic = 0; ic < INVOC_COUNT; ic++) {
4330 ra = Long.MAX_VALUE;
4331 for (int i = 0; i < a.length; i += SPECIES.length()) {
4332 LongVector av = LongVector.fromArray(SPECIES, a, i);
4333 ra = (long) VectorMath.minUnsigned(ra, av.reduceLanes(VectorOperators.UMIN, vmask));
4334 }
4335 }
4336
4337 assertReductionArraysEqualsMasked(r, ra, a, mask,
4338 LongMaxVectorTests::UMINReduceMasked, LongMaxVectorTests::UMINReduceAllMasked);
4339 }
4340
4341 static long UMAXReduce(long[] a, int idx) {
4342 long res = Long.MIN_VALUE;
4343 for (int i = idx; i < (idx + SPECIES.length()); i++) {
4344 res = (long) VectorMath.maxUnsigned(res, a[i]);
4345 }
4346
4347 return res;
4348 }
4349
4350 static long UMAXReduceAll(long[] a) {
4351 long res = Long.MIN_VALUE;
4352 for (int i = 0; i < a.length; i += SPECIES.length()) {
4353 res = (long) VectorMath.maxUnsigned(res, UMAXReduce(a, i));
4354 }
4355
4356 return res;
4357 }
4358
4359 @Test(dataProvider = "longUnaryOpProvider")
4360 static void UMAXReduceLongMaxVectorTests(IntFunction<long[]> fa) {
4361 long[] a = fa.apply(SPECIES.length());
4362 long[] r = fr.apply(SPECIES.length());
4363 long ra = Long.MIN_VALUE;
4364
4365 for (int ic = 0; ic < INVOC_COUNT; ic++) {
4366 for (int i = 0; i < a.length; i += SPECIES.length()) {
4367 LongVector av = LongVector.fromArray(SPECIES, a, i);
4368 r[i] = av.reduceLanes(VectorOperators.UMAX);
4369 }
4370 }
4371
4372 for (int ic = 0; ic < INVOC_COUNT; ic++) {
4373 ra = Long.MIN_VALUE;
4374 for (int i = 0; i < a.length; i += SPECIES.length()) {
4375 LongVector av = LongVector.fromArray(SPECIES, a, i);
4376 ra = (long) VectorMath.maxUnsigned(ra, av.reduceLanes(VectorOperators.UMAX));
4377 }
4378 }
4379
4380 assertReductionArraysEquals(r, ra, a,
4381 LongMaxVectorTests::UMAXReduce, LongMaxVectorTests::UMAXReduceAll);
4382 }
4383
4384 static long UMAXReduceMasked(long[] a, int idx, boolean[] mask) {
4385 long res = Long.MIN_VALUE;
4386 for (int i = idx; i < (idx + SPECIES.length()); i++) {
4387 if (mask[i % SPECIES.length()])
4388 res = (long) VectorMath.maxUnsigned(res, a[i]);
4389 }
4390
4391 return res;
4392 }
4393
4394 static long UMAXReduceAllMasked(long[] a, boolean[] mask) {
4395 long res = Long.MIN_VALUE;
4396 for (int i = 0; i < a.length; i += SPECIES.length()) {
4397 res = (long) VectorMath.maxUnsigned(res, UMAXReduceMasked(a, i, mask));
4398 }
4399
4400 return res;
4401 }
4402
4403 @Test(dataProvider = "longUnaryOpMaskProvider")
4404 static void UMAXReduceLongMaxVectorTestsMasked(IntFunction<long[]> fa, IntFunction<boolean[]> fm) {
4405 long[] a = fa.apply(SPECIES.length());
4406 long[] r = fr.apply(SPECIES.length());
4407 boolean[] mask = fm.apply(SPECIES.length());
4408 VectorMask<Long> vmask = VectorMask.fromArray(SPECIES, mask, 0);
4409 long ra = Long.MIN_VALUE;
4410
4411 for (int ic = 0; ic < INVOC_COUNT; ic++) {
4412 for (int i = 0; i < a.length; i += SPECIES.length()) {
4413 LongVector av = LongVector.fromArray(SPECIES, a, i);
4414 r[i] = av.reduceLanes(VectorOperators.UMAX, vmask);
4415 }
4416 }
4417
4418 for (int ic = 0; ic < INVOC_COUNT; ic++) {
4419 ra = Long.MIN_VALUE;
4420 for (int i = 0; i < a.length; i += SPECIES.length()) {
4421 LongVector av = LongVector.fromArray(SPECIES, a, i);
4422 ra = (long) VectorMath.maxUnsigned(ra, av.reduceLanes(VectorOperators.UMAX, vmask));
4423 }
4424 }
4425
4426 assertReductionArraysEqualsMasked(r, ra, a, mask,
4427 LongMaxVectorTests::UMAXReduceMasked, LongMaxVectorTests::UMAXReduceAllMasked);
4428 }
4429
4430 static long FIRST_NONZEROReduce(long[] a, int idx) {
4431 long res = (long) 0;
4432 for (int i = idx; i < (idx + SPECIES.length()); i++) {
4433 res = firstNonZero(res, a[i]);
4434 }
4435
4436 return res;
4437 }
4438
4439 static long FIRST_NONZEROReduceAll(long[] a) {
4440 long res = (long) 0;
4441 for (int i = 0; i < a.length; i += SPECIES.length()) {
4442 res = firstNonZero(res, FIRST_NONZEROReduce(a, i));
4443 }
4444
4445 return res;
4446 }
4447
4448 @Test(dataProvider = "longUnaryOpProvider")
4449 static void FIRST_NONZEROReduceLongMaxVectorTests(IntFunction<long[]> fa) {
4450 long[] a = fa.apply(SPECIES.length());
4451 long[] r = fr.apply(SPECIES.length());
4452 long ra = (long) 0;
4453
4454 for (int ic = 0; ic < INVOC_COUNT; ic++) {
4455 for (int i = 0; i < a.length; i += SPECIES.length()) {
4456 LongVector av = LongVector.fromArray(SPECIES, a, i);
4457 r[i] = av.reduceLanes(VectorOperators.FIRST_NONZERO);
4458 }
4459 }
4460
4461 for (int ic = 0; ic < INVOC_COUNT; ic++) {
4462 ra = (long) 0;
4463 for (int i = 0; i < a.length; i += SPECIES.length()) {
4464 LongVector av = LongVector.fromArray(SPECIES, a, i);
4465 ra = firstNonZero(ra, av.reduceLanes(VectorOperators.FIRST_NONZERO));
4466 }
4467 }
4468
4469 assertReductionArraysEquals(r, ra, a,
4470 LongMaxVectorTests::FIRST_NONZEROReduce, LongMaxVectorTests::FIRST_NONZEROReduceAll);
4471 }
4472
4473 static long FIRST_NONZEROReduceMasked(long[] a, int idx, boolean[] mask) {
4474 long res = (long) 0;
4475 for (int i = idx; i < (idx + SPECIES.length()); i++) {
4476 if (mask[i % SPECIES.length()])
4477 res = firstNonZero(res, a[i]);
4478 }
4479
4480 return res;
4481 }
4482
4483 static long FIRST_NONZEROReduceAllMasked(long[] a, boolean[] mask) {
4484 long res = (long) 0;
4485 for (int i = 0; i < a.length; i += SPECIES.length()) {
4486 res = firstNonZero(res, FIRST_NONZEROReduceMasked(a, i, mask));
4487 }
4488
4489 return res;
4490 }
4491
4492 @Test(dataProvider = "longUnaryOpMaskProvider")
4493 static void FIRST_NONZEROReduceLongMaxVectorTestsMasked(IntFunction<long[]> fa, IntFunction<boolean[]> fm) {
4494 long[] a = fa.apply(SPECIES.length());
4495 long[] r = fr.apply(SPECIES.length());
4496 boolean[] mask = fm.apply(SPECIES.length());
4497 VectorMask<Long> vmask = VectorMask.fromArray(SPECIES, mask, 0);
4498 long ra = (long) 0;
4499
4500 for (int ic = 0; ic < INVOC_COUNT; ic++) {
4501 for (int i = 0; i < a.length; i += SPECIES.length()) {
4502 LongVector av = LongVector.fromArray(SPECIES, a, i);
4503 r[i] = av.reduceLanes(VectorOperators.FIRST_NONZERO, vmask);
4504 }
4505 }
4506
4507 for (int ic = 0; ic < INVOC_COUNT; ic++) {
4508 ra = (long) 0;
4509 for (int i = 0; i < a.length; i += SPECIES.length()) {
4510 LongVector av = LongVector.fromArray(SPECIES, a, i);
4511 ra = firstNonZero(ra, av.reduceLanes(VectorOperators.FIRST_NONZERO, vmask));
4512 }
4513 }
4514
4515 assertReductionArraysEqualsMasked(r, ra, a, mask,
4516 LongMaxVectorTests::FIRST_NONZEROReduceMasked, LongMaxVectorTests::FIRST_NONZEROReduceAllMasked);
4517 }
4518
4519 static boolean anyTrue(boolean[] a, int idx) {
4520 boolean res = false;
4521 for (int i = idx; i < (idx + SPECIES.length()); i++) {
4522 res |= a[i];
4523 }
4524
4525 return res;
4526 }
4527
4528 @Test(dataProvider = "boolUnaryOpProvider")
4529 static void anyTrueLongMaxVectorTests(IntFunction<boolean[]> fm) {
4530 boolean[] mask = fm.apply(SPECIES.length());
4531 boolean[] r = fmr.apply(SPECIES.length());
4532
4533 for (int ic = 0; ic < INVOC_COUNT; ic++) {
4534 for (int i = 0; i < mask.length; i += SPECIES.length()) {
4535 VectorMask<Long> vmask = VectorMask.fromArray(SPECIES, mask, i);
4536 r[i] = vmask.anyTrue();
4537 }
4538 }
4539
4540 assertReductionBoolArraysEquals(r, mask, LongMaxVectorTests::anyTrue);
4541 }
4542
4543 static boolean allTrue(boolean[] a, int idx) {
4544 boolean res = true;
4545 for (int i = idx; i < (idx + SPECIES.length()); i++) {
4546 res &= a[i];
4547 }
4548
4549 return res;
4550 }
4551
4552 @Test(dataProvider = "boolUnaryOpProvider")
4553 static void allTrueLongMaxVectorTests(IntFunction<boolean[]> fm) {
4554 boolean[] mask = fm.apply(SPECIES.length());
4555 boolean[] r = fmr.apply(SPECIES.length());
4556
4557 for (int ic = 0; ic < INVOC_COUNT; ic++) {
4558 for (int i = 0; i < mask.length; i += SPECIES.length()) {
4559 VectorMask<Long> vmask = VectorMask.fromArray(SPECIES, mask, i);
4560 r[i] = vmask.allTrue();
4561 }
4562 }
4563
4564 assertReductionBoolArraysEquals(r, mask, LongMaxVectorTests::allTrue);
4565 }
4566
4567 static long SUADDReduce(long[] a, int idx) {
4568 long res = 0;
4569 for (int i = idx; i < (idx + SPECIES.length()); i++) {
4570 res = (long) VectorMath.addSaturatingUnsigned(res, a[i]);
4571 }
4572
4573 return res;
4574 }
4575
4576 static long SUADDReduceAll(long[] a) {
4577 long res = 0;
4578 for (int i = 0; i < a.length; i += SPECIES.length()) {
4579 res = (long) VectorMath.addSaturatingUnsigned(res, SUADDReduce(a, i));
4580 }
4581
4582 return res;
4583 }
4584
4585 @Test(dataProvider = "longSaturatingUnaryOpProvider")
4586 static void SUADDReduceLongMaxVectorTests(IntFunction<long[]> fa) {
4587 long[] a = fa.apply(SPECIES.length());
4588 long[] r = fr.apply(SPECIES.length());
4589 long ra = 0;
4590
4591 for (int ic = 0; ic < INVOC_COUNT; ic++) {
4592 for (int i = 0; i < a.length; i += SPECIES.length()) {
4593 LongVector av = LongVector.fromArray(SPECIES, a, i);
4594 r[i] = av.reduceLanes(VectorOperators.SUADD);
4595 }
4596 }
4597
4598 for (int ic = 0; ic < INVOC_COUNT; ic++) {
4599 ra = 0;
4600 for (int i = 0; i < a.length; i += SPECIES.length()) {
4601 LongVector av = LongVector.fromArray(SPECIES, a, i);
4602 ra = (long) VectorMath.addSaturatingUnsigned(ra, av.reduceLanes(VectorOperators.SUADD));
4603 }
4604 }
4605
4606 assertReductionArraysEquals(r, ra, a,
4607 LongMaxVectorTests::SUADDReduce, LongMaxVectorTests::SUADDReduceAll);
4608 }
4609
4610 static long SUADDReduceMasked(long[] a, int idx, boolean[] mask) {
4611 long res = 0;
4612 for (int i = idx; i < (idx + SPECIES.length()); i++) {
4613 if (mask[i % SPECIES.length()])
4614 res = (long) VectorMath.addSaturatingUnsigned(res, a[i]);
4615 }
4616
4617 return res;
4618 }
4619
4620 static long SUADDReduceAllMasked(long[] a, boolean[] mask) {
4621 long res = 0;
4622 for (int i = 0; i < a.length; i += SPECIES.length()) {
4623 res = (long) VectorMath.addSaturatingUnsigned(res, SUADDReduceMasked(a, i, mask));
4624 }
4625
4626 return res;
4627 }
4628 @Test(dataProvider = "longSaturatingUnaryOpMaskProvider")
4629 static void SUADDReduceLongMaxVectorTestsMasked(IntFunction<long[]> fa, IntFunction<boolean[]> fm) {
4630 long[] a = fa.apply(SPECIES.length());
4631 long[] r = fr.apply(SPECIES.length());
4632 boolean[] mask = fm.apply(SPECIES.length());
4633 VectorMask<Long> vmask = VectorMask.fromArray(SPECIES, mask, 0);
4634 long ra = 0;
4635
4636 for (int ic = 0; ic < INVOC_COUNT; ic++) {
4637 for (int i = 0; i < a.length; i += SPECIES.length()) {
4638 LongVector av = LongVector.fromArray(SPECIES, a, i);
4639 r[i] = av.reduceLanes(VectorOperators.SUADD, vmask);
4640 }
4641 }
4642
4643 for (int ic = 0; ic < INVOC_COUNT; ic++) {
4644 ra = 0;
4645 for (int i = 0; i < a.length; i += SPECIES.length()) {
4646 LongVector av = LongVector.fromArray(SPECIES, a, i);
4647 ra = (long) VectorMath.addSaturatingUnsigned(ra, av.reduceLanes(VectorOperators.SUADD, vmask));
4648 }
4649 }
4650
4651 assertReductionArraysEqualsMasked(r, ra, a, mask,
4652 LongMaxVectorTests::SUADDReduceMasked, LongMaxVectorTests::SUADDReduceAllMasked);
4653 }
4654
4655 @Test(dataProvider = "longBinaryOpProvider")
4656 static void withLongMaxVectorTests(IntFunction<long []> fa, IntFunction<long []> fb) {
4657 long[] a = fa.apply(SPECIES.length());
4658 long[] b = fb.apply(SPECIES.length());
4659 long[] r = fr.apply(SPECIES.length());
4660
4661 for (int ic = 0; ic < INVOC_COUNT; ic++) {
4662 for (int i = 0, j = 0; i < a.length; i += SPECIES.length()) {
4663 LongVector av = LongVector.fromArray(SPECIES, a, i);
4664 av.withLane(j, b[i + j]).intoArray(r, i);
4665 a[i + j] = b[i + j];
4666 j = (j + 1) & (SPECIES.length() - 1);
4667 }
4668 }
4669
4670
4671 assertArraysStrictlyEquals(r, a);
4672 }
4673
4674 static boolean testIS_DEFAULT(long a) {
4675 return bits(a)==0;
4676 }
4677
4678 @Test(dataProvider = "longTestOpProvider")
4679 static void IS_DEFAULTLongMaxVectorTests(IntFunction<long[]> fa) {
4680 long[] a = fa.apply(SPECIES.length());
4681
4682 for (int ic = 0; ic < INVOC_COUNT; ic++) {
4683 for (int i = 0; i < a.length; i += SPECIES.length()) {
4684 LongVector av = LongVector.fromArray(SPECIES, a, i);
4685 VectorMask<Long> mv = av.test(VectorOperators.IS_DEFAULT);
4686
4687 // Check results as part of computation.
4688 for (int j = 0; j < SPECIES.length(); j++) {
4689 Assert.assertEquals(mv.laneIsSet(j), testIS_DEFAULT(a[i + j]));
4690 }
4691 }
4692 }
4693 }
4694
4695 @Test(dataProvider = "longTestOpMaskProvider")
4696 static void IS_DEFAULTMaskedLongMaxVectorTests(IntFunction<long[]> fa,
4697 IntFunction<boolean[]> fm) {
4698 long[] a = fa.apply(SPECIES.length());
4699 boolean[] mask = fm.apply(SPECIES.length());
4700 VectorMask<Long> vmask = VectorMask.fromArray(SPECIES, mask, 0);
4701
4702 for (int ic = 0; ic < INVOC_COUNT; ic++) {
4703 for (int i = 0; i < a.length; i += SPECIES.length()) {
4704 LongVector av = LongVector.fromArray(SPECIES, a, i);
4705 VectorMask<Long> mv = av.test(VectorOperators.IS_DEFAULT, vmask);
4706
4707 // Check results as part of computation.
4708 for (int j = 0; j < SPECIES.length(); j++) {
4709 Assert.assertEquals(mv.laneIsSet(j), vmask.laneIsSet(j) && testIS_DEFAULT(a[i + j]));
4710 }
4711 }
4712 }
4713 }
4714
4715 static boolean testIS_NEGATIVE(long a) {
4716 return bits(a)<0;
4717 }
4718
4719 @Test(dataProvider = "longTestOpProvider")
4720 static void IS_NEGATIVELongMaxVectorTests(IntFunction<long[]> fa) {
4721 long[] a = fa.apply(SPECIES.length());
4722
4723 for (int ic = 0; ic < INVOC_COUNT; ic++) {
4724 for (int i = 0; i < a.length; i += SPECIES.length()) {
4725 LongVector av = LongVector.fromArray(SPECIES, a, i);
4726 VectorMask<Long> mv = av.test(VectorOperators.IS_NEGATIVE);
4727
4728 // Check results as part of computation.
4729 for (int j = 0; j < SPECIES.length(); j++) {
4730 Assert.assertEquals(mv.laneIsSet(j), testIS_NEGATIVE(a[i + j]));
4731 }
4732 }
4733 }
4734 }
4735
4736 @Test(dataProvider = "longTestOpMaskProvider")
4737 static void IS_NEGATIVEMaskedLongMaxVectorTests(IntFunction<long[]> fa,
4738 IntFunction<boolean[]> fm) {
4739 long[] a = fa.apply(SPECIES.length());
4740 boolean[] mask = fm.apply(SPECIES.length());
4741 VectorMask<Long> vmask = VectorMask.fromArray(SPECIES, mask, 0);
4742
4743 for (int ic = 0; ic < INVOC_COUNT; ic++) {
4744 for (int i = 0; i < a.length; i += SPECIES.length()) {
4745 LongVector av = LongVector.fromArray(SPECIES, a, i);
4746 VectorMask<Long> mv = av.test(VectorOperators.IS_NEGATIVE, vmask);
4747
4748 // Check results as part of computation.
4749 for (int j = 0; j < SPECIES.length(); j++) {
4750 Assert.assertEquals(mv.laneIsSet(j), vmask.laneIsSet(j) && testIS_NEGATIVE(a[i + j]));
4751 }
4752 }
4753 }
4754 }
4755
4756 @Test(dataProvider = "longCompareOpProvider")
4757 static void LTLongMaxVectorTests(IntFunction<long[]> fa, IntFunction<long[]> fb) {
4758 long[] a = fa.apply(SPECIES.length());
4759 long[] b = fb.apply(SPECIES.length());
4760
4761 for (int ic = 0; ic < INVOC_COUNT; ic++) {
4762 for (int i = 0; i < a.length; i += SPECIES.length()) {
4763 LongVector av = LongVector.fromArray(SPECIES, a, i);
4764 LongVector bv = LongVector.fromArray(SPECIES, b, i);
4765 VectorMask<Long> mv = av.compare(VectorOperators.LT, bv);
4766
4767 // Check results as part of computation.
4768 for (int j = 0; j < SPECIES.length(); j++) {
4769 Assert.assertEquals(mv.laneIsSet(j), lt(a[i + j], b[i + j]));
4770 }
4771 }
4772 }
4773 }
4774
4775 @Test(dataProvider = "longCompareOpProvider")
4776 static void ltLongMaxVectorTests(IntFunction<long[]> fa, IntFunction<long[]> fb) {
4777 long[] a = fa.apply(SPECIES.length());
4778 long[] b = fb.apply(SPECIES.length());
4779
4780 for (int ic = 0; ic < INVOC_COUNT; ic++) {
4781 for (int i = 0; i < a.length; i += SPECIES.length()) {
4782 LongVector av = LongVector.fromArray(SPECIES, a, i);
4783 LongVector bv = LongVector.fromArray(SPECIES, b, i);
4784 VectorMask<Long> mv = av.lt(bv);
4785
4786 // Check results as part of computation.
4787 for (int j = 0; j < SPECIES.length(); j++) {
4788 Assert.assertEquals(mv.laneIsSet(j), lt(a[i + j], b[i + j]));
4789 }
4790 }
4791 }
4792 }
4793
4794 @Test(dataProvider = "longCompareOpMaskProvider")
4795 static void LTLongMaxVectorTestsMasked(IntFunction<long[]> fa, IntFunction<long[]> fb,
4796 IntFunction<boolean[]> fm) {
4797 long[] a = fa.apply(SPECIES.length());
4798 long[] b = fb.apply(SPECIES.length());
4799 boolean[] mask = fm.apply(SPECIES.length());
4800
4801 VectorMask<Long> vmask = VectorMask.fromArray(SPECIES, mask, 0);
4802
4803 for (int ic = 0; ic < INVOC_COUNT; ic++) {
4804 for (int i = 0; i < a.length; i += SPECIES.length()) {
4805 LongVector av = LongVector.fromArray(SPECIES, a, i);
4806 LongVector bv = LongVector.fromArray(SPECIES, b, i);
4807 VectorMask<Long> mv = av.compare(VectorOperators.LT, bv, vmask);
4808
4809 // Check results as part of computation.
4810 for (int j = 0; j < SPECIES.length(); j++) {
4811 Assert.assertEquals(mv.laneIsSet(j), mask[j] && lt(a[i + j], b[i + j]));
4812 }
4813 }
4814 }
4815 }
4816
4817 @Test(dataProvider = "longCompareOpProvider")
4818 static void GTLongMaxVectorTests(IntFunction<long[]> fa, IntFunction<long[]> fb) {
4819 long[] a = fa.apply(SPECIES.length());
4820 long[] b = fb.apply(SPECIES.length());
4821
4822 for (int ic = 0; ic < INVOC_COUNT; ic++) {
4823 for (int i = 0; i < a.length; i += SPECIES.length()) {
4824 LongVector av = LongVector.fromArray(SPECIES, a, i);
4825 LongVector bv = LongVector.fromArray(SPECIES, b, i);
4826 VectorMask<Long> mv = av.compare(VectorOperators.GT, bv);
4827
4828 // Check results as part of computation.
4829 for (int j = 0; j < SPECIES.length(); j++) {
4830 Assert.assertEquals(mv.laneIsSet(j), gt(a[i + j], b[i + j]));
4831 }
4832 }
4833 }
4834 }
4835
4836 @Test(dataProvider = "longCompareOpMaskProvider")
4837 static void GTLongMaxVectorTestsMasked(IntFunction<long[]> fa, IntFunction<long[]> fb,
4838 IntFunction<boolean[]> fm) {
4839 long[] a = fa.apply(SPECIES.length());
4840 long[] b = fb.apply(SPECIES.length());
4841 boolean[] mask = fm.apply(SPECIES.length());
4842
4843 VectorMask<Long> vmask = VectorMask.fromArray(SPECIES, mask, 0);
4844
4845 for (int ic = 0; ic < INVOC_COUNT; ic++) {
4846 for (int i = 0; i < a.length; i += SPECIES.length()) {
4847 LongVector av = LongVector.fromArray(SPECIES, a, i);
4848 LongVector bv = LongVector.fromArray(SPECIES, b, i);
4849 VectorMask<Long> mv = av.compare(VectorOperators.GT, bv, vmask);
4850
4851 // Check results as part of computation.
4852 for (int j = 0; j < SPECIES.length(); j++) {
4853 Assert.assertEquals(mv.laneIsSet(j), mask[j] && gt(a[i + j], b[i + j]));
4854 }
4855 }
4856 }
4857 }
4858
4859 @Test(dataProvider = "longCompareOpProvider")
4860 static void EQLongMaxVectorTests(IntFunction<long[]> fa, IntFunction<long[]> fb) {
4861 long[] a = fa.apply(SPECIES.length());
4862 long[] b = fb.apply(SPECIES.length());
4863
4864 for (int ic = 0; ic < INVOC_COUNT; ic++) {
4865 for (int i = 0; i < a.length; i += SPECIES.length()) {
4866 LongVector av = LongVector.fromArray(SPECIES, a, i);
4867 LongVector bv = LongVector.fromArray(SPECIES, b, i);
4868 VectorMask<Long> mv = av.compare(VectorOperators.EQ, bv);
4869
4870 // Check results as part of computation.
4871 for (int j = 0; j < SPECIES.length(); j++) {
4872 Assert.assertEquals(mv.laneIsSet(j), eq(a[i + j], b[i + j]));
4873 }
4874 }
4875 }
4876 }
4877
4878 @Test(dataProvider = "longCompareOpProvider")
4879 static void eqLongMaxVectorTests(IntFunction<long[]> fa, IntFunction<long[]> fb) {
4880 long[] a = fa.apply(SPECIES.length());
4881 long[] b = fb.apply(SPECIES.length());
4882
4883 for (int ic = 0; ic < INVOC_COUNT; ic++) {
4884 for (int i = 0; i < a.length; i += SPECIES.length()) {
4885 LongVector av = LongVector.fromArray(SPECIES, a, i);
4886 LongVector bv = LongVector.fromArray(SPECIES, b, i);
4887 VectorMask<Long> mv = av.eq(bv);
4888
4889 // Check results as part of computation.
4890 for (int j = 0; j < SPECIES.length(); j++) {
4891 Assert.assertEquals(mv.laneIsSet(j), eq(a[i + j], b[i + j]));
4892 }
4893 }
4894 }
4895 }
4896
4897 @Test(dataProvider = "longCompareOpMaskProvider")
4898 static void EQLongMaxVectorTestsMasked(IntFunction<long[]> fa, IntFunction<long[]> fb,
4899 IntFunction<boolean[]> fm) {
4900 long[] a = fa.apply(SPECIES.length());
4901 long[] b = fb.apply(SPECIES.length());
4902 boolean[] mask = fm.apply(SPECIES.length());
4903
4904 VectorMask<Long> vmask = VectorMask.fromArray(SPECIES, mask, 0);
4905
4906 for (int ic = 0; ic < INVOC_COUNT; ic++) {
4907 for (int i = 0; i < a.length; i += SPECIES.length()) {
4908 LongVector av = LongVector.fromArray(SPECIES, a, i);
4909 LongVector bv = LongVector.fromArray(SPECIES, b, i);
4910 VectorMask<Long> mv = av.compare(VectorOperators.EQ, bv, vmask);
4911
4912 // Check results as part of computation.
4913 for (int j = 0; j < SPECIES.length(); j++) {
4914 Assert.assertEquals(mv.laneIsSet(j), mask[j] && eq(a[i + j], b[i + j]));
4915 }
4916 }
4917 }
4918 }
4919
4920 @Test(dataProvider = "longCompareOpProvider")
4921 static void NELongMaxVectorTests(IntFunction<long[]> fa, IntFunction<long[]> fb) {
4922 long[] a = fa.apply(SPECIES.length());
4923 long[] b = fb.apply(SPECIES.length());
4924
4925 for (int ic = 0; ic < INVOC_COUNT; ic++) {
4926 for (int i = 0; i < a.length; i += SPECIES.length()) {
4927 LongVector av = LongVector.fromArray(SPECIES, a, i);
4928 LongVector bv = LongVector.fromArray(SPECIES, b, i);
4929 VectorMask<Long> mv = av.compare(VectorOperators.NE, bv);
4930
4931 // Check results as part of computation.
4932 for (int j = 0; j < SPECIES.length(); j++) {
4933 Assert.assertEquals(mv.laneIsSet(j), neq(a[i + j], b[i + j]));
4934 }
4935 }
4936 }
4937 }
4938
4939 @Test(dataProvider = "longCompareOpMaskProvider")
4940 static void NELongMaxVectorTestsMasked(IntFunction<long[]> fa, IntFunction<long[]> fb,
4941 IntFunction<boolean[]> fm) {
4942 long[] a = fa.apply(SPECIES.length());
4943 long[] b = fb.apply(SPECIES.length());
4944 boolean[] mask = fm.apply(SPECIES.length());
4945
4946 VectorMask<Long> vmask = VectorMask.fromArray(SPECIES, mask, 0);
4947
4948 for (int ic = 0; ic < INVOC_COUNT; ic++) {
4949 for (int i = 0; i < a.length; i += SPECIES.length()) {
4950 LongVector av = LongVector.fromArray(SPECIES, a, i);
4951 LongVector bv = LongVector.fromArray(SPECIES, b, i);
4952 VectorMask<Long> mv = av.compare(VectorOperators.NE, bv, vmask);
4953
4954 // Check results as part of computation.
4955 for (int j = 0; j < SPECIES.length(); j++) {
4956 Assert.assertEquals(mv.laneIsSet(j), mask[j] && neq(a[i + j], b[i + j]));
4957 }
4958 }
4959 }
4960 }
4961
4962 @Test(dataProvider = "longCompareOpProvider")
4963 static void LELongMaxVectorTests(IntFunction<long[]> fa, IntFunction<long[]> fb) {
4964 long[] a = fa.apply(SPECIES.length());
4965 long[] b = fb.apply(SPECIES.length());
4966
4967 for (int ic = 0; ic < INVOC_COUNT; ic++) {
4968 for (int i = 0; i < a.length; i += SPECIES.length()) {
4969 LongVector av = LongVector.fromArray(SPECIES, a, i);
4970 LongVector bv = LongVector.fromArray(SPECIES, b, i);
4971 VectorMask<Long> mv = av.compare(VectorOperators.LE, bv);
4972
4973 // Check results as part of computation.
4974 for (int j = 0; j < SPECIES.length(); j++) {
4975 Assert.assertEquals(mv.laneIsSet(j), le(a[i + j], b[i + j]));
4976 }
4977 }
4978 }
4979 }
4980
4981 @Test(dataProvider = "longCompareOpMaskProvider")
4982 static void LELongMaxVectorTestsMasked(IntFunction<long[]> fa, IntFunction<long[]> fb,
4983 IntFunction<boolean[]> fm) {
4984 long[] a = fa.apply(SPECIES.length());
4985 long[] b = fb.apply(SPECIES.length());
4986 boolean[] mask = fm.apply(SPECIES.length());
4987
4988 VectorMask<Long> vmask = VectorMask.fromArray(SPECIES, mask, 0);
4989
4990 for (int ic = 0; ic < INVOC_COUNT; ic++) {
4991 for (int i = 0; i < a.length; i += SPECIES.length()) {
4992 LongVector av = LongVector.fromArray(SPECIES, a, i);
4993 LongVector bv = LongVector.fromArray(SPECIES, b, i);
4994 VectorMask<Long> mv = av.compare(VectorOperators.LE, bv, vmask);
4995
4996 // Check results as part of computation.
4997 for (int j = 0; j < SPECIES.length(); j++) {
4998 Assert.assertEquals(mv.laneIsSet(j), mask[j] && le(a[i + j], b[i + j]));
4999 }
5000 }
5001 }
5002 }
5003
5004 @Test(dataProvider = "longCompareOpProvider")
5005 static void GELongMaxVectorTests(IntFunction<long[]> fa, IntFunction<long[]> fb) {
5006 long[] a = fa.apply(SPECIES.length());
5007 long[] b = fb.apply(SPECIES.length());
5008
5009 for (int ic = 0; ic < INVOC_COUNT; ic++) {
5010 for (int i = 0; i < a.length; i += SPECIES.length()) {
5011 LongVector av = LongVector.fromArray(SPECIES, a, i);
5012 LongVector bv = LongVector.fromArray(SPECIES, b, i);
5013 VectorMask<Long> mv = av.compare(VectorOperators.GE, bv);
5014
5015 // Check results as part of computation.
5016 for (int j = 0; j < SPECIES.length(); j++) {
5017 Assert.assertEquals(mv.laneIsSet(j), ge(a[i + j], b[i + j]));
5018 }
5019 }
5020 }
5021 }
5022
5023 @Test(dataProvider = "longCompareOpMaskProvider")
5024 static void GELongMaxVectorTestsMasked(IntFunction<long[]> fa, IntFunction<long[]> fb,
5025 IntFunction<boolean[]> fm) {
5026 long[] a = fa.apply(SPECIES.length());
5027 long[] b = fb.apply(SPECIES.length());
5028 boolean[] mask = fm.apply(SPECIES.length());
5029
5030 VectorMask<Long> vmask = VectorMask.fromArray(SPECIES, mask, 0);
5031
5032 for (int ic = 0; ic < INVOC_COUNT; ic++) {
5033 for (int i = 0; i < a.length; i += SPECIES.length()) {
5034 LongVector av = LongVector.fromArray(SPECIES, a, i);
5035 LongVector bv = LongVector.fromArray(SPECIES, b, i);
5036 VectorMask<Long> mv = av.compare(VectorOperators.GE, bv, vmask);
5037
5038 // Check results as part of computation.
5039 for (int j = 0; j < SPECIES.length(); j++) {
5040 Assert.assertEquals(mv.laneIsSet(j), mask[j] && ge(a[i + j], b[i + j]));
5041 }
5042 }
5043 }
5044 }
5045
5046 @Test(dataProvider = "longCompareOpProvider")
5047 static void ULTLongMaxVectorTests(IntFunction<long[]> fa, IntFunction<long[]> fb) {
5048 long[] a = fa.apply(SPECIES.length());
5049 long[] b = fb.apply(SPECIES.length());
5050
5051 for (int ic = 0; ic < INVOC_COUNT; ic++) {
5052 for (int i = 0; i < a.length; i += SPECIES.length()) {
5053 LongVector av = LongVector.fromArray(SPECIES, a, i);
5054 LongVector bv = LongVector.fromArray(SPECIES, b, i);
5055 VectorMask<Long> mv = av.compare(VectorOperators.ULT, bv);
5056
5057 // Check results as part of computation.
5058 for (int j = 0; j < SPECIES.length(); j++) {
5059 Assert.assertEquals(mv.laneIsSet(j), ult(a[i + j], b[i + j]));
5060 }
5061 }
5062 }
5063 }
5064
5065 @Test(dataProvider = "longCompareOpMaskProvider")
5066 static void ULTLongMaxVectorTestsMasked(IntFunction<long[]> fa, IntFunction<long[]> fb,
5067 IntFunction<boolean[]> fm) {
5068 long[] a = fa.apply(SPECIES.length());
5069 long[] b = fb.apply(SPECIES.length());
5070 boolean[] mask = fm.apply(SPECIES.length());
5071
5072 VectorMask<Long> vmask = VectorMask.fromArray(SPECIES, mask, 0);
5073
5074 for (int ic = 0; ic < INVOC_COUNT; ic++) {
5075 for (int i = 0; i < a.length; i += SPECIES.length()) {
5076 LongVector av = LongVector.fromArray(SPECIES, a, i);
5077 LongVector bv = LongVector.fromArray(SPECIES, b, i);
5078 VectorMask<Long> mv = av.compare(VectorOperators.ULT, bv, vmask);
5079
5080 // Check results as part of computation.
5081 for (int j = 0; j < SPECIES.length(); j++) {
5082 Assert.assertEquals(mv.laneIsSet(j), mask[j] && ult(a[i + j], b[i + j]));
5083 }
5084 }
5085 }
5086 }
5087
5088 @Test(dataProvider = "longCompareOpProvider")
5089 static void UGTLongMaxVectorTests(IntFunction<long[]> fa, IntFunction<long[]> fb) {
5090 long[] a = fa.apply(SPECIES.length());
5091 long[] b = fb.apply(SPECIES.length());
5092
5093 for (int ic = 0; ic < INVOC_COUNT; ic++) {
5094 for (int i = 0; i < a.length; i += SPECIES.length()) {
5095 LongVector av = LongVector.fromArray(SPECIES, a, i);
5096 LongVector bv = LongVector.fromArray(SPECIES, b, i);
5097 VectorMask<Long> mv = av.compare(VectorOperators.UGT, bv);
5098
5099 // Check results as part of computation.
5100 for (int j = 0; j < SPECIES.length(); j++) {
5101 Assert.assertEquals(mv.laneIsSet(j), ugt(a[i + j], b[i + j]));
5102 }
5103 }
5104 }
5105 }
5106
5107 @Test(dataProvider = "longCompareOpMaskProvider")
5108 static void UGTLongMaxVectorTestsMasked(IntFunction<long[]> fa, IntFunction<long[]> fb,
5109 IntFunction<boolean[]> fm) {
5110 long[] a = fa.apply(SPECIES.length());
5111 long[] b = fb.apply(SPECIES.length());
5112 boolean[] mask = fm.apply(SPECIES.length());
5113
5114 VectorMask<Long> vmask = VectorMask.fromArray(SPECIES, mask, 0);
5115
5116 for (int ic = 0; ic < INVOC_COUNT; ic++) {
5117 for (int i = 0; i < a.length; i += SPECIES.length()) {
5118 LongVector av = LongVector.fromArray(SPECIES, a, i);
5119 LongVector bv = LongVector.fromArray(SPECIES, b, i);
5120 VectorMask<Long> mv = av.compare(VectorOperators.UGT, bv, vmask);
5121
5122 // Check results as part of computation.
5123 for (int j = 0; j < SPECIES.length(); j++) {
5124 Assert.assertEquals(mv.laneIsSet(j), mask[j] && ugt(a[i + j], b[i + j]));
5125 }
5126 }
5127 }
5128 }
5129
5130 @Test(dataProvider = "longCompareOpProvider")
5131 static void ULELongMaxVectorTests(IntFunction<long[]> fa, IntFunction<long[]> fb) {
5132 long[] a = fa.apply(SPECIES.length());
5133 long[] b = fb.apply(SPECIES.length());
5134
5135 for (int ic = 0; ic < INVOC_COUNT; ic++) {
5136 for (int i = 0; i < a.length; i += SPECIES.length()) {
5137 LongVector av = LongVector.fromArray(SPECIES, a, i);
5138 LongVector bv = LongVector.fromArray(SPECIES, b, i);
5139 VectorMask<Long> mv = av.compare(VectorOperators.ULE, bv);
5140
5141 // Check results as part of computation.
5142 for (int j = 0; j < SPECIES.length(); j++) {
5143 Assert.assertEquals(mv.laneIsSet(j), ule(a[i + j], b[i + j]));
5144 }
5145 }
5146 }
5147 }
5148
5149 @Test(dataProvider = "longCompareOpMaskProvider")
5150 static void ULELongMaxVectorTestsMasked(IntFunction<long[]> fa, IntFunction<long[]> fb,
5151 IntFunction<boolean[]> fm) {
5152 long[] a = fa.apply(SPECIES.length());
5153 long[] b = fb.apply(SPECIES.length());
5154 boolean[] mask = fm.apply(SPECIES.length());
5155
5156 VectorMask<Long> vmask = VectorMask.fromArray(SPECIES, mask, 0);
5157
5158 for (int ic = 0; ic < INVOC_COUNT; ic++) {
5159 for (int i = 0; i < a.length; i += SPECIES.length()) {
5160 LongVector av = LongVector.fromArray(SPECIES, a, i);
5161 LongVector bv = LongVector.fromArray(SPECIES, b, i);
5162 VectorMask<Long> mv = av.compare(VectorOperators.ULE, bv, vmask);
5163
5164 // Check results as part of computation.
5165 for (int j = 0; j < SPECIES.length(); j++) {
5166 Assert.assertEquals(mv.laneIsSet(j), mask[j] && ule(a[i + j], b[i + j]));
5167 }
5168 }
5169 }
5170 }
5171
5172 @Test(dataProvider = "longCompareOpProvider")
5173 static void UGELongMaxVectorTests(IntFunction<long[]> fa, IntFunction<long[]> fb) {
5174 long[] a = fa.apply(SPECIES.length());
5175 long[] b = fb.apply(SPECIES.length());
5176
5177 for (int ic = 0; ic < INVOC_COUNT; ic++) {
5178 for (int i = 0; i < a.length; i += SPECIES.length()) {
5179 LongVector av = LongVector.fromArray(SPECIES, a, i);
5180 LongVector bv = LongVector.fromArray(SPECIES, b, i);
5181 VectorMask<Long> mv = av.compare(VectorOperators.UGE, bv);
5182
5183 // Check results as part of computation.
5184 for (int j = 0; j < SPECIES.length(); j++) {
5185 Assert.assertEquals(mv.laneIsSet(j), uge(a[i + j], b[i + j]));
5186 }
5187 }
5188 }
5189 }
5190
5191 @Test(dataProvider = "longCompareOpMaskProvider")
5192 static void UGELongMaxVectorTestsMasked(IntFunction<long[]> fa, IntFunction<long[]> fb,
5193 IntFunction<boolean[]> fm) {
5194 long[] a = fa.apply(SPECIES.length());
5195 long[] b = fb.apply(SPECIES.length());
5196 boolean[] mask = fm.apply(SPECIES.length());
5197
5198 VectorMask<Long> vmask = VectorMask.fromArray(SPECIES, mask, 0);
5199
5200 for (int ic = 0; ic < INVOC_COUNT; ic++) {
5201 for (int i = 0; i < a.length; i += SPECIES.length()) {
5202 LongVector av = LongVector.fromArray(SPECIES, a, i);
5203 LongVector bv = LongVector.fromArray(SPECIES, b, i);
5204 VectorMask<Long> mv = av.compare(VectorOperators.UGE, bv, vmask);
5205
5206 // Check results as part of computation.
5207 for (int j = 0; j < SPECIES.length(); j++) {
5208 Assert.assertEquals(mv.laneIsSet(j), mask[j] && uge(a[i + j], b[i + j]));
5209 }
5210 }
5211 }
5212 }
5213
5214 @Test(dataProvider = "longCompareOpProvider")
5215 static void LTLongMaxVectorTestsBroadcastSmokeTest(IntFunction<long[]> fa, IntFunction<long[]> fb) {
5216 long[] a = fa.apply(SPECIES.length());
5217 long[] b = fb.apply(SPECIES.length());
5218
5219 for (int i = 0; i < a.length; i += SPECIES.length()) {
5220 LongVector av = LongVector.fromArray(SPECIES, a, i);
5221 VectorMask<Long> mv = av.compare(VectorOperators.LT, b[i]);
5222
5223 // Check results as part of computation.
5224 for (int j = 0; j < SPECIES.length(); j++) {
5225 Assert.assertEquals(mv.laneIsSet(j), a[i + j] < b[i]);
5226 }
5227 }
5228 }
5229
5230 @Test(dataProvider = "longCompareOpMaskProvider")
5231 static void LTLongMaxVectorTestsBroadcastMaskedSmokeTest(IntFunction<long[]> fa,
5232 IntFunction<long[]> fb, IntFunction<boolean[]> fm) {
5233 long[] a = fa.apply(SPECIES.length());
5234 long[] b = fb.apply(SPECIES.length());
5235 boolean[] mask = fm.apply(SPECIES.length());
5236
5237 VectorMask<Long> vmask = VectorMask.fromArray(SPECIES, mask, 0);
5238
5239 for (int i = 0; i < a.length; i += SPECIES.length()) {
5240 LongVector av = LongVector.fromArray(SPECIES, a, i);
5241 VectorMask<Long> mv = av.compare(VectorOperators.LT, b[i], vmask);
5242
5243 // Check results as part of computation.
5244 for (int j = 0; j < SPECIES.length(); j++) {
5245 Assert.assertEquals(mv.laneIsSet(j), mask[j] && (a[i + j] < b[i]));
5246 }
5247 }
5248 }
5249
5250
5251 @Test(dataProvider = "longCompareOpProvider")
5252 static void EQLongMaxVectorTestsBroadcastSmokeTest(IntFunction<long[]> fa, IntFunction<long[]> fb) {
5253 long[] a = fa.apply(SPECIES.length());
5254 long[] b = fb.apply(SPECIES.length());
5255
5256 for (int i = 0; i < a.length; i += SPECIES.length()) {
5257 LongVector av = LongVector.fromArray(SPECIES, a, i);
5258 VectorMask<Long> mv = av.compare(VectorOperators.EQ, b[i]);
5259
5260 // Check results as part of computation.
5261 for (int j = 0; j < SPECIES.length(); j++) {
5262 Assert.assertEquals(mv.laneIsSet(j), a[i + j] == b[i]);
5263 }
5264 }
5265 }
5266
5267 @Test(dataProvider = "longCompareOpMaskProvider")
5268 static void EQLongMaxVectorTestsBroadcastMaskedSmokeTest(IntFunction<long[]> fa,
5269 IntFunction<long[]> fb, IntFunction<boolean[]> fm) {
5270 long[] a = fa.apply(SPECIES.length());
5271 long[] b = fb.apply(SPECIES.length());
5272 boolean[] mask = fm.apply(SPECIES.length());
5273
5274 VectorMask<Long> vmask = VectorMask.fromArray(SPECIES, mask, 0);
5275
5276 for (int i = 0; i < a.length; i += SPECIES.length()) {
5277 LongVector av = LongVector.fromArray(SPECIES, a, i);
5278 VectorMask<Long> mv = av.compare(VectorOperators.EQ, b[i], vmask);
5279
5280 // Check results as part of computation.
5281 for (int j = 0; j < SPECIES.length(); j++) {
5282 Assert.assertEquals(mv.laneIsSet(j), mask[j] && (a[i + j] == b[i]));
5283 }
5284 }
5285 }
5286
5287
5288 static long blend(long a, long b, boolean mask) {
5289 return mask ? b : a;
5290 }
5291
5292 @Test(dataProvider = "longBinaryOpMaskProvider")
5293 static void blendLongMaxVectorTests(IntFunction<long[]> fa, IntFunction<long[]> fb,
5294 IntFunction<boolean[]> fm) {
5295 long[] a = fa.apply(SPECIES.length());
5296 long[] b = fb.apply(SPECIES.length());
5297 long[] r = fr.apply(SPECIES.length());
5298 boolean[] mask = fm.apply(SPECIES.length());
5299 VectorMask<Long> vmask = VectorMask.fromArray(SPECIES, mask, 0);
5300
5301 for (int ic = 0; ic < INVOC_COUNT; ic++) {
5302 for (int i = 0; i < a.length; i += SPECIES.length()) {
5303 LongVector av = LongVector.fromArray(SPECIES, a, i);
5304 LongVector bv = LongVector.fromArray(SPECIES, b, i);
5305 av.blend(bv, vmask).intoArray(r, i);
5306 }
5307 }
5308
5309 assertArraysEquals(r, a, b, mask, LongMaxVectorTests::blend);
5310 }
5311
5312 @Test(dataProvider = "longUnaryOpShuffleProvider")
5313 static void RearrangeLongMaxVectorTests(IntFunction<long[]> fa,
5314 BiFunction<Integer,Integer,int[]> fs) {
5315 long[] a = fa.apply(SPECIES.length());
5316 int[] order = fs.apply(a.length, SPECIES.length());
5317 long[] r = fr.apply(SPECIES.length());
5318
5319 for (int ic = 0; ic < INVOC_COUNT; ic++) {
5320 for (int i = 0; i < a.length; i += SPECIES.length()) {
5321 LongVector av = LongVector.fromArray(SPECIES, a, i);
5322 av.rearrange(VectorShuffle.fromArray(SPECIES, order, i)).intoArray(r, i);
5323 }
5324 }
5325
5326 assertRearrangeArraysEquals(r, a, order, SPECIES.length());
5327 }
5328
5329 @Test(dataProvider = "longUnaryOpShuffleMaskProvider")
5330 static void RearrangeLongMaxVectorTestsMaskedSmokeTest(IntFunction<long[]> fa,
5331 BiFunction<Integer,Integer,int[]> fs,
5332 IntFunction<boolean[]> fm) {
5333 long[] a = fa.apply(SPECIES.length());
5334 int[] order = fs.apply(a.length, SPECIES.length());
5335 long[] r = fr.apply(SPECIES.length());
5336 boolean[] mask = fm.apply(SPECIES.length());
5337 VectorMask<Long> vmask = VectorMask.fromArray(SPECIES, mask, 0);
5338
5339 for (int i = 0; i < a.length; i += SPECIES.length()) {
5340 LongVector av = LongVector.fromArray(SPECIES, a, i);
5341 av.rearrange(VectorShuffle.fromArray(SPECIES, order, i), vmask).intoArray(r, i);
5342 }
5343
5344 assertRearrangeArraysEquals(r, a, order, mask, SPECIES.length());
5345 }
5346
5347 @Test(dataProvider = "longUnaryOpMaskProvider")
5348 static void compressLongMaxVectorTests(IntFunction<long[]> fa,
5349 IntFunction<boolean[]> fm) {
5350 long[] a = fa.apply(SPECIES.length());
5351 long[] r = fr.apply(SPECIES.length());
5352 boolean[] mask = fm.apply(SPECIES.length());
5353 VectorMask<Long> vmask = VectorMask.fromArray(SPECIES, mask, 0);
5354
5355 for (int ic = 0; ic < INVOC_COUNT; ic++) {
5356 for (int i = 0; i < a.length; i += SPECIES.length()) {
5357 LongVector av = LongVector.fromArray(SPECIES, a, i);
5358 av.compress(vmask).intoArray(r, i);
5359 }
5360 }
5361
5362 assertcompressArraysEquals(r, a, mask, SPECIES.length());
5363 }
5364
5365 @Test(dataProvider = "longUnaryOpMaskProvider")
5366 static void expandLongMaxVectorTests(IntFunction<long[]> fa,
5367 IntFunction<boolean[]> fm) {
5368 long[] a = fa.apply(SPECIES.length());
5369 long[] r = fr.apply(SPECIES.length());
5370 boolean[] mask = fm.apply(SPECIES.length());
5371 VectorMask<Long> vmask = VectorMask.fromArray(SPECIES, mask, 0);
5372
5373 for (int ic = 0; ic < INVOC_COUNT; ic++) {
5374 for (int i = 0; i < a.length; i += SPECIES.length()) {
5375 LongVector av = LongVector.fromArray(SPECIES, a, i);
5376 av.expand(vmask).intoArray(r, i);
5377 }
5378 }
5379
5380 assertexpandArraysEquals(r, a, mask, SPECIES.length());
5381 }
5382
5383 @Test(dataProvider = "longUnaryOpProvider")
5384 static void getLongMaxVectorTests(IntFunction<long[]> fa) {
5385 long[] a = fa.apply(SPECIES.length());
5386 long[] r = fr.apply(SPECIES.length());
5387
5388 for (int ic = 0; ic < INVOC_COUNT; ic++) {
5389 for (int i = 0; i < a.length; i += SPECIES.length()) {
5390 LongVector av = LongVector.fromArray(SPECIES, a, i);
5391 int num_lanes = SPECIES.length();
5392 // Manually unroll because full unroll happens after intrinsification.
5393 // Unroll is needed because get intrinsic requires for index to be a known constant.
5394 if (num_lanes == 1) {
5395 r[i]=av.lane(0);
5396 } else if (num_lanes == 2) {
5397 r[i]=av.lane(0);
5398 r[i+1]=av.lane(1);
5399 } else if (num_lanes == 4) {
5400 r[i]=av.lane(0);
5401 r[i+1]=av.lane(1);
5402 r[i+2]=av.lane(2);
5403 r[i+3]=av.lane(3);
5404 } else if (num_lanes == 8) {
5405 r[i]=av.lane(0);
5406 r[i+1]=av.lane(1);
5407 r[i+2]=av.lane(2);
5408 r[i+3]=av.lane(3);
5409 r[i+4]=av.lane(4);
5410 r[i+5]=av.lane(5);
5411 r[i+6]=av.lane(6);
5412 r[i+7]=av.lane(7);
5413 } else if (num_lanes == 16) {
5414 r[i]=av.lane(0);
5415 r[i+1]=av.lane(1);
5416 r[i+2]=av.lane(2);
5417 r[i+3]=av.lane(3);
5418 r[i+4]=av.lane(4);
5419 r[i+5]=av.lane(5);
5420 r[i+6]=av.lane(6);
5421 r[i+7]=av.lane(7);
5422 r[i+8]=av.lane(8);
5423 r[i+9]=av.lane(9);
5424 r[i+10]=av.lane(10);
5425 r[i+11]=av.lane(11);
5426 r[i+12]=av.lane(12);
5427 r[i+13]=av.lane(13);
5428 r[i+14]=av.lane(14);
5429 r[i+15]=av.lane(15);
5430 } else if (num_lanes == 32) {
5431 r[i]=av.lane(0);
5432 r[i+1]=av.lane(1);
5433 r[i+2]=av.lane(2);
5434 r[i+3]=av.lane(3);
5435 r[i+4]=av.lane(4);
5436 r[i+5]=av.lane(5);
5437 r[i+6]=av.lane(6);
5438 r[i+7]=av.lane(7);
5439 r[i+8]=av.lane(8);
5440 r[i+9]=av.lane(9);
5441 r[i+10]=av.lane(10);
5442 r[i+11]=av.lane(11);
5443 r[i+12]=av.lane(12);
5444 r[i+13]=av.lane(13);
5445 r[i+14]=av.lane(14);
5446 r[i+15]=av.lane(15);
5447 r[i+16]=av.lane(16);
5448 r[i+17]=av.lane(17);
5449 r[i+18]=av.lane(18);
5450 r[i+19]=av.lane(19);
5451 r[i+20]=av.lane(20);
5452 r[i+21]=av.lane(21);
5453 r[i+22]=av.lane(22);
5454 r[i+23]=av.lane(23);
5455 r[i+24]=av.lane(24);
5456 r[i+25]=av.lane(25);
5457 r[i+26]=av.lane(26);
5458 r[i+27]=av.lane(27);
5459 r[i+28]=av.lane(28);
5460 r[i+29]=av.lane(29);
5461 r[i+30]=av.lane(30);
5462 r[i+31]=av.lane(31);
5463 } else if (num_lanes == 64) {
5464 r[i]=av.lane(0);
5465 r[i+1]=av.lane(1);
5466 r[i+2]=av.lane(2);
5467 r[i+3]=av.lane(3);
5468 r[i+4]=av.lane(4);
5469 r[i+5]=av.lane(5);
5470 r[i+6]=av.lane(6);
5471 r[i+7]=av.lane(7);
5472 r[i+8]=av.lane(8);
5473 r[i+9]=av.lane(9);
5474 r[i+10]=av.lane(10);
5475 r[i+11]=av.lane(11);
5476 r[i+12]=av.lane(12);
5477 r[i+13]=av.lane(13);
5478 r[i+14]=av.lane(14);
5479 r[i+15]=av.lane(15);
5480 r[i+16]=av.lane(16);
5481 r[i+17]=av.lane(17);
5482 r[i+18]=av.lane(18);
5483 r[i+19]=av.lane(19);
5484 r[i+20]=av.lane(20);
5485 r[i+21]=av.lane(21);
5486 r[i+22]=av.lane(22);
5487 r[i+23]=av.lane(23);
5488 r[i+24]=av.lane(24);
5489 r[i+25]=av.lane(25);
5490 r[i+26]=av.lane(26);
5491 r[i+27]=av.lane(27);
5492 r[i+28]=av.lane(28);
5493 r[i+29]=av.lane(29);
5494 r[i+30]=av.lane(30);
5495 r[i+31]=av.lane(31);
5496 r[i+32]=av.lane(32);
5497 r[i+33]=av.lane(33);
5498 r[i+34]=av.lane(34);
5499 r[i+35]=av.lane(35);
5500 r[i+36]=av.lane(36);
5501 r[i+37]=av.lane(37);
5502 r[i+38]=av.lane(38);
5503 r[i+39]=av.lane(39);
5504 r[i+40]=av.lane(40);
5505 r[i+41]=av.lane(41);
5506 r[i+42]=av.lane(42);
5507 r[i+43]=av.lane(43);
5508 r[i+44]=av.lane(44);
5509 r[i+45]=av.lane(45);
5510 r[i+46]=av.lane(46);
5511 r[i+47]=av.lane(47);
5512 r[i+48]=av.lane(48);
5513 r[i+49]=av.lane(49);
5514 r[i+50]=av.lane(50);
5515 r[i+51]=av.lane(51);
5516 r[i+52]=av.lane(52);
5517 r[i+53]=av.lane(53);
5518 r[i+54]=av.lane(54);
5519 r[i+55]=av.lane(55);
5520 r[i+56]=av.lane(56);
5521 r[i+57]=av.lane(57);
5522 r[i+58]=av.lane(58);
5523 r[i+59]=av.lane(59);
5524 r[i+60]=av.lane(60);
5525 r[i+61]=av.lane(61);
5526 r[i+62]=av.lane(62);
5527 r[i+63]=av.lane(63);
5528 } else {
5529 for (int j = 0; j < SPECIES.length(); j++) {
5530 r[i+j]=av.lane(j);
5531 }
5532 }
5533 }
5534 }
5535
5536 assertArraysStrictlyEquals(r, a);
5537 }
5538
5539 @Test(dataProvider = "longUnaryOpProvider")
5540 static void BroadcastLongMaxVectorTests(IntFunction<long[]> fa) {
5541 long[] a = fa.apply(SPECIES.length());
5542 long[] r = new long[a.length];
5543
5544 for (int ic = 0; ic < INVOC_COUNT; ic++) {
5545 for (int i = 0; i < a.length; i += SPECIES.length()) {
5546 LongVector.broadcast(SPECIES, a[i]).intoArray(r, i);
5547 }
5548 }
5549
5550 assertBroadcastArraysEquals(r, a);
5551 }
5552
5553 @Test(dataProvider = "longUnaryOpProvider")
5554 static void ZeroLongMaxVectorTests(IntFunction<long[]> fa) {
5555 long[] a = fa.apply(SPECIES.length());
5556 long[] r = new long[a.length];
5557
5558 for (int ic = 0; ic < INVOC_COUNT; ic++) {
5559 for (int i = 0; i < a.length; i += SPECIES.length()) {
5560 LongVector.zero(SPECIES).intoArray(a, i);
5561 }
5562 }
5563
5564 Assert.assertEquals(a, r);
5565 }
5566
5567 static long[] sliceUnary(long[] a, int origin, int idx) {
5568 long[] res = new long[SPECIES.length()];
5569 for (int i = 0; i < SPECIES.length(); i++){
5570 if(i+origin < SPECIES.length())
5571 res[i] = a[idx+i+origin];
5572 else
5573 res[i] = (long)0;
5574 }
5575 return res;
5576 }
5577
5578 @Test(dataProvider = "longUnaryOpProvider")
5579 static void sliceUnaryLongMaxVectorTests(IntFunction<long[]> fa) {
5580 long[] a = fa.apply(SPECIES.length());
5581 long[] r = new long[a.length];
5582 int origin = RAND.nextInt(SPECIES.length());
5583 for (int ic = 0; ic < INVOC_COUNT; ic++) {
5584 for (int i = 0; i < a.length; i += SPECIES.length()) {
5585 LongVector av = LongVector.fromArray(SPECIES, a, i);
5586 av.slice(origin).intoArray(r, i);
5587 }
5588 }
5589
5590 assertArraysEquals(r, a, origin, LongMaxVectorTests::sliceUnary);
5591 }
5592
5593 static long[] sliceBinary(long[] a, long[] b, int origin, int idx) {
5594 long[] res = new long[SPECIES.length()];
5595 for (int i = 0, j = 0; i < SPECIES.length(); i++){
5596 if(i+origin < SPECIES.length())
5597 res[i] = a[idx+i+origin];
5598 else {
5599 res[i] = b[idx+j];
5600 j++;
5601 }
5602 }
5603 return res;
5604 }
5605
5606 @Test(dataProvider = "longBinaryOpProvider")
5607 static void sliceBinaryLongMaxVectorTestsBinary(IntFunction<long[]> fa, IntFunction<long[]> fb) {
5608 long[] a = fa.apply(SPECIES.length());
5609 long[] b = fb.apply(SPECIES.length());
5610 long[] r = new long[a.length];
5611 int origin = RAND.nextInt(SPECIES.length());
5612 for (int ic = 0; ic < INVOC_COUNT; ic++) {
5613 for (int i = 0; i < a.length; i += SPECIES.length()) {
5614 LongVector av = LongVector.fromArray(SPECIES, a, i);
5615 LongVector bv = LongVector.fromArray(SPECIES, b, i);
5616 av.slice(origin, bv).intoArray(r, i);
5617 }
5618 }
5619
5620 assertArraysEquals(r, a, b, origin, LongMaxVectorTests::sliceBinary);
5621 }
5622
5623 static long[] slice(long[] a, long[] b, int origin, boolean[] mask, int idx) {
5624 long[] res = new long[SPECIES.length()];
5625 for (int i = 0, j = 0; i < SPECIES.length(); i++){
5626 if(i+origin < SPECIES.length())
5627 res[i] = mask[i] ? a[idx+i+origin] : (long)0;
5628 else {
5629 res[i] = mask[i] ? b[idx+j] : (long)0;
5630 j++;
5631 }
5632 }
5633 return res;
5634 }
5635
5636 @Test(dataProvider = "longBinaryOpMaskProvider")
5637 static void sliceLongMaxVectorTestsMasked(IntFunction<long[]> fa, IntFunction<long[]> fb,
5638 IntFunction<boolean[]> fm) {
5639 long[] a = fa.apply(SPECIES.length());
5640 long[] b = fb.apply(SPECIES.length());
5641 boolean[] mask = fm.apply(SPECIES.length());
5642 VectorMask<Long> vmask = VectorMask.fromArray(SPECIES, mask, 0);
5643
5644 long[] r = new long[a.length];
5645 int origin = RAND.nextInt(SPECIES.length());
5646 for (int ic = 0; ic < INVOC_COUNT; ic++) {
5647 for (int i = 0; i < a.length; i += SPECIES.length()) {
5648 LongVector av = LongVector.fromArray(SPECIES, a, i);
5649 LongVector bv = LongVector.fromArray(SPECIES, b, i);
5650 av.slice(origin, bv, vmask).intoArray(r, i);
5651 }
5652 }
5653
5654 assertArraysEquals(r, a, b, origin, mask, LongMaxVectorTests::slice);
5655 }
5656
5657 static long[] unsliceUnary(long[] a, int origin, int idx) {
5658 long[] res = new long[SPECIES.length()];
5659 for (int i = 0, j = 0; i < SPECIES.length(); i++){
5660 if(i < origin)
5661 res[i] = (long)0;
5662 else {
5663 res[i] = a[idx+j];
5664 j++;
5665 }
5666 }
5667 return res;
5668 }
5669
5670 @Test(dataProvider = "longUnaryOpProvider")
5671 static void unsliceUnaryLongMaxVectorTests(IntFunction<long[]> fa) {
5672 long[] a = fa.apply(SPECIES.length());
5673 long[] r = new long[a.length];
5674 int origin = RAND.nextInt(SPECIES.length());
5675 for (int ic = 0; ic < INVOC_COUNT; ic++) {
5676 for (int i = 0; i < a.length; i += SPECIES.length()) {
5677 LongVector av = LongVector.fromArray(SPECIES, a, i);
5678 av.unslice(origin).intoArray(r, i);
5679 }
5680 }
5681
5682 assertArraysEquals(r, a, origin, LongMaxVectorTests::unsliceUnary);
5683 }
5684
5685 static long[] unsliceBinary(long[] a, long[] b, int origin, int part, int idx) {
5686 long[] res = new long[SPECIES.length()];
5687 for (int i = 0, j = 0; i < SPECIES.length(); i++){
5688 if (part == 0) {
5689 if (i < origin)
5690 res[i] = b[idx+i];
5691 else {
5692 res[i] = a[idx+j];
5693 j++;
5694 }
5695 } else if (part == 1) {
5696 if (i < origin)
5697 res[i] = a[idx+SPECIES.length()-origin+i];
5698 else {
5699 res[i] = b[idx+origin+j];
5700 j++;
5701 }
5702 }
5703 }
5704 return res;
5705 }
5706
5707 @Test(dataProvider = "longBinaryOpProvider")
5708 static void unsliceBinaryLongMaxVectorTestsBinary(IntFunction<long[]> fa, IntFunction<long[]> fb) {
5709 long[] a = fa.apply(SPECIES.length());
5710 long[] b = fb.apply(SPECIES.length());
5711 long[] r = new long[a.length];
5712 int origin = RAND.nextInt(SPECIES.length());
5713 int part = RAND.nextInt(2);
5714 for (int ic = 0; ic < INVOC_COUNT; ic++) {
5715 for (int i = 0; i < a.length; i += SPECIES.length()) {
5716 LongVector av = LongVector.fromArray(SPECIES, a, i);
5717 LongVector bv = LongVector.fromArray(SPECIES, b, i);
5718 av.unslice(origin, bv, part).intoArray(r, i);
5719 }
5720 }
5721
5722 assertArraysEquals(r, a, b, origin, part, LongMaxVectorTests::unsliceBinary);
5723 }
5724
5725 static long[] unslice(long[] a, long[] b, int origin, int part, boolean[] mask, int idx) {
5726 long[] res = new long[SPECIES.length()];
5727 for (int i = 0, j = 0; i < SPECIES.length(); i++){
5728 if(i+origin < SPECIES.length())
5729 res[i] = b[idx+i+origin];
5730 else {
5731 res[i] = b[idx+j];
5732 j++;
5733 }
5734 }
5735 for (int i = 0; i < SPECIES.length(); i++){
5736 res[i] = mask[i] ? a[idx+i] : res[i];
5737 }
5738 long[] res1 = new long[SPECIES.length()];
5739 if (part == 0) {
5740 for (int i = 0, j = 0; i < SPECIES.length(); i++){
5741 if (i < origin)
5742 res1[i] = b[idx+i];
5743 else {
5744 res1[i] = res[j];
5745 j++;
5746 }
5747 }
5748 } else if (part == 1) {
5749 for (int i = 0, j = 0; i < SPECIES.length(); i++){
5750 if (i < origin)
5751 res1[i] = res[SPECIES.length()-origin+i];
5752 else {
5753 res1[i] = b[idx+origin+j];
5754 j++;
5755 }
5756 }
5757 }
5758 return res1;
5759 }
5760
5761 @Test(dataProvider = "longBinaryOpMaskProvider")
5762 static void unsliceLongMaxVectorTestsMasked(IntFunction<long[]> fa, IntFunction<long[]> fb,
5763 IntFunction<boolean[]> fm) {
5764 long[] a = fa.apply(SPECIES.length());
5765 long[] b = fb.apply(SPECIES.length());
5766 boolean[] mask = fm.apply(SPECIES.length());
5767 VectorMask<Long> vmask = VectorMask.fromArray(SPECIES, mask, 0);
5768 long[] r = new long[a.length];
5769 int origin = RAND.nextInt(SPECIES.length());
5770 int part = RAND.nextInt(2);
5771 for (int ic = 0; ic < INVOC_COUNT; ic++) {
5772 for (int i = 0; i < a.length; i += SPECIES.length()) {
5773 LongVector av = LongVector.fromArray(SPECIES, a, i);
5774 LongVector bv = LongVector.fromArray(SPECIES, b, i);
5775 av.unslice(origin, bv, part, vmask).intoArray(r, i);
5776 }
5777 }
5778
5779 assertArraysEquals(r, a, b, origin, part, mask, LongMaxVectorTests::unslice);
5780 }
5781
5782 static long BITWISE_BLEND(long a, long b, long c) {
5783 return (long)((a&~(c))|(b&c));
5784 }
5785
5786 static long bitwiseBlend(long a, long b, long c) {
5787 return (long)((a&~(c))|(b&c));
5788 }
5789
5790 @Test(dataProvider = "longTernaryOpProvider")
5791 static void BITWISE_BLENDLongMaxVectorTests(IntFunction<long[]> fa, IntFunction<long[]> fb, IntFunction<long[]> fc) {
5792 long[] a = fa.apply(SPECIES.length());
5793 long[] b = fb.apply(SPECIES.length());
5794 long[] c = fc.apply(SPECIES.length());
5795 long[] r = fr.apply(SPECIES.length());
5796
5797 for (int ic = 0; ic < INVOC_COUNT; ic++) {
5798 for (int i = 0; i < a.length; i += SPECIES.length()) {
5799 LongVector av = LongVector.fromArray(SPECIES, a, i);
5800 LongVector bv = LongVector.fromArray(SPECIES, b, i);
5801 LongVector cv = LongVector.fromArray(SPECIES, c, i);
5802 av.lanewise(VectorOperators.BITWISE_BLEND, bv, cv).intoArray(r, i);
5803 }
5804 }
5805
5806 assertArraysEquals(r, a, b, c, LongMaxVectorTests::BITWISE_BLEND);
5807 }
5808
5809 @Test(dataProvider = "longTernaryOpProvider")
5810 static void bitwiseBlendLongMaxVectorTests(IntFunction<long[]> fa, IntFunction<long[]> fb, IntFunction<long[]> fc) {
5811 long[] a = fa.apply(SPECIES.length());
5812 long[] b = fb.apply(SPECIES.length());
5813 long[] c = fc.apply(SPECIES.length());
5814 long[] r = fr.apply(SPECIES.length());
5815
5816 for (int i = 0; i < a.length; i += SPECIES.length()) {
5817 LongVector av = LongVector.fromArray(SPECIES, a, i);
5818 LongVector bv = LongVector.fromArray(SPECIES, b, i);
5819 LongVector cv = LongVector.fromArray(SPECIES, c, i);
5820 av.bitwiseBlend(bv, cv).intoArray(r, i);
5821 }
5822
5823 assertArraysEquals(r, a, b, c, LongMaxVectorTests::bitwiseBlend);
5824 }
5825
5826 @Test(dataProvider = "longTernaryOpMaskProvider")
5827 static void BITWISE_BLENDLongMaxVectorTestsMasked(IntFunction<long[]> fa, IntFunction<long[]> fb,
5828 IntFunction<long[]> fc, IntFunction<boolean[]> fm) {
5829 long[] a = fa.apply(SPECIES.length());
5830 long[] b = fb.apply(SPECIES.length());
5831 long[] c = fc.apply(SPECIES.length());
5832 long[] r = fr.apply(SPECIES.length());
5833 boolean[] mask = fm.apply(SPECIES.length());
5834 VectorMask<Long> vmask = VectorMask.fromArray(SPECIES, mask, 0);
5835
5836 for (int ic = 0; ic < INVOC_COUNT; ic++) {
5837 for (int i = 0; i < a.length; i += SPECIES.length()) {
5838 LongVector av = LongVector.fromArray(SPECIES, a, i);
5839 LongVector bv = LongVector.fromArray(SPECIES, b, i);
5840 LongVector cv = LongVector.fromArray(SPECIES, c, i);
5841 av.lanewise(VectorOperators.BITWISE_BLEND, bv, cv, vmask).intoArray(r, i);
5842 }
5843 }
5844
5845 assertArraysEquals(r, a, b, c, mask, LongMaxVectorTests::BITWISE_BLEND);
5846 }
5847
5848 @Test(dataProvider = "longTernaryOpProvider")
5849 static void BITWISE_BLENDLongMaxVectorTestsBroadcastSmokeTest(IntFunction<long[]> fa, IntFunction<long[]> fb, IntFunction<long[]> fc) {
5850 long[] a = fa.apply(SPECIES.length());
5851 long[] b = fb.apply(SPECIES.length());
5852 long[] c = fc.apply(SPECIES.length());
5853 long[] r = fr.apply(SPECIES.length());
5854
5855 for (int i = 0; i < a.length; i += SPECIES.length()) {
5856 LongVector av = LongVector.fromArray(SPECIES, a, i);
5857 LongVector bv = LongVector.fromArray(SPECIES, b, i);
5858 av.lanewise(VectorOperators.BITWISE_BLEND, bv, c[i]).intoArray(r, i);
5859 }
5860 assertBroadcastArraysEquals(r, a, b, c, LongMaxVectorTests::BITWISE_BLEND);
5861 }
5862
5863 @Test(dataProvider = "longTernaryOpProvider")
5864 static void BITWISE_BLENDLongMaxVectorTestsAltBroadcastSmokeTest(IntFunction<long[]> fa, IntFunction<long[]> fb, IntFunction<long[]> fc) {
5865 long[] a = fa.apply(SPECIES.length());
5866 long[] b = fb.apply(SPECIES.length());
5867 long[] c = fc.apply(SPECIES.length());
5868 long[] r = fr.apply(SPECIES.length());
5869
5870 for (int i = 0; i < a.length; i += SPECIES.length()) {
5871 LongVector av = LongVector.fromArray(SPECIES, a, i);
5872 LongVector cv = LongVector.fromArray(SPECIES, c, i);
5873 av.lanewise(VectorOperators.BITWISE_BLEND, b[i], cv).intoArray(r, i);
5874 }
5875 assertAltBroadcastArraysEquals(r, a, b, c, LongMaxVectorTests::BITWISE_BLEND);
5876 }
5877
5878 @Test(dataProvider = "longTernaryOpProvider")
5879 static void bitwiseBlendLongMaxVectorTestsBroadcastSmokeTest(IntFunction<long[]> fa, IntFunction<long[]> fb, IntFunction<long[]> fc) {
5880 long[] a = fa.apply(SPECIES.length());
5881 long[] b = fb.apply(SPECIES.length());
5882 long[] c = fc.apply(SPECIES.length());
5883 long[] r = fr.apply(SPECIES.length());
5884
5885 for (int i = 0; i < a.length; i += SPECIES.length()) {
5886 LongVector av = LongVector.fromArray(SPECIES, a, i);
5887 LongVector bv = LongVector.fromArray(SPECIES, b, i);
5888 av.bitwiseBlend(bv, c[i]).intoArray(r, i);
5889 }
5890 assertBroadcastArraysEquals(r, a, b, c, LongMaxVectorTests::bitwiseBlend);
5891 }
5892
5893 @Test(dataProvider = "longTernaryOpProvider")
5894 static void bitwiseBlendLongMaxVectorTestsAltBroadcastSmokeTest(IntFunction<long[]> fa, IntFunction<long[]> fb, IntFunction<long[]> fc) {
5895 long[] a = fa.apply(SPECIES.length());
5896 long[] b = fb.apply(SPECIES.length());
5897 long[] c = fc.apply(SPECIES.length());
5898 long[] r = fr.apply(SPECIES.length());
5899
5900 for (int i = 0; i < a.length; i += SPECIES.length()) {
5901 LongVector av = LongVector.fromArray(SPECIES, a, i);
5902 LongVector cv = LongVector.fromArray(SPECIES, c, i);
5903 av.bitwiseBlend(b[i], cv).intoArray(r, i);
5904 }
5905 assertAltBroadcastArraysEquals(r, a, b, c, LongMaxVectorTests::bitwiseBlend);
5906 }
5907
5908 @Test(dataProvider = "longTernaryOpMaskProvider")
5909 static void BITWISE_BLENDLongMaxVectorTestsBroadcastMaskedSmokeTest(IntFunction<long[]> fa, IntFunction<long[]> fb,
5910 IntFunction<long[]> fc, IntFunction<boolean[]> fm) {
5911 long[] a = fa.apply(SPECIES.length());
5912 long[] b = fb.apply(SPECIES.length());
5913 long[] c = fc.apply(SPECIES.length());
5914 long[] r = fr.apply(SPECIES.length());
5915 boolean[] mask = fm.apply(SPECIES.length());
5916 VectorMask<Long> vmask = VectorMask.fromArray(SPECIES, mask, 0);
5917
5918 for (int i = 0; i < a.length; i += SPECIES.length()) {
5919 LongVector av = LongVector.fromArray(SPECIES, a, i);
5920 LongVector bv = LongVector.fromArray(SPECIES, b, i);
5921 av.lanewise(VectorOperators.BITWISE_BLEND, bv, c[i], vmask).intoArray(r, i);
5922 }
5923
5924 assertBroadcastArraysEquals(r, a, b, c, mask, LongMaxVectorTests::BITWISE_BLEND);
5925 }
5926
5927 @Test(dataProvider = "longTernaryOpMaskProvider")
5928 static void BITWISE_BLENDLongMaxVectorTestsAltBroadcastMaskedSmokeTest(IntFunction<long[]> fa, IntFunction<long[]> fb,
5929 IntFunction<long[]> fc, IntFunction<boolean[]> fm) {
5930 long[] a = fa.apply(SPECIES.length());
5931 long[] b = fb.apply(SPECIES.length());
5932 long[] c = fc.apply(SPECIES.length());
5933 long[] r = fr.apply(SPECIES.length());
5934 boolean[] mask = fm.apply(SPECIES.length());
5935 VectorMask<Long> vmask = VectorMask.fromArray(SPECIES, mask, 0);
5936
5937 for (int i = 0; i < a.length; i += SPECIES.length()) {
5938 LongVector av = LongVector.fromArray(SPECIES, a, i);
5939 LongVector cv = LongVector.fromArray(SPECIES, c, i);
5940 av.lanewise(VectorOperators.BITWISE_BLEND, b[i], cv, vmask).intoArray(r, i);
5941 }
5942
5943 assertAltBroadcastArraysEquals(r, a, b, c, mask, LongMaxVectorTests::BITWISE_BLEND);
5944 }
5945
5946 @Test(dataProvider = "longTernaryOpProvider")
5947 static void BITWISE_BLENDLongMaxVectorTestsDoubleBroadcastSmokeTest(IntFunction<long[]> fa, IntFunction<long[]> fb, IntFunction<long[]> fc) {
5948 long[] a = fa.apply(SPECIES.length());
5949 long[] b = fb.apply(SPECIES.length());
5950 long[] c = fc.apply(SPECIES.length());
5951 long[] r = fr.apply(SPECIES.length());
5952
5953 for (int i = 0; i < a.length; i += SPECIES.length()) {
5954 LongVector av = LongVector.fromArray(SPECIES, a, i);
5955 av.lanewise(VectorOperators.BITWISE_BLEND, b[i], c[i]).intoArray(r, i);
5956 }
5957
5958 assertDoubleBroadcastArraysEquals(r, a, b, c, LongMaxVectorTests::BITWISE_BLEND);
5959 }
5960
5961 @Test(dataProvider = "longTernaryOpProvider")
5962 static void bitwiseBlendLongMaxVectorTestsDoubleBroadcastSmokeTest(IntFunction<long[]> fa, IntFunction<long[]> fb, IntFunction<long[]> fc) {
5963 long[] a = fa.apply(SPECIES.length());
5964 long[] b = fb.apply(SPECIES.length());
5965 long[] c = fc.apply(SPECIES.length());
5966 long[] r = fr.apply(SPECIES.length());
5967
5968 for (int i = 0; i < a.length; i += SPECIES.length()) {
5969 LongVector av = LongVector.fromArray(SPECIES, a, i);
5970 av.bitwiseBlend(b[i], c[i]).intoArray(r, i);
5971 }
5972
5973 assertDoubleBroadcastArraysEquals(r, a, b, c, LongMaxVectorTests::bitwiseBlend);
5974 }
5975
5976 @Test(dataProvider = "longTernaryOpMaskProvider")
5977 static void BITWISE_BLENDLongMaxVectorTestsDoubleBroadcastMaskedSmokeTest(IntFunction<long[]> fa, IntFunction<long[]> fb,
5978 IntFunction<long[]> fc, IntFunction<boolean[]> fm) {
5979 long[] a = fa.apply(SPECIES.length());
5980 long[] b = fb.apply(SPECIES.length());
5981 long[] c = fc.apply(SPECIES.length());
5982 long[] r = fr.apply(SPECIES.length());
5983 boolean[] mask = fm.apply(SPECIES.length());
5984 VectorMask<Long> vmask = VectorMask.fromArray(SPECIES, mask, 0);
5985
5986 for (int i = 0; i < a.length; i += SPECIES.length()) {
5987 LongVector av = LongVector.fromArray(SPECIES, a, i);
5988 av.lanewise(VectorOperators.BITWISE_BLEND, b[i], c[i], vmask).intoArray(r, i);
5989 }
5990
5991 assertDoubleBroadcastArraysEquals(r, a, b, c, mask, LongMaxVectorTests::BITWISE_BLEND);
5992 }
5993
5994 static long NEG(long a) {
5995 return (long)(-((long)a));
5996 }
5997
5998 static long neg(long a) {
5999 return (long)(-((long)a));
6000 }
6001
6002 @Test(dataProvider = "longUnaryOpProvider")
6003 static void NEGLongMaxVectorTests(IntFunction<long[]> fa) {
6004 long[] a = fa.apply(SPECIES.length());
6005 long[] r = fr.apply(SPECIES.length());
6006
6007 for (int ic = 0; ic < INVOC_COUNT; ic++) {
6008 for (int i = 0; i < a.length; i += SPECIES.length()) {
6009 LongVector av = LongVector.fromArray(SPECIES, a, i);
6010 av.lanewise(VectorOperators.NEG).intoArray(r, i);
6011 }
6012 }
6013
6014 assertArraysEquals(r, a, LongMaxVectorTests::NEG);
6015 }
6016
6017 @Test(dataProvider = "longUnaryOpProvider")
6018 static void negLongMaxVectorTests(IntFunction<long[]> fa) {
6019 long[] a = fa.apply(SPECIES.length());
6020 long[] r = fr.apply(SPECIES.length());
6021
6022 for (int ic = 0; ic < INVOC_COUNT; ic++) {
6023 for (int i = 0; i < a.length; i += SPECIES.length()) {
6024 LongVector av = LongVector.fromArray(SPECIES, a, i);
6025 av.neg().intoArray(r, i);
6026 }
6027 }
6028
6029 assertArraysEquals(r, a, LongMaxVectorTests::neg);
6030 }
6031
6032 @Test(dataProvider = "longUnaryOpMaskProvider")
6033 static void NEGMaskedLongMaxVectorTests(IntFunction<long[]> fa,
6034 IntFunction<boolean[]> fm) {
6035 long[] a = fa.apply(SPECIES.length());
6036 long[] r = fr.apply(SPECIES.length());
6037 boolean[] mask = fm.apply(SPECIES.length());
6038 VectorMask<Long> vmask = VectorMask.fromArray(SPECIES, mask, 0);
6039
6040 for (int ic = 0; ic < INVOC_COUNT; ic++) {
6041 for (int i = 0; i < a.length; i += SPECIES.length()) {
6042 LongVector av = LongVector.fromArray(SPECIES, a, i);
6043 av.lanewise(VectorOperators.NEG, vmask).intoArray(r, i);
6044 }
6045 }
6046
6047 assertArraysEquals(r, a, mask, LongMaxVectorTests::NEG);
6048 }
6049
6050 static long ABS(long a) {
6051 return (long)(Math.abs((long)a));
6052 }
6053
6054 static long abs(long a) {
6055 return (long)(Math.abs((long)a));
6056 }
6057
6058 @Test(dataProvider = "longUnaryOpProvider")
6059 static void ABSLongMaxVectorTests(IntFunction<long[]> fa) {
6060 long[] a = fa.apply(SPECIES.length());
6061 long[] r = fr.apply(SPECIES.length());
6062
6063 for (int ic = 0; ic < INVOC_COUNT; ic++) {
6064 for (int i = 0; i < a.length; i += SPECIES.length()) {
6065 LongVector av = LongVector.fromArray(SPECIES, a, i);
6066 av.lanewise(VectorOperators.ABS).intoArray(r, i);
6067 }
6068 }
6069
6070 assertArraysEquals(r, a, LongMaxVectorTests::ABS);
6071 }
6072
6073 @Test(dataProvider = "longUnaryOpProvider")
6074 static void absLongMaxVectorTests(IntFunction<long[]> fa) {
6075 long[] a = fa.apply(SPECIES.length());
6076 long[] r = fr.apply(SPECIES.length());
6077
6078 for (int ic = 0; ic < INVOC_COUNT; ic++) {
6079 for (int i = 0; i < a.length; i += SPECIES.length()) {
6080 LongVector av = LongVector.fromArray(SPECIES, a, i);
6081 av.abs().intoArray(r, i);
6082 }
6083 }
6084
6085 assertArraysEquals(r, a, LongMaxVectorTests::abs);
6086 }
6087
6088 @Test(dataProvider = "longUnaryOpMaskProvider")
6089 static void ABSMaskedLongMaxVectorTests(IntFunction<long[]> fa,
6090 IntFunction<boolean[]> fm) {
6091 long[] a = fa.apply(SPECIES.length());
6092 long[] r = fr.apply(SPECIES.length());
6093 boolean[] mask = fm.apply(SPECIES.length());
6094 VectorMask<Long> vmask = VectorMask.fromArray(SPECIES, mask, 0);
6095
6096 for (int ic = 0; ic < INVOC_COUNT; ic++) {
6097 for (int i = 0; i < a.length; i += SPECIES.length()) {
6098 LongVector av = LongVector.fromArray(SPECIES, a, i);
6099 av.lanewise(VectorOperators.ABS, vmask).intoArray(r, i);
6100 }
6101 }
6102
6103 assertArraysEquals(r, a, mask, LongMaxVectorTests::ABS);
6104 }
6105
6106 static long NOT(long a) {
6107 return (long)(~((long)a));
6108 }
6109
6110 static long not(long a) {
6111 return (long)(~((long)a));
6112 }
6113
6114 @Test(dataProvider = "longUnaryOpProvider")
6115 static void NOTLongMaxVectorTests(IntFunction<long[]> fa) {
6116 long[] a = fa.apply(SPECIES.length());
6117 long[] r = fr.apply(SPECIES.length());
6118
6119 for (int ic = 0; ic < INVOC_COUNT; ic++) {
6120 for (int i = 0; i < a.length; i += SPECIES.length()) {
6121 LongVector av = LongVector.fromArray(SPECIES, a, i);
6122 av.lanewise(VectorOperators.NOT).intoArray(r, i);
6123 }
6124 }
6125
6126 assertArraysEquals(r, a, LongMaxVectorTests::NOT);
6127 }
6128
6129 @Test(dataProvider = "longUnaryOpProvider")
6130 static void notLongMaxVectorTests(IntFunction<long[]> fa) {
6131 long[] a = fa.apply(SPECIES.length());
6132 long[] r = fr.apply(SPECIES.length());
6133
6134 for (int ic = 0; ic < INVOC_COUNT; ic++) {
6135 for (int i = 0; i < a.length; i += SPECIES.length()) {
6136 LongVector av = LongVector.fromArray(SPECIES, a, i);
6137 av.not().intoArray(r, i);
6138 }
6139 }
6140
6141 assertArraysEquals(r, a, LongMaxVectorTests::not);
6142 }
6143
6144 @Test(dataProvider = "longUnaryOpMaskProvider")
6145 static void NOTMaskedLongMaxVectorTests(IntFunction<long[]> fa,
6146 IntFunction<boolean[]> fm) {
6147 long[] a = fa.apply(SPECIES.length());
6148 long[] r = fr.apply(SPECIES.length());
6149 boolean[] mask = fm.apply(SPECIES.length());
6150 VectorMask<Long> vmask = VectorMask.fromArray(SPECIES, mask, 0);
6151
6152 for (int ic = 0; ic < INVOC_COUNT; ic++) {
6153 for (int i = 0; i < a.length; i += SPECIES.length()) {
6154 LongVector av = LongVector.fromArray(SPECIES, a, i);
6155 av.lanewise(VectorOperators.NOT, vmask).intoArray(r, i);
6156 }
6157 }
6158
6159 assertArraysEquals(r, a, mask, LongMaxVectorTests::NOT);
6160 }
6161
6162 static long ZOMO(long a) {
6163 return (long)((a==0?0:-1));
6164 }
6165
6166 @Test(dataProvider = "longUnaryOpProvider")
6167 static void ZOMOLongMaxVectorTests(IntFunction<long[]> fa) {
6168 long[] a = fa.apply(SPECIES.length());
6169 long[] r = fr.apply(SPECIES.length());
6170
6171 for (int ic = 0; ic < INVOC_COUNT; ic++) {
6172 for (int i = 0; i < a.length; i += SPECIES.length()) {
6173 LongVector av = LongVector.fromArray(SPECIES, a, i);
6174 av.lanewise(VectorOperators.ZOMO).intoArray(r, i);
6175 }
6176 }
6177
6178 assertArraysEquals(r, a, LongMaxVectorTests::ZOMO);
6179 }
6180
6181 @Test(dataProvider = "longUnaryOpMaskProvider")
6182 static void ZOMOMaskedLongMaxVectorTests(IntFunction<long[]> fa,
6183 IntFunction<boolean[]> fm) {
6184 long[] a = fa.apply(SPECIES.length());
6185 long[] r = fr.apply(SPECIES.length());
6186 boolean[] mask = fm.apply(SPECIES.length());
6187 VectorMask<Long> vmask = VectorMask.fromArray(SPECIES, mask, 0);
6188
6189 for (int ic = 0; ic < INVOC_COUNT; ic++) {
6190 for (int i = 0; i < a.length; i += SPECIES.length()) {
6191 LongVector av = LongVector.fromArray(SPECIES, a, i);
6192 av.lanewise(VectorOperators.ZOMO, vmask).intoArray(r, i);
6193 }
6194 }
6195
6196 assertArraysEquals(r, a, mask, LongMaxVectorTests::ZOMO);
6197 }
6198
6199 static long BIT_COUNT(long a) {
6200 return (long)(Long.bitCount(a));
6201 }
6202
6203 @Test(dataProvider = "longUnaryOpProvider")
6204 static void BIT_COUNTLongMaxVectorTests(IntFunction<long[]> fa) {
6205 long[] a = fa.apply(SPECIES.length());
6206 long[] r = fr.apply(SPECIES.length());
6207
6208 for (int ic = 0; ic < INVOC_COUNT; ic++) {
6209 for (int i = 0; i < a.length; i += SPECIES.length()) {
6210 LongVector av = LongVector.fromArray(SPECIES, a, i);
6211 av.lanewise(VectorOperators.BIT_COUNT).intoArray(r, i);
6212 }
6213 }
6214
6215 assertArraysEquals(r, a, LongMaxVectorTests::BIT_COUNT);
6216 }
6217
6218 @Test(dataProvider = "longUnaryOpMaskProvider")
6219 static void BIT_COUNTMaskedLongMaxVectorTests(IntFunction<long[]> fa,
6220 IntFunction<boolean[]> fm) {
6221 long[] a = fa.apply(SPECIES.length());
6222 long[] r = fr.apply(SPECIES.length());
6223 boolean[] mask = fm.apply(SPECIES.length());
6224 VectorMask<Long> vmask = VectorMask.fromArray(SPECIES, mask, 0);
6225
6226 for (int ic = 0; ic < INVOC_COUNT; ic++) {
6227 for (int i = 0; i < a.length; i += SPECIES.length()) {
6228 LongVector av = LongVector.fromArray(SPECIES, a, i);
6229 av.lanewise(VectorOperators.BIT_COUNT, vmask).intoArray(r, i);
6230 }
6231 }
6232
6233 assertArraysEquals(r, a, mask, LongMaxVectorTests::BIT_COUNT);
6234 }
6235
6236 static long TRAILING_ZEROS_COUNT(long a) {
6237 return (long)(TRAILING_ZEROS_COUNT_scalar(a));
6238 }
6239
6240 @Test(dataProvider = "longUnaryOpProvider")
6241 static void TRAILING_ZEROS_COUNTLongMaxVectorTests(IntFunction<long[]> fa) {
6242 long[] a = fa.apply(SPECIES.length());
6243 long[] r = fr.apply(SPECIES.length());
6244
6245 for (int ic = 0; ic < INVOC_COUNT; ic++) {
6246 for (int i = 0; i < a.length; i += SPECIES.length()) {
6247 LongVector av = LongVector.fromArray(SPECIES, a, i);
6248 av.lanewise(VectorOperators.TRAILING_ZEROS_COUNT).intoArray(r, i);
6249 }
6250 }
6251
6252 assertArraysEquals(r, a, LongMaxVectorTests::TRAILING_ZEROS_COUNT);
6253 }
6254
6255 @Test(dataProvider = "longUnaryOpMaskProvider")
6256 static void TRAILING_ZEROS_COUNTMaskedLongMaxVectorTests(IntFunction<long[]> fa,
6257 IntFunction<boolean[]> fm) {
6258 long[] a = fa.apply(SPECIES.length());
6259 long[] r = fr.apply(SPECIES.length());
6260 boolean[] mask = fm.apply(SPECIES.length());
6261 VectorMask<Long> vmask = VectorMask.fromArray(SPECIES, mask, 0);
6262
6263 for (int ic = 0; ic < INVOC_COUNT; ic++) {
6264 for (int i = 0; i < a.length; i += SPECIES.length()) {
6265 LongVector av = LongVector.fromArray(SPECIES, a, i);
6266 av.lanewise(VectorOperators.TRAILING_ZEROS_COUNT, vmask).intoArray(r, i);
6267 }
6268 }
6269
6270 assertArraysEquals(r, a, mask, LongMaxVectorTests::TRAILING_ZEROS_COUNT);
6271 }
6272
6273 static long LEADING_ZEROS_COUNT(long a) {
6274 return (long)(LEADING_ZEROS_COUNT_scalar(a));
6275 }
6276
6277 @Test(dataProvider = "longUnaryOpProvider")
6278 static void LEADING_ZEROS_COUNTLongMaxVectorTests(IntFunction<long[]> fa) {
6279 long[] a = fa.apply(SPECIES.length());
6280 long[] r = fr.apply(SPECIES.length());
6281
6282 for (int ic = 0; ic < INVOC_COUNT; ic++) {
6283 for (int i = 0; i < a.length; i += SPECIES.length()) {
6284 LongVector av = LongVector.fromArray(SPECIES, a, i);
6285 av.lanewise(VectorOperators.LEADING_ZEROS_COUNT).intoArray(r, i);
6286 }
6287 }
6288
6289 assertArraysEquals(r, a, LongMaxVectorTests::LEADING_ZEROS_COUNT);
6290 }
6291
6292 @Test(dataProvider = "longUnaryOpMaskProvider")
6293 static void LEADING_ZEROS_COUNTMaskedLongMaxVectorTests(IntFunction<long[]> fa,
6294 IntFunction<boolean[]> fm) {
6295 long[] a = fa.apply(SPECIES.length());
6296 long[] r = fr.apply(SPECIES.length());
6297 boolean[] mask = fm.apply(SPECIES.length());
6298 VectorMask<Long> vmask = VectorMask.fromArray(SPECIES, mask, 0);
6299
6300 for (int ic = 0; ic < INVOC_COUNT; ic++) {
6301 for (int i = 0; i < a.length; i += SPECIES.length()) {
6302 LongVector av = LongVector.fromArray(SPECIES, a, i);
6303 av.lanewise(VectorOperators.LEADING_ZEROS_COUNT, vmask).intoArray(r, i);
6304 }
6305 }
6306
6307 assertArraysEquals(r, a, mask, LongMaxVectorTests::LEADING_ZEROS_COUNT);
6308 }
6309
6310 static long REVERSE(long a) {
6311 return (long)(REVERSE_scalar(a));
6312 }
6313
6314 @Test(dataProvider = "longUnaryOpProvider")
6315 static void REVERSELongMaxVectorTests(IntFunction<long[]> fa) {
6316 long[] a = fa.apply(SPECIES.length());
6317 long[] r = fr.apply(SPECIES.length());
6318
6319 for (int ic = 0; ic < INVOC_COUNT; ic++) {
6320 for (int i = 0; i < a.length; i += SPECIES.length()) {
6321 LongVector av = LongVector.fromArray(SPECIES, a, i);
6322 av.lanewise(VectorOperators.REVERSE).intoArray(r, i);
6323 }
6324 }
6325
6326 assertArraysEquals(r, a, LongMaxVectorTests::REVERSE);
6327 }
6328
6329 @Test(dataProvider = "longUnaryOpMaskProvider")
6330 static void REVERSEMaskedLongMaxVectorTests(IntFunction<long[]> fa,
6331 IntFunction<boolean[]> fm) {
6332 long[] a = fa.apply(SPECIES.length());
6333 long[] r = fr.apply(SPECIES.length());
6334 boolean[] mask = fm.apply(SPECIES.length());
6335 VectorMask<Long> vmask = VectorMask.fromArray(SPECIES, mask, 0);
6336
6337 for (int ic = 0; ic < INVOC_COUNT; ic++) {
6338 for (int i = 0; i < a.length; i += SPECIES.length()) {
6339 LongVector av = LongVector.fromArray(SPECIES, a, i);
6340 av.lanewise(VectorOperators.REVERSE, vmask).intoArray(r, i);
6341 }
6342 }
6343
6344 assertArraysEquals(r, a, mask, LongMaxVectorTests::REVERSE);
6345 }
6346
6347 static long REVERSE_BYTES(long a) {
6348 return (long)(Long.reverseBytes(a));
6349 }
6350
6351 @Test(dataProvider = "longUnaryOpProvider")
6352 static void REVERSE_BYTESLongMaxVectorTests(IntFunction<long[]> fa) {
6353 long[] a = fa.apply(SPECIES.length());
6354 long[] r = fr.apply(SPECIES.length());
6355
6356 for (int ic = 0; ic < INVOC_COUNT; ic++) {
6357 for (int i = 0; i < a.length; i += SPECIES.length()) {
6358 LongVector av = LongVector.fromArray(SPECIES, a, i);
6359 av.lanewise(VectorOperators.REVERSE_BYTES).intoArray(r, i);
6360 }
6361 }
6362
6363 assertArraysEquals(r, a, LongMaxVectorTests::REVERSE_BYTES);
6364 }
6365
6366 @Test(dataProvider = "longUnaryOpMaskProvider")
6367 static void REVERSE_BYTESMaskedLongMaxVectorTests(IntFunction<long[]> fa,
6368 IntFunction<boolean[]> fm) {
6369 long[] a = fa.apply(SPECIES.length());
6370 long[] r = fr.apply(SPECIES.length());
6371 boolean[] mask = fm.apply(SPECIES.length());
6372 VectorMask<Long> vmask = VectorMask.fromArray(SPECIES, mask, 0);
6373
6374 for (int ic = 0; ic < INVOC_COUNT; ic++) {
6375 for (int i = 0; i < a.length; i += SPECIES.length()) {
6376 LongVector av = LongVector.fromArray(SPECIES, a, i);
6377 av.lanewise(VectorOperators.REVERSE_BYTES, vmask).intoArray(r, i);
6378 }
6379 }
6380
6381 assertArraysEquals(r, a, mask, LongMaxVectorTests::REVERSE_BYTES);
6382 }
6383
6384 @Test(dataProvider = "longCompareOpProvider")
6385 static void ltLongMaxVectorTestsBroadcastSmokeTest(IntFunction<long[]> fa, IntFunction<long[]> fb) {
6386 long[] a = fa.apply(SPECIES.length());
6387 long[] b = fb.apply(SPECIES.length());
6388
6389 for (int i = 0; i < a.length; i += SPECIES.length()) {
6390 LongVector av = LongVector.fromArray(SPECIES, a, i);
6391 VectorMask<Long> mv = av.lt(b[i]);
6392
6393 // Check results as part of computation.
6394 for (int j = 0; j < SPECIES.length(); j++) {
6395 Assert.assertEquals(mv.laneIsSet(j), a[i + j] < b[i]);
6396 }
6397 }
6398 }
6399
6400 @Test(dataProvider = "longCompareOpProvider")
6401 static void eqLongMaxVectorTestsBroadcastMaskedSmokeTest(IntFunction<long[]> fa, IntFunction<long[]> fb) {
6402 long[] a = fa.apply(SPECIES.length());
6403 long[] b = fb.apply(SPECIES.length());
6404
6405 for (int i = 0; i < a.length; i += SPECIES.length()) {
6406 LongVector av = LongVector.fromArray(SPECIES, a, i);
6407 VectorMask<Long> mv = av.eq(b[i]);
6408
6409 // Check results as part of computation.
6410 for (int j = 0; j < SPECIES.length(); j++) {
6411 Assert.assertEquals(mv.laneIsSet(j), a[i + j] == b[i]);
6412 }
6413 }
6414 }
6415
6416 @Test(dataProvider = "longtoIntUnaryOpProvider")
6417 static void toIntArrayLongMaxVectorTestsSmokeTest(IntFunction<long[]> fa) {
6418 long[] a = fa.apply(SPECIES.length());
6419
6420 for (int i = 0; i < a.length; i += SPECIES.length()) {
6421 LongVector av = LongVector.fromArray(SPECIES, a, i);
6422 int[] r = av.toIntArray();
6423 assertArraysEquals(r, a, i);
6424 }
6425 }
6426
6427 @Test(dataProvider = "longUnaryOpProvider")
6428 static void toLongArrayLongMaxVectorTestsSmokeTest(IntFunction<long[]> fa) {
6429 long[] a = fa.apply(SPECIES.length());
6430
6431 for (int i = 0; i < a.length; i += SPECIES.length()) {
6432 LongVector av = LongVector.fromArray(SPECIES, a, i);
6433 long[] r = av.toLongArray();
6434 assertArraysEquals(r, a, i);
6435 }
6436 }
6437
6438 @Test(dataProvider = "longUnaryOpProvider")
6439 static void toDoubleArrayLongMaxVectorTestsSmokeTest(IntFunction<long[]> fa) {
6440 long[] a = fa.apply(SPECIES.length());
6441
6442 for (int i = 0; i < a.length; i += SPECIES.length()) {
6443 LongVector av = LongVector.fromArray(SPECIES, a, i);
6444 double[] r = av.toDoubleArray();
6445 assertArraysEquals(r, a, i);
6446 }
6447 }
6448
6449 @Test(dataProvider = "longUnaryOpProvider")
6450 static void toStringLongMaxVectorTestsSmokeTest(IntFunction<long[]> fa) {
6451 long[] a = fa.apply(SPECIES.length());
6452
6453 for (int i = 0; i < a.length; i += SPECIES.length()) {
6454 LongVector av = LongVector.fromArray(SPECIES, a, i);
6455 String str = av.toString();
6456
6457 long subarr[] = Arrays.copyOfRange(a, i, i + SPECIES.length());
6458 Assert.assertTrue(str.equals(Arrays.toString(subarr)), "at index " + i + ", string should be = " + Arrays.toString(subarr) + ", but is = " + str);
6459 }
6460 }
6461
6462 @Test(dataProvider = "longUnaryOpProvider")
6463 static void hashCodeLongMaxVectorTestsSmokeTest(IntFunction<long[]> fa) {
6464 long[] a = fa.apply(SPECIES.length());
6465
6466 for (int i = 0; i < a.length; i += SPECIES.length()) {
6467 LongVector av = LongVector.fromArray(SPECIES, a, i);
6468 int hash = av.hashCode();
6469
6470 long subarr[] = Arrays.copyOfRange(a, i, i + SPECIES.length());
6471 int expectedHash = Objects.hash(SPECIES, Arrays.hashCode(subarr));
6472 Assert.assertTrue(hash == expectedHash, "at index " + i + ", hash should be = " + expectedHash + ", but is = " + hash);
6473 }
6474 }
6475
6476
6477
6478 @Test(dataProvider = "longUnaryOpProvider")
6479 static void ADDReduceLongLongMaxVectorTests(IntFunction<long[]> fa) {
6480 long[] a = fa.apply(SPECIES.length());
6481 long[] r = fr.apply(SPECIES.length());
6482 long ra = 0;
6483
6484 for (int i = 0; i < a.length; i += SPECIES.length()) {
6485 LongVector av = LongVector.fromArray(SPECIES, a, i);
6486 r[i] = av.reduceLanesToLong(VectorOperators.ADD);
6487 }
6488
6489 ra = 0;
6490 for (int i = 0; i < a.length; i ++) {
6491 ra += r[i];
6492 }
6493
6494 assertReductionArraysEquals(r, ra, a,
6495 LongMaxVectorTests::ADDReduce, LongMaxVectorTests::ADDReduceAll);
6496 }
6497
6498 @Test(dataProvider = "longUnaryOpMaskProvider")
6499 static void ADDReduceLongLongMaxVectorTestsMasked(IntFunction<long[]> fa, IntFunction<boolean[]> fm) {
6500 long[] a = fa.apply(SPECIES.length());
6501 long[] r = fr.apply(SPECIES.length());
6502 boolean[] mask = fm.apply(SPECIES.length());
6503 VectorMask<Long> vmask = VectorMask.fromArray(SPECIES, mask, 0);
6504 long ra = 0;
6505
6506 for (int i = 0; i < a.length; i += SPECIES.length()) {
6507 LongVector av = LongVector.fromArray(SPECIES, a, i);
6508 r[i] = av.reduceLanesToLong(VectorOperators.ADD, vmask);
6509 }
6510
6511 ra = 0;
6512 for (int i = 0; i < a.length; i ++) {
6513 ra += r[i];
6514 }
6515
6516 assertReductionArraysEqualsMasked(r, ra, a, mask,
6517 LongMaxVectorTests::ADDReduceMasked, LongMaxVectorTests::ADDReduceAllMasked);
6518 }
6519
6520 @Test(dataProvider = "longUnaryOpSelectFromProvider")
6521 static void SelectFromLongMaxVectorTests(IntFunction<long[]> fa,
6522 BiFunction<Integer,Integer,long[]> fs) {
6523 long[] a = fa.apply(SPECIES.length());
6524 long[] order = fs.apply(a.length, SPECIES.length());
6525 long[] r = fr.apply(SPECIES.length());
6526
6527 for (int i = 0; i < a.length; i += SPECIES.length()) {
6528 LongVector av = LongVector.fromArray(SPECIES, a, i);
6529 LongVector bv = LongVector.fromArray(SPECIES, order, i);
6530 bv.selectFrom(av).intoArray(r, i);
6531 }
6532
6533 assertSelectFromArraysEquals(r, a, order, SPECIES.length());
6534 }
6535
6536 @Test(dataProvider = "longSelectFromTwoVectorOpProvider")
6537 static void SelectFromTwoVectorLongMaxVectorTests(IntFunction<long[]> fa, IntFunction<long[]> fb, IntFunction<long[]> fc) {
6538 long[] a = fa.apply(SPECIES.length());
6539 long[] b = fb.apply(SPECIES.length());
6540 long[] idx = fc.apply(SPECIES.length());
6541 long[] r = fr.apply(SPECIES.length());
6542
6543 for (int ic = 0; ic < INVOC_COUNT; ic++) {
6544 for (int i = 0; i < idx.length; i += SPECIES.length()) {
6545 LongVector av = LongVector.fromArray(SPECIES, a, i);
6546 LongVector bv = LongVector.fromArray(SPECIES, b, i);
6547 LongVector idxv = LongVector.fromArray(SPECIES, idx, i);
6548 idxv.selectFrom(av, bv).intoArray(r, i);
6549 }
6550 }
6551 assertSelectFromTwoVectorEquals(r, idx, a, b, SPECIES.length());
6552 }
6553
6554 @Test(dataProvider = "longUnaryOpSelectFromMaskProvider")
6555 static void SelectFromLongMaxVectorTestsMaskedSmokeTest(IntFunction<long[]> fa,
6556 BiFunction<Integer,Integer,long[]> fs,
6557 IntFunction<boolean[]> fm) {
6558 long[] a = fa.apply(SPECIES.length());
6559 long[] order = fs.apply(a.length, SPECIES.length());
6560 long[] r = fr.apply(SPECIES.length());
6561 boolean[] mask = fm.apply(SPECIES.length());
6562 VectorMask<Long> vmask = VectorMask.fromArray(SPECIES, mask, 0);
6563
6564 for (int i = 0; i < a.length; i += SPECIES.length()) {
6565 LongVector av = LongVector.fromArray(SPECIES, a, i);
6566 LongVector bv = LongVector.fromArray(SPECIES, order, i);
6567 bv.selectFrom(av, vmask).intoArray(r, i);
6568 }
6569
6570 assertSelectFromArraysEquals(r, a, order, mask, SPECIES.length());
6571 }
6572
6573 @Test(dataProvider = "shuffleProvider")
6574 static void shuffleMiscellaneousLongMaxVectorTestsSmokeTest(BiFunction<Integer,Integer,int[]> fs) {
6575 int[] a = fs.apply(SPECIES.length() * BUFFER_REPS, SPECIES.length());
6576
6577 for (int i = 0; i < a.length; i += SPECIES.length()) {
6578 var shuffle = VectorShuffle.fromArray(SPECIES, a, i);
6579 int hash = shuffle.hashCode();
6580 int length = shuffle.length();
6581
6582 int subarr[] = Arrays.copyOfRange(a, i, i + SPECIES.length());
6583 int expectedHash = Objects.hash(SPECIES, Arrays.hashCode(subarr));
6584 Assert.assertTrue(hash == expectedHash, "at index " + i + ", hash should be = " + expectedHash + ", but is = " + hash);
6585 Assert.assertEquals(length, SPECIES.length());
6586 }
6587 }
6588
6589 @Test(dataProvider = "shuffleProvider")
6590 static void shuffleToStringLongMaxVectorTestsSmokeTest(BiFunction<Integer,Integer,int[]> fs) {
6591 int[] a = fs.apply(SPECIES.length() * BUFFER_REPS, SPECIES.length());
6592
6593 for (int i = 0; i < a.length; i += SPECIES.length()) {
6594 var shuffle = VectorShuffle.fromArray(SPECIES, a, i);
6595 String str = shuffle.toString();
6596
6597 int subarr[] = Arrays.copyOfRange(a, i, i + SPECIES.length());
6598 Assert.assertTrue(str.equals("Shuffle" + Arrays.toString(subarr)), "at index " +
6599 i + ", string should be = " + Arrays.toString(subarr) + ", but is = " + str);
6600 }
6601 }
6602
6603 @Test(dataProvider = "shuffleCompareOpProvider")
6604 static void shuffleEqualsLongMaxVectorTestsSmokeTest(BiFunction<Integer,Integer,int[]> fa, BiFunction<Integer,Integer,int[]> fb) {
6605 int[] a = fa.apply(SPECIES.length() * BUFFER_REPS, SPECIES.length());
6606 int[] b = fb.apply(SPECIES.length() * BUFFER_REPS, SPECIES.length());
6607
6608 for (int i = 0; i < a.length; i += SPECIES.length()) {
6609 var av = VectorShuffle.fromArray(SPECIES, a, i);
6610 var bv = VectorShuffle.fromArray(SPECIES, b, i);
6611 boolean eq = av.equals(bv);
6612 int to = i + SPECIES.length();
6613 Assert.assertEquals(eq, Arrays.equals(a, i, to, b, i, to));
6614 }
6615 }
6616
6617 @Test(dataProvider = "maskCompareOpProvider")
6618 static void maskEqualsLongMaxVectorTestsSmokeTest(IntFunction<boolean[]> fa, IntFunction<boolean[]> fb) {
6619 boolean[] a = fa.apply(SPECIES.length());
6620 boolean[] b = fb.apply(SPECIES.length());
6621
6622 for (int i = 0; i < a.length; i += SPECIES.length()) {
6623 var av = SPECIES.loadMask(a, i);
6624 var bv = SPECIES.loadMask(b, i);
6625 boolean equals = av.equals(bv);
6626 int to = i + SPECIES.length();
6627 Assert.assertEquals(equals, Arrays.equals(a, i, to, b, i, to));
6628 }
6629 }
6630
6631 static boolean band(boolean a, boolean b) {
6632 return a & b;
6633 }
6634
6635 @Test(dataProvider = "maskCompareOpProvider")
6636 static void maskAndLongMaxVectorTestsSmokeTest(IntFunction<boolean[]> fa, IntFunction<boolean[]> fb) {
6637 boolean[] a = fa.apply(SPECIES.length());
6638 boolean[] b = fb.apply(SPECIES.length());
6639 boolean[] r = new boolean[a.length];
6640
6641 for (int i = 0; i < a.length; i += SPECIES.length()) {
6642 var av = SPECIES.loadMask(a, i);
6643 var bv = SPECIES.loadMask(b, i);
6644 var cv = av.and(bv);
6645 cv.intoArray(r, i);
6646 }
6647 assertArraysEquals(r, a, b, LongMaxVectorTests::band);
6648 }
6649
6650 static boolean bor(boolean a, boolean b) {
6651 return a | b;
6652 }
6653
6654 @Test(dataProvider = "maskCompareOpProvider")
6655 static void maskOrLongMaxVectorTestsSmokeTest(IntFunction<boolean[]> fa, IntFunction<boolean[]> fb) {
6656 boolean[] a = fa.apply(SPECIES.length());
6657 boolean[] b = fb.apply(SPECIES.length());
6658 boolean[] r = new boolean[a.length];
6659
6660 for (int i = 0; i < a.length; i += SPECIES.length()) {
6661 var av = SPECIES.loadMask(a, i);
6662 var bv = SPECIES.loadMask(b, i);
6663 var cv = av.or(bv);
6664 cv.intoArray(r, i);
6665 }
6666 assertArraysEquals(r, a, b, LongMaxVectorTests::bor);
6667 }
6668
6669 static boolean bxor(boolean a, boolean b) {
6670 return a != b;
6671 }
6672
6673 @Test(dataProvider = "maskCompareOpProvider")
6674 static void maskXorLongMaxVectorTestsSmokeTest(IntFunction<boolean[]> fa, IntFunction<boolean[]> fb) {
6675 boolean[] a = fa.apply(SPECIES.length());
6676 boolean[] b = fb.apply(SPECIES.length());
6677 boolean[] r = new boolean[a.length];
6678
6679 for (int i = 0; i < a.length; i += SPECIES.length()) {
6680 var av = SPECIES.loadMask(a, i);
6681 var bv = SPECIES.loadMask(b, i);
6682 var cv = av.xor(bv);
6683 cv.intoArray(r, i);
6684 }
6685 assertArraysEquals(r, a, b, LongMaxVectorTests::bxor);
6686 }
6687
6688 static boolean bandNot(boolean a, boolean b) {
6689 return a & !b;
6690 }
6691
6692 @Test(dataProvider = "maskCompareOpProvider")
6693 static void maskAndNotLongMaxVectorTestsSmokeTest(IntFunction<boolean[]> fa, IntFunction<boolean[]> fb) {
6694 boolean[] a = fa.apply(SPECIES.length());
6695 boolean[] b = fb.apply(SPECIES.length());
6696 boolean[] r = new boolean[a.length];
6697
6698 for (int i = 0; i < a.length; i += SPECIES.length()) {
6699 var av = SPECIES.loadMask(a, i);
6700 var bv = SPECIES.loadMask(b, i);
6701 var cv = av.andNot(bv);
6702 cv.intoArray(r, i);
6703 }
6704 assertArraysEquals(r, a, b, LongMaxVectorTests::bandNot);
6705 }
6706
6707 static boolean beq(boolean a, boolean b) {
6708 return (a == b);
6709 }
6710
6711 @Test(dataProvider = "maskCompareOpProvider")
6712 static void maskEqLongMaxVectorTestsSmokeTest(IntFunction<boolean[]> fa, IntFunction<boolean[]> fb) {
6713 boolean[] a = fa.apply(SPECIES.length());
6714 boolean[] b = fb.apply(SPECIES.length());
6715 boolean[] r = new boolean[a.length];
6716
6717 for (int i = 0; i < a.length; i += SPECIES.length()) {
6718 var av = SPECIES.loadMask(a, i);
6719 var bv = SPECIES.loadMask(b, i);
6720 var cv = av.eq(bv);
6721 cv.intoArray(r, i);
6722 }
6723 assertArraysEquals(r, a, b, LongMaxVectorTests::beq);
6724 }
6725
6726 @Test(dataProvider = "maskProvider")
6727 static void maskHashCodeLongMaxVectorTestsSmokeTest(IntFunction<boolean[]> fa) {
6728 boolean[] a = fa.apply(SPECIES.length());
6729
6730 for (int i = 0; i < a.length; i += SPECIES.length()) {
6731 var vmask = SPECIES.loadMask(a, i);
6732 int hash = vmask.hashCode();
6733
6734 boolean subarr[] = Arrays.copyOfRange(a, i, i + SPECIES.length());
6735 int expectedHash = Objects.hash(SPECIES, Arrays.hashCode(subarr));
6736 Assert.assertTrue(hash == expectedHash, "at index " + i + ", hash should be = " + expectedHash + ", but is = " + hash);
6737 }
6738 }
6739
6740 static int maskTrueCount(boolean[] a, int idx) {
6741 int trueCount = 0;
6742 for (int i = idx; i < idx + SPECIES.length(); i++) {
6743 trueCount += a[i] ? 1 : 0;
6744 }
6745 return trueCount;
6746 }
6747
6748 @Test(dataProvider = "maskProvider")
6749 static void maskTrueCountLongMaxVectorTestsSmokeTest(IntFunction<boolean[]> fa) {
6750 boolean[] a = fa.apply(SPECIES.length());
6751 int[] r = new int[a.length];
6752
6753 for (int ic = 0; ic < INVOC_COUNT * INVOC_COUNT; ic++) {
6754 for (int i = 0; i < a.length; i += SPECIES.length()) {
6755 var vmask = SPECIES.loadMask(a, i);
6756 r[i] = vmask.trueCount();
6757 }
6758 }
6759
6760 assertMaskReductionArraysEquals(r, a, LongMaxVectorTests::maskTrueCount);
6761 }
6762
6763 static int maskLastTrue(boolean[] a, int idx) {
6764 int i = idx + SPECIES.length() - 1;
6765 for (; i >= idx; i--) {
6766 if (a[i]) {
6767 break;
6768 }
6769 }
6770 return i - idx;
6771 }
6772
6773 @Test(dataProvider = "maskProvider")
6774 static void maskLastTrueLongMaxVectorTestsSmokeTest(IntFunction<boolean[]> fa) {
6775 boolean[] a = fa.apply(SPECIES.length());
6776 int[] r = new int[a.length];
6777
6778 for (int ic = 0; ic < INVOC_COUNT * INVOC_COUNT; ic++) {
6779 for (int i = 0; i < a.length; i += SPECIES.length()) {
6780 var vmask = SPECIES.loadMask(a, i);
6781 r[i] = vmask.lastTrue();
6782 }
6783 }
6784
6785 assertMaskReductionArraysEquals(r, a, LongMaxVectorTests::maskLastTrue);
6786 }
6787
6788 static int maskFirstTrue(boolean[] a, int idx) {
6789 int i = idx;
6790 for (; i < idx + SPECIES.length(); i++) {
6791 if (a[i]) {
6792 break;
6793 }
6794 }
6795 return i - idx;
6796 }
6797
6798 @Test(dataProvider = "maskProvider")
6799 static void maskFirstTrueLongMaxVectorTestsSmokeTest(IntFunction<boolean[]> fa) {
6800 boolean[] a = fa.apply(SPECIES.length());
6801 int[] r = new int[a.length];
6802
6803 for (int ic = 0; ic < INVOC_COUNT * INVOC_COUNT; ic++) {
6804 for (int i = 0; i < a.length; i += SPECIES.length()) {
6805 var vmask = SPECIES.loadMask(a, i);
6806 r[i] = vmask.firstTrue();
6807 }
6808 }
6809
6810 assertMaskReductionArraysEquals(r, a, LongMaxVectorTests::maskFirstTrue);
6811 }
6812
6813 @Test(dataProvider = "maskProvider")
6814 static void maskCompressLongMaxVectorTestsSmokeTest(IntFunction<boolean[]> fa) {
6815 int trueCount = 0;
6816 boolean[] a = fa.apply(SPECIES.length());
6817
6818 for (int ic = 0; ic < INVOC_COUNT * INVOC_COUNT; ic++) {
6819 for (int i = 0; i < a.length; i += SPECIES.length()) {
6820 var vmask = SPECIES.loadMask(a, i);
6821 trueCount = vmask.trueCount();
6822 var rmask = vmask.compress();
6823 for (int j = 0; j < SPECIES.length(); j++) {
6824 Assert.assertEquals(rmask.laneIsSet(j), j < trueCount);
6825 }
6826 }
6827 }
6828 }
6829
6830
6831 @DataProvider
6832 public static Object[][] offsetProvider() {
6833 return new Object[][]{
6834 {0},
6835 {-1},
6836 {+1},
6837 {+2},
6838 {-2},
6839 };
6840 }
6841
6842 @Test(dataProvider = "offsetProvider")
6843 static void indexInRangeLongMaxVectorTestsSmokeTest(int offset) {
6844 int limit = SPECIES.length() * BUFFER_REPS;
6845 for (int i = 0; i < limit; i += SPECIES.length()) {
6846 var actualMask = SPECIES.indexInRange(i + offset, limit);
6847 var expectedMask = SPECIES.maskAll(true).indexInRange(i + offset, limit);
6848 assert(actualMask.equals(expectedMask));
6849 for (int j = 0; j < SPECIES.length(); j++) {
6850 int index = i + j + offset;
6851 Assert.assertEquals(actualMask.laneIsSet(j), index >= 0 && index < limit);
6852 }
6853 }
6854 }
6855
6856 @Test(dataProvider = "offsetProvider")
6857 static void indexInRangeLongLongMaxVectorTestsSmokeTest(int offset) {
6858 long limit = SPECIES.length() * BUFFER_REPS;
6859 for (long i = 0; i < limit; i += SPECIES.length()) {
6860 var actualMask = SPECIES.indexInRange(i + offset, limit);
6861 var expectedMask = SPECIES.maskAll(true).indexInRange(i + offset, limit);
6862 assert(actualMask.equals(expectedMask));
6863 for (int j = 0; j < SPECIES.length(); j++) {
6864 long index = i + j + offset;
6865 Assert.assertEquals(actualMask.laneIsSet(j), index >= 0 && index < limit);
6866 }
6867 }
6868 }
6869
6870 @DataProvider
6871 public static Object[][] lengthProvider() {
6872 return new Object[][]{
6873 {0},
6874 {1},
6875 {32},
6876 {37},
6877 {1024},
6878 {1024+1},
6879 {1024+5},
6880 };
6881 }
6882
6883 @Test(dataProvider = "lengthProvider")
6884 static void loopBoundLongMaxVectorTestsSmokeTest(int length) {
6885 int actualLoopBound = SPECIES.loopBound(length);
6886 int expectedLoopBound = length - Math.floorMod(length, SPECIES.length());
6887 Assert.assertEquals(actualLoopBound, expectedLoopBound);
6888 }
6889
6890 @Test(dataProvider = "lengthProvider")
6891 static void loopBoundLongLongMaxVectorTestsSmokeTest(int _length) {
6892 long length = _length;
6893 long actualLoopBound = SPECIES.loopBound(length);
6894 long expectedLoopBound = length - Math.floorMod(length, SPECIES.length());
6895 Assert.assertEquals(actualLoopBound, expectedLoopBound);
6896 }
6897
6898 @Test
6899 static void ElementSizeLongMaxVectorTestsSmokeTest() {
6900 LongVector av = LongVector.zero(SPECIES);
6901 int elsize = av.elementSize();
6902 Assert.assertEquals(elsize, Long.SIZE);
6903 }
6904
6905 @Test
6906 static void VectorShapeLongMaxVectorTestsSmokeTest() {
6907 LongVector av = LongVector.zero(SPECIES);
6908 VectorShape vsh = av.shape();
6909 assert(vsh.equals(VectorShape.S_Max_BIT));
6910 }
6911
6912 @Test
6913 static void ShapeWithLanesLongMaxVectorTestsSmokeTest() {
6914 LongVector av = LongVector.zero(SPECIES);
6915 VectorShape vsh = av.shape();
6916 VectorSpecies species = vsh.withLanes(long.class);
6917 assert(species.equals(SPECIES));
6918 }
6919
6920 @Test
6921 static void ElementTypeLongMaxVectorTestsSmokeTest() {
6922 LongVector av = LongVector.zero(SPECIES);
6923 assert(av.species().elementType() == long.class);
6924 }
6925
6926 @Test
6927 static void SpeciesElementSizeLongMaxVectorTestsSmokeTest() {
6928 LongVector av = LongVector.zero(SPECIES);
6929 assert(av.species().elementSize() == Long.SIZE);
6930 }
6931
6932 @Test
6933 static void VectorTypeLongMaxVectorTestsSmokeTest() {
6934 LongVector av = LongVector.zero(SPECIES);
6935 assert(av.species().vectorType() == av.getClass());
6936 }
6937
6938 @Test
6939 static void WithLanesLongMaxVectorTestsSmokeTest() {
6940 LongVector av = LongVector.zero(SPECIES);
6941 VectorSpecies species = av.species().withLanes(long.class);
6942 assert(species.equals(SPECIES));
6943 }
6944
6945 @Test
6946 static void WithShapeLongMaxVectorTestsSmokeTest() {
6947 LongVector av = LongVector.zero(SPECIES);
6948 VectorShape vsh = av.shape();
6949 VectorSpecies species = av.species().withShape(vsh);
6950 assert(species.equals(SPECIES));
6951 }
6952
6953 @Test
6954 static void MaskAllTrueLongMaxVectorTestsSmokeTest() {
6955 for (int ic = 0; ic < INVOC_COUNT; ic++) {
6956 Assert.assertEquals(SPECIES.maskAll(true).toLong(), -1L >>> (64 - SPECIES.length()));
6957 }
6958 }
6959 }