1 /*
   2  * Copyright (c) 2020, 2022, 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 import java.lang.foreign.MemorySegment;
  24 import jdk.incubator.vector.*;
  25 import jdk.internal.vm.annotation.ForceInline;
  26 import org.testng.Assert;
  27 import org.testng.annotations.Test;
  28 import org.testng.annotations.DataProvider;
  29 
  30 import java.nio.ByteOrder;
  31 import java.util.Arrays;
  32 import java.util.List;
  33 import java.util.function.IntFunction;
  34 import jdk.incubator.vector.VectorShape;
  35 import jdk.incubator.vector.VectorSpecies;
  36 
  37 /**
  38  * @test
  39  * @modules jdk.incubator.vector
  40  * @modules java.base/jdk.internal.vm.annotation
  41  * @run testng/othervm/timeout=240 --add-opens jdk.incubator.vector/jdk.incubator.vector=ALL-UNNAMED
  42  *      -XX:-TieredCompilation VectorReshapeTests
  43  */
  44 
  45 @Test
  46 public class VectorReshapeTests {
  47     static final int INVOC_COUNT = Integer.getInteger("jdk.incubator.vector.test.loop-iterations", 100);
  48     static final int NUM_ITER = 200 * INVOC_COUNT;
  49 
  50     static final VectorShape S_Max_BIT = getMaxBit();
  51 
  52     static final VectorSpecies<Integer> ispec64 = IntVector.SPECIES_64;
  53     static final VectorSpecies<Float> fspec64 = FloatVector.SPECIES_64;
  54     static final VectorSpecies<Long> lspec64 = LongVector.SPECIES_64;
  55     static final VectorSpecies<Double> dspec64 = DoubleVector.SPECIES_64;
  56     static final VectorSpecies<Byte> bspec64 = ByteVector.SPECIES_64;
  57     static final VectorSpecies<Short> sspec64 = ShortVector.SPECIES_64;
  58 
  59     static final VectorSpecies<Integer> ispec128 = IntVector.SPECIES_128;
  60     static final VectorSpecies<Float> fspec128 = FloatVector.SPECIES_128;
  61     static final VectorSpecies<Long> lspec128 = LongVector.SPECIES_128;
  62     static final VectorSpecies<Double> dspec128 = DoubleVector.SPECIES_128;
  63     static final VectorSpecies<Byte> bspec128 = ByteVector.SPECIES_128;
  64     static final VectorSpecies<Short> sspec128 = ShortVector.SPECIES_128;
  65 
  66     static final VectorSpecies<Integer> ispec256 = IntVector.SPECIES_256;
  67     static final VectorSpecies<Float> fspec256 = FloatVector.SPECIES_256;
  68     static final VectorSpecies<Long> lspec256 = LongVector.SPECIES_256;
  69     static final VectorSpecies<Double> dspec256 = DoubleVector.SPECIES_256;
  70     static final VectorSpecies<Byte> bspec256 = ByteVector.SPECIES_256;
  71     static final VectorSpecies<Short> sspec256 = ShortVector.SPECIES_256;
  72 
  73     static final VectorSpecies<Integer> ispec512 = IntVector.SPECIES_512;
  74     static final VectorSpecies<Float> fspec512 = FloatVector.SPECIES_512;
  75     static final VectorSpecies<Long> lspec512 = LongVector.SPECIES_512;
  76     static final VectorSpecies<Double> dspec512 = DoubleVector.SPECIES_512;
  77     static final VectorSpecies<Byte> bspec512 = ByteVector.SPECIES_512;
  78     static final VectorSpecies<Short> sspec512 = ShortVector.SPECIES_512;
  79 
  80     static final VectorSpecies<Integer> ispecMax = IntVector.SPECIES_MAX;
  81     static final VectorSpecies<Float> fspecMax = FloatVector.SPECIES_MAX;
  82     static final VectorSpecies<Long> lspecMax = LongVector.SPECIES_MAX;
  83     static final VectorSpecies<Double> dspecMax = DoubleVector.SPECIES_MAX;
  84     static final VectorSpecies<Byte> bspecMax = ByteVector.SPECIES_MAX;
  85     static final VectorSpecies<Short> sspecMax = ShortVector.SPECIES_MAX;
  86 
  87     static VectorShape getMaxBit() {
  88         return VectorShape.S_Max_BIT;
  89     }
  90 
  91     static <T> IntFunction<T> withToString(String s, IntFunction<T> f) {
  92         return new IntFunction<T>() {
  93             @Override
  94             public T apply(int v) {
  95                 return f.apply(v);
  96             }
  97 
  98             @Override
  99             public String toString() {
 100                 return s;
 101             }
 102         };
 103     }
 104 
 105     interface ToByteF {
 106         byte apply(int i);
 107     }
 108 
 109     static byte[] fill_byte(int s , ToByteF f) {
 110         return fill_byte(new byte[s], f);
 111     }
 112 
 113     static byte[] fill_byte(byte[] a, ToByteF f) {
 114         for (int i = 0; i < a.length; i++) {
 115             a[i] = f.apply(i);
 116         }
 117         return a;
 118     }
 119 
 120     interface ToBoolF {
 121         boolean apply(int i);
 122     }
 123 
 124     static boolean[] fill_bool(int s , ToBoolF f) {
 125         return fill_bool(new boolean[s], f);
 126     }
 127 
 128     static boolean[] fill_bool(boolean[] a, ToBoolF f) {
 129         for (int i = 0; i < a.length; i++) {
 130             a[i] = f.apply(i);
 131         }
 132         return a;
 133     }
 134 
 135     interface ToShortF {
 136         short apply(int i);
 137     }
 138 
 139     static short[] fill_short(int s , ToShortF f) {
 140         return fill_short(new short[s], f);
 141     }
 142 
 143     static short[] fill_short(short[] a, ToShortF f) {
 144         for (int i = 0; i < a.length; i++) {
 145             a[i] = f.apply(i);
 146         }
 147         return a;
 148     }
 149 
 150     interface ToIntF {
 151         int apply(int i);
 152     }
 153 
 154     static int[] fill_int(int s , ToIntF f) {
 155         return fill_int(new int[s], f);
 156     }
 157 
 158     static int[] fill_int(int[] a, ToIntF f) {
 159         for (int i = 0; i < a.length; i++) {
 160             a[i] = f.apply(i);
 161         }
 162         return a;
 163     }
 164 
 165     interface ToLongF {
 166         long apply(int i);
 167     }
 168 
 169     static long[] fill_long(int s , ToLongF f) {
 170         return fill_long(new long[s], f);
 171     }
 172 
 173     static long[] fill_long(long[] a, ToLongF f) {
 174         for (int i = 0; i < a.length; i++) {
 175             a[i] = f.apply(i);
 176         }
 177         return a;
 178     }
 179 
 180     interface ToFloatF {
 181         float apply(int i);
 182     }
 183 
 184     static float[] fill_float(int s , ToFloatF f) {
 185         return fill_float(new float[s], f);
 186     }
 187 
 188     static float[] fill_float(float[] a, ToFloatF f) {
 189         for (int i = 0; i < a.length; i++) {
 190             a[i] = f.apply(i);
 191         }
 192         return a;
 193     }
 194 
 195     interface ToDoubleF {
 196         double apply(int i);
 197     }
 198 
 199     static double[] fill_double(int s , ToDoubleF f) {
 200         return fill_double(new double[s], f);
 201     }
 202 
 203     static double[] fill_double(double[] a, ToDoubleF f) {
 204         for (int i = 0; i < a.length; i++) {
 205             a[i] = f.apply(i);
 206         }
 207         return a;
 208     }
 209 
 210     static final List<IntFunction<byte[]>> BYTE_GENERATORS = List.of(
 211             withToString("byte(i)", (int s) -> {
 212                 return fill_byte(s, i -> (byte)(i+1));
 213             })
 214     );
 215 
 216     @DataProvider
 217     public Object[][] byteUnaryOpProvider() {
 218         return BYTE_GENERATORS.stream().
 219                 map(f -> new Object[]{f}).
 220                 toArray(Object[][]::new);
 221     }
 222 
 223     static final List<IntFunction<boolean[]>> BOOL_GENERATORS = List.of(
 224         withToString("boolean(i%3)", (int s) -> {
 225             return fill_bool(s, i -> i % 3 == 0);
 226         })
 227     );
 228 
 229     @DataProvider
 230     public Object[][] booleanUnaryOpProvider() {
 231         return BOOL_GENERATORS.stream().
 232                 map(f -> new Object[]{f}).
 233                 toArray(Object[][]::new);
 234     }
 235 
 236     static final List<IntFunction<short[]>> SHORT_GENERATORS = List.of(
 237             withToString("short(i)", (int s) -> {
 238                 return fill_short(s, i -> (short)(i*100+1));
 239             })
 240     );
 241 
 242     @DataProvider
 243     public Object[][] shortUnaryOpProvider() {
 244         return SHORT_GENERATORS.stream().
 245                 map(f -> new Object[]{f}).
 246                 toArray(Object[][]::new);
 247     }
 248 
 249     static final List<IntFunction<int[]>> INT_GENERATORS = List.of(
 250             withToString("int(i)", (int s) -> {
 251                 return fill_int(s, i -> (int)(i^((i&1)-1)));
 252             })
 253     );
 254 
 255     @DataProvider
 256     public Object[][] intUnaryOpProvider() {
 257         return INT_GENERATORS.stream().
 258                 map(f -> new Object[]{f}).
 259                 toArray(Object[][]::new);
 260     }
 261 
 262     static final List<IntFunction<long[]>> LONG_GENERATORS = List.of(
 263             withToString("long(i)", (int s) -> {
 264                 return fill_long(s, i -> (long)(i^((i&1)-1)));
 265             })
 266     );
 267 
 268     @DataProvider
 269     public Object[][] longUnaryOpProvider() {
 270         return LONG_GENERATORS.stream().
 271                 map(f -> new Object[]{f}).
 272                 toArray(Object[][]::new);
 273     }
 274 
 275     static final List<IntFunction<float[]>> FLOAT_GENERATORS = List.of(
 276             withToString("float(i)", (int s) -> {
 277                 return fill_float(s, i -> (float)(i * 10 + 0.1));
 278             })
 279     );
 280 
 281     @DataProvider
 282     public Object[][] floatUnaryOpProvider() {
 283         return FLOAT_GENERATORS.stream().
 284                 map(f -> new Object[]{f}).
 285                 toArray(Object[][]::new);
 286     }
 287 
 288     static final List<IntFunction<double[]>> DOUBLE_GENERATORS = List.of(
 289             withToString("double(i)", (int s) -> {
 290                 return fill_double(s, i -> (double)(i * 10 + 0.1));
 291             })
 292     );
 293 
 294     @DataProvider
 295     public Object[][] doubleUnaryOpProvider() {
 296         return DOUBLE_GENERATORS.stream().
 297                 map(f -> new Object[]{f}).
 298                 toArray(Object[][]::new);
 299     }
 300 
 301     static int partLimit(VectorSpecies<?> a, VectorSpecies<?> b, boolean lanewise) {
 302         int partLimit = a.partLimit(b, lanewise);
 303         // Check it:
 304         int parts = (partLimit >= 0 ? Math.max(1, partLimit) : -partLimit);
 305         int asize = a.vectorByteSize(), bsize = b.vectorByteSize();
 306         if (lanewise) {
 307             asize *= b.elementSize();
 308             asize /= a.elementSize();
 309         }
 310         int larger = Math.max(asize, bsize);
 311         int smaller = Math.min(asize, bsize);
 312         assert(parts == larger / smaller) : Arrays.asList(partLimit, parts, a+":"+asize, b+":"+bsize);
 313         if (asize > bsize) assert(partLimit > 0);
 314         else if (asize < bsize) assert(partLimit < 0);
 315         else  assert(partLimit == 0);
 316         return partLimit;
 317     }
 318 
 319     @ForceInline
 320     static <E>
 321     void testVectorReshape(VectorSpecies<E> a, VectorSpecies<E> b, byte[] input, byte[] output) {
 322         testVectorReshape(a, b, input, output, false);
 323         testVectorReshapeLanewise(a, b, input, output);
 324     }
 325     @ForceInline
 326     static <E>
 327     void testVectorReshapeLanewise(VectorSpecies<E> a, VectorSpecies<E> b, byte[] input, byte[] output) {
 328         testVectorReshape(a, b, input, output, true);
 329     }
 330     @ForceInline
 331     static <E>
 332     void testVectorReshape(VectorSpecies<E> a, VectorSpecies<E> b, byte[] input, byte[] output, boolean lanewise) {
 333         Class<?> atype = a.elementType(), btype = b.elementType();
 334         MemorySegment inputMs = MemorySegment.ofArray(input);
 335         MemorySegment outputMs = MemorySegment.ofArray(output);
 336         Vector<E> av = a.fromMemorySegment(inputMs, 0, ByteOrder.nativeOrder());
 337         int partLimit = partLimit(a, b, lanewise);
 338         int block = Math.min(a.vectorByteSize(), b.vectorByteSize());
 339         if (false)
 340             System.out.println("testing "+a+"->"+b+
 341                                (lanewise?" (lanewise)":" (reinterpret)")+
 342                                ", partLimit=" + partLimit +
 343                                ", block=" + block);
 344         byte[] expected;
 345         int origin;
 346         if (partLimit > 0) {
 347             for (int part = 0; part < partLimit; part++) {
 348                 Vector<E> bv = (lanewise
 349                                 ? av.castShape(b, part)
 350                                 : av.reinterpretShape(b, part));
 351                 bv.intoMemorySegment(outputMs, 0, ByteOrder.nativeOrder());
 352                 // expansion: slice some of the input
 353                 origin = part * block;
 354                 expected = Arrays.copyOfRange(input, origin, origin + block);
 355                 if (lanewise) {
 356                     expected = castByteArrayData(expected, atype, btype);
 357                 }
 358                 checkPartialResult(a, b, input, output, expected,
 359                                    lanewise, part, origin);
 360             }
 361         } else if (partLimit < 0) {
 362             for (int part = 0; part > partLimit; part--) {
 363                 Vector<E> bv = (lanewise
 364                                 ? av.castShape(b, part)
 365                                 : av.reinterpretShape(b, part));
 366                 bv.intoMemorySegment(outputMs, 0, ByteOrder.nativeOrder());
 367                 // contraction: unslice the input into part of the output
 368                 byte[] logical = input;
 369                 if (lanewise) {
 370                     logical = castByteArrayData(input, atype, btype);
 371                 }
 372                 assert(logical.length == block);
 373                 expected = new byte[output.length];
 374                 origin = -part * block;
 375                 System.arraycopy(logical, 0, expected, origin, block);
 376                 checkPartialResult(a, b, input, output, expected,
 377                                    lanewise, part, origin);
 378             }
 379         } else {
 380             int part = 0;
 381             Vector<E> bv = (lanewise
 382                             ? av.castShape(b, part)
 383                             : av.reinterpretShape(b, part));
 384             bv.intoMemorySegment(outputMs, 0, ByteOrder.nativeOrder());
 385             // in-place copy, no resize
 386             expected = input;
 387             origin = 0;
 388             if (lanewise) {
 389                 expected = castByteArrayData(expected, atype, btype);
 390             }
 391             checkPartialResult(a, b, input, output, expected,
 392                                lanewise, part, origin);
 393         }
 394     }
 395 
 396     static
 397     void checkPartialResult(VectorSpecies<?> a, VectorSpecies<?> b,
 398                             byte[] input, byte[] output, byte[] expected,
 399                             boolean lanewise, int part, int origin) {
 400         if (Arrays.equals(expected, output)) {
 401             return;
 402         }
 403         int partLimit = partLimit(a, b, lanewise);
 404         int block;
 405         if (!lanewise)
 406             block = Math.min(a.vectorByteSize(), b.vectorByteSize());
 407         else if (partLimit >= 0)
 408             block = a.vectorByteSize() / Math.max(1, partLimit);
 409         else
 410             block = b.vectorByteSize() / -partLimit;
 411         System.out.println("input:  "+Arrays.toString(input));
 412         System.out.println("Failing with "+a+"->"+b+
 413                            (lanewise?" (lanewise)":" (reinterpret)")+
 414                            ", partLimit=" + partLimit +
 415                            ", block=" + block +
 416                            ", part=" + part +
 417                            ", origin=" + origin);
 418         System.out.println("expect: "+Arrays.toString(expected));
 419         System.out.println("output: "+Arrays.toString(output));
 420         Assert.assertEquals(output, expected);
 421     }
 422 
 423     @Test(dataProvider = "byteUnaryOpProvider")
 424     static void testReshapeByte(IntFunction<byte[]> fa) {
 425         byte[] bin64 = fa.apply(64/Byte.SIZE);
 426         byte[] bin128 = fa.apply(128/Byte.SIZE);
 427         byte[] bin256 = fa.apply(256/Byte.SIZE);
 428         byte[] bin512 = fa.apply(512/Byte.SIZE);
 429         byte[] binMax = fa.apply(S_Max_BIT.vectorBitSize()/Byte.SIZE);
 430         byte[] bout64 = new byte[bin64.length];
 431         byte[] bout128 = new byte[bin128.length];
 432         byte[] bout256 = new byte[bin256.length];
 433         byte[] bout512 = new byte[bin512.length];
 434         byte[] boutMax = new byte[binMax.length];
 435 
 436         for (int i = 0; i < NUM_ITER; i++) {
 437             testVectorReshape(bspec64, bspec64, bin64, bout64);
 438             testVectorReshape(bspec64, bspec128, bin64, bout128);
 439             testVectorReshape(bspec64, bspec256, bin64, bout256);
 440             testVectorReshape(bspec64, bspec512, bin64, bout512);
 441             testVectorReshape(bspec64, bspecMax, bin64, boutMax);
 442 
 443             testVectorReshape(bspec128, bspec64, bin128, bout64);
 444             testVectorReshape(bspec128, bspec128, bin128, bout128);
 445             testVectorReshape(bspec128, bspec256, bin128, bout256);
 446             testVectorReshape(bspec128, bspec512, bin128, bout512);
 447             testVectorReshape(bspec128, bspecMax, bin128, boutMax);
 448 
 449             testVectorReshape(bspec256, bspec64, bin256, bout64);
 450             testVectorReshape(bspec256, bspec128, bin256, bout128);
 451             testVectorReshape(bspec256, bspec256, bin256, bout256);
 452             testVectorReshape(bspec256, bspec512, bin256, bout512);
 453             testVectorReshape(bspec256, bspecMax, bin256, boutMax);
 454 
 455             testVectorReshape(bspec512, bspec64, bin512, bout64);
 456             testVectorReshape(bspec512, bspec128, bin512, bout128);
 457             testVectorReshape(bspec512, bspec256, bin512, bout256);
 458             testVectorReshape(bspec512, bspec512, bin512, bout512);
 459             testVectorReshape(bspec512, bspecMax, bin512, boutMax);
 460 
 461             testVectorReshape(bspecMax, bspec64, binMax, bout64);
 462             testVectorReshape(bspecMax, bspec128, binMax, bout128);
 463             testVectorReshape(bspecMax, bspec256, binMax, bout256);
 464             testVectorReshape(bspecMax, bspec512, binMax, bout512);
 465             testVectorReshape(bspecMax, bspecMax, binMax, boutMax);
 466         }
 467     }
 468 
 469     @Test(dataProvider = "byteUnaryOpProvider")
 470     static void testReshapeShort(IntFunction<byte[]> fa) {
 471         byte[] bin64 = fa.apply(64/Byte.SIZE);
 472         byte[] bin128 = fa.apply(128/Byte.SIZE);
 473         byte[] bin256 = fa.apply(256/Byte.SIZE);
 474         byte[] bin512 = fa.apply(512/Byte.SIZE);
 475         byte[] binMax = fa.apply(S_Max_BIT.vectorBitSize()/Byte.SIZE);
 476         byte[] bout64 = new byte[bin64.length];
 477         byte[] bout128 = new byte[bin128.length];
 478         byte[] bout256 = new byte[bin256.length];
 479         byte[] bout512 = new byte[bin512.length];
 480         byte[] boutMax = new byte[binMax.length];
 481 
 482         for (int i = 0; i < NUM_ITER; i++) {
 483             testVectorReshape(sspec64, sspec64, bin64, bout64);
 484             testVectorReshape(sspec64, sspec128, bin64, bout128);
 485             testVectorReshape(sspec64, sspec256, bin64, bout256);
 486             testVectorReshape(sspec64, sspec512, bin64, bout512);
 487             testVectorReshape(sspec64, sspecMax, bin64, boutMax);
 488 
 489             testVectorReshape(sspec128, sspec64, bin128, bout64);
 490             testVectorReshape(sspec128, sspec128, bin128, bout128);
 491             testVectorReshape(sspec128, sspec256, bin128, bout256);
 492             testVectorReshape(sspec128, sspec512, bin128, bout512);
 493             testVectorReshape(sspec128, sspecMax, bin128, boutMax);
 494 
 495             testVectorReshape(sspec256, sspec64, bin256, bout64);
 496             testVectorReshape(sspec256, sspec128, bin256, bout128);
 497             testVectorReshape(sspec256, sspec256, bin256, bout256);
 498             testVectorReshape(sspec256, sspec512, bin256, bout512);
 499             testVectorReshape(sspec256, sspecMax, bin256, boutMax);
 500 
 501             testVectorReshape(sspec512, sspec64, bin512, bout64);
 502             testVectorReshape(sspec512, sspec128, bin512, bout128);
 503             testVectorReshape(sspec512, sspec256, bin512, bout256);
 504             testVectorReshape(sspec512, sspec512, bin512, bout512);
 505             testVectorReshape(sspec512, sspecMax, bin512, boutMax);
 506 
 507             testVectorReshape(sspecMax, sspec64, binMax, bout64);
 508             testVectorReshape(sspecMax, sspec128, binMax, bout128);
 509             testVectorReshape(sspecMax, sspec256, binMax, bout256);
 510             testVectorReshape(sspecMax, sspec512, binMax, bout512);
 511             testVectorReshape(sspecMax, sspecMax, binMax, boutMax);
 512         }
 513     }
 514 
 515     @Test(dataProvider = "byteUnaryOpProvider")
 516     static void testReshapeInt(IntFunction<byte[]> fa) {
 517         byte[] bin64 = fa.apply(64/Byte.SIZE);
 518         byte[] bin128 = fa.apply(128/Byte.SIZE);
 519         byte[] bin256 = fa.apply(256/Byte.SIZE);
 520         byte[] bin512 = fa.apply(512/Byte.SIZE);
 521         byte[] binMax = fa.apply(S_Max_BIT.vectorBitSize()/Byte.SIZE);
 522         byte[] bout64 = new byte[bin64.length];
 523         byte[] bout128 = new byte[bin128.length];
 524         byte[] bout256 = new byte[bin256.length];
 525         byte[] bout512 = new byte[bin512.length];
 526         byte[] boutMax = new byte[binMax.length];
 527 
 528         for (int i = 0; i < NUM_ITER; i++) {
 529             testVectorReshape(ispec64, ispec64, bin64, bout64);
 530             testVectorReshape(ispec64, ispec128, bin64, bout128);
 531             testVectorReshape(ispec64, ispec256, bin64, bout256);
 532             testVectorReshape(ispec64, ispec512, bin64, bout512);
 533             testVectorReshape(ispec64, ispecMax, bin64, boutMax);
 534 
 535             testVectorReshape(ispec128, ispec64, bin128, bout64);
 536             testVectorReshape(ispec128, ispec128, bin128, bout128);
 537             testVectorReshape(ispec128, ispec256, bin128, bout256);
 538             testVectorReshape(ispec128, ispec512, bin128, bout512);
 539             testVectorReshape(ispec128, ispecMax, bin128, boutMax);
 540 
 541             testVectorReshape(ispec256, ispec64, bin256, bout64);
 542             testVectorReshape(ispec256, ispec128, bin256, bout128);
 543             testVectorReshape(ispec256, ispec256, bin256, bout256);
 544             testVectorReshape(ispec256, ispec512, bin256, bout512);
 545             testVectorReshape(ispec256, ispecMax, bin256, boutMax);
 546 
 547             testVectorReshape(ispec512, ispec64, bin512, bout64);
 548             testVectorReshape(ispec512, ispec128, bin512, bout128);
 549             testVectorReshape(ispec512, ispec256, bin512, bout256);
 550             testVectorReshape(ispec512, ispec512, bin512, bout512);
 551             testVectorReshape(ispec512, ispecMax, bin512, boutMax);
 552 
 553             testVectorReshape(ispecMax, ispec64, binMax, bout64);
 554             testVectorReshape(ispecMax, ispec128, binMax, bout128);
 555             testVectorReshape(ispecMax, ispec256, binMax, bout256);
 556             testVectorReshape(ispecMax, ispec512, binMax, bout512);
 557             testVectorReshape(ispecMax, ispecMax, binMax, boutMax);
 558         }
 559     }
 560 
 561     @Test(dataProvider = "byteUnaryOpProvider")
 562     static void testReshapeLong(IntFunction<byte[]> fa) {
 563         byte[] bin64 = fa.apply(64/Byte.SIZE);
 564         byte[] bin128 = fa.apply(128/Byte.SIZE);
 565         byte[] bin256 = fa.apply(256/Byte.SIZE);
 566         byte[] bin512 = fa.apply(512/Byte.SIZE);
 567         byte[] binMax = fa.apply(S_Max_BIT.vectorBitSize()/Byte.SIZE);
 568         byte[] bout64 = new byte[bin64.length];
 569         byte[] bout128 = new byte[bin128.length];
 570         byte[] bout256 = new byte[bin256.length];
 571         byte[] bout512 = new byte[bin512.length];
 572         byte[] boutMax = new byte[binMax.length];
 573 
 574         for (int i = 0; i < NUM_ITER; i++) {
 575             testVectorReshape(lspec64, lspec64, bin64, bout64);
 576             testVectorReshape(lspec64, lspec128, bin64, bout128);
 577             testVectorReshape(lspec64, lspec256, bin64, bout256);
 578             testVectorReshape(lspec64, lspec512, bin64, bout512);
 579             testVectorReshape(lspec64, lspecMax, bin64, boutMax);
 580 
 581             testVectorReshape(lspec128, lspec64, bin128, bout64);
 582             testVectorReshape(lspec128, lspec128, bin128, bout128);
 583             testVectorReshape(lspec128, lspec256, bin128, bout256);
 584             testVectorReshape(lspec128, lspec512, bin128, bout512);
 585             testVectorReshape(lspec128, lspecMax, bin128, boutMax);
 586 
 587             testVectorReshape(lspec256, lspec64, bin256, bout64);
 588             testVectorReshape(lspec256, lspec128, bin256, bout128);
 589             testVectorReshape(lspec256, lspec256, bin256, bout256);
 590             testVectorReshape(lspec256, lspec512, bin256, bout512);
 591             testVectorReshape(lspec256, lspecMax, bin256, boutMax);
 592 
 593             testVectorReshape(lspec512, lspec64, bin512, bout64);
 594             testVectorReshape(lspec512, lspec128, bin512, bout128);
 595             testVectorReshape(lspec512, lspec256, bin512, bout256);
 596             testVectorReshape(lspec512, lspec512, bin512, bout512);
 597             testVectorReshape(lspec512, lspecMax, bin512, boutMax);
 598 
 599             testVectorReshape(lspecMax, lspec64, binMax, bout64);
 600             testVectorReshape(lspecMax, lspec128, binMax, bout128);
 601             testVectorReshape(lspecMax, lspec256, binMax, bout256);
 602             testVectorReshape(lspecMax, lspec512, binMax, bout512);
 603             testVectorReshape(lspecMax, lspecMax, binMax, boutMax);
 604         }
 605     }
 606 
 607     @Test(dataProvider = "byteUnaryOpProvider")
 608     static void testReshapeFloat(IntFunction<byte[]> fa) {
 609         byte[] bin64 = fa.apply(64/Byte.SIZE);
 610         byte[] bin128 = fa.apply(128/Byte.SIZE);
 611         byte[] bin256 = fa.apply(256/Byte.SIZE);
 612         byte[] bin512 = fa.apply(512/Byte.SIZE);
 613         byte[] binMax = fa.apply(S_Max_BIT.vectorBitSize()/Byte.SIZE);
 614         byte[] bout64 = new byte[bin64.length];
 615         byte[] bout128 = new byte[bin128.length];
 616         byte[] bout256 = new byte[bin256.length];
 617         byte[] bout512 = new byte[bin512.length];
 618         byte[] boutMax = new byte[binMax.length];
 619 
 620         for (int i = 0; i < NUM_ITER; i++) {
 621             testVectorReshape(fspec64, fspec64, bin64, bout64);
 622             testVectorReshape(fspec64, fspec128, bin64, bout128);
 623             testVectorReshape(fspec64, fspec256, bin64, bout256);
 624             testVectorReshape(fspec64, fspec512, bin64, bout512);
 625             testVectorReshape(fspec64, fspecMax, bin64, boutMax);
 626 
 627             testVectorReshape(fspec128, fspec64, bin128, bout64);
 628             testVectorReshape(fspec128, fspec128, bin128, bout128);
 629             testVectorReshape(fspec128, fspec256, bin128, bout256);
 630             testVectorReshape(fspec128, fspec512, bin128, bout512);
 631             testVectorReshape(fspec128, fspecMax, bin128, boutMax);
 632 
 633             testVectorReshape(fspec256, fspec64, bin256, bout64);
 634             testVectorReshape(fspec256, fspec128, bin256, bout128);
 635             testVectorReshape(fspec256, fspec256, bin256, bout256);
 636             testVectorReshape(fspec256, fspec512, bin256, bout512);
 637             testVectorReshape(fspec256, fspecMax, bin256, boutMax);
 638 
 639             testVectorReshape(fspec512, fspec64, bin512, bout64);
 640             testVectorReshape(fspec512, fspec128, bin512, bout128);
 641             testVectorReshape(fspec512, fspec256, bin512, bout256);
 642             testVectorReshape(fspec512, fspec512, bin512, bout512);
 643             testVectorReshape(fspec512, fspecMax, bin512, boutMax);
 644 
 645             testVectorReshape(fspecMax, fspec64, binMax, bout64);
 646             testVectorReshape(fspecMax, fspec128, binMax, bout128);
 647             testVectorReshape(fspecMax, fspec256, binMax, bout256);
 648             testVectorReshape(fspecMax, fspec512, binMax, bout512);
 649             testVectorReshape(fspecMax, fspecMax, binMax, boutMax);
 650         }
 651     }
 652 
 653     @Test(dataProvider = "byteUnaryOpProvider")
 654     static void testReshapeDouble(IntFunction<byte[]> fa) {
 655         byte[] bin64 = fa.apply(64/Byte.SIZE);
 656         byte[] bin128 = fa.apply(128/Byte.SIZE);
 657         byte[] bin256 = fa.apply(256/Byte.SIZE);
 658         byte[] bin512 = fa.apply(512/Byte.SIZE);
 659         byte[] binMax = fa.apply(S_Max_BIT.vectorBitSize()/Byte.SIZE);
 660         byte[] bout64 = new byte[bin64.length];
 661         byte[] bout128 = new byte[bin128.length];
 662         byte[] bout256 = new byte[bin256.length];
 663         byte[] bout512 = new byte[bin512.length];
 664         byte[] boutMax = new byte[binMax.length];
 665 
 666         for (int i = 0; i < NUM_ITER; i++) {
 667             testVectorReshape(dspec64, dspec64, bin64, bout64);
 668             testVectorReshape(dspec64, dspec128, bin64, bout128);
 669             testVectorReshape(dspec64, dspec256, bin64, bout256);
 670             testVectorReshape(dspec64, dspec512, bin64, bout512);
 671             testVectorReshape(dspec64, dspecMax, bin64, boutMax);
 672 
 673             testVectorReshape(dspec128, dspec64, bin128, bout64);
 674             testVectorReshape(dspec128, dspec128, bin128, bout128);
 675             testVectorReshape(dspec128, dspec256, bin128, bout256);
 676             testVectorReshape(dspec128, dspec512, bin128, bout512);
 677             testVectorReshape(dspec128, dspecMax, bin128, boutMax);
 678 
 679             testVectorReshape(dspec256, dspec64, bin256, bout64);
 680             testVectorReshape(dspec256, dspec128, bin256, bout128);
 681             testVectorReshape(dspec256, dspec256, bin256, bout256);
 682             testVectorReshape(dspec256, dspec512, bin256, bout512);
 683             testVectorReshape(dspec256, dspecMax, bin256, boutMax);
 684 
 685             testVectorReshape(dspec512, dspec64, bin512, bout64);
 686             testVectorReshape(dspec512, dspec128, bin512, bout128);
 687             testVectorReshape(dspec512, dspec256, bin512, bout256);
 688             testVectorReshape(dspec512, dspec512, bin512, bout512);
 689             testVectorReshape(dspec512, dspecMax, bin512, boutMax);
 690 
 691             testVectorReshape(dspecMax, dspec64, binMax, bout64);
 692             testVectorReshape(dspecMax, dspec128, binMax, bout128);
 693             testVectorReshape(dspecMax, dspec256, binMax, bout256);
 694             testVectorReshape(dspecMax, dspec512, binMax, bout512);
 695             testVectorReshape(dspecMax, dspecMax, binMax, boutMax);
 696         }
 697     }
 698     @ForceInline
 699     static <E,F>
 700     void testVectorRebracket(VectorSpecies<E> a, VectorSpecies<F> b, byte[] input, byte[] output) {
 701         testVectorRebracket(a, b, input, output, false);
 702         testVectorRebracketLanewise(a, b, input, output);
 703     }
 704     @ForceInline
 705     static <E,F>
 706     void testVectorRebracketLanewise(VectorSpecies<E> a, VectorSpecies<F> b, byte[] input, byte[] output) {
 707         testVectorRebracket(a, b, input, output, true);
 708     }
 709     @ForceInline
 710     static <E,F>
 711     void testVectorRebracket(VectorSpecies<E> a, VectorSpecies<F> b, byte[] input, byte[] output, boolean lanewise) {
 712         Class<?> atype = a.elementType(), btype = b.elementType();
 713         MemorySegment inputMs = MemorySegment.ofArray(input);
 714         MemorySegment outputMs = MemorySegment.ofArray(output);
 715         Vector<E> av = a.fromMemorySegment(inputMs, 0, ByteOrder.nativeOrder());
 716         int partLimit = partLimit(a, b, lanewise);
 717         int block;
 718         assert(input.length == output.length);
 719         if (!lanewise)
 720             block = Math.min(a.vectorByteSize(), b.vectorByteSize());
 721         else if (partLimit >= 0)
 722             block = a.vectorByteSize() / Math.max(1, partLimit);
 723         else
 724             block = b.vectorByteSize() / -partLimit;
 725         if (lanewise) {
 726             if (atype == btype)  return;
 727             if (atype == float.class || atype == double.class)  return;
 728             if (btype == float.class || btype == double.class)  return;
 729         }
 730         if (false)
 731             System.out.println("testing "+a+"->"+b+
 732                                (lanewise?" (lanewise)":" (reinterpret)")+
 733                                ", partLimit=" + partLimit +
 734                                ", block=" + block);
 735         byte[] expected;
 736         int origin;
 737         if (partLimit > 0) {
 738             for (int part = 0; part < partLimit; part++) {
 739                 Vector<F> bv = (lanewise
 740                                 ? av.castShape(b, part)
 741                                 : av.reinterpretShape(b, part));
 742                 bv.intoMemorySegment(outputMs, 0, ByteOrder.nativeOrder());
 743                 // expansion: slice some of the input
 744                 origin = part * block;
 745                 expected = Arrays.copyOfRange(input, origin, origin + block);
 746                 if (lanewise) {
 747                     expected = castByteArrayData(expected, atype, btype);
 748                 }
 749                 checkPartialResult(a, b, input, output, expected,
 750                                    lanewise, part, origin);
 751             }
 752         } else if (partLimit < 0) {
 753             for (int part = 0; part > partLimit; part--) {
 754                 Vector<F> bv = (lanewise
 755                                 ? av.castShape(b, part)
 756                                 : av.reinterpretShape(b, part));
 757                 bv.intoMemorySegment(outputMs, 0, ByteOrder.nativeOrder());
 758                 // contraction: unslice the input into part of the output
 759                 byte[] logical = input;
 760                 if (lanewise) {
 761                     logical = castByteArrayData(input, atype, btype);
 762                 }
 763                 assert(logical.length == block);
 764                 expected = new byte[output.length];
 765                 origin = -part * block;
 766                 System.arraycopy(logical, 0, expected, origin, block);
 767                 checkPartialResult(a, b, input, output, expected,
 768                                    lanewise, part, origin);
 769             }
 770         } else {
 771             int part = 0;
 772             Vector<F> bv = (lanewise
 773                             ? av.castShape(b, part)
 774                             : av.reinterpretShape(b, part));
 775             bv.intoMemorySegment(outputMs, 0, ByteOrder.nativeOrder());
 776             // in-place copy, no resize
 777             expected = input;
 778             origin = 0;
 779             if (lanewise) {
 780                 expected = castByteArrayData(expected, atype, btype);
 781             }
 782             checkPartialResult(a, b, input, output, expected,
 783                                lanewise, part, origin);
 784         }
 785     }
 786 
 787     static int decodeType(Class<?> type) {
 788         switch (type.getName().charAt(0)) {
 789         case 'b': return 1;
 790         case 's': return 2;
 791         case 'i': return 4;
 792         case 'l': return 8;
 793         case 'f': return -4;
 794         case 'd': return -8;
 795         }
 796         throw new AssertionError(type);
 797     }
 798 
 799     static byte[] castByteArrayData(byte[] data, Class<?> atype, Class<?> btype) {
 800         if (atype == btype)  return data;
 801         int asize = decodeType(atype), bsize = decodeType(btype);
 802         assert((asize | bsize) > 0);  // no float or double
 803         int count = data.length / asize;
 804         assert(data.length == count * asize);
 805         byte[] result = new byte[count * bsize];
 806 
 807         int minsize = Math.min(asize, bsize);
 808         int size_diff = bsize - asize;
 809         ByteOrder bo = ByteOrder.nativeOrder();
 810         int rp = 0, dp = 0;
 811         for (int i = 0; i < count; i++) {
 812             if (bo == ByteOrder.BIG_ENDIAN) {
 813                 if (size_diff > 0) {
 814                     byte sign = (byte)(data[dp] >> 7); // sign extend
 815                     for (int j = 0; j < size_diff; j++) {
 816                         result[rp++] = sign;
 817                     }
 818                 } else {
 819                     dp -= size_diff; // step forward if needed
 820                 }
 821             }
 822             byte b = 0;
 823             for (int j = 0; j < minsize; j++) {
 824                 b = data[dp++];
 825                 result[rp++] = b;
 826             }
 827             if (bo == ByteOrder.LITTLE_ENDIAN) {
 828                 if (size_diff > 0) {
 829                     byte sign = (byte)(b >> 7); // sign extend
 830                     for (int j = 0; j < size_diff; j++) {
 831                         result[rp++] = sign;
 832                     }
 833                 } else {
 834                     dp -= size_diff; // step forward if needed
 835                 }
 836             }
 837         }
 838         assert(dp == data.length);
 839         assert(rp == result.length);
 840 
 841         return result;
 842     }
 843 
 844     @Test(dataProvider = "byteUnaryOpProvider")
 845     static void testRebracket64(IntFunction<byte[]> fa) {
 846         byte[] barr = fa.apply(64/Byte.SIZE);
 847         byte[] bout = new byte[barr.length];
 848         for (int i = 0; i < NUM_ITER; i++) {
 849             testVectorRebracket(bspec64, bspec64, barr, bout);
 850             testVectorRebracket(bspec64, sspec64, barr, bout);
 851             testVectorRebracket(bspec64, ispec64, barr, bout);
 852             testVectorRebracket(bspec64, lspec64, barr, bout);
 853             testVectorRebracket(bspec64, fspec64, barr, bout);
 854             testVectorRebracket(bspec64, dspec64, barr, bout);
 855 
 856             testVectorRebracket(sspec64, bspec64, barr, bout);
 857             testVectorRebracket(sspec64, sspec64, barr, bout);
 858             testVectorRebracket(sspec64, ispec64, barr, bout);
 859             testVectorRebracket(sspec64, lspec64, barr, bout);
 860             testVectorRebracket(sspec64, fspec64, barr, bout);
 861             testVectorRebracket(sspec64, dspec64, barr, bout);
 862 
 863             testVectorRebracket(ispec64, bspec64, barr, bout);
 864             testVectorRebracket(ispec64, sspec64, barr, bout);
 865             testVectorRebracket(ispec64, ispec64, barr, bout);
 866             testVectorRebracket(ispec64, lspec64, barr, bout);
 867             testVectorRebracket(ispec64, fspec64, barr, bout);
 868             testVectorRebracket(ispec64, dspec64, barr, bout);
 869 
 870             testVectorRebracket(lspec64, bspec64, barr, bout);
 871             testVectorRebracket(lspec64, sspec64, barr, bout);
 872             testVectorRebracket(lspec64, ispec64, barr, bout);
 873             testVectorRebracket(lspec64, lspec64, barr, bout);
 874             testVectorRebracket(lspec64, fspec64, barr, bout);
 875             testVectorRebracket(lspec64, dspec64, barr, bout);
 876 
 877             testVectorRebracket(fspec64, bspec64, barr, bout);
 878             testVectorRebracket(fspec64, sspec64, barr, bout);
 879             testVectorRebracket(fspec64, ispec64, barr, bout);
 880             testVectorRebracket(fspec64, lspec64, barr, bout);
 881             testVectorRebracket(fspec64, fspec64, barr, bout);
 882             testVectorRebracket(fspec64, dspec64, barr, bout);
 883 
 884             testVectorRebracket(dspec64, bspec64, barr, bout);
 885             testVectorRebracket(dspec64, sspec64, barr, bout);
 886             testVectorRebracket(dspec64, ispec64, barr, bout);
 887             testVectorRebracket(dspec64, lspec64, barr, bout);
 888             testVectorRebracket(dspec64, fspec64, barr, bout);
 889             testVectorRebracket(dspec64, dspec64, barr, bout);
 890         }
 891     }
 892 
 893     @Test(dataProvider = "byteUnaryOpProvider")
 894     static void testRebracket128(IntFunction<byte[]> fa) {
 895         byte[] barr = fa.apply(128/Byte.SIZE);
 896         byte[] bout = new byte[barr.length];
 897         for (int i = 0; i < NUM_ITER; i++) {
 898             testVectorRebracket(bspec128, bspec128, barr, bout);
 899             testVectorRebracket(bspec128, sspec128, barr, bout);
 900             testVectorRebracket(bspec128, ispec128, barr, bout);
 901             testVectorRebracket(bspec128, lspec128, barr, bout);
 902             testVectorRebracket(bspec128, fspec128, barr, bout);
 903             testVectorRebracket(bspec128, dspec128, barr, bout);
 904 
 905             testVectorRebracket(sspec128, bspec128, barr, bout);
 906             testVectorRebracket(sspec128, sspec128, barr, bout);
 907             testVectorRebracket(sspec128, ispec128, barr, bout);
 908             testVectorRebracket(sspec128, lspec128, barr, bout);
 909             testVectorRebracket(sspec128, fspec128, barr, bout);
 910             testVectorRebracket(sspec128, dspec128, barr, bout);
 911 
 912             testVectorRebracket(ispec128, bspec128, barr, bout);
 913             testVectorRebracket(ispec128, sspec128, barr, bout);
 914             testVectorRebracket(ispec128, ispec128, barr, bout);
 915             testVectorRebracket(ispec128, lspec128, barr, bout);
 916             testVectorRebracket(ispec128, fspec128, barr, bout);
 917             testVectorRebracket(ispec128, dspec128, barr, bout);
 918 
 919             testVectorRebracket(lspec128, bspec128, barr, bout);
 920             testVectorRebracket(lspec128, sspec128, barr, bout);
 921             testVectorRebracket(lspec128, ispec128, barr, bout);
 922             testVectorRebracket(lspec128, lspec128, barr, bout);
 923             testVectorRebracket(lspec128, fspec128, barr, bout);
 924             testVectorRebracket(lspec128, dspec128, barr, bout);
 925 
 926             testVectorRebracket(fspec128, bspec128, barr, bout);
 927             testVectorRebracket(fspec128, sspec128, barr, bout);
 928             testVectorRebracket(fspec128, ispec128, barr, bout);
 929             testVectorRebracket(fspec128, lspec128, barr, bout);
 930             testVectorRebracket(fspec128, fspec128, barr, bout);
 931             testVectorRebracket(fspec128, dspec128, barr, bout);
 932 
 933             testVectorRebracket(dspec128, bspec128, barr, bout);
 934             testVectorRebracket(dspec128, sspec128, barr, bout);
 935             testVectorRebracket(dspec128, ispec128, barr, bout);
 936             testVectorRebracket(dspec128, lspec128, barr, bout);
 937             testVectorRebracket(dspec128, fspec128, barr, bout);
 938             testVectorRebracket(dspec128, dspec128, barr, bout);
 939         }
 940     }
 941 
 942     @Test(dataProvider = "byteUnaryOpProvider")
 943     static void testRebracket256(IntFunction<byte[]> fa) {
 944         byte[] barr = fa.apply(256/Byte.SIZE);
 945         byte[] bout = new byte[barr.length];
 946         for (int i = 0; i < NUM_ITER; i++) {
 947             testVectorRebracket(bspec256, bspec256, barr, bout);
 948             testVectorRebracket(bspec256, sspec256, barr, bout);
 949             testVectorRebracket(bspec256, ispec256, barr, bout);
 950             testVectorRebracket(bspec256, lspec256, barr, bout);
 951             testVectorRebracket(bspec256, fspec256, barr, bout);
 952             testVectorRebracket(bspec256, dspec256, barr, bout);
 953 
 954             testVectorRebracket(sspec256, bspec256, barr, bout);
 955             testVectorRebracket(sspec256, sspec256, barr, bout);
 956             testVectorRebracket(sspec256, ispec256, barr, bout);
 957             testVectorRebracket(sspec256, lspec256, barr, bout);
 958             testVectorRebracket(sspec256, fspec256, barr, bout);
 959             testVectorRebracket(sspec256, dspec256, barr, bout);
 960 
 961             testVectorRebracket(ispec256, bspec256, barr, bout);
 962             testVectorRebracket(ispec256, sspec256, barr, bout);
 963             testVectorRebracket(ispec256, ispec256, barr, bout);
 964             testVectorRebracket(ispec256, lspec256, barr, bout);
 965             testVectorRebracket(ispec256, fspec256, barr, bout);
 966             testVectorRebracket(ispec256, dspec256, barr, bout);
 967 
 968             testVectorRebracket(lspec256, bspec256, barr, bout);
 969             testVectorRebracket(lspec256, sspec256, barr, bout);
 970             testVectorRebracket(lspec256, ispec256, barr, bout);
 971             testVectorRebracket(lspec256, lspec256, barr, bout);
 972             testVectorRebracket(lspec256, fspec256, barr, bout);
 973             testVectorRebracket(lspec256, dspec256, barr, bout);
 974 
 975             testVectorRebracket(fspec256, bspec256, barr, bout);
 976             testVectorRebracket(fspec256, sspec256, barr, bout);
 977             testVectorRebracket(fspec256, ispec256, barr, bout);
 978             testVectorRebracket(fspec256, lspec256, barr, bout);
 979             testVectorRebracket(fspec256, fspec256, barr, bout);
 980             testVectorRebracket(fspec256, dspec256, barr, bout);
 981 
 982             testVectorRebracket(dspec256, bspec256, barr, bout);
 983             testVectorRebracket(dspec256, sspec256, barr, bout);
 984             testVectorRebracket(dspec256, ispec256, barr, bout);
 985             testVectorRebracket(dspec256, lspec256, barr, bout);
 986             testVectorRebracket(dspec256, fspec256, barr, bout);
 987             testVectorRebracket(dspec256, dspec256, barr, bout);
 988         }
 989     }
 990 
 991     @Test(dataProvider = "byteUnaryOpProvider")
 992     static void testRebracket512(IntFunction<byte[]> fa) {
 993         byte[] barr = fa.apply(512/Byte.SIZE);
 994         byte[] bout = new byte[barr.length];
 995         for (int i = 0; i < NUM_ITER; i++) {
 996             testVectorRebracket(bspec512, bspec512, barr, bout);
 997             testVectorRebracket(bspec512, sspec512, barr, bout);
 998             testVectorRebracket(bspec512, ispec512, barr, bout);
 999             testVectorRebracket(bspec512, lspec512, barr, bout);
1000             testVectorRebracket(bspec512, fspec512, barr, bout);
1001             testVectorRebracket(bspec512, dspec512, barr, bout);
1002 
1003             testVectorRebracket(sspec512, bspec512, barr, bout);
1004             testVectorRebracket(sspec512, sspec512, barr, bout);
1005             testVectorRebracket(sspec512, ispec512, barr, bout);
1006             testVectorRebracket(sspec512, lspec512, barr, bout);
1007             testVectorRebracket(sspec512, fspec512, barr, bout);
1008             testVectorRebracket(sspec512, dspec512, barr, bout);
1009 
1010             testVectorRebracket(ispec512, bspec512, barr, bout);
1011             testVectorRebracket(ispec512, sspec512, barr, bout);
1012             testVectorRebracket(ispec512, ispec512, barr, bout);
1013             testVectorRebracket(ispec512, lspec512, barr, bout);
1014             testVectorRebracket(ispec512, fspec512, barr, bout);
1015             testVectorRebracket(ispec512, dspec512, barr, bout);
1016 
1017             testVectorRebracket(lspec512, bspec512, barr, bout);
1018             testVectorRebracket(lspec512, sspec512, barr, bout);
1019             testVectorRebracket(lspec512, ispec512, barr, bout);
1020             testVectorRebracket(lspec512, lspec512, barr, bout);
1021             testVectorRebracket(lspec512, fspec512, barr, bout);
1022             testVectorRebracket(lspec512, dspec512, barr, bout);
1023 
1024             testVectorRebracket(fspec512, bspec512, barr, bout);
1025             testVectorRebracket(fspec512, sspec512, barr, bout);
1026             testVectorRebracket(fspec512, ispec512, barr, bout);
1027             testVectorRebracket(fspec512, lspec512, barr, bout);
1028             testVectorRebracket(fspec512, fspec512, barr, bout);
1029             testVectorRebracket(fspec512, dspec512, barr, bout);
1030 
1031             testVectorRebracket(dspec512, bspec512, barr, bout);
1032             testVectorRebracket(dspec512, sspec512, barr, bout);
1033             testVectorRebracket(dspec512, ispec512, barr, bout);
1034             testVectorRebracket(dspec512, lspec512, barr, bout);
1035             testVectorRebracket(dspec512, fspec512, barr, bout);
1036             testVectorRebracket(dspec512, dspec512, barr, bout);
1037         }
1038     }
1039 
1040     @Test(dataProvider = "byteUnaryOpProvider")
1041     static void testRebracketMax(IntFunction<byte[]> fa) {
1042         byte[] barr = fa.apply(S_Max_BIT.vectorBitSize()/Byte.SIZE);
1043         byte[] bout = new byte[barr.length];
1044         for (int i = 0; i < NUM_ITER; i++) {
1045             testVectorRebracket(bspecMax, bspecMax, barr, bout);
1046             testVectorRebracket(bspecMax, sspecMax, barr, bout);
1047             testVectorRebracket(bspecMax, ispecMax, barr, bout);
1048             testVectorRebracket(bspecMax, lspecMax, barr, bout);
1049             testVectorRebracket(bspecMax, fspecMax, barr, bout);
1050             testVectorRebracket(bspecMax, dspecMax, barr, bout);
1051 
1052             testVectorRebracket(sspecMax, bspecMax, barr, bout);
1053             testVectorRebracket(sspecMax, sspecMax, barr, bout);
1054             testVectorRebracket(sspecMax, ispecMax, barr, bout);
1055             testVectorRebracket(sspecMax, lspecMax, barr, bout);
1056             testVectorRebracket(sspecMax, fspecMax, barr, bout);
1057             testVectorRebracket(sspecMax, dspecMax, barr, bout);
1058 
1059             testVectorRebracket(ispecMax, bspecMax, barr, bout);
1060             testVectorRebracket(ispecMax, sspecMax, barr, bout);
1061             testVectorRebracket(ispecMax, ispecMax, barr, bout);
1062             testVectorRebracket(ispecMax, lspecMax, barr, bout);
1063             testVectorRebracket(ispecMax, fspecMax, barr, bout);
1064             testVectorRebracket(ispecMax, dspecMax, barr, bout);
1065 
1066             testVectorRebracket(lspecMax, bspecMax, barr, bout);
1067             testVectorRebracket(lspecMax, sspecMax, barr, bout);
1068             testVectorRebracket(lspecMax, ispecMax, barr, bout);
1069             testVectorRebracket(lspecMax, lspecMax, barr, bout);
1070             testVectorRebracket(lspecMax, fspecMax, barr, bout);
1071             testVectorRebracket(lspecMax, dspecMax, barr, bout);
1072 
1073             testVectorRebracket(fspecMax, bspecMax, barr, bout);
1074             testVectorRebracket(fspecMax, sspecMax, barr, bout);
1075             testVectorRebracket(fspecMax, ispecMax, barr, bout);
1076             testVectorRebracket(fspecMax, lspecMax, barr, bout);
1077             testVectorRebracket(fspecMax, fspecMax, barr, bout);
1078             testVectorRebracket(fspecMax, dspecMax, barr, bout);
1079 
1080             testVectorRebracket(dspecMax, bspecMax, barr, bout);
1081             testVectorRebracket(dspecMax, sspecMax, barr, bout);
1082             testVectorRebracket(dspecMax, ispecMax, barr, bout);
1083             testVectorRebracket(dspecMax, lspecMax, barr, bout);
1084             testVectorRebracket(dspecMax, fspecMax, barr, bout);
1085             testVectorRebracket(dspecMax, dspecMax, barr, bout);
1086         }
1087     }
1088 
1089     @ForceInline
1090     static
1091     void testVectorCastByteToFloat(VectorSpecies<Byte> a, VectorSpecies<Float> b, byte[] input, float[] output) {
1092         assert(input.length == a.length());
1093         assert(output.length == b.length());
1094 
1095         ByteVector av = ByteVector.fromArray(a, input, 0);
1096         FloatVector bv = (FloatVector) av.castShape(b, 0);
1097         bv.intoArray(output, 0);
1098 
1099         for (int i = 0; i < Math.min(input.length, output.length); i++) {
1100             Assert.assertEquals(output[i], (float)input[i]);
1101         }
1102         for(int i = input.length; i < output.length; i++) {
1103             Assert.assertEquals(output[i], (float)0);
1104         }
1105     }
1106 
1107     @ForceInline
1108     static
1109     void testVectorCastByteToFloatFail(VectorSpecies<Byte> a, VectorSpecies<Float> b, byte[] input) {
1110         assert(input.length == a.length());
1111 
1112         ByteVector av = ByteVector.fromArray(a, input, 0);
1113         try {
1114             av.castShape(b, 0);
1115             Assert.fail(String.format(
1116                     "Cast failed to throw ClassCastException for differing species lengths for %s and %s",
1117                     a, b));
1118         } catch (ClassCastException e) {
1119         }
1120     }
1121 
1122     @ForceInline
1123     static
1124     void testVectorCastShortToFloat(VectorSpecies<Short> a, VectorSpecies<Float> b, short[] input, float[] output) {
1125         assert(input.length == a.length());
1126         assert(output.length == b.length());
1127 
1128         ShortVector av = ShortVector.fromArray(a, input, 0);
1129         FloatVector bv = (FloatVector) av.castShape(b, 0);
1130         bv.intoArray(output, 0);
1131 
1132         for (int i = 0; i < Math.min(input.length, output.length); i++) {
1133             Assert.assertEquals(output[i], (float)input[i]);
1134         }
1135         for(int i = input.length; i < output.length; i++) {
1136             Assert.assertEquals(output[i], (float)0);
1137         }
1138     }
1139 
1140     @ForceInline
1141     static
1142     void testVectorCastShortToFloatFail(VectorSpecies<Short> a, VectorSpecies<Float> b, short[] input) {
1143         assert(input.length == a.length());
1144 
1145         ShortVector av = ShortVector.fromArray(a, input, 0);
1146         try {
1147             av.castShape(b, 0);
1148             Assert.fail(String.format(
1149                     "Cast failed to throw ClassCastException for differing species lengths for %s and %s",
1150                     a, b));
1151         } catch (ClassCastException e) {
1152         }
1153     }
1154 
1155     @ForceInline
1156     static
1157     void testVectorCastIntToFloat(VectorSpecies<Integer> a, VectorSpecies<Float> b, int[] input, float[] output) {
1158         assert(input.length == a.length());
1159         assert(output.length == b.length());
1160 
1161         IntVector av = IntVector.fromArray(a, input, 0);
1162         FloatVector bv = (FloatVector) av.castShape(b, 0);
1163         bv.intoArray(output, 0);
1164 
1165         for (int i = 0; i < Math.min(input.length, output.length); i++) {
1166             Assert.assertEquals(output[i], (float)input[i]);
1167         }
1168         for(int i = input.length; i < output.length; i++) {
1169             Assert.assertEquals(output[i], (float)0);
1170         }
1171     }
1172 
1173     @ForceInline
1174     static
1175     void testVectorCastIntToFloatFail(VectorSpecies<Integer> a, VectorSpecies<Float> b, int[] input) {
1176         assert(input.length == a.length());
1177 
1178         IntVector av = IntVector.fromArray(a, input, 0);
1179         try {
1180             av.castShape(b, 0);
1181             Assert.fail(String.format(
1182                     "Cast failed to throw ClassCastException for differing species lengths for %s and %s",
1183                     a, b));
1184         } catch (ClassCastException e) {
1185         }
1186     }
1187 
1188     @ForceInline
1189     static
1190     void testVectorCastLongToFloat(VectorSpecies<Long> a, VectorSpecies<Float> b, long[] input, float[] output) {
1191         assert(input.length == a.length());
1192         assert(output.length == b.length());
1193 
1194         LongVector av = LongVector.fromArray(a, input, 0);
1195         FloatVector bv = (FloatVector) av.castShape(b, 0);
1196         bv.intoArray(output, 0);
1197 
1198         for (int i = 0; i < Math.min(input.length, output.length); i++) {
1199             Assert.assertEquals(output[i], (float)input[i]);
1200         }
1201         for(int i = input.length; i < output.length; i++) {
1202             Assert.assertEquals(output[i], (float)0);
1203         }
1204     }
1205 
1206     @ForceInline
1207     static
1208     void testVectorCastLongToFloatFail(VectorSpecies<Long> a, VectorSpecies<Float> b, long[] input) {
1209         assert(input.length == a.length());
1210 
1211         LongVector av = LongVector.fromArray(a, input, 0);
1212         try {
1213             av.castShape(b, 0);
1214             Assert.fail(String.format(
1215                     "Cast failed to throw ClassCastException for differing species lengths for %s and %s",
1216                     a, b));
1217         } catch (ClassCastException e) {
1218         }
1219     }
1220 
1221     @ForceInline
1222     static
1223     void testVectorCastFloatToFloat(VectorSpecies<Float> a, VectorSpecies<Float> b, float[] input, float[] output) {
1224         assert(input.length == a.length());
1225         assert(output.length == b.length());
1226 
1227         FloatVector av = FloatVector.fromArray(a, input, 0);
1228         FloatVector bv = (FloatVector) av.castShape(b, 0);
1229         bv.intoArray(output, 0);
1230 
1231         for (int i = 0; i < Math.min(input.length, output.length); i++) {
1232             Assert.assertEquals(output[i], (float)input[i]);
1233         }
1234         for(int i = input.length; i < output.length; i++) {
1235             Assert.assertEquals(output[i], (float)0);
1236         }
1237     }
1238 
1239     @ForceInline
1240     static
1241     void testVectorCastFloatToFloatFail(VectorSpecies<Float> a, VectorSpecies<Float> b, float[] input) {
1242         assert(input.length == a.length());
1243 
1244         FloatVector av = FloatVector.fromArray(a, input, 0);
1245         try {
1246             av.castShape(b, 0);
1247             Assert.fail(String.format(
1248                     "Cast failed to throw ClassCastException for differing species lengths for %s and %s",
1249                     a, b));
1250         } catch (ClassCastException e) {
1251         }
1252     }
1253 
1254     @ForceInline
1255     static
1256     void testVectorCastDoubleToFloat(VectorSpecies<Double> a, VectorSpecies<Float> b, double[] input, float[] output) {
1257         assert(input.length == a.length());
1258         assert(output.length == b.length());
1259 
1260         DoubleVector av = DoubleVector.fromArray(a, input, 0);
1261         FloatVector bv = (FloatVector) av.castShape(b, 0);
1262         bv.intoArray(output, 0);
1263 
1264         for (int i = 0; i < Math.min(input.length, output.length); i++) {
1265             Assert.assertEquals(output[i], (float)input[i]);
1266         }
1267         for(int i = input.length; i < output.length; i++) {
1268             Assert.assertEquals(output[i], (float)0);
1269         }
1270     }
1271 
1272     @ForceInline
1273     static
1274     void testVectorCastDoubleToFloatFail(VectorSpecies<Double> a, VectorSpecies<Float> b, double[] input) {
1275         assert(input.length == a.length());
1276 
1277         DoubleVector av = DoubleVector.fromArray(a, input, 0);
1278         try {
1279             av.castShape(b, 0);
1280             Assert.fail(String.format(
1281                     "Cast failed to throw ClassCastException for differing species lengths for %s and %s",
1282                     a, b));
1283         } catch (ClassCastException e) {
1284         }
1285     }
1286 
1287     @ForceInline
1288     static
1289     void testVectorCastByteToByte(VectorSpecies<Byte> a, VectorSpecies<Byte> b, byte[] input, byte[] output) {
1290         assert(input.length == a.length());
1291         assert(output.length == b.length());
1292 
1293         ByteVector av = ByteVector.fromArray(a, input, 0);
1294         ByteVector bv = (ByteVector) av.castShape(b, 0);
1295         bv.intoArray(output, 0);
1296 
1297         for (int i = 0; i < Math.min(input.length, output.length); i++) {
1298             Assert.assertEquals(output[i], (byte)input[i]);
1299         }
1300         for(int i = input.length; i < output.length; i++) {
1301             Assert.assertEquals(output[i], (byte)0);
1302         }
1303     }
1304 
1305     @ForceInline
1306     static
1307     void testVectorCastByteToByteFail(VectorSpecies<Byte> a, VectorSpecies<Byte> b, byte[] input) {
1308         assert(input.length == a.length());
1309 
1310         ByteVector av = ByteVector.fromArray(a, input, 0);
1311         try {
1312             av.castShape(b, 0);
1313             Assert.fail(String.format(
1314                     "Cast failed to throw ClassCastException for differing species lengths for %s and %s",
1315                     a, b));
1316         } catch (ClassCastException e) {
1317         }
1318     }
1319 
1320     @ForceInline
1321     static
1322     void testVectorCastShortToByte(VectorSpecies<Short> a, VectorSpecies<Byte> b, short[] input, byte[] output) {
1323         assert(input.length == a.length());
1324         assert(output.length == b.length());
1325 
1326         ShortVector av = ShortVector.fromArray(a, input, 0);
1327         ByteVector bv = (ByteVector) av.castShape(b, 0);
1328         bv.intoArray(output, 0);
1329 
1330         for (int i = 0; i < Math.min(input.length, output.length); i++) {
1331             Assert.assertEquals(output[i], (byte)input[i]);
1332         }
1333         for(int i = input.length; i < output.length; i++) {
1334             Assert.assertEquals(output[i], (byte)0);
1335         }
1336     }
1337 
1338     @ForceInline
1339     static
1340     void testVectorCastShortToByteFail(VectorSpecies<Short> a, VectorSpecies<Byte> b, short[] input) {
1341         assert(input.length == a.length());
1342 
1343         ShortVector av = ShortVector.fromArray(a, input, 0);
1344         try {
1345             av.castShape(b, 0);
1346             Assert.fail(String.format(
1347                     "Cast failed to throw ClassCastException for differing species lengths for %s and %s",
1348                     a, b));
1349         } catch (ClassCastException e) {
1350         }
1351     }
1352 
1353     @ForceInline
1354     static
1355     void testVectorCastIntToByte(VectorSpecies<Integer> a, VectorSpecies<Byte> b, int[] input, byte[] output) {
1356         assert(input.length == a.length());
1357         assert(output.length == b.length());
1358 
1359         IntVector av = IntVector.fromArray(a, input, 0);
1360         ByteVector bv = (ByteVector) av.castShape(b, 0);
1361         bv.intoArray(output, 0);
1362 
1363         for (int i = 0; i < Math.min(input.length, output.length); i++) {
1364             Assert.assertEquals(output[i], (byte)input[i]);
1365         }
1366         for(int i = input.length; i < output.length; i++) {
1367             Assert.assertEquals(output[i], (byte)0);
1368         }
1369     }
1370 
1371     @ForceInline
1372     static
1373     void testVectorCastIntToByteFail(VectorSpecies<Integer> a, VectorSpecies<Byte> b, int[] input) {
1374         assert(input.length == a.length());
1375 
1376         IntVector av = IntVector.fromArray(a, input, 0);
1377         try {
1378             av.castShape(b, 0);
1379             Assert.fail(String.format(
1380                     "Cast failed to throw ClassCastException for differing species lengths for %s and %s",
1381                     a, b));
1382         } catch (ClassCastException e) {
1383         }
1384     }
1385 
1386     @ForceInline
1387     static
1388     void testVectorCastLongToByte(VectorSpecies<Long> a, VectorSpecies<Byte> b, long[] input, byte[] output) {
1389         assert(input.length == a.length());
1390         assert(output.length == b.length());
1391 
1392         LongVector av = LongVector.fromArray(a, input, 0);
1393         ByteVector bv = (ByteVector) av.castShape(b, 0);
1394         bv.intoArray(output, 0);
1395 
1396         for (int i = 0; i < Math.min(input.length, output.length); i++) {
1397             Assert.assertEquals(output[i], (byte)input[i]);
1398         }
1399         for(int i = input.length; i < output.length; i++) {
1400             Assert.assertEquals(output[i], (byte)0);
1401         }
1402     }
1403 
1404     @ForceInline
1405     static
1406     void testVectorCastLongToByteFail(VectorSpecies<Long> a, VectorSpecies<Byte> b, long[] input) {
1407         assert(input.length == a.length());
1408 
1409         LongVector av = LongVector.fromArray(a, input, 0);
1410         try {
1411             av.castShape(b, 0);
1412             Assert.fail(String.format(
1413                     "Cast failed to throw ClassCastException for differing species lengths for %s and %s",
1414                     a, b));
1415         } catch (ClassCastException e) {
1416         }
1417     }
1418 
1419     @ForceInline
1420     static
1421     void testVectorCastFloatToByte(VectorSpecies<Float> a, VectorSpecies<Byte> b, float[] input, byte[] output) {
1422         assert(input.length == a.length());
1423         assert(output.length == b.length());
1424 
1425         FloatVector av = FloatVector.fromArray(a, input, 0);
1426         ByteVector bv = (ByteVector) av.castShape(b, 0);
1427         bv.intoArray(output, 0);
1428 
1429         for (int i = 0; i < Math.min(input.length, output.length); i++) {
1430             Assert.assertEquals(output[i], (byte)input[i]);
1431         }
1432         for(int i = input.length; i < output.length; i++) {
1433             Assert.assertEquals(output[i], (byte)0);
1434         }
1435     }
1436 
1437     @ForceInline
1438     static
1439     void testVectorCastFloatToByteFail(VectorSpecies<Float> a, VectorSpecies<Byte> b, float[] input) {
1440         assert(input.length == a.length());
1441 
1442         FloatVector av = FloatVector.fromArray(a, input, 0);
1443         try {
1444             av.castShape(b, 0);
1445             Assert.fail(String.format(
1446                     "Cast failed to throw ClassCastException for differing species lengths for %s and %s",
1447                     a, b));
1448         } catch (ClassCastException e) {
1449         }
1450     }
1451 
1452     @ForceInline
1453     static
1454     void testVectorCastDoubleToByte(VectorSpecies<Double> a, VectorSpecies<Byte> b, double[] input, byte[] output) {
1455         assert(input.length == a.length());
1456         assert(output.length == b.length());
1457 
1458         DoubleVector av = DoubleVector.fromArray(a, input, 0);
1459         ByteVector bv = (ByteVector) av.castShape(b, 0);
1460         bv.intoArray(output, 0);
1461 
1462         for (int i = 0; i < Math.min(input.length, output.length); i++) {
1463             Assert.assertEquals(output[i], (byte)input[i]);
1464         }
1465         for(int i = input.length; i < output.length; i++) {
1466             Assert.assertEquals(output[i], (byte)0);
1467         }
1468     }
1469 
1470     @ForceInline
1471     static
1472     void testVectorCastDoubleToByteFail(VectorSpecies<Double> a, VectorSpecies<Byte> b, double[] input) {
1473         assert(input.length == a.length());
1474 
1475         DoubleVector av = DoubleVector.fromArray(a, input, 0);
1476         try {
1477             av.castShape(b, 0);
1478             Assert.fail(String.format(
1479                     "Cast failed to throw ClassCastException for differing species lengths for %s and %s",
1480                     a, b));
1481         } catch (ClassCastException e) {
1482         }
1483     }
1484 
1485     @ForceInline
1486     static
1487     void testVectorCastByteToShort(VectorSpecies<Byte> a, VectorSpecies<Short> b, byte[] input, short[] output) {
1488         assert(input.length == a.length());
1489         assert(output.length == b.length());
1490 
1491         ByteVector av = ByteVector.fromArray(a, input, 0);
1492         ShortVector bv = (ShortVector) av.castShape(b, 0);
1493         bv.intoArray(output, 0);
1494 
1495         for (int i = 0; i < Math.min(input.length, output.length); i++) {
1496             Assert.assertEquals(output[i], (short)input[i]);
1497         }
1498         for(int i = input.length; i < output.length; i++) {
1499             Assert.assertEquals(output[i], (short)0);
1500         }
1501     }
1502 
1503     @ForceInline
1504     static
1505     void testVectorCastByteToShortFail(VectorSpecies<Byte> a, VectorSpecies<Short> b, byte[] input) {
1506         assert(input.length == a.length());
1507 
1508         ByteVector av = ByteVector.fromArray(a, input, 0);
1509         try {
1510             av.castShape(b, 0);
1511             Assert.fail(String.format(
1512                     "Cast failed to throw ClassCastException for differing species lengths for %s and %s",
1513                     a, b));
1514         } catch (ClassCastException e) {
1515         }
1516     }
1517 
1518     @ForceInline
1519     static
1520     void testVectorCastShortToShort(VectorSpecies<Short> a, VectorSpecies<Short> b, short[] input, short[] output) {
1521         assert(input.length == a.length());
1522         assert(output.length == b.length());
1523 
1524         ShortVector av = ShortVector.fromArray(a, input, 0);
1525         ShortVector bv = (ShortVector) av.castShape(b, 0);
1526         bv.intoArray(output, 0);
1527 
1528         for (int i = 0; i < Math.min(input.length, output.length); i++) {
1529             Assert.assertEquals(output[i], (short)input[i]);
1530         }
1531         for(int i = input.length; i < output.length; i++) {
1532             Assert.assertEquals(output[i], (short)0);
1533         }
1534     }
1535 
1536     @ForceInline
1537     static
1538     void testVectorCastShortToShortFail(VectorSpecies<Short> a, VectorSpecies<Short> b, short[] input) {
1539         assert(input.length == a.length());
1540 
1541         ShortVector av = ShortVector.fromArray(a, input, 0);
1542         try {
1543             av.castShape(b, 0);
1544             Assert.fail(String.format(
1545                     "Cast failed to throw ClassCastException for differing species lengths for %s and %s",
1546                     a, b));
1547         } catch (ClassCastException e) {
1548         }
1549     }
1550 
1551     @ForceInline
1552     static
1553     void testVectorCastIntToShort(VectorSpecies<Integer> a, VectorSpecies<Short> b, int[] input, short[] output) {
1554         assert(input.length == a.length());
1555         assert(output.length == b.length());
1556 
1557         IntVector av = IntVector.fromArray(a, input, 0);
1558         ShortVector bv = (ShortVector) av.castShape(b, 0);
1559         bv.intoArray(output, 0);
1560 
1561         for (int i = 0; i < Math.min(input.length, output.length); i++) {
1562             Assert.assertEquals(output[i], (short)input[i]);
1563         }
1564         for(int i = input.length; i < output.length; i++) {
1565             Assert.assertEquals(output[i], (short)0);
1566         }
1567     }
1568 
1569     @ForceInline
1570     static
1571     void testVectorCastIntToShortFail(VectorSpecies<Integer> a, VectorSpecies<Short> b, int[] input) {
1572         assert(input.length == a.length());
1573 
1574         IntVector av = IntVector.fromArray(a, input, 0);
1575         try {
1576             av.castShape(b, 0);
1577             Assert.fail(String.format(
1578                     "Cast failed to throw ClassCastException for differing species lengths for %s and %s",
1579                     a, b));
1580         } catch (ClassCastException e) {
1581         }
1582     }
1583 
1584     @ForceInline
1585     static
1586     void testVectorCastLongToShort(VectorSpecies<Long> a, VectorSpecies<Short> b, long[] input, short[] output) {
1587         assert(input.length == a.length());
1588         assert(output.length == b.length());
1589 
1590         LongVector av = LongVector.fromArray(a, input, 0);
1591         ShortVector bv = (ShortVector) av.castShape(b, 0);
1592         bv.intoArray(output, 0);
1593 
1594         for (int i = 0; i < Math.min(input.length, output.length); i++) {
1595             Assert.assertEquals(output[i], (short)input[i]);
1596         }
1597         for(int i = input.length; i < output.length; i++) {
1598             Assert.assertEquals(output[i], (short)0);
1599         }
1600     }
1601 
1602     @ForceInline
1603     static
1604     void testVectorCastLongToShortFail(VectorSpecies<Long> a, VectorSpecies<Short> b, long[] input) {
1605         assert(input.length == a.length());
1606 
1607         LongVector av = LongVector.fromArray(a, input, 0);
1608         try {
1609             av.castShape(b, 0);
1610             Assert.fail(String.format(
1611                     "Cast failed to throw ClassCastException for differing species lengths for %s and %s",
1612                     a, b));
1613         } catch (ClassCastException e) {
1614         }
1615     }
1616 
1617     @ForceInline
1618     static
1619     void testVectorCastFloatToShort(VectorSpecies<Float> a, VectorSpecies<Short> b, float[] input, short[] output) {
1620         assert(input.length == a.length());
1621         assert(output.length == b.length());
1622 
1623         FloatVector av = FloatVector.fromArray(a, input, 0);
1624         ShortVector bv = (ShortVector) av.castShape(b, 0);
1625         bv.intoArray(output, 0);
1626 
1627         for (int i = 0; i < Math.min(input.length, output.length); i++) {
1628             Assert.assertEquals(output[i], (short)input[i]);
1629         }
1630         for(int i = input.length; i < output.length; i++) {
1631             Assert.assertEquals(output[i], (short)0);
1632         }
1633     }
1634 
1635     @ForceInline
1636     static
1637     void testVectorCastFloatToShortFail(VectorSpecies<Float> a, VectorSpecies<Short> b, float[] input) {
1638         assert(input.length == a.length());
1639 
1640         FloatVector av = FloatVector.fromArray(a, input, 0);
1641         try {
1642             av.castShape(b, 0);
1643             Assert.fail(String.format(
1644                     "Cast failed to throw ClassCastException for differing species lengths for %s and %s",
1645                     a, b));
1646         } catch (ClassCastException e) {
1647         }
1648     }
1649 
1650     @ForceInline
1651     static
1652     void testVectorCastDoubleToShort(VectorSpecies<Double> a, VectorSpecies<Short> b, double[] input, short[] output) {
1653         assert(input.length == a.length());
1654         assert(output.length == b.length());
1655 
1656         DoubleVector av = DoubleVector.fromArray(a, input, 0);
1657         ShortVector bv = (ShortVector) av.castShape(b, 0);
1658         bv.intoArray(output, 0);
1659 
1660         for (int i = 0; i < Math.min(input.length, output.length); i++) {
1661             Assert.assertEquals(output[i], (short)input[i]);
1662         }
1663         for(int i = input.length; i < output.length; i++) {
1664             Assert.assertEquals(output[i], (short)0);
1665         }
1666     }
1667 
1668     @ForceInline
1669     static
1670     void testVectorCastDoubleToShortFail(VectorSpecies<Double> a, VectorSpecies<Short> b, double[] input) {
1671         assert(input.length == a.length());
1672 
1673         DoubleVector av = DoubleVector.fromArray(a, input, 0);
1674         try {
1675             av.castShape(b, 0);
1676             Assert.fail(String.format(
1677                     "Cast failed to throw ClassCastException for differing species lengths for %s and %s",
1678                     a, b));
1679         } catch (ClassCastException e) {
1680         }
1681     }
1682 
1683     @ForceInline
1684     static
1685     void testVectorCastByteToInt(VectorSpecies<Byte> a, VectorSpecies<Integer> b, byte[] input, int[] output) {
1686         assert(input.length == a.length());
1687         assert(output.length == b.length());
1688 
1689         ByteVector av = ByteVector.fromArray(a, input, 0);
1690         IntVector bv = (IntVector) av.castShape(b, 0);
1691         bv.intoArray(output, 0);
1692 
1693         for (int i = 0; i < Math.min(input.length, output.length); i++) {
1694             Assert.assertEquals(output[i], (int)input[i]);
1695         }
1696         for(int i = input.length; i < output.length; i++) {
1697             Assert.assertEquals(output[i], (int)0);
1698         }
1699     }
1700 
1701     @ForceInline
1702     static
1703     void testVectorCastByteToIntFail(VectorSpecies<Byte> a, VectorSpecies<Integer> b, byte[] input) {
1704         assert(input.length == a.length());
1705 
1706         ByteVector av = ByteVector.fromArray(a, input, 0);
1707         try {
1708             av.castShape(b, 0);
1709             Assert.fail(String.format(
1710                     "Cast failed to throw ClassCastException for differing species lengths for %s and %s",
1711                     a, b));
1712         } catch (ClassCastException e) {
1713         }
1714     }
1715 
1716     @ForceInline
1717     static
1718     void testVectorCastShortToInt(VectorSpecies<Short> a, VectorSpecies<Integer> b, short[] input, int[] output) {
1719         assert(input.length == a.length());
1720         assert(output.length == b.length());
1721 
1722         ShortVector av = ShortVector.fromArray(a, input, 0);
1723         IntVector bv = (IntVector) av.castShape(b, 0);
1724         bv.intoArray(output, 0);
1725 
1726         for (int i = 0; i < Math.min(input.length, output.length); i++) {
1727             Assert.assertEquals(output[i], (int)input[i]);
1728         }
1729         for(int i = input.length; i < output.length; i++) {
1730             Assert.assertEquals(output[i], (int)0);
1731         }
1732     }
1733 
1734     @ForceInline
1735     static
1736     void testVectorCastShortToIntFail(VectorSpecies<Short> a, VectorSpecies<Integer> b, short[] input) {
1737         assert(input.length == a.length());
1738 
1739         ShortVector av = ShortVector.fromArray(a, input, 0);
1740         try {
1741             av.castShape(b, 0);
1742             Assert.fail(String.format(
1743                     "Cast failed to throw ClassCastException for differing species lengths for %s and %s",
1744                     a, b));
1745         } catch (ClassCastException e) {
1746         }
1747     }
1748 
1749     @ForceInline
1750     static
1751     void testVectorCastIntToInt(VectorSpecies<Integer> a, VectorSpecies<Integer> b, int[] input, int[] output) {
1752         assert(input.length == a.length());
1753         assert(output.length == b.length());
1754 
1755         IntVector av = IntVector.fromArray(a, input, 0);
1756         IntVector bv = (IntVector) av.castShape(b, 0);
1757         bv.intoArray(output, 0);
1758 
1759         for (int i = 0; i < Math.min(input.length, output.length); i++) {
1760             Assert.assertEquals(output[i], (int)input[i]);
1761         }
1762         for(int i = input.length; i < output.length; i++) {
1763             Assert.assertEquals(output[i], (int)0);
1764         }
1765     }
1766 
1767     @ForceInline
1768     static
1769     void testVectorCastIntToIntFail(VectorSpecies<Integer> a, VectorSpecies<Integer> b, int[] input) {
1770         assert(input.length == a.length());
1771 
1772         IntVector av = IntVector.fromArray(a, input, 0);
1773         try {
1774             av.castShape(b, 0);
1775             Assert.fail(String.format(
1776                     "Cast failed to throw ClassCastException for differing species lengths for %s and %s",
1777                     a, b));
1778         } catch (ClassCastException e) {
1779         }
1780     }
1781 
1782     @ForceInline
1783     static
1784     void testVectorCastLongToInt(VectorSpecies<Long> a, VectorSpecies<Integer> b, long[] input, int[] output) {
1785         assert(input.length == a.length());
1786         assert(output.length == b.length());
1787 
1788         LongVector av = LongVector.fromArray(a, input, 0);
1789         IntVector bv = (IntVector) av.castShape(b, 0);
1790         bv.intoArray(output, 0);
1791 
1792         for (int i = 0; i < Math.min(input.length, output.length); i++) {
1793             Assert.assertEquals(output[i], (int)input[i]);
1794         }
1795         for(int i = input.length; i < output.length; i++) {
1796             Assert.assertEquals(output[i], (int)0);
1797         }
1798     }
1799 
1800     @ForceInline
1801     static
1802     void testVectorCastLongToIntFail(VectorSpecies<Long> a, VectorSpecies<Integer> b, long[] input) {
1803         assert(input.length == a.length());
1804 
1805         LongVector av = LongVector.fromArray(a, input, 0);
1806         try {
1807             av.castShape(b, 0);
1808             Assert.fail(String.format(
1809                     "Cast failed to throw ClassCastException for differing species lengths for %s and %s",
1810                     a, b));
1811         } catch (ClassCastException e) {
1812         }
1813     }
1814 
1815     @ForceInline
1816     static
1817     void testVectorCastFloatToInt(VectorSpecies<Float> a, VectorSpecies<Integer> b, float[] input, int[] output) {
1818         assert(input.length == a.length());
1819         assert(output.length == b.length());
1820 
1821         FloatVector av = FloatVector.fromArray(a, input, 0);
1822         IntVector bv = (IntVector) av.castShape(b, 0);
1823         bv.intoArray(output, 0);
1824 
1825         for (int i = 0; i < Math.min(input.length, output.length); i++) {
1826             Assert.assertEquals(output[i], (int)input[i]);
1827         }
1828         for(int i = input.length; i < output.length; i++) {
1829             Assert.assertEquals(output[i], (int)0);
1830         }
1831     }
1832 
1833     @ForceInline
1834     static
1835     void testVectorCastFloatToIntFail(VectorSpecies<Float> a, VectorSpecies<Integer> b, float[] input) {
1836         assert(input.length == a.length());
1837 
1838         FloatVector av = FloatVector.fromArray(a, input, 0);
1839         try {
1840             av.castShape(b, 0);
1841             Assert.fail(String.format(
1842                     "Cast failed to throw ClassCastException for differing species lengths for %s and %s",
1843                     a, b));
1844         } catch (ClassCastException e) {
1845         }
1846     }
1847 
1848     @ForceInline
1849     static
1850     void testVectorCastDoubleToInt(VectorSpecies<Double> a, VectorSpecies<Integer> b, double[] input, int[] output) {
1851         assert(input.length == a.length());
1852         assert(output.length == b.length());
1853 
1854         DoubleVector av = DoubleVector.fromArray(a, input, 0);
1855         IntVector bv = (IntVector) av.castShape(b, 0);
1856         bv.intoArray(output, 0);
1857 
1858         for (int i = 0; i < Math.min(input.length, output.length); i++) {
1859             Assert.assertEquals(output[i], (int)input[i]);
1860         }
1861         for(int i = input.length; i < output.length; i++) {
1862             Assert.assertEquals(output[i], (int)0);
1863         }
1864     }
1865 
1866     @ForceInline
1867     static
1868     void testVectorCastDoubleToIntFail(VectorSpecies<Double> a, VectorSpecies<Integer> b, double[] input) {
1869         assert(input.length == a.length());
1870 
1871         DoubleVector av = DoubleVector.fromArray(a, input, 0);
1872         try {
1873             av.castShape(b, 0);
1874             Assert.fail(String.format(
1875                     "Cast failed to throw ClassCastException for differing species lengths for %s and %s",
1876                     a, b));
1877         } catch (ClassCastException e) {
1878         }
1879     }
1880 
1881     @ForceInline
1882     static
1883     void testVectorCastByteToLong(VectorSpecies<Byte> a, VectorSpecies<Long> b, byte[] input, long[] output) {
1884         assert(input.length == a.length());
1885         assert(output.length == b.length());
1886 
1887         ByteVector av = ByteVector.fromArray(a, input, 0);
1888         LongVector bv = (LongVector) av.castShape(b, 0);
1889         bv.intoArray(output, 0);
1890 
1891         for (int i = 0; i < Math.min(input.length, output.length); i++) {
1892             Assert.assertEquals(output[i], (long)input[i]);
1893         }
1894         for(int i = input.length; i < output.length; i++) {
1895             Assert.assertEquals(output[i], (long)0);
1896         }
1897     }
1898 
1899     @ForceInline
1900     static
1901     void testVectorCastByteToLongFail(VectorSpecies<Byte> a, VectorSpecies<Long> b, byte[] input) {
1902         assert(input.length == a.length());
1903 
1904         ByteVector av = ByteVector.fromArray(a, input, 0);
1905         try {
1906             av.castShape(b, 0);
1907             Assert.fail(String.format(
1908                     "Cast failed to throw ClassCastException for differing species lengths for %s and %s",
1909                     a, b));
1910         } catch (ClassCastException e) {
1911         }
1912     }
1913 
1914     @ForceInline
1915     static
1916     void testVectorCastShortToLong(VectorSpecies<Short> a, VectorSpecies<Long> b, short[] input, long[] output) {
1917         assert(input.length == a.length());
1918         assert(output.length == b.length());
1919 
1920         ShortVector av = ShortVector.fromArray(a, input, 0);
1921         LongVector bv = (LongVector) av.castShape(b, 0);
1922         bv.intoArray(output, 0);
1923 
1924         for (int i = 0; i < Math.min(input.length, output.length); i++) {
1925             Assert.assertEquals(output[i], (long)input[i]);
1926         }
1927         for(int i = input.length; i < output.length; i++) {
1928             Assert.assertEquals(output[i], (long)0);
1929         }
1930     }
1931 
1932     @ForceInline
1933     static
1934     void testVectorCastShortToLongFail(VectorSpecies<Short> a, VectorSpecies<Long> b, short[] input) {
1935         assert(input.length == a.length());
1936 
1937         ShortVector av = ShortVector.fromArray(a, input, 0);
1938         try {
1939             av.castShape(b, 0);
1940             Assert.fail(String.format(
1941                     "Cast failed to throw ClassCastException for differing species lengths for %s and %s",
1942                     a, b));
1943         } catch (ClassCastException e) {
1944         }
1945     }
1946 
1947     @ForceInline
1948     static
1949     void testVectorCastIntToLong(VectorSpecies<Integer> a, VectorSpecies<Long> b, int[] input, long[] output) {
1950         assert(input.length == a.length());
1951         assert(output.length == b.length());
1952 
1953         IntVector av = IntVector.fromArray(a, input, 0);
1954         LongVector bv = (LongVector) av.castShape(b, 0);
1955         bv.intoArray(output, 0);
1956 
1957         for (int i = 0; i < Math.min(input.length, output.length); i++) {
1958             Assert.assertEquals(output[i], (long)input[i]);
1959         }
1960         for(int i = input.length; i < output.length; i++) {
1961             Assert.assertEquals(output[i], (long)0);
1962         }
1963     }
1964 
1965     @ForceInline
1966     static
1967     void testVectorCastIntToLongFail(VectorSpecies<Integer> a, VectorSpecies<Long> b, int[] input) {
1968         assert(input.length == a.length());
1969 
1970         IntVector av = IntVector.fromArray(a, input, 0);
1971         try {
1972             av.castShape(b, 0);
1973             Assert.fail(String.format(
1974                     "Cast failed to throw ClassCastException for differing species lengths for %s and %s",
1975                     a, b));
1976         } catch (ClassCastException e) {
1977         }
1978     }
1979 
1980     @ForceInline
1981     static
1982     void testVectorCastLongToLong(VectorSpecies<Long> a, VectorSpecies<Long> b, long[] input, long[] output) {
1983         assert(input.length == a.length());
1984         assert(output.length == b.length());
1985 
1986         LongVector av = LongVector.fromArray(a, input, 0);
1987         LongVector bv = (LongVector) av.castShape(b, 0);
1988         bv.intoArray(output, 0);
1989 
1990         for (int i = 0; i < Math.min(input.length, output.length); i++) {
1991             Assert.assertEquals(output[i], (long)input[i]);
1992         }
1993         for(int i = input.length; i < output.length; i++) {
1994             Assert.assertEquals(output[i], (long)0);
1995         }
1996     }
1997 
1998     @ForceInline
1999     static
2000     void testVectorCastLongToLongFail(VectorSpecies<Long> a, VectorSpecies<Long> b, long[] input) {
2001         assert(input.length == a.length());
2002 
2003         LongVector av = LongVector.fromArray(a, input, 0);
2004         try {
2005             av.castShape(b, 0);
2006             Assert.fail(String.format(
2007                     "Cast failed to throw ClassCastException for differing species lengths for %s and %s",
2008                     a, b));
2009         } catch (ClassCastException e) {
2010         }
2011     }
2012 
2013     @ForceInline
2014     static
2015     void testVectorCastFloatToLong(VectorSpecies<Float> a, VectorSpecies<Long> b, float[] input, long[] output) {
2016         assert(input.length == a.length());
2017         assert(output.length == b.length());
2018 
2019         FloatVector av = FloatVector.fromArray(a, input, 0);
2020         LongVector bv = (LongVector) av.castShape(b, 0);
2021         bv.intoArray(output, 0);
2022 
2023         for (int i = 0; i < Math.min(input.length, output.length); i++) {
2024             Assert.assertEquals(output[i], (long)input[i]);
2025         }
2026         for(int i = input.length; i < output.length; i++) {
2027             Assert.assertEquals(output[i], (long)0);
2028         }
2029     }
2030 
2031     @ForceInline
2032     static
2033     void testVectorCastFloatToLongFail(VectorSpecies<Float> a, VectorSpecies<Long> b, float[] input) {
2034         assert(input.length == a.length());
2035 
2036         FloatVector av = FloatVector.fromArray(a, input, 0);
2037         try {
2038             av.castShape(b, 0);
2039             Assert.fail(String.format(
2040                     "Cast failed to throw ClassCastException for differing species lengths for %s and %s",
2041                     a, b));
2042         } catch (ClassCastException e) {
2043         }
2044     }
2045 
2046     @ForceInline
2047     static
2048     void testVectorCastDoubleToLong(VectorSpecies<Double> a, VectorSpecies<Long> b, double[] input, long[] output) {
2049         assert(input.length == a.length());
2050         assert(output.length == b.length());
2051 
2052         DoubleVector av = DoubleVector.fromArray(a, input, 0);
2053         LongVector bv = (LongVector) av.castShape(b, 0);
2054         bv.intoArray(output, 0);
2055 
2056         for (int i = 0; i < Math.min(input.length, output.length); i++) {
2057             Assert.assertEquals(output[i], (long)input[i]);
2058         }
2059         for(int i = input.length; i < output.length; i++) {
2060             Assert.assertEquals(output[i], (long)0);
2061         }
2062     }
2063 
2064     @ForceInline
2065     static
2066     void testVectorCastDoubleToLongFail(VectorSpecies<Double> a, VectorSpecies<Long> b, double[] input) {
2067         assert(input.length == a.length());
2068 
2069         DoubleVector av = DoubleVector.fromArray(a, input, 0);
2070         try {
2071             av.castShape(b, 0);
2072             Assert.fail(String.format(
2073                     "Cast failed to throw ClassCastException for differing species lengths for %s and %s",
2074                     a, b));
2075         } catch (ClassCastException e) {
2076         }
2077     }
2078 
2079     @ForceInline
2080     static
2081     void testVectorCastByteToDouble(VectorSpecies<Byte> a, VectorSpecies<Double> b, byte[] input, double[] output) {
2082         assert(input.length == a.length());
2083         assert(output.length == b.length());
2084 
2085         ByteVector av = ByteVector.fromArray(a, input, 0);
2086         DoubleVector bv = (DoubleVector) av.castShape(b, 0);
2087         bv.intoArray(output, 0);
2088 
2089         for (int i = 0; i < Math.min(input.length, output.length); i++) {
2090             Assert.assertEquals(output[i], (double)input[i]);
2091         }
2092         for(int i = input.length; i < output.length; i++) {
2093             Assert.assertEquals(output[i], (double)0);
2094         }
2095     }
2096 
2097     @ForceInline
2098     static
2099     void testVectorCastByteToDoubleFail(VectorSpecies<Byte> a, VectorSpecies<Double> b, byte[] input) {
2100         assert(input.length == a.length());
2101 
2102         ByteVector av = ByteVector.fromArray(a, input, 0);
2103         try {
2104             av.castShape(b, 0);
2105             Assert.fail(String.format(
2106                     "Cast failed to throw ClassCastException for differing species lengths for %s and %s",
2107                     a, b));
2108         } catch (ClassCastException e) {
2109         }
2110     }
2111 
2112     @ForceInline
2113     static
2114     void testVectorCastShortToDouble(VectorSpecies<Short> a, VectorSpecies<Double> b, short[] input, double[] output) {
2115         assert(input.length == a.length());
2116         assert(output.length == b.length());
2117 
2118         ShortVector av = ShortVector.fromArray(a, input, 0);
2119         DoubleVector bv = (DoubleVector) av.castShape(b, 0);
2120         bv.intoArray(output, 0);
2121 
2122         for (int i = 0; i < Math.min(input.length, output.length); i++) {
2123             Assert.assertEquals(output[i], (double)input[i]);
2124         }
2125         for(int i = input.length; i < output.length; i++) {
2126             Assert.assertEquals(output[i], (double)0);
2127         }
2128     }
2129 
2130     @ForceInline
2131     static
2132     void testVectorCastShortToDoubleFail(VectorSpecies<Short> a, VectorSpecies<Double> b, short[] input) {
2133         assert(input.length == a.length());
2134 
2135         ShortVector av = ShortVector.fromArray(a, input, 0);
2136         try {
2137             av.castShape(b, 0);
2138             Assert.fail(String.format(
2139                     "Cast failed to throw ClassCastException for differing species lengths for %s and %s",
2140                     a, b));
2141         } catch (ClassCastException e) {
2142         }
2143     }
2144 
2145     @ForceInline
2146     static
2147     void testVectorCastIntToDouble(VectorSpecies<Integer> a, VectorSpecies<Double> b, int[] input, double[] output) {
2148         assert(input.length == a.length());
2149         assert(output.length == b.length());
2150 
2151         IntVector av = IntVector.fromArray(a, input, 0);
2152         DoubleVector bv = (DoubleVector) av.castShape(b, 0);
2153         bv.intoArray(output, 0);
2154 
2155         for (int i = 0; i < Math.min(input.length, output.length); i++) {
2156             Assert.assertEquals(output[i], (double)input[i]);
2157         }
2158         for(int i = input.length; i < output.length; i++) {
2159             Assert.assertEquals(output[i], (double)0);
2160         }
2161     }
2162 
2163     @ForceInline
2164     static
2165     void testVectorCastIntToDoubleFail(VectorSpecies<Integer> a, VectorSpecies<Double> b, int[] input) {
2166         assert(input.length == a.length());
2167 
2168         IntVector av = IntVector.fromArray(a, input, 0);
2169         try {
2170             av.castShape(b, 0);
2171             Assert.fail(String.format(
2172                     "Cast failed to throw ClassCastException for differing species lengths for %s and %s",
2173                     a, b));
2174         } catch (ClassCastException e) {
2175         }
2176     }
2177 
2178     @ForceInline
2179     static
2180     void testVectorCastLongToDouble(VectorSpecies<Long> a, VectorSpecies<Double> b, long[] input, double[] output) {
2181         assert(input.length == a.length());
2182         assert(output.length == b.length());
2183 
2184         LongVector av = LongVector.fromArray(a, input, 0);
2185         DoubleVector bv = (DoubleVector) av.castShape(b, 0);
2186         bv.intoArray(output, 0);
2187 
2188         for (int i = 0; i < Math.min(input.length, output.length); i++) {
2189             Assert.assertEquals(output[i], (double)input[i]);
2190         }
2191         for(int i = input.length; i < output.length; i++) {
2192             Assert.assertEquals(output[i], (double)0);
2193         }
2194     }
2195 
2196     @ForceInline
2197     static
2198     void testVectorCastLongToDoubleFail(VectorSpecies<Long> a, VectorSpecies<Double> b, long[] input) {
2199         assert(input.length == a.length());
2200 
2201         LongVector av = LongVector.fromArray(a, input, 0);
2202         try {
2203             av.castShape(b, 0);
2204             Assert.fail(String.format(
2205                     "Cast failed to throw ClassCastException for differing species lengths for %s and %s",
2206                     a, b));
2207         } catch (ClassCastException e) {
2208         }
2209     }
2210 
2211     @ForceInline
2212     static
2213     void testVectorCastFloatToDouble(VectorSpecies<Float> a, VectorSpecies<Double> b, float[] input, double[] output) {
2214         assert(input.length == a.length());
2215         assert(output.length == b.length());
2216 
2217         FloatVector av = FloatVector.fromArray(a, input, 0);
2218         DoubleVector bv = (DoubleVector) av.castShape(b, 0);
2219         bv.intoArray(output, 0);
2220 
2221         for (int i = 0; i < Math.min(input.length, output.length); i++) {
2222             Assert.assertEquals(output[i], (double)input[i]);
2223         }
2224         for(int i = input.length; i < output.length; i++) {
2225             Assert.assertEquals(output[i], (double)0);
2226         }
2227     }
2228 
2229     @ForceInline
2230     static
2231     void testVectorCastFloatToDoubleFail(VectorSpecies<Float> a, VectorSpecies<Double> b, float[] input) {
2232         assert(input.length == a.length());
2233 
2234         FloatVector av = FloatVector.fromArray(a, input, 0);
2235         try {
2236             av.castShape(b, 0);
2237             Assert.fail(String.format(
2238                     "Cast failed to throw ClassCastException for differing species lengths for %s and %s",
2239                     a, b));
2240         } catch (ClassCastException e) {
2241         }
2242     }
2243 
2244     @ForceInline
2245     static
2246     void testVectorCastDoubleToDouble(VectorSpecies<Double> a, VectorSpecies<Double> b, double[] input, double[] output) {
2247         assert(input.length == a.length());
2248         assert(output.length == b.length());
2249 
2250         DoubleVector av = DoubleVector.fromArray(a, input, 0);
2251         DoubleVector bv = (DoubleVector) av.castShape(b, 0);
2252         bv.intoArray(output, 0);
2253 
2254         for (int i = 0; i < Math.min(input.length, output.length); i++) {
2255             Assert.assertEquals(output[i], (double)input[i]);
2256         }
2257         for(int i = input.length; i < output.length; i++) {
2258             Assert.assertEquals(output[i], (double)0);
2259         }
2260     }
2261 
2262     @ForceInline
2263     static
2264     void testVectorCastDoubleToDoubleFail(VectorSpecies<Double> a, VectorSpecies<Double> b, double[] input) {
2265         assert(input.length == a.length());
2266 
2267         DoubleVector av = DoubleVector.fromArray(a, input, 0);
2268         try {
2269             av.castShape(b, 0);
2270             Assert.fail(String.format(
2271                     "Cast failed to throw ClassCastException for differing species lengths for %s and %s",
2272                     a, b));
2273         } catch (ClassCastException e) {
2274         }
2275     }
2276 
2277     @Test(dataProvider = "byteUnaryOpProvider")
2278     static void testCastFromByte(IntFunction<byte[]> fa) {
2279         byte[] bin64 = fa.apply(bspec64.length());
2280         byte[] bin128 = fa.apply(bspec128.length());
2281         byte[] bin256 = fa.apply(bspec256.length());
2282         byte[] bin512 = fa.apply(bspec512.length());
2283 
2284         byte[] bout64 = new byte[bspec64.length()];
2285         byte[] bout128 = new byte[bspec128.length()];
2286         byte[] bout256 = new byte[bspec256.length()];
2287         byte[] bout512 = new byte[bspec512.length()];
2288 
2289         short[] sout64 = new short[sspec64.length()];
2290         short[] sout128 = new short[sspec128.length()];
2291         short[] sout256 = new short[sspec256.length()];
2292         short[] sout512 = new short[sspec512.length()];
2293 
2294         int[] iout64 = new int[ispec64.length()];
2295         int[] iout128 = new int[ispec128.length()];
2296         int[] iout256 = new int[ispec256.length()];
2297         int[] iout512 = new int[ispec512.length()];
2298 
2299         long[] lout64 = new long[lspec64.length()];
2300         long[] lout128 = new long[lspec128.length()];
2301         long[] lout256 = new long[lspec256.length()];
2302         long[] lout512 = new long[lspec512.length()];
2303 
2304         float[] fout64 = new float[fspec64.length()];
2305         float[] fout128 = new float[fspec128.length()];
2306         float[] fout256 = new float[fspec256.length()];
2307         float[] fout512 = new float[fspec512.length()];
2308 
2309         double[] dout64 = new double[dspec64.length()];
2310         double[] dout128 = new double[dspec128.length()];
2311         double[] dout256 = new double[dspec256.length()];
2312         double[] dout512 = new double[dspec512.length()];
2313 
2314         for (int i = 0; i < NUM_ITER; i++) {
2315             // B2B exact fit
2316             testVectorCastByteToByte(bspec64, bspec64, bin64, bout64);
2317             testVectorCastByteToByte(bspec128, bspec128, bin128, bout128);
2318             testVectorCastByteToByte(bspec256, bspec256, bin256, bout256);
2319             testVectorCastByteToByte(bspec512, bspec512, bin512, bout512);
2320 
2321             // B2B expansion
2322             testVectorCastByteToByte(bspec128, bspec64, bin128, bout64);
2323             testVectorCastByteToByte(bspec256, bspec128, bin256, bout128);
2324             testVectorCastByteToByte(bspec512, bspec256, bin512, bout256);
2325 
2326             testVectorCastByteToByte(bspec256, bspec64, bin256, bout64);
2327             testVectorCastByteToByte(bspec512, bspec128, bin512, bout128);
2328 
2329             testVectorCastByteToByte(bspec512, bspec64, bin512, bout64);
2330 
2331             // B2B contraction
2332             testVectorCastByteToByte(bspec64, bspec128, bin64, bout128);
2333             testVectorCastByteToByte(bspec128, bspec256, bin128, bout256);
2334             testVectorCastByteToByte(bspec256, bspec512, bin256, bout512);
2335 
2336             testVectorCastByteToByte(bspec64, bspec256, bin64, bout256);
2337             testVectorCastByteToByte(bspec128, bspec512, bin128, bout512);
2338 
2339             testVectorCastByteToByte(bspec64, bspec512, bin64, bout512);
2340 
2341             // B2S exact fit
2342             testVectorCastByteToShort(bspec64, sspec128, bin64, sout128);
2343             testVectorCastByteToShort(bspec128, sspec256, bin128, sout256);
2344             testVectorCastByteToShort(bspec256, sspec512, bin256, sout512);
2345 
2346             // B2S expansion
2347             testVectorCastByteToShort(bspec64, sspec64, bin64, sout64);
2348             testVectorCastByteToShort(bspec128, sspec128, bin128, sout128);
2349             testVectorCastByteToShort(bspec256, sspec256, bin256, sout256);
2350             testVectorCastByteToShort(bspec512, sspec512, bin512, sout512);
2351 
2352             testVectorCastByteToShort(bspec128, sspec64, bin128, sout64);
2353             testVectorCastByteToShort(bspec256, sspec128, bin256, sout128);
2354             testVectorCastByteToShort(bspec512, sspec256, bin512, sout256);
2355 
2356             testVectorCastByteToShort(bspec256, sspec64, bin256, sout64);
2357             testVectorCastByteToShort(bspec512, sspec128, bin512, sout128);
2358 
2359             testVectorCastByteToShort(bspec512, sspec64, bin512, sout64);
2360 
2361             // B2S contraction
2362             testVectorCastByteToShort(bspec64, sspec256, bin64, sout256);
2363             testVectorCastByteToShort(bspec128, sspec512, bin128, sout512);
2364 
2365             testVectorCastByteToShort(bspec64, sspec512, bin64, sout512);
2366 
2367             // B2I exact fit
2368             testVectorCastByteToInt(bspec64, ispec256, bin64, iout256);
2369             testVectorCastByteToInt(bspec128, ispec512, bin128, iout512);
2370 
2371             // B2L exact fit
2372             testVectorCastByteToLong(bspec64, lspec512, bin64, lout512);
2373 
2374             // B2F exact fit
2375             testVectorCastByteToFloat(bspec64, fspec256, bin64, fout256);
2376             testVectorCastByteToFloat(bspec128, fspec512, bin128, fout512);
2377 
2378             // B2D exact fit
2379             testVectorCastByteToDouble(bspec64, dspec512, bin64, dout512);
2380 
2381             // Previous failure tests.
2382             testVectorCastByteToByte(bspec64, bspec128, bin64, bout128);
2383             testVectorCastByteToByte(bspec64, bspec256, bin64, bout256);
2384             testVectorCastByteToByte(bspec64, bspec512, bin64, bout512);
2385 
2386             testVectorCastByteToByte(bspec128, bspec64, bin128, bout64);
2387             testVectorCastByteToByte(bspec128, bspec256, bin128, bout256);
2388             testVectorCastByteToByte(bspec128, bspec512, bin128, bout512);
2389 
2390             testVectorCastByteToByte(bspec256, bspec64, bin256, bout64);
2391             testVectorCastByteToByte(bspec256, bspec128, bin256, bout128);
2392             testVectorCastByteToByte(bspec256, bspec512, bin256, bout512);
2393 
2394             testVectorCastByteToByte(bspec512, bspec64, bin512, bout64);
2395             testVectorCastByteToByte(bspec512, bspec128, bin512, bout128);
2396             testVectorCastByteToByte(bspec512, bspec256, bin512, bout256);
2397 
2398             testVectorCastByteToShort(bspec64, sspec64, bin64, sout64);
2399             testVectorCastByteToShort(bspec64, sspec256, bin64, sout256);
2400             testVectorCastByteToShort(bspec64, sspec512, bin64, sout512);
2401 
2402             testVectorCastByteToShort(bspec128, sspec64, bin128, sout64);
2403             testVectorCastByteToShort(bspec128, sspec128, bin128, sout128);
2404             testVectorCastByteToShort(bspec128, sspec512, bin128, sout512);
2405 
2406             testVectorCastByteToShort(bspec256, sspec64, bin256, sout64);
2407             testVectorCastByteToShort(bspec256, sspec128, bin256, sout128);
2408             testVectorCastByteToShort(bspec256, sspec256, bin256, sout256);
2409 
2410             testVectorCastByteToShort(bspec512, sspec64, bin512, sout64);
2411             testVectorCastByteToShort(bspec512, sspec128, bin512, sout128);
2412             testVectorCastByteToShort(bspec512, sspec256, bin512, sout256);
2413             testVectorCastByteToShort(bspec512, sspec512, bin512, sout512);
2414 
2415             testVectorCastByteToInt(bspec64, ispec64, bin64, iout64);
2416             testVectorCastByteToInt(bspec64, ispec128, bin64, iout128);
2417             testVectorCastByteToInt(bspec64, ispec512, bin64, iout512);
2418 
2419             testVectorCastByteToInt(bspec128, ispec64, bin128, iout64);
2420             testVectorCastByteToInt(bspec128, ispec128, bin128, iout128);
2421             testVectorCastByteToInt(bspec128, ispec256, bin128, iout256);
2422 
2423             testVectorCastByteToInt(bspec256, ispec64, bin256, iout64);
2424             testVectorCastByteToInt(bspec256, ispec128, bin256, iout128);
2425             testVectorCastByteToInt(bspec256, ispec256, bin256, iout256);
2426             testVectorCastByteToInt(bspec256, ispec512, bin256, iout512);
2427 
2428             testVectorCastByteToInt(bspec512, ispec64, bin512, iout64);
2429             testVectorCastByteToInt(bspec512, ispec128, bin512, iout128);
2430             testVectorCastByteToInt(bspec512, ispec256, bin512, iout256);
2431             testVectorCastByteToInt(bspec512, ispec512, bin512, iout512);
2432 
2433             testVectorCastByteToLong(bspec64, lspec64, bin64, lout64);
2434             testVectorCastByteToLong(bspec64, lspec128, bin64, lout128);
2435             testVectorCastByteToLong(bspec64, lspec256, bin64, lout256);
2436 
2437             testVectorCastByteToLong(bspec128, lspec64, bin128, lout64);
2438             testVectorCastByteToLong(bspec128, lspec128, bin128, lout128);
2439             testVectorCastByteToLong(bspec128, lspec256, bin128, lout256);
2440             testVectorCastByteToLong(bspec128, lspec512, bin128, lout512);
2441 
2442             testVectorCastByteToLong(bspec256, lspec64, bin256, lout64);
2443             testVectorCastByteToLong(bspec256, lspec128, bin256, lout128);
2444             testVectorCastByteToLong(bspec256, lspec256, bin256, lout256);
2445             testVectorCastByteToLong(bspec256, lspec512, bin256, lout512);
2446 
2447             testVectorCastByteToLong(bspec512, lspec64, bin512, lout64);
2448             testVectorCastByteToLong(bspec512, lspec128, bin512, lout128);
2449             testVectorCastByteToLong(bspec512, lspec256, bin512, lout256);
2450             testVectorCastByteToLong(bspec512, lspec512, bin512, lout512);
2451 
2452             testVectorCastByteToFloat(bspec64, fspec64, bin64, fout64);
2453             testVectorCastByteToFloat(bspec64, fspec128, bin64, fout128);
2454             testVectorCastByteToFloat(bspec64, fspec512, bin64, fout512);
2455 
2456             testVectorCastByteToFloat(bspec128, fspec64, bin128, fout64);
2457             testVectorCastByteToFloat(bspec128, fspec128, bin128, fout128);
2458             testVectorCastByteToFloat(bspec128, fspec256, bin128, fout256);
2459 
2460             testVectorCastByteToFloat(bspec256, fspec64, bin256, fout64);
2461             testVectorCastByteToFloat(bspec256, fspec128, bin256, fout128);
2462             testVectorCastByteToFloat(bspec256, fspec256, bin256, fout256);
2463             testVectorCastByteToFloat(bspec256, fspec512, bin256, fout512);
2464 
2465             testVectorCastByteToFloat(bspec512, fspec64, bin512, fout64);
2466             testVectorCastByteToFloat(bspec512, fspec128, bin512, fout128);
2467             testVectorCastByteToFloat(bspec512, fspec256, bin512, fout256);
2468             testVectorCastByteToFloat(bspec512, fspec512, bin512, fout512);
2469 
2470             testVectorCastByteToDouble(bspec64, dspec64, bin64, dout64);
2471             testVectorCastByteToDouble(bspec64, dspec128, bin64, dout128);
2472             testVectorCastByteToDouble(bspec64, dspec256, bin64, dout256);
2473 
2474             testVectorCastByteToDouble(bspec128, dspec64, bin128, dout64);
2475             testVectorCastByteToDouble(bspec128, dspec128, bin128, dout128);
2476             testVectorCastByteToDouble(bspec128, dspec256, bin128, dout256);
2477             testVectorCastByteToDouble(bspec128, dspec512, bin128, dout512);
2478 
2479             testVectorCastByteToDouble(bspec256, dspec64, bin256, dout64);
2480             testVectorCastByteToDouble(bspec256, dspec128, bin256, dout128);
2481             testVectorCastByteToDouble(bspec256, dspec256, bin256, dout256);
2482             testVectorCastByteToDouble(bspec256, dspec512, bin256, dout512);
2483 
2484             testVectorCastByteToDouble(bspec512, dspec64, bin512, dout64);
2485             testVectorCastByteToDouble(bspec512, dspec128, bin512, dout128);
2486             testVectorCastByteToDouble(bspec512, dspec256, bin512, dout256);
2487             testVectorCastByteToDouble(bspec512, dspec512, bin512, dout512);
2488         }
2489     }
2490 
2491     @Test(dataProvider = "shortUnaryOpProvider")
2492     static void testCastFromShort(IntFunction<short[]> fa) {
2493         short[] sin64 = fa.apply(sspec64.length());
2494         short[] sin128 = fa.apply(sspec128.length());
2495         short[] sin256 = fa.apply(sspec256.length());
2496         short[] sin512 = fa.apply(sspec512.length());
2497 
2498         byte[] bout64 = new byte[bspec64.length()];
2499         byte[] bout128 = new byte[bspec128.length()];
2500         byte[] bout256 = new byte[bspec256.length()];
2501 
2502         short[] sout64 = new short[sspec64.length()];
2503         short[] sout128 = new short[sspec128.length()];
2504         short[] sout256 = new short[sspec256.length()];
2505         short[] sout512 = new short[sspec512.length()];
2506 
2507         int[] iout128 = new int[ispec128.length()];
2508         int[] iout256 = new int[ispec256.length()];
2509         int[] iout512 = new int[ispec512.length()];
2510 
2511         long[] lout256 = new long[lspec256.length()];
2512         long[] lout512 = new long[lspec512.length()];
2513 
2514         float[] fout128 = new float[fspec128.length()];
2515         float[] fout256 = new float[fspec256.length()];
2516         float[] fout512 = new float[fspec512.length()];
2517 
2518         double[] dout256 = new double[dspec256.length()];
2519         double[] dout512 = new double[dspec512.length()];
2520 
2521         for (int i = 0; i < NUM_ITER; i++) {
2522             testVectorCastShortToByte(sspec128, bspec64, sin128, bout64);
2523             testVectorCastShortToByte(sspec256, bspec128, sin256, bout128);
2524             testVectorCastShortToByte(sspec512, bspec256, sin512, bout256);
2525 
2526             testVectorCastShortToShort(sspec64, sspec64, sin64, sout64);
2527             testVectorCastShortToShort(sspec128, sspec128, sin128, sout128);
2528             testVectorCastShortToShort(sspec256, sspec256, sin256, sout256);
2529             testVectorCastShortToShort(sspec512, sspec512, sin512, sout512);
2530 
2531             testVectorCastShortToInt(sspec64, ispec128, sin64, iout128);
2532             testVectorCastShortToInt(sspec128, ispec256, sin128, iout256);
2533             testVectorCastShortToInt(sspec256, ispec512, sin256, iout512);
2534 
2535             testVectorCastShortToLong(sspec64, lspec256, sin64, lout256);
2536             testVectorCastShortToLong(sspec128, lspec512, sin128, lout512);
2537 
2538             testVectorCastShortToFloat(sspec64, fspec128, sin64, fout128);
2539             testVectorCastShortToFloat(sspec128, fspec256, sin128, fout256);
2540             testVectorCastShortToFloat(sspec256, fspec512, sin256, fout512);
2541 
2542             testVectorCastShortToDouble(sspec64, dspec256, sin64, dout256);
2543             testVectorCastShortToDouble(sspec128, dspec512, sin128, dout512);
2544         }
2545     }
2546 
2547     //@Test()
2548     static void testCastFromShortFail() {
2549         short[] sin64 = new short[sspec64.length()];
2550         short[] sin128 = new short[sspec128.length()];
2551         short[] sin256 = new short[sspec256.length()];
2552         short[] sin512 = new short[sspec512.length()];
2553 
2554         for (int i = 0; i < INVOC_COUNT; i++) {
2555             testVectorCastShortToByteFail(sspec64, bspec64, sin64);
2556             testVectorCastShortToByteFail(sspec64, bspec128, sin64);
2557             testVectorCastShortToByteFail(sspec64, bspec256, sin64);
2558             testVectorCastShortToByteFail(sspec64, bspec512, sin64);
2559 
2560             testVectorCastShortToByteFail(sspec128, bspec128, sin128);
2561             testVectorCastShortToByteFail(sspec128, bspec256, sin128);
2562             testVectorCastShortToByteFail(sspec128, bspec512, sin128);
2563 
2564             testVectorCastShortToByteFail(sspec256, bspec64, sin256);
2565             testVectorCastShortToByteFail(sspec256, bspec256, sin256);
2566             testVectorCastShortToByteFail(sspec256, bspec512, sin256);
2567 
2568             testVectorCastShortToByteFail(sspec512, bspec64, sin512);
2569             testVectorCastShortToByteFail(sspec512, bspec128, sin512);
2570             testVectorCastShortToByteFail(sspec512, bspec512, sin512);
2571 
2572             testVectorCastShortToShortFail(sspec64, sspec128, sin64);
2573             testVectorCastShortToShortFail(sspec64, sspec256, sin64);
2574             testVectorCastShortToShortFail(sspec64, sspec512, sin64);
2575 
2576             testVectorCastShortToShortFail(sspec128, sspec64, sin128);
2577             testVectorCastShortToShortFail(sspec128, sspec256, sin128);
2578             testVectorCastShortToShortFail(sspec128, sspec512, sin128);
2579 
2580             testVectorCastShortToShortFail(sspec256, sspec64, sin256);
2581             testVectorCastShortToShortFail(sspec256, sspec128, sin256);
2582             testVectorCastShortToShortFail(sspec256, sspec512, sin256);
2583 
2584             testVectorCastShortToShortFail(sspec512, sspec64, sin512);
2585             testVectorCastShortToShortFail(sspec512, sspec128, sin512);
2586             testVectorCastShortToShortFail(sspec512, sspec256, sin512);
2587 
2588             testVectorCastShortToIntFail(sspec64, ispec64, sin64);
2589             testVectorCastShortToIntFail(sspec64, ispec256, sin64);
2590             testVectorCastShortToIntFail(sspec64, ispec512, sin64);
2591 
2592             testVectorCastShortToIntFail(sspec128, ispec64, sin128);
2593             testVectorCastShortToIntFail(sspec128, ispec128, sin128);
2594             testVectorCastShortToIntFail(sspec128, ispec512, sin128);
2595 
2596             testVectorCastShortToIntFail(sspec256, ispec64, sin256);
2597             testVectorCastShortToIntFail(sspec256, ispec128, sin256);
2598             testVectorCastShortToIntFail(sspec256, ispec256, sin256);
2599 
2600             testVectorCastShortToIntFail(sspec512, ispec64, sin512);
2601             testVectorCastShortToIntFail(sspec512, ispec128, sin512);
2602             testVectorCastShortToIntFail(sspec512, ispec256, sin512);
2603             testVectorCastShortToIntFail(sspec512, ispec512, sin512);
2604 
2605             testVectorCastShortToLongFail(sspec64, lspec64, sin64);
2606             testVectorCastShortToLongFail(sspec64, lspec128, sin64);
2607             testVectorCastShortToLongFail(sspec64, lspec512, sin64);
2608 
2609             testVectorCastShortToLongFail(sspec128, lspec64, sin128);
2610             testVectorCastShortToLongFail(sspec128, lspec128, sin128);
2611             testVectorCastShortToLongFail(sspec128, lspec256, sin128);
2612 
2613             testVectorCastShortToLongFail(sspec256, lspec64, sin256);
2614             testVectorCastShortToLongFail(sspec256, lspec128, sin256);
2615             testVectorCastShortToLongFail(sspec256, lspec256, sin256);
2616             testVectorCastShortToLongFail(sspec256, lspec512, sin256);
2617 
2618             testVectorCastShortToLongFail(sspec512, lspec64, sin512);
2619             testVectorCastShortToLongFail(sspec512, lspec128, sin512);
2620             testVectorCastShortToLongFail(sspec512, lspec256, sin512);
2621             testVectorCastShortToLongFail(sspec512, lspec512, sin512);
2622 
2623             testVectorCastShortToFloatFail(sspec64, fspec64, sin64);
2624             testVectorCastShortToFloatFail(sspec64, fspec256, sin64);
2625             testVectorCastShortToFloatFail(sspec64, fspec512, sin64);
2626 
2627             testVectorCastShortToFloatFail(sspec128, fspec64, sin128);
2628             testVectorCastShortToFloatFail(sspec128, fspec128, sin128);
2629             testVectorCastShortToFloatFail(sspec128, fspec512, sin128);
2630 
2631             testVectorCastShortToFloatFail(sspec256, fspec64, sin256);
2632             testVectorCastShortToFloatFail(sspec256, fspec128, sin256);
2633             testVectorCastShortToFloatFail(sspec256, fspec256, sin256);
2634 
2635             testVectorCastShortToFloatFail(sspec512, fspec64, sin512);
2636             testVectorCastShortToFloatFail(sspec512, fspec128, sin512);
2637             testVectorCastShortToFloatFail(sspec512, fspec256, sin512);
2638             testVectorCastShortToFloatFail(sspec512, fspec512, sin512);
2639 
2640             testVectorCastShortToDoubleFail(sspec64, dspec64, sin64);
2641             testVectorCastShortToDoubleFail(sspec64, dspec128, sin64);
2642             testVectorCastShortToDoubleFail(sspec64, dspec512, sin64);
2643 
2644             testVectorCastShortToDoubleFail(sspec128, dspec64, sin128);
2645             testVectorCastShortToDoubleFail(sspec128, dspec128, sin128);
2646             testVectorCastShortToDoubleFail(sspec128, dspec256, sin128);
2647 
2648             testVectorCastShortToDoubleFail(sspec256, dspec64, sin256);
2649             testVectorCastShortToDoubleFail(sspec256, dspec128, sin256);
2650             testVectorCastShortToDoubleFail(sspec256, dspec256, sin256);
2651             testVectorCastShortToDoubleFail(sspec256, dspec512, sin256);
2652 
2653             testVectorCastShortToDoubleFail(sspec512, dspec64, sin512);
2654             testVectorCastShortToDoubleFail(sspec512, dspec128, sin512);
2655             testVectorCastShortToDoubleFail(sspec512, dspec256, sin512);
2656             testVectorCastShortToDoubleFail(sspec512, dspec512, sin512);
2657         }
2658     }
2659 
2660     @Test(dataProvider = "intUnaryOpProvider")
2661     static void testCastFromInt(IntFunction<int[]> fa) {
2662         int[] iin64 = fa.apply(ispec64.length());
2663         int[] iin128 = fa.apply(ispec128.length());
2664         int[] iin256 = fa.apply(ispec256.length());
2665         int[] iin512 = fa.apply(ispec512.length());
2666 
2667         byte[] bout64 = new byte[bspec64.length()];
2668         byte[] bout128 = new byte[bspec128.length()];
2669 
2670         short[] sout64 = new short[sspec64.length()];
2671         short[] sout128 = new short[sspec128.length()];
2672         short[] sout256 = new short[sspec256.length()];
2673 
2674         int[] iout64 = new int[ispec64.length()];
2675         int[] iout128 = new int[ispec128.length()];
2676         int[] iout256 = new int[ispec256.length()];
2677         int[] iout512 = new int[ispec512.length()];
2678 
2679         long[] lout128 = new long[lspec128.length()];
2680         long[] lout256 = new long[lspec256.length()];
2681         long[] lout512 = new long[lspec512.length()];
2682 
2683         float[] fout64 = new float[fspec64.length()];
2684         float[] fout128 = new float[fspec128.length()];
2685         float[] fout256 = new float[fspec256.length()];
2686         float[] fout512 = new float[fspec512.length()];
2687 
2688         double[] dout128 = new double[dspec128.length()];
2689         double[] dout256 = new double[dspec256.length()];
2690         double[] dout512 = new double[dspec512.length()];
2691 
2692         for (int i = 0; i < NUM_ITER; i++) {
2693             testVectorCastIntToByte(ispec256, bspec64, iin256, bout64);
2694             testVectorCastIntToByte(ispec512, bspec128, iin512, bout128);
2695 
2696             testVectorCastIntToShort(ispec128, sspec64, iin128, sout64);
2697             testVectorCastIntToShort(ispec256, sspec128, iin256, sout128);
2698             testVectorCastIntToShort(ispec512, sspec256, iin512, sout256);
2699 
2700             testVectorCastIntToInt(ispec64, ispec64, iin64, iout64);
2701             testVectorCastIntToInt(ispec128, ispec128, iin128, iout128);
2702             testVectorCastIntToInt(ispec256, ispec256, iin256, iout256);
2703             testVectorCastIntToInt(ispec512, ispec512, iin512, iout512);
2704 
2705             testVectorCastIntToLong(ispec64, lspec128, iin64, lout128);
2706             testVectorCastIntToLong(ispec128, lspec256, iin128, lout256);
2707             testVectorCastIntToLong(ispec256, lspec512, iin256, lout512);
2708 
2709             testVectorCastIntToFloat(ispec64, fspec64, iin64, fout64);
2710             testVectorCastIntToFloat(ispec128, fspec128, iin128, fout128);
2711             testVectorCastIntToFloat(ispec256, fspec256, iin256, fout256);
2712             testVectorCastIntToFloat(ispec512, fspec512, iin512, fout512);
2713 
2714             testVectorCastIntToDouble(ispec64, dspec128, iin64, dout128);
2715             testVectorCastIntToDouble(ispec128, dspec256, iin128, dout256);
2716             testVectorCastIntToDouble(ispec256, dspec512, iin256, dout512);
2717         }
2718     }
2719 
2720     //@Test
2721     static void testCastFromIntFail() {
2722         int[] iin64 = new int[ispec64.length()];
2723         int[] iin128 = new int[ispec128.length()];
2724         int[] iin256 = new int[ispec256.length()];
2725         int[] iin512 = new int[ispec512.length()];
2726 
2727         for (int i = 0; i < INVOC_COUNT; i++) {
2728             testVectorCastIntToByteFail(ispec64, bspec64, iin64);
2729             testVectorCastIntToByteFail(ispec64, bspec128, iin64);
2730             testVectorCastIntToByteFail(ispec64, bspec256, iin64);
2731             testVectorCastIntToByteFail(ispec64, bspec512, iin64);
2732 
2733             testVectorCastIntToByteFail(ispec128, bspec64, iin128);
2734             testVectorCastIntToByteFail(ispec128, bspec128, iin128);
2735             testVectorCastIntToByteFail(ispec128, bspec256, iin128);
2736             testVectorCastIntToByteFail(ispec128, bspec512, iin128);
2737 
2738             testVectorCastIntToByteFail(ispec256, bspec128, iin256);
2739             testVectorCastIntToByteFail(ispec256, bspec256, iin256);
2740             testVectorCastIntToByteFail(ispec256, bspec512, iin256);
2741 
2742             testVectorCastIntToByteFail(ispec512, bspec64, iin512);
2743             testVectorCastIntToByteFail(ispec512, bspec256, iin512);
2744             testVectorCastIntToByteFail(ispec512, bspec512, iin512);
2745 
2746             testVectorCastIntToShortFail(ispec64, sspec64, iin64);
2747             testVectorCastIntToShortFail(ispec64, sspec128, iin64);
2748             testVectorCastIntToShortFail(ispec64, sspec256, iin64);
2749             testVectorCastIntToShortFail(ispec64, sspec512, iin64);
2750 
2751             testVectorCastIntToShortFail(ispec128, sspec128, iin128);
2752             testVectorCastIntToShortFail(ispec128, sspec256, iin128);
2753             testVectorCastIntToShortFail(ispec128, sspec512, iin128);
2754 
2755             testVectorCastIntToShortFail(ispec256, sspec64, iin256);
2756             testVectorCastIntToShortFail(ispec256, sspec256, iin256);
2757             testVectorCastIntToShortFail(ispec256, sspec512, iin256);
2758 
2759             testVectorCastIntToShortFail(ispec512, sspec64, iin512);
2760             testVectorCastIntToShortFail(ispec512, sspec128, iin512);
2761             testVectorCastIntToShortFail(ispec512, sspec512, iin512);
2762 
2763             testVectorCastIntToIntFail(ispec64, ispec128, iin64);
2764             testVectorCastIntToIntFail(ispec64, ispec256, iin64);
2765             testVectorCastIntToIntFail(ispec64, ispec512, iin64);
2766 
2767             testVectorCastIntToIntFail(ispec128, ispec64, iin128);
2768             testVectorCastIntToIntFail(ispec128, ispec256, iin128);
2769             testVectorCastIntToIntFail(ispec128, ispec512, iin128);
2770 
2771             testVectorCastIntToIntFail(ispec256, ispec64, iin256);
2772             testVectorCastIntToIntFail(ispec256, ispec128, iin256);
2773             testVectorCastIntToIntFail(ispec256, ispec512, iin256);
2774 
2775             testVectorCastIntToIntFail(ispec512, ispec64, iin512);
2776             testVectorCastIntToIntFail(ispec512, ispec128, iin512);
2777             testVectorCastIntToIntFail(ispec512, ispec256, iin512);
2778 
2779             testVectorCastIntToLongFail(ispec64, lspec64, iin64);
2780             testVectorCastIntToLongFail(ispec64, lspec256, iin64);
2781             testVectorCastIntToLongFail(ispec64, lspec512, iin64);
2782 
2783             testVectorCastIntToLongFail(ispec128, lspec64, iin128);
2784             testVectorCastIntToLongFail(ispec128, lspec128, iin128);
2785             testVectorCastIntToLongFail(ispec128, lspec512, iin128);
2786 
2787             testVectorCastIntToLongFail(ispec256, lspec64, iin256);
2788             testVectorCastIntToLongFail(ispec256, lspec128, iin256);
2789             testVectorCastIntToLongFail(ispec256, lspec256, iin256);
2790 
2791             testVectorCastIntToLongFail(ispec512, lspec64, iin512);
2792             testVectorCastIntToLongFail(ispec512, lspec128, iin512);
2793             testVectorCastIntToLongFail(ispec512, lspec256, iin512);
2794             testVectorCastIntToLongFail(ispec512, lspec512, iin512);
2795 
2796             testVectorCastIntToFloatFail(ispec64, fspec128, iin64);
2797             testVectorCastIntToFloatFail(ispec64, fspec256, iin64);
2798             testVectorCastIntToFloatFail(ispec64, fspec512, iin64);
2799 
2800             testVectorCastIntToFloatFail(ispec128, fspec64, iin128);
2801             testVectorCastIntToFloatFail(ispec128, fspec256, iin128);
2802             testVectorCastIntToFloatFail(ispec128, fspec512, iin128);
2803 
2804             testVectorCastIntToFloatFail(ispec256, fspec64, iin256);
2805             testVectorCastIntToFloatFail(ispec256, fspec128, iin256);
2806             testVectorCastIntToFloatFail(ispec256, fspec512, iin256);
2807 
2808             testVectorCastIntToFloatFail(ispec512, fspec64, iin512);
2809             testVectorCastIntToFloatFail(ispec512, fspec128, iin512);
2810             testVectorCastIntToFloatFail(ispec512, fspec256, iin512);
2811 
2812             testVectorCastIntToDoubleFail(ispec64, dspec64, iin64);
2813             testVectorCastIntToDoubleFail(ispec64, dspec256, iin64);
2814             testVectorCastIntToDoubleFail(ispec64, dspec512, iin64);
2815 
2816             testVectorCastIntToDoubleFail(ispec128, dspec64, iin128);
2817             testVectorCastIntToDoubleFail(ispec128, dspec128, iin128);
2818             testVectorCastIntToDoubleFail(ispec128, dspec512, iin128);
2819 
2820             testVectorCastIntToDoubleFail(ispec256, dspec64, iin256);
2821             testVectorCastIntToDoubleFail(ispec256, dspec128, iin256);
2822             testVectorCastIntToDoubleFail(ispec256, dspec256, iin256);
2823 
2824             testVectorCastIntToDoubleFail(ispec512, dspec64, iin512);
2825             testVectorCastIntToDoubleFail(ispec512, dspec128, iin512);
2826             testVectorCastIntToDoubleFail(ispec512, dspec256, iin512);
2827             testVectorCastIntToDoubleFail(ispec512, dspec512, iin512);
2828         }
2829     }
2830 
2831     @Test(dataProvider = "longUnaryOpProvider")
2832     static void testCastFromLong(IntFunction<long[]> fa) {
2833         long[] lin64 = fa.apply(lspec64.length());
2834         long[] lin128 = fa.apply(lspec128.length());
2835         long[] lin256 = fa.apply(lspec256.length());
2836         long[] lin512 = fa.apply(lspec512.length());
2837 
2838         byte[] bout64 = new byte[bspec64.length()];
2839 
2840         short[] sout64 = new short[sspec64.length()];
2841         short[] sout128 = new short[sspec128.length()];
2842 
2843         int[] iout64 = new int[ispec64.length()];
2844         int[] iout128 = new int[ispec128.length()];
2845         int[] iout256 = new int[ispec256.length()];
2846 
2847         long[] lout64 = new long[lspec64.length()];
2848         long[] lout128 = new long[lspec128.length()];
2849         long[] lout256 = new long[lspec256.length()];
2850         long[] lout512 = new long[lspec512.length()];
2851 
2852         float[] fout64 = new float[fspec64.length()];
2853         float[] fout128 = new float[fspec128.length()];
2854         float[] fout256 = new float[fspec256.length()];
2855 
2856         double[] dout64 = new double[dspec64.length()];
2857         double[] dout128 = new double[dspec128.length()];
2858         double[] dout256 = new double[dspec256.length()];
2859         double[] dout512 = new double[dspec512.length()];
2860 
2861         for (int i = 0; i < NUM_ITER; i++) {
2862             testVectorCastLongToByte(lspec512, bspec64, lin512, bout64);
2863 
2864             testVectorCastLongToShort(lspec256, sspec64, lin256, sout64);
2865             testVectorCastLongToShort(lspec512, sspec128, lin512, sout128);
2866 
2867             testVectorCastLongToInt(lspec128, ispec64, lin128, iout64);
2868             testVectorCastLongToInt(lspec256, ispec128, lin256, iout128);
2869             testVectorCastLongToInt(lspec512, ispec256, lin512, iout256);
2870 
2871             testVectorCastLongToLong(lspec64, lspec64, lin64, lout64);
2872             testVectorCastLongToLong(lspec128, lspec128, lin128, lout128);
2873             testVectorCastLongToLong(lspec256, lspec256, lin256, lout256);
2874             testVectorCastLongToLong(lspec512, lspec512, lin512, lout512);
2875 
2876             testVectorCastLongToFloat(lspec128, fspec64, lin128, fout64);
2877             testVectorCastLongToFloat(lspec256, fspec128, lin256, fout128);
2878             testVectorCastLongToFloat(lspec512, fspec256, lin512, fout256);
2879 
2880             testVectorCastLongToDouble(lspec64, dspec64, lin64, dout64);
2881             testVectorCastLongToDouble(lspec128, dspec128, lin128, dout128);
2882             testVectorCastLongToDouble(lspec256, dspec256, lin256, dout256);
2883             testVectorCastLongToDouble(lspec512, dspec512, lin512, dout512);
2884         }
2885     }
2886 
2887     //@Test
2888     static void testCastFromLongFail() {
2889         long[] lin64 = new long[lspec64.length()];
2890         long[] lin128 = new long[lspec128.length()];
2891         long[] lin256 = new long[lspec256.length()];
2892         long[] lin512 = new long[lspec512.length()];
2893 
2894         for (int i = 0; i < INVOC_COUNT; i++) {
2895             testVectorCastLongToByteFail(lspec64, bspec64, lin64);
2896             testVectorCastLongToByteFail(lspec64, bspec128, lin64);
2897             testVectorCastLongToByteFail(lspec64, bspec256, lin64);
2898             testVectorCastLongToByteFail(lspec64, bspec512, lin64);
2899 
2900             testVectorCastLongToByteFail(lspec128, bspec64, lin128);
2901             testVectorCastLongToByteFail(lspec128, bspec128, lin128);
2902             testVectorCastLongToByteFail(lspec128, bspec256, lin128);
2903             testVectorCastLongToByteFail(lspec128, bspec512, lin128);
2904 
2905             testVectorCastLongToByteFail(lspec256, bspec64, lin256);
2906             testVectorCastLongToByteFail(lspec256, bspec128, lin256);
2907             testVectorCastLongToByteFail(lspec256, bspec256, lin256);
2908             testVectorCastLongToByteFail(lspec256, bspec512, lin256);
2909 
2910             testVectorCastLongToByteFail(lspec512, bspec128, lin512);
2911             testVectorCastLongToByteFail(lspec512, bspec256, lin512);
2912             testVectorCastLongToByteFail(lspec512, bspec512, lin512);
2913 
2914             testVectorCastLongToShortFail(lspec64, sspec64, lin64);
2915             testVectorCastLongToShortFail(lspec64, sspec128, lin64);
2916             testVectorCastLongToShortFail(lspec64, sspec256, lin64);
2917             testVectorCastLongToShortFail(lspec64, sspec512, lin64);
2918 
2919             testVectorCastLongToShortFail(lspec128, sspec64, lin128);
2920             testVectorCastLongToShortFail(lspec128, sspec128, lin128);
2921             testVectorCastLongToShortFail(lspec128, sspec256, lin128);
2922             testVectorCastLongToShortFail(lspec128, sspec512, lin128);
2923 
2924             testVectorCastLongToShortFail(lspec256, sspec128, lin256);
2925             testVectorCastLongToShortFail(lspec256, sspec256, lin256);
2926             testVectorCastLongToShortFail(lspec256, sspec512, lin256);
2927 
2928             testVectorCastLongToShortFail(lspec512, sspec64, lin512);
2929             testVectorCastLongToShortFail(lspec512, sspec256, lin512);
2930             testVectorCastLongToShortFail(lspec512, sspec512, lin512);
2931 
2932             testVectorCastLongToIntFail(lspec64, ispec64, lin64);
2933             testVectorCastLongToIntFail(lspec64, ispec128, lin64);
2934             testVectorCastLongToIntFail(lspec64, ispec256, lin64);
2935             testVectorCastLongToIntFail(lspec64, ispec512, lin64);
2936 
2937             testVectorCastLongToIntFail(lspec128, ispec128, lin128);
2938             testVectorCastLongToIntFail(lspec128, ispec256, lin128);
2939             testVectorCastLongToIntFail(lspec128, ispec512, lin128);
2940 
2941             testVectorCastLongToIntFail(lspec256, ispec64, lin256);
2942             testVectorCastLongToIntFail(lspec256, ispec256, lin256);
2943             testVectorCastLongToIntFail(lspec256, ispec512, lin256);
2944 
2945             testVectorCastLongToIntFail(lspec512, ispec64, lin512);
2946             testVectorCastLongToIntFail(lspec512, ispec128, lin512);
2947             testVectorCastLongToIntFail(lspec512, ispec512, lin512);
2948 
2949             testVectorCastLongToLongFail(lspec64, lspec128, lin64);
2950             testVectorCastLongToLongFail(lspec64, lspec256, lin64);
2951             testVectorCastLongToLongFail(lspec64, lspec512, lin64);
2952 
2953             testVectorCastLongToLongFail(lspec128, lspec64, lin128);
2954             testVectorCastLongToLongFail(lspec128, lspec256, lin128);
2955             testVectorCastLongToLongFail(lspec128, lspec512, lin128);
2956 
2957             testVectorCastLongToLongFail(lspec256, lspec64, lin256);
2958             testVectorCastLongToLongFail(lspec256, lspec128, lin256);
2959             testVectorCastLongToLongFail(lspec256, lspec512, lin256);
2960 
2961             testVectorCastLongToLongFail(lspec512, lspec64, lin512);
2962             testVectorCastLongToLongFail(lspec512, lspec128, lin512);
2963             testVectorCastLongToLongFail(lspec512, lspec256, lin512);
2964 
2965             testVectorCastLongToFloatFail(lspec64, fspec64, lin64);
2966             testVectorCastLongToFloatFail(lspec64, fspec128, lin64);
2967             testVectorCastLongToFloatFail(lspec64, fspec256, lin64);
2968             testVectorCastLongToFloatFail(lspec64, fspec512, lin64);
2969 
2970             testVectorCastLongToFloatFail(lspec128, fspec128, lin128);
2971             testVectorCastLongToFloatFail(lspec128, fspec256, lin128);
2972             testVectorCastLongToFloatFail(lspec128, fspec512, lin128);
2973 
2974             testVectorCastLongToFloatFail(lspec256, fspec64, lin256);
2975             testVectorCastLongToFloatFail(lspec256, fspec256, lin256);
2976             testVectorCastLongToFloatFail(lspec256, fspec512, lin256);
2977 
2978             testVectorCastLongToFloatFail(lspec512, fspec64, lin512);
2979             testVectorCastLongToFloatFail(lspec512, fspec128, lin512);
2980             testVectorCastLongToFloatFail(lspec512, fspec512, lin512);
2981 
2982             testVectorCastLongToDoubleFail(lspec64, dspec128, lin64);
2983             testVectorCastLongToDoubleFail(lspec64, dspec256, lin64);
2984             testVectorCastLongToDoubleFail(lspec64, dspec512, lin64);
2985 
2986             testVectorCastLongToDoubleFail(lspec128, dspec64, lin128);
2987             testVectorCastLongToDoubleFail(lspec128, dspec256, lin128);
2988             testVectorCastLongToDoubleFail(lspec128, dspec512, lin128);
2989 
2990             testVectorCastLongToDoubleFail(lspec256, dspec64, lin256);
2991             testVectorCastLongToDoubleFail(lspec256, dspec128, lin256);
2992             testVectorCastLongToDoubleFail(lspec256, dspec512, lin256);
2993 
2994             testVectorCastLongToDoubleFail(lspec512, dspec64, lin512);
2995             testVectorCastLongToDoubleFail(lspec512, dspec128, lin512);
2996             testVectorCastLongToDoubleFail(lspec512, dspec256, lin512);
2997         }
2998     }
2999 
3000     @Test(dataProvider = "floatUnaryOpProvider")
3001     static void testCastFromFloat(IntFunction<float[]> fa) {
3002         float[] fin64 = fa.apply(fspec64.length());
3003         float[] fin128 = fa.apply(fspec128.length());
3004         float[] fin256 = fa.apply(fspec256.length());
3005         float[] fin512 = fa.apply(fspec512.length());
3006 
3007         byte[] bout64 = new byte[bspec64.length()];
3008         byte[] bout128 = new byte[bspec128.length()];
3009 
3010         short[] sout64 = new short[sspec64.length()];
3011         short[] sout128 = new short[sspec128.length()];
3012         short[] sout256 = new short[sspec256.length()];
3013 
3014         int[] iout64 = new int[ispec64.length()];
3015         int[] iout128 = new int[ispec128.length()];
3016         int[] iout256 = new int[ispec256.length()];
3017         int[] iout512 = new int[ispec512.length()];
3018 
3019         long[] lout128 = new long[lspec128.length()];
3020         long[] lout256 = new long[lspec256.length()];
3021         long[] lout512 = new long[lspec512.length()];
3022 
3023         float[] fout64 = new float[fspec64.length()];
3024         float[] fout128 = new float[fspec128.length()];
3025         float[] fout256 = new float[fspec256.length()];
3026         float[] fout512 = new float[fspec512.length()];
3027 
3028         double[] dout128 = new double[dspec128.length()];
3029         double[] dout256 = new double[dspec256.length()];
3030         double[] dout512 = new double[dspec512.length()];
3031 
3032         for (int i = 0; i < NUM_ITER; i++) {
3033             testVectorCastFloatToByte(fspec256, bspec64, fin256, bout64);
3034             testVectorCastFloatToByte(fspec512, bspec128, fin512, bout128);
3035 
3036             testVectorCastFloatToShort(fspec128, sspec64, fin128, sout64);
3037             testVectorCastFloatToShort(fspec256, sspec128, fin256, sout128);
3038             testVectorCastFloatToShort(fspec512, sspec256, fin512, sout256);
3039 
3040             testVectorCastFloatToInt(fspec64, ispec64, fin64, iout64);
3041             testVectorCastFloatToInt(fspec128, ispec128, fin128, iout128);
3042             testVectorCastFloatToInt(fspec256, ispec256, fin256, iout256);
3043             testVectorCastFloatToInt(fspec512, ispec512, fin512, iout512);
3044 
3045             testVectorCastFloatToLong(fspec64, lspec128, fin64, lout128);
3046             testVectorCastFloatToLong(fspec128, lspec256, fin128, lout256);
3047             testVectorCastFloatToLong(fspec256, lspec512, fin256, lout512);
3048 
3049             testVectorCastFloatToFloat(fspec64, fspec64, fin64, fout64);
3050             testVectorCastFloatToFloat(fspec128, fspec128, fin128, fout128);
3051             testVectorCastFloatToFloat(fspec256, fspec256, fin256, fout256);
3052             testVectorCastFloatToFloat(fspec512, fspec512, fin512, fout512);
3053 
3054             testVectorCastFloatToDouble(fspec64, dspec128, fin64, dout128);
3055             testVectorCastFloatToDouble(fspec128, dspec256, fin128, dout256);
3056             testVectorCastFloatToDouble(fspec256, dspec512, fin256, dout512);
3057         }
3058     }
3059 
3060     //@Test
3061     static void testCastFromFloatFail() {
3062         float[] fin64 = new float[fspec64.length()];
3063         float[] fin128 = new float[fspec128.length()];
3064         float[] fin256 = new float[fspec256.length()];
3065         float[] fin512 = new float[fspec512.length()];
3066 
3067         for (int i = 0; i < INVOC_COUNT; i++) {
3068             testVectorCastFloatToByteFail(fspec64, bspec64, fin64);
3069             testVectorCastFloatToByteFail(fspec64, bspec128, fin64);
3070             testVectorCastFloatToByteFail(fspec64, bspec256, fin64);
3071             testVectorCastFloatToByteFail(fspec64, bspec512, fin64);
3072 
3073             testVectorCastFloatToByteFail(fspec128, bspec64, fin128);
3074             testVectorCastFloatToByteFail(fspec128, bspec128, fin128);
3075             testVectorCastFloatToByteFail(fspec128, bspec256, fin128);
3076             testVectorCastFloatToByteFail(fspec128, bspec512, fin128);
3077 
3078             testVectorCastFloatToByteFail(fspec256, bspec128, fin256);
3079             testVectorCastFloatToByteFail(fspec256, bspec256, fin256);
3080             testVectorCastFloatToByteFail(fspec256, bspec512, fin256);
3081 
3082             testVectorCastFloatToByteFail(fspec512, bspec64, fin512);
3083             testVectorCastFloatToByteFail(fspec512, bspec256, fin512);
3084             testVectorCastFloatToByteFail(fspec512, bspec512, fin512);
3085 
3086             testVectorCastFloatToShortFail(fspec64, sspec64, fin64);
3087             testVectorCastFloatToShortFail(fspec64, sspec128, fin64);
3088             testVectorCastFloatToShortFail(fspec64, sspec256, fin64);
3089             testVectorCastFloatToShortFail(fspec64, sspec512, fin64);
3090 
3091             testVectorCastFloatToShortFail(fspec128, sspec128, fin128);
3092             testVectorCastFloatToShortFail(fspec128, sspec256, fin128);
3093             testVectorCastFloatToShortFail(fspec128, sspec512, fin128);
3094 
3095             testVectorCastFloatToShortFail(fspec256, sspec64, fin256);
3096             testVectorCastFloatToShortFail(fspec256, sspec256, fin256);
3097             testVectorCastFloatToShortFail(fspec256, sspec512, fin256);
3098 
3099             testVectorCastFloatToShortFail(fspec512, sspec64, fin512);
3100             testVectorCastFloatToShortFail(fspec512, sspec128, fin512);
3101             testVectorCastFloatToShortFail(fspec512, sspec512, fin512);
3102 
3103             testVectorCastFloatToIntFail(fspec64, ispec128, fin64);
3104             testVectorCastFloatToIntFail(fspec64, ispec256, fin64);
3105             testVectorCastFloatToIntFail(fspec64, ispec512, fin64);
3106 
3107             testVectorCastFloatToIntFail(fspec128, ispec64, fin128);
3108             testVectorCastFloatToIntFail(fspec128, ispec256, fin128);
3109             testVectorCastFloatToIntFail(fspec128, ispec512, fin128);
3110 
3111             testVectorCastFloatToIntFail(fspec256, ispec64, fin256);
3112             testVectorCastFloatToIntFail(fspec256, ispec128, fin256);
3113             testVectorCastFloatToIntFail(fspec256, ispec512, fin256);
3114 
3115             testVectorCastFloatToIntFail(fspec512, ispec64, fin512);
3116             testVectorCastFloatToIntFail(fspec512, ispec128, fin512);
3117             testVectorCastFloatToIntFail(fspec512, ispec256, fin512);
3118 
3119             testVectorCastFloatToLongFail(fspec64, lspec64, fin64);
3120             testVectorCastFloatToLongFail(fspec64, lspec256, fin64);
3121             testVectorCastFloatToLongFail(fspec64, lspec512, fin64);
3122 
3123             testVectorCastFloatToLongFail(fspec128, lspec64, fin128);
3124             testVectorCastFloatToLongFail(fspec128, lspec128, fin128);
3125             testVectorCastFloatToLongFail(fspec128, lspec512, fin128);
3126 
3127             testVectorCastFloatToLongFail(fspec256, lspec64, fin256);
3128             testVectorCastFloatToLongFail(fspec256, lspec128, fin256);
3129             testVectorCastFloatToLongFail(fspec256, lspec256, fin256);
3130 
3131             testVectorCastFloatToLongFail(fspec512, lspec64, fin512);
3132             testVectorCastFloatToLongFail(fspec512, lspec128, fin512);
3133             testVectorCastFloatToLongFail(fspec512, lspec256, fin512);
3134             testVectorCastFloatToLongFail(fspec512, lspec512, fin512);
3135 
3136             testVectorCastFloatToFloatFail(fspec64, fspec128, fin64);
3137             testVectorCastFloatToFloatFail(fspec64, fspec256, fin64);
3138             testVectorCastFloatToFloatFail(fspec64, fspec512, fin64);
3139 
3140             testVectorCastFloatToFloatFail(fspec128, fspec64, fin128);
3141             testVectorCastFloatToFloatFail(fspec128, fspec256, fin128);
3142             testVectorCastFloatToFloatFail(fspec128, fspec512, fin128);
3143 
3144             testVectorCastFloatToFloatFail(fspec256, fspec64, fin256);
3145             testVectorCastFloatToFloatFail(fspec256, fspec128, fin256);
3146             testVectorCastFloatToFloatFail(fspec256, fspec512, fin256);
3147 
3148             testVectorCastFloatToFloatFail(fspec512, fspec64, fin512);
3149             testVectorCastFloatToFloatFail(fspec512, fspec128, fin512);
3150             testVectorCastFloatToFloatFail(fspec512, fspec256, fin512);
3151 
3152             testVectorCastFloatToDoubleFail(fspec64, dspec64, fin64);
3153             testVectorCastFloatToDoubleFail(fspec64, dspec256, fin64);
3154             testVectorCastFloatToDoubleFail(fspec64, dspec512, fin64);
3155 
3156             testVectorCastFloatToDoubleFail(fspec128, dspec64, fin128);
3157             testVectorCastFloatToDoubleFail(fspec128, dspec128, fin128);
3158             testVectorCastFloatToDoubleFail(fspec128, dspec512, fin128);
3159 
3160             testVectorCastFloatToDoubleFail(fspec256, dspec64, fin256);
3161             testVectorCastFloatToDoubleFail(fspec256, dspec128, fin256);
3162             testVectorCastFloatToDoubleFail(fspec256, dspec256, fin256);
3163 
3164             testVectorCastFloatToDoubleFail(fspec512, dspec64, fin512);
3165             testVectorCastFloatToDoubleFail(fspec512, dspec128, fin512);
3166             testVectorCastFloatToDoubleFail(fspec512, dspec256, fin512);
3167             testVectorCastFloatToDoubleFail(fspec512, dspec512, fin512);
3168         }
3169     }
3170 
3171     @Test(dataProvider = "doubleUnaryOpProvider")
3172     static void testCastFromDouble(IntFunction<double[]> fa) {
3173         double[] din64 = fa.apply(dspec64.length());
3174         double[] din128 = fa.apply(dspec128.length());
3175         double[] din256 = fa.apply(dspec256.length());
3176         double[] din512 = fa.apply(dspec512.length());
3177 
3178         byte[] bout64 = new byte[bspec64.length()];
3179 
3180         short[] sout64 = new short[sspec64.length()];
3181         short[] sout128 = new short[sspec128.length()];
3182 
3183         int[] iout64 = new int[ispec64.length()];
3184         int[] iout128 = new int[ispec128.length()];
3185         int[] iout256 = new int[ispec256.length()];
3186 
3187         long[] lout64 = new long[lspec64.length()];
3188         long[] lout128 = new long[lspec128.length()];
3189         long[] lout256 = new long[lspec256.length()];
3190         long[] lout512 = new long[lspec512.length()];
3191 
3192         float[] fout64 = new float[fspec64.length()];
3193         float[] fout128 = new float[fspec128.length()];
3194         float[] fout256 = new float[fspec256.length()];
3195 
3196         double[] dout64 = new double[dspec64.length()];
3197         double[] dout128 = new double[dspec128.length()];
3198         double[] dout256 = new double[dspec256.length()];
3199         double[] dout512 = new double[dspec512.length()];
3200 
3201         for (int i = 0; i < NUM_ITER; i++) {
3202             testVectorCastDoubleToByte(dspec512, bspec64, din512, bout64);
3203 
3204             testVectorCastDoubleToShort(dspec256, sspec64, din256, sout64);
3205             testVectorCastDoubleToShort(dspec512, sspec128, din512, sout128);
3206 
3207             testVectorCastDoubleToInt(dspec128, ispec64, din128, iout64);
3208             testVectorCastDoubleToInt(dspec256, ispec128, din256, iout128);
3209             testVectorCastDoubleToInt(dspec512, ispec256, din512, iout256);
3210 
3211             testVectorCastDoubleToLong(dspec64, lspec64, din64, lout64);
3212             testVectorCastDoubleToLong(dspec128, lspec128, din128, lout128);
3213             testVectorCastDoubleToLong(dspec256, lspec256, din256, lout256);
3214             testVectorCastDoubleToLong(dspec512, lspec512, din512, lout512);
3215 
3216             testVectorCastDoubleToFloat(dspec128, fspec64, din128, fout64);
3217             testVectorCastDoubleToFloat(dspec256, fspec128, din256, fout128);
3218             testVectorCastDoubleToFloat(dspec512, fspec256, din512, fout256);
3219 
3220             testVectorCastDoubleToDouble(dspec64, dspec64, din64, dout64);
3221             testVectorCastDoubleToDouble(dspec128, dspec128, din128, dout128);
3222             testVectorCastDoubleToDouble(dspec256, dspec256, din256, dout256);
3223             testVectorCastDoubleToDouble(dspec512, dspec512, din512, dout512);
3224         }
3225     }
3226 
3227     //@Test
3228     static void testCastFromDoubleFail() {
3229         double[] din64 = new double[dspec64.length()];
3230         double[] din128 = new double[dspec128.length()];
3231         double[] din256 = new double[dspec256.length()];
3232         double[] din512 = new double[dspec512.length()];
3233 
3234         for (int i = 0; i < INVOC_COUNT; i++) {
3235             testVectorCastDoubleToByteFail(dspec64, bspec64, din64);
3236             testVectorCastDoubleToByteFail(dspec64, bspec128, din64);
3237             testVectorCastDoubleToByteFail(dspec64, bspec256, din64);
3238             testVectorCastDoubleToByteFail(dspec64, bspec512, din64);
3239 
3240             testVectorCastDoubleToByteFail(dspec128, bspec64, din128);
3241             testVectorCastDoubleToByteFail(dspec128, bspec128, din128);
3242             testVectorCastDoubleToByteFail(dspec128, bspec256, din128);
3243             testVectorCastDoubleToByteFail(dspec128, bspec512, din128);
3244 
3245             testVectorCastDoubleToByteFail(dspec256, bspec64, din256);
3246             testVectorCastDoubleToByteFail(dspec256, bspec128, din256);
3247             testVectorCastDoubleToByteFail(dspec256, bspec256, din256);
3248             testVectorCastDoubleToByteFail(dspec256, bspec512, din256);
3249 
3250             testVectorCastDoubleToByteFail(dspec512, bspec128, din512);
3251             testVectorCastDoubleToByteFail(dspec512, bspec256, din512);
3252             testVectorCastDoubleToByteFail(dspec512, bspec512, din512);
3253 
3254             testVectorCastDoubleToShortFail(dspec64, sspec64, din64);
3255             testVectorCastDoubleToShortFail(dspec64, sspec128, din64);
3256             testVectorCastDoubleToShortFail(dspec64, sspec256, din64);
3257             testVectorCastDoubleToShortFail(dspec64, sspec512, din64);
3258 
3259             testVectorCastDoubleToShortFail(dspec128, sspec64, din128);
3260             testVectorCastDoubleToShortFail(dspec128, sspec128, din128);
3261             testVectorCastDoubleToShortFail(dspec128, sspec256, din128);
3262             testVectorCastDoubleToShortFail(dspec128, sspec512, din128);
3263 
3264             testVectorCastDoubleToShortFail(dspec256, sspec128, din256);
3265             testVectorCastDoubleToShortFail(dspec256, sspec256, din256);
3266             testVectorCastDoubleToShortFail(dspec256, sspec512, din256);
3267 
3268             testVectorCastDoubleToShortFail(dspec512, sspec64, din512);
3269             testVectorCastDoubleToShortFail(dspec512, sspec256, din512);
3270             testVectorCastDoubleToShortFail(dspec512, sspec512, din512);
3271 
3272             testVectorCastDoubleToIntFail(dspec64, ispec64, din64);
3273             testVectorCastDoubleToIntFail(dspec64, ispec128, din64);
3274             testVectorCastDoubleToIntFail(dspec64, ispec256, din64);
3275             testVectorCastDoubleToIntFail(dspec64, ispec512, din64);
3276 
3277             testVectorCastDoubleToIntFail(dspec128, ispec128, din128);
3278             testVectorCastDoubleToIntFail(dspec128, ispec256, din128);
3279             testVectorCastDoubleToIntFail(dspec128, ispec512, din128);
3280 
3281             testVectorCastDoubleToIntFail(dspec256, ispec64, din256);
3282             testVectorCastDoubleToIntFail(dspec256, ispec256, din256);
3283             testVectorCastDoubleToIntFail(dspec256, ispec512, din256);
3284 
3285             testVectorCastDoubleToIntFail(dspec512, ispec64, din512);
3286             testVectorCastDoubleToIntFail(dspec512, ispec128, din512);
3287             testVectorCastDoubleToIntFail(dspec512, ispec512, din512);
3288 
3289             testVectorCastDoubleToLongFail(dspec64, lspec128, din64);
3290             testVectorCastDoubleToLongFail(dspec64, lspec256, din64);
3291             testVectorCastDoubleToLongFail(dspec64, lspec512, din64);
3292 
3293             testVectorCastDoubleToLongFail(dspec128, lspec64, din128);
3294             testVectorCastDoubleToLongFail(dspec128, lspec256, din128);
3295             testVectorCastDoubleToLongFail(dspec128, lspec512, din128);
3296 
3297             testVectorCastDoubleToLongFail(dspec256, lspec64, din256);
3298             testVectorCastDoubleToLongFail(dspec256, lspec128, din256);
3299             testVectorCastDoubleToLongFail(dspec256, lspec512, din256);
3300 
3301             testVectorCastDoubleToLongFail(dspec512, lspec64, din512);
3302             testVectorCastDoubleToLongFail(dspec512, lspec128, din512);
3303             testVectorCastDoubleToLongFail(dspec512, lspec256, din512);
3304 
3305             testVectorCastDoubleToFloatFail(dspec64, fspec64, din64);
3306             testVectorCastDoubleToFloatFail(dspec64, fspec128, din64);
3307             testVectorCastDoubleToFloatFail(dspec64, fspec256, din64);
3308             testVectorCastDoubleToFloatFail(dspec64, fspec512, din64);
3309 
3310             testVectorCastDoubleToFloatFail(dspec128, fspec128, din128);
3311             testVectorCastDoubleToFloatFail(dspec128, fspec256, din128);
3312             testVectorCastDoubleToFloatFail(dspec128, fspec512, din128);
3313 
3314             testVectorCastDoubleToFloatFail(dspec256, fspec64, din256);
3315             testVectorCastDoubleToFloatFail(dspec256, fspec256, din256);
3316             testVectorCastDoubleToFloatFail(dspec256, fspec512, din256);
3317 
3318             testVectorCastDoubleToFloatFail(dspec512, fspec64, din512);
3319             testVectorCastDoubleToFloatFail(dspec512, fspec128, din512);
3320             testVectorCastDoubleToFloatFail(dspec512, fspec512, din512);
3321 
3322             testVectorCastDoubleToDoubleFail(dspec64, dspec128, din64);
3323             testVectorCastDoubleToDoubleFail(dspec64, dspec256, din64);
3324             testVectorCastDoubleToDoubleFail(dspec64, dspec512, din64);
3325 
3326             testVectorCastDoubleToDoubleFail(dspec128, dspec64, din128);
3327             testVectorCastDoubleToDoubleFail(dspec128, dspec256, din128);
3328             testVectorCastDoubleToDoubleFail(dspec128, dspec512, din128);
3329 
3330             testVectorCastDoubleToDoubleFail(dspec256, dspec64, din256);
3331             testVectorCastDoubleToDoubleFail(dspec256, dspec128, din256);
3332             testVectorCastDoubleToDoubleFail(dspec256, dspec512, din256);
3333 
3334             testVectorCastDoubleToDoubleFail(dspec512, dspec64, din512);
3335             testVectorCastDoubleToDoubleFail(dspec512, dspec128, din512);
3336             testVectorCastDoubleToDoubleFail(dspec512, dspec256, din512);
3337         }
3338     }
3339 
3340     @ForceInline
3341     static
3342     void testVectorUCastByteToShort(VectorSpecies<Byte> a, VectorSpecies<Short> b, byte[] input, short[] output) {
3343         assert(input.length == a.length());
3344         assert(output.length == b.length());
3345 
3346         ByteVector av = ByteVector.fromArray(a, input, 0);
3347         ShortVector bv = (ShortVector) av.convertShape(VectorOperators.ZERO_EXTEND_B2S, b, 0);
3348         bv.intoArray(output, 0);
3349 
3350         for (int i = 0; i < Math.min(input.length, output.length); i++) {
3351             Assert.assertEquals(output[i], Byte.toUnsignedLong(input[i]));
3352         }
3353         for(int i = input.length; i < output.length; i++) {
3354             Assert.assertEquals(output[i], (short)0);
3355         }
3356     }
3357 
3358     @ForceInline
3359     static
3360     void testVectorUCastByteToInt(VectorSpecies<Byte> a, VectorSpecies<Integer> b, byte[] input, int[] output) {
3361         assert(input.length == a.length());
3362         assert(output.length == b.length());
3363 
3364         ByteVector av = ByteVector.fromArray(a, input, 0);
3365         IntVector bv = (IntVector) av.convertShape(VectorOperators.ZERO_EXTEND_B2I, b, 0);
3366         bv.intoArray(output, 0);
3367 
3368         for (int i = 0; i < Math.min(input.length, output.length); i++) {
3369             Assert.assertEquals(output[i], Byte.toUnsignedLong(input[i]));
3370         }
3371         for(int i = input.length; i < output.length; i++) {
3372             Assert.assertEquals(output[i], (int)0);
3373         }
3374     }
3375 
3376     @ForceInline
3377     static
3378     void testVectorUCastByteToLong(VectorSpecies<Byte> a, VectorSpecies<Long> b, byte[] input, long[] output) {
3379         assert(input.length == a.length());
3380         assert(output.length == b.length());
3381 
3382         ByteVector av = ByteVector.fromArray(a, input, 0);
3383         LongVector bv = (LongVector) av.convertShape(VectorOperators.ZERO_EXTEND_B2L, b, 0);
3384         bv.intoArray(output, 0);
3385 
3386         for (int i = 0; i < Math.min(input.length, output.length); i++) {
3387             Assert.assertEquals(output[i], Byte.toUnsignedLong(input[i]));
3388         }
3389         for(int i = input.length; i < output.length; i++) {
3390             Assert.assertEquals(output[i], (long)0);
3391         }
3392     }
3393 
3394     @ForceInline
3395     static
3396     void testVectorUCastShortToInt(VectorSpecies<Short> a, VectorSpecies<Integer> b, short[] input, int[] output) {
3397         assert(input.length == a.length());
3398         assert(output.length == b.length());
3399 
3400         ShortVector av = ShortVector.fromArray(a, input, 0);
3401         IntVector bv = (IntVector) av.convertShape(VectorOperators.ZERO_EXTEND_S2I, b, 0);
3402         bv.intoArray(output, 0);
3403 
3404         for (int i = 0; i < Math.min(input.length, output.length); i++) {
3405             Assert.assertEquals(output[i], Short.toUnsignedLong(input[i]));
3406         }
3407         for(int i = input.length; i < output.length; i++) {
3408             Assert.assertEquals(output[i], (int)0);
3409         }
3410     }
3411 
3412     @ForceInline
3413     static
3414     void testVectorUCastShortToLong(VectorSpecies<Short> a, VectorSpecies<Long> b, short[] input, long[] output) {
3415         assert(input.length == a.length());
3416         assert(output.length == b.length());
3417 
3418         ShortVector av = ShortVector.fromArray(a, input, 0);
3419         LongVector bv = (LongVector) av.convertShape(VectorOperators.ZERO_EXTEND_S2L, b, 0);
3420         bv.intoArray(output, 0);
3421 
3422         for (int i = 0; i < Math.min(input.length, output.length); i++) {
3423             Assert.assertEquals(output[i], Short.toUnsignedLong(input[i]));
3424         }
3425         for(int i = input.length; i < output.length; i++) {
3426             Assert.assertEquals(output[i], (long)0);
3427         }
3428     }
3429 
3430     @ForceInline
3431     static
3432     void testVectorUCastIntToLong(VectorSpecies<Integer> a, VectorSpecies<Long> b, int[] input, long[] output) {
3433         assert(input.length == a.length());
3434         assert(output.length == b.length());
3435 
3436         IntVector av = IntVector.fromArray(a, input, 0);
3437         LongVector bv = (LongVector) av.convertShape(VectorOperators.ZERO_EXTEND_I2L, b, 0);
3438         bv.intoArray(output, 0);
3439 
3440         for (int i = 0; i < Math.min(input.length, output.length); i++) {
3441             Assert.assertEquals(output[i], Integer.toUnsignedLong(input[i]));
3442         }
3443         for(int i = input.length; i < output.length; i++) {
3444             Assert.assertEquals(output[i], (long)0);
3445         }
3446     }
3447 
3448     @Test(dataProvider = "byteUnaryOpProvider")
3449     static void testUCastFromByte(IntFunction<byte[]> fa) {
3450         byte[] bin64 = fa.apply(bspec64.length());
3451         byte[] bin128 = fa.apply(bspec128.length());
3452         byte[] bin256 = fa.apply(bspec256.length());
3453         byte[] bin512 = fa.apply(bspec512.length());
3454 
3455         short[] sout64 = new short[sspec64.length()];
3456         short[] sout128 = new short[sspec128.length()];
3457         short[] sout256 = new short[sspec256.length()];
3458         short[] sout512 = new short[sspec512.length()];
3459 
3460         int[] iout64 = new int[ispec64.length()];
3461         int[] iout128 = new int[ispec128.length()];
3462         int[] iout256 = new int[ispec256.length()];
3463         int[] iout512 = new int[ispec512.length()];
3464 
3465         long[] lout64 = new long[lspec64.length()];
3466         long[] lout128 = new long[lspec128.length()];
3467         long[] lout256 = new long[lspec256.length()];
3468         long[] lout512 = new long[lspec512.length()];
3469 
3470         for (int i = 0; i < NUM_ITER; i++) {
3471             // B2S exact fit
3472             testVectorUCastByteToShort(bspec64, sspec128, bin64, sout128);
3473             testVectorUCastByteToShort(bspec128, sspec256, bin128, sout256);
3474             testVectorUCastByteToShort(bspec256, sspec512, bin256, sout512);
3475 
3476             // B2S expansion
3477             testVectorUCastByteToShort(bspec64, sspec64, bin64, sout64);
3478             testVectorUCastByteToShort(bspec128, sspec128, bin128, sout128);
3479             testVectorUCastByteToShort(bspec256, sspec256, bin256, sout256);
3480             testVectorUCastByteToShort(bspec512, sspec512, bin512, sout512);
3481 
3482             testVectorUCastByteToShort(bspec128, sspec64, bin128, sout64);
3483             testVectorUCastByteToShort(bspec256, sspec128, bin256, sout128);
3484             testVectorUCastByteToShort(bspec512, sspec256, bin512, sout256);
3485 
3486             testVectorUCastByteToShort(bspec256, sspec64, bin256, sout64);
3487             testVectorUCastByteToShort(bspec512, sspec128, bin512, sout128);
3488 
3489             testVectorUCastByteToShort(bspec512, sspec64, bin512, sout64);
3490 
3491             // B2S contraction
3492             testVectorUCastByteToShort(bspec64, sspec256, bin64, sout256);
3493             testVectorUCastByteToShort(bspec128, sspec512, bin128, sout512);
3494 
3495             testVectorUCastByteToShort(bspec64, sspec512, bin64, sout512);
3496 
3497             // B2I exact fit
3498             testVectorUCastByteToInt(bspec64, ispec256, bin64, iout256);
3499             testVectorUCastByteToInt(bspec128, ispec512, bin128, iout512);
3500 
3501             // B2I expansion
3502             testVectorUCastByteToInt(bspec64, ispec128, bin64, iout128);
3503             testVectorUCastByteToInt(bspec128, ispec256, bin128, iout256);
3504             testVectorUCastByteToInt(bspec256, ispec512, bin256, iout512);
3505 
3506             testVectorUCastByteToInt(bspec64, ispec64, bin64, iout64);
3507             testVectorUCastByteToInt(bspec128, ispec128, bin128, iout128);
3508             testVectorUCastByteToInt(bspec256, ispec256, bin256, iout256);
3509             testVectorUCastByteToInt(bspec512, ispec512, bin512, iout512);
3510 
3511             testVectorUCastByteToInt(bspec128, ispec64, bin128, iout64);
3512             testVectorUCastByteToInt(bspec256, ispec128, bin256, iout128);
3513             testVectorUCastByteToInt(bspec512, ispec256, bin512, iout256);
3514 
3515             testVectorUCastByteToInt(bspec256, ispec64, bin256, iout64);
3516             testVectorUCastByteToInt(bspec512, ispec128, bin512, iout128);
3517 
3518             testVectorUCastByteToInt(bspec512, ispec64, bin512, iout64);
3519 
3520             // B2I contraction
3521             testVectorUCastByteToInt(bspec64, ispec512, bin64, iout512);
3522 
3523             // B2L exact fit
3524             testVectorUCastByteToLong(bspec64, lspec512, bin64, lout512);
3525 
3526             // B2L expansion
3527             testVectorUCastByteToLong(bspec64, lspec256, bin64, lout256);
3528             testVectorUCastByteToLong(bspec128, lspec512, bin128, lout512);
3529 
3530             testVectorUCastByteToLong(bspec64, lspec128, bin64, lout128);
3531             testVectorUCastByteToLong(bspec128, lspec256, bin128, lout256);
3532             testVectorUCastByteToLong(bspec256, lspec512, bin256, lout512);
3533 
3534             testVectorUCastByteToLong(bspec64, lspec64, bin64, lout64);
3535             testVectorUCastByteToLong(bspec128, lspec128, bin128, lout128);
3536             testVectorUCastByteToLong(bspec256, lspec256, bin256, lout256);
3537             testVectorUCastByteToLong(bspec512, lspec512, bin512, lout512);
3538 
3539             testVectorUCastByteToLong(bspec128, lspec64, bin128, lout64);
3540             testVectorUCastByteToLong(bspec256, lspec128, bin256, lout128);
3541             testVectorUCastByteToLong(bspec512, lspec256, bin512, lout256);
3542 
3543             testVectorUCastByteToLong(bspec256, lspec64, bin256, lout64);
3544             testVectorUCastByteToLong(bspec512, lspec128, bin512, lout128);
3545 
3546             testVectorUCastByteToLong(bspec512, lspec64, bin512, lout64);
3547         }
3548     }
3549 
3550     @Test(dataProvider = "shortUnaryOpProvider")
3551     static void testUCastFromShort(IntFunction<short[]> fa) {
3552         short[] sin64 = fa.apply(sspec64.length());
3553         short[] sin128 = fa.apply(sspec128.length());
3554         short[] sin256 = fa.apply(sspec256.length());
3555         short[] sin512 = fa.apply(sspec512.length());
3556 
3557         int[] iout64 = new int[ispec64.length()];
3558         int[] iout128 = new int[ispec128.length()];
3559         int[] iout256 = new int[ispec256.length()];
3560         int[] iout512 = new int[ispec512.length()];
3561 
3562         long[] lout64 = new long[lspec64.length()];
3563         long[] lout128 = new long[lspec128.length()];
3564         long[] lout256 = new long[lspec256.length()];
3565         long[] lout512 = new long[lspec512.length()];
3566 
3567         for (int i = 0; i < NUM_ITER; i++) {
3568             // S2I exact fit
3569             testVectorUCastShortToInt(sspec64, ispec128, sin64, iout128);
3570             testVectorUCastShortToInt(sspec128, ispec256, sin128, iout256);
3571             testVectorUCastShortToInt(sspec256, ispec512, sin256, iout512);
3572 
3573             // S2I expansion
3574             testVectorUCastShortToInt(sspec64, ispec64, sin64, iout64);
3575             testVectorUCastShortToInt(sspec128, ispec128, sin128, iout128);
3576             testVectorUCastShortToInt(sspec256, ispec256, sin256, iout256);
3577             testVectorUCastShortToInt(sspec512, ispec512, sin512, iout512);
3578 
3579             testVectorUCastShortToInt(sspec128, ispec64, sin128, iout64);
3580             testVectorUCastShortToInt(sspec256, ispec128, sin256, iout128);
3581             testVectorUCastShortToInt(sspec512, ispec256, sin512, iout256);
3582 
3583             testVectorUCastShortToInt(sspec256, ispec64, sin256, iout64);
3584             testVectorUCastShortToInt(sspec512, ispec128, sin512, iout128);
3585 
3586             testVectorUCastShortToInt(sspec512, ispec64, sin512, iout64);
3587 
3588             // S2I contraction
3589             testVectorUCastShortToInt(sspec64, ispec256, sin64, iout256);
3590             testVectorUCastShortToInt(sspec128, ispec512, sin128, iout512);
3591 
3592             testVectorUCastShortToInt(sspec64, ispec512, sin64, iout512);
3593 
3594             // S2L exact fit
3595             testVectorUCastShortToLong(sspec64, lspec256, sin64, lout256);
3596             testVectorUCastShortToLong(sspec128, lspec512, sin128, lout512);
3597 
3598             // S2L expansion
3599             testVectorUCastShortToLong(sspec64, lspec128, sin64, lout128);
3600             testVectorUCastShortToLong(sspec128, lspec256, sin128, lout256);
3601             testVectorUCastShortToLong(sspec256, lspec512, sin256, lout512);
3602 
3603             testVectorUCastShortToLong(sspec64, lspec64, sin64, lout64);
3604             testVectorUCastShortToLong(sspec128, lspec128, sin128, lout128);
3605             testVectorUCastShortToLong(sspec256, lspec256, sin256, lout256);
3606             testVectorUCastShortToLong(sspec512, lspec512, sin512, lout512);
3607 
3608             testVectorUCastShortToLong(sspec128, lspec64, sin128, lout64);
3609             testVectorUCastShortToLong(sspec256, lspec128, sin256, lout128);
3610             testVectorUCastShortToLong(sspec512, lspec256, sin512, lout256);
3611 
3612             testVectorUCastShortToLong(sspec256, lspec64, sin256, lout64);
3613             testVectorUCastShortToLong(sspec512, lspec128, sin512, lout128);
3614 
3615             testVectorUCastShortToLong(sspec512, lspec64, sin512, lout64);
3616 
3617             // S2L contraction
3618             testVectorUCastShortToLong(sspec64, lspec512, sin64, lout512);
3619         }
3620     }
3621 
3622     @Test(dataProvider = "intUnaryOpProvider")
3623     static void testUCastFromInt(IntFunction<int[]> fa) {
3624         int[] iin64 = fa.apply(ispec64.length());
3625         int[] iin128 = fa.apply(ispec128.length());
3626         int[] iin256 = fa.apply(ispec256.length());
3627         int[] iin512 = fa.apply(ispec512.length());
3628 
3629         long[] lout64 = new long[lspec64.length()];
3630         long[] lout128 = new long[lspec128.length()];
3631         long[] lout256 = new long[lspec256.length()];
3632         long[] lout512 = new long[lspec512.length()];
3633 
3634         // I2L exact fit
3635         testVectorUCastIntToLong(ispec64, lspec128, iin64, lout128);
3636         testVectorUCastIntToLong(ispec128, lspec256, iin128, lout256);
3637         testVectorUCastIntToLong(ispec256, lspec512, iin256, lout512);
3638 
3639         // I2L expansion
3640         testVectorUCastIntToLong(ispec64, lspec64, iin64, lout64);
3641         testVectorUCastIntToLong(ispec128, lspec128, iin128, lout128);
3642         testVectorUCastIntToLong(ispec256, lspec256, iin256, lout256);
3643         testVectorUCastIntToLong(ispec512, lspec512, iin512, lout512);
3644 
3645         testVectorUCastIntToLong(ispec128, lspec64, iin128, lout64);
3646         testVectorUCastIntToLong(ispec256, lspec128, iin256, lout128);
3647         testVectorUCastIntToLong(ispec512, lspec256, iin512, lout256);
3648 
3649         testVectorUCastIntToLong(ispec256, lspec64, iin256, lout64);
3650         testVectorUCastIntToLong(ispec512, lspec128, iin512, lout128);
3651 
3652         testVectorUCastIntToLong(ispec512, lspec64, iin512, lout64);
3653 
3654         // I2L contraction
3655         testVectorUCastIntToLong(ispec64, lspec256, iin64, lout256);
3656         testVectorUCastIntToLong(ispec128, lspec512, iin128, lout512);
3657 
3658         testVectorUCastIntToLong(ispec64, lspec512, iin64, lout512);
3659     }
3660 
3661     static
3662     void testVectorCastByteMaxToByte(VectorSpecies<Byte> a, VectorSpecies<Byte> b,
3663                                           byte[] input, byte[] output) {
3664         if (S_Max_BIT.vectorBitSize() == b.length() * Byte.SIZE) {
3665             testVectorCastByteToByte(a, b, input, output);
3666         } else {
3667             testVectorCastByteToByteFail(a, b, input);
3668         }
3669     }
3670 
3671     static
3672     void testVectorCastByteMaxToShort(VectorSpecies<Byte> a, VectorSpecies<Short> b,
3673                                            byte[] input, short[] output) {
3674         if (S_Max_BIT.vectorBitSize() == b.length() * Byte.SIZE) {
3675             testVectorCastByteToShort(a, b, input, output);
3676         } else {
3677             testVectorCastByteToShortFail(a, b, input);
3678         }
3679     }
3680 
3681     static
3682     void testVectorCastByteMaxToInt(VectorSpecies<Byte> a, VectorSpecies<Integer> b,
3683                                          byte[] input, int[] output) {
3684         if (S_Max_BIT.vectorBitSize() == b.length() * Byte.SIZE) {
3685             testVectorCastByteToInt(a, b, input, output);
3686         } else {
3687             testVectorCastByteToIntFail(a, b, input);
3688         }
3689     }
3690 
3691     static
3692     void testVectorCastByteMaxToLong(VectorSpecies<Byte> a, VectorSpecies<Long> b,
3693                                           byte[] input, long[] output) {
3694         if (S_Max_BIT.vectorBitSize() == b.length() * Byte.SIZE) {
3695             testVectorCastByteToLong(a, b, input, output);
3696         } else {
3697             testVectorCastByteToLongFail(a, b, input);
3698         }
3699     }
3700 
3701     static
3702     void testVectorCastByteMaxToFloat(VectorSpecies<Byte> a, VectorSpecies<Float> b,
3703                                            byte[] input, float[] output) {
3704         if (S_Max_BIT.vectorBitSize() == b.length() * Byte.SIZE) {
3705             testVectorCastByteToFloat(a, b, input, output);
3706         } else {
3707             testVectorCastByteToFloatFail(a, b, input);
3708         }
3709     }
3710 
3711     static
3712     void testVectorCastByteMaxToDouble(VectorSpecies<Byte> a, VectorSpecies<Double> b,
3713                                             byte[] input, double[] output) {
3714         if (S_Max_BIT.vectorBitSize() == b.length() * Byte.SIZE) {
3715             testVectorCastByteToDouble(a, b, input, output);
3716         } else {
3717             testVectorCastByteToDoubleFail(a, b, input);
3718         }
3719     }
3720 
3721     static
3722     void testVectorCastShortMaxToByte(VectorSpecies<Short> a, VectorSpecies<Byte> b,
3723                                            short[] input, byte[] output) {
3724         if (S_Max_BIT.vectorBitSize() == b.length() * Short.SIZE) {
3725             testVectorCastShortToByte(a, b, input, output);
3726         } else {
3727             testVectorCastShortToByteFail(a, b, input);
3728         }
3729     }
3730 
3731     static
3732     void testVectorCastShortMaxToShort(VectorSpecies<Short> a, VectorSpecies<Short> b,
3733                                             short[] input, short[] output) {
3734         if (S_Max_BIT.vectorBitSize() == b.length() * Short.SIZE) {
3735             testVectorCastShortToShort(a, b, input, output);
3736         } else {
3737             testVectorCastShortToShortFail(a, b, input);
3738         }
3739     }
3740 
3741     static
3742     void testVectorCastShortMaxToInt(VectorSpecies<Short> a, VectorSpecies<Integer> b,
3743                                           short[] input, int[] output) {
3744         if (S_Max_BIT.vectorBitSize() == b.length() * Short.SIZE) {
3745             testVectorCastShortToInt(a, b, input, output);
3746         } else {
3747             testVectorCastShortToIntFail(a, b, input);
3748         }
3749     }
3750 
3751     static
3752     void testVectorCastShortMaxToLong(VectorSpecies<Short> a, VectorSpecies<Long> b,
3753                                            short[] input, long[] output) {
3754         if (S_Max_BIT.vectorBitSize() == b.length() * Short.SIZE) {
3755             testVectorCastShortToLong(a, b, input, output);
3756         } else {
3757             testVectorCastShortToLongFail(a, b, input);
3758         }
3759     }
3760 
3761     static
3762     void testVectorCastShortMaxToFloat(VectorSpecies<Short> a, VectorSpecies<Float> b,
3763                                             short[] input, float[] output) {
3764         if (S_Max_BIT.vectorBitSize() == b.length() * Short.SIZE) {
3765             testVectorCastShortToFloat(a, b, input, output);
3766         } else {
3767             testVectorCastShortToFloatFail(a, b, input);
3768         }
3769     }
3770 
3771     static
3772     void testVectorCastShortMaxToDouble(VectorSpecies<Short> a, VectorSpecies<Double> b,
3773                                              short[] input, double[] output) {
3774         if (S_Max_BIT.vectorBitSize() == b.length() * Short.SIZE) {
3775             testVectorCastShortToDouble(a, b, input, output);
3776         } else {
3777             testVectorCastShortToDoubleFail(a, b, input);
3778         }
3779     }
3780 
3781     static
3782     void testVectorCastIntMaxToByte(VectorSpecies<Integer> a, VectorSpecies<Byte> b,
3783                                          int[] input, byte[] output) {
3784         if (S_Max_BIT.vectorBitSize() == b.length() * Integer.SIZE) {
3785             testVectorCastIntToByte(a, b, input, output);
3786         } else {
3787             testVectorCastIntToByteFail(a, b, input);
3788         }
3789     }
3790 
3791     static
3792     void testVectorCastIntMaxToShort(VectorSpecies<Integer> a, VectorSpecies<Short> b,
3793                                           int[] input, short[] output) {
3794         if (S_Max_BIT.vectorBitSize() == b.length() * Integer.SIZE) {
3795             testVectorCastIntToShort(a, b, input, output);
3796         } else {
3797             testVectorCastIntToShortFail(a, b, input);
3798         }
3799     }
3800 
3801     static
3802     void testVectorCastIntMaxToInt(VectorSpecies<Integer> a, VectorSpecies<Integer> b,
3803                                         int[] input, int[] output) {
3804         if (S_Max_BIT.vectorBitSize() == b.length() * Integer.SIZE) {
3805             testVectorCastIntToInt(a, b, input, output);
3806         } else {
3807             testVectorCastIntToIntFail(a, b, input);
3808         }
3809     }
3810 
3811     static
3812     void testVectorCastIntMaxToLong(VectorSpecies<Integer> a, VectorSpecies<Long> b,
3813                                          int[] input, long[] output) {
3814         if (S_Max_BIT.vectorBitSize() == b.length() * Integer.SIZE) {
3815             testVectorCastIntToLong(a, b, input, output);
3816         } else {
3817             testVectorCastIntToLongFail(a, b, input);
3818         }
3819     }
3820 
3821     static
3822     void testVectorCastIntMaxToFloat(VectorSpecies<Integer> a, VectorSpecies<Float> b,
3823                                           int[] input, float[] output) {
3824         if (S_Max_BIT.vectorBitSize() == b.length() * Integer.SIZE) {
3825             testVectorCastIntToFloat(a, b, input, output);
3826         } else {
3827             testVectorCastIntToFloatFail(a, b, input);
3828         }
3829     }
3830 
3831     static
3832     void testVectorCastIntMaxToDouble(VectorSpecies<Integer> a, VectorSpecies<Double> b,
3833                                            int[] input, double[] output) {
3834         if (S_Max_BIT.vectorBitSize() == b.length() * Integer.SIZE) {
3835             testVectorCastIntToDouble(a, b, input, output);
3836         } else {
3837             testVectorCastIntToDoubleFail(a, b, input);
3838         }
3839     }
3840 
3841     static
3842     void testVectorCastLongMaxToByte(VectorSpecies<Long> a, VectorSpecies<Byte> b,
3843                                           long[] input, byte[] output) {
3844         if (S_Max_BIT.vectorBitSize() == b.length() * Long.SIZE) {
3845             testVectorCastLongToByte(a, b, input, output);
3846         } else {
3847             testVectorCastLongToByteFail(a, b, input);
3848         }
3849     }
3850 
3851     static
3852     void testVectorCastLongMaxToShort(VectorSpecies<Long> a, VectorSpecies<Short> b,
3853                                            long[] input, short[] output) {
3854         if (S_Max_BIT.vectorBitSize() == b.length() * Long.SIZE) {
3855             testVectorCastLongToShort(a, b, input, output);
3856         } else {
3857             testVectorCastLongToShortFail(a, b, input);
3858         }
3859     }
3860 
3861     static
3862     void testVectorCastLongMaxToInt(VectorSpecies<Long> a, VectorSpecies<Integer> b,
3863                                          long[] input, int[] output) {
3864         if (S_Max_BIT.vectorBitSize() == b.length() * Long.SIZE) {
3865             testVectorCastLongToInt(a, b, input, output);
3866         } else {
3867             testVectorCastLongToIntFail(a, b, input);
3868         }
3869     }
3870 
3871     static
3872     void testVectorCastLongMaxToLong(VectorSpecies<Long> a, VectorSpecies<Long> b,
3873                                           long[] input, long[] output) {
3874         if (S_Max_BIT.vectorBitSize() == b.length() * Long.SIZE) {
3875             testVectorCastLongToLong(a, b, input, output);
3876         } else {
3877             testVectorCastLongToLongFail(a, b, input);
3878         }
3879     }
3880 
3881     static
3882     void testVectorCastLongMaxToFloat(VectorSpecies<Long> a, VectorSpecies<Float> b,
3883                                            long[] input, float[] output) {
3884         if (S_Max_BIT.vectorBitSize() == b.length() * Long.SIZE) {
3885             testVectorCastLongToFloat(a, b, input, output);
3886         } else {
3887             testVectorCastLongToFloatFail(a, b, input);
3888         }
3889     }
3890 
3891     static
3892     void testVectorCastLongMaxToDouble(VectorSpecies<Long> a, VectorSpecies<Double> b,
3893                                             long[] input, double[] output) {
3894         if (S_Max_BIT.vectorBitSize() == b.length() * Long.SIZE) {
3895             testVectorCastLongToDouble(a, b, input, output);
3896         } else {
3897             testVectorCastLongToDoubleFail(a, b, input);
3898         }
3899     }
3900 
3901     static
3902     void testVectorCastFloatMaxToByte(VectorSpecies<Float> a, VectorSpecies<Byte> b,
3903                                            float[] input, byte[] output) {
3904         if (S_Max_BIT.vectorBitSize() == b.length() * Float.SIZE) {
3905             testVectorCastFloatToByte(a, b, input, output);
3906         } else {
3907             testVectorCastFloatToByteFail(a, b, input);
3908         }
3909     }
3910 
3911     static
3912     void testVectorCastFloatMaxToShort(VectorSpecies<Float> a, VectorSpecies<Short> b,
3913                                             float[] input, short[] output) {
3914         if (S_Max_BIT.vectorBitSize() == b.length() * Float.SIZE) {
3915             testVectorCastFloatToShort(a, b, input, output);
3916         } else {
3917             testVectorCastFloatToShortFail(a, b, input);
3918         }
3919     }
3920 
3921     static
3922     void testVectorCastFloatMaxToInt(VectorSpecies<Float> a, VectorSpecies<Integer> b,
3923                                           float[] input, int[] output) {
3924         if (S_Max_BIT.vectorBitSize() == b.length() * Float.SIZE) {
3925             testVectorCastFloatToInt(a, b, input, output);
3926         } else {
3927             testVectorCastFloatToIntFail(a, b, input);
3928         }
3929     }
3930 
3931     static
3932     void testVectorCastFloatMaxToLong(VectorSpecies<Float> a, VectorSpecies<Long> b,
3933                                            float[] input, long[] output) {
3934         if (S_Max_BIT.vectorBitSize() == b.length() * Float.SIZE) {
3935             testVectorCastFloatToLong(a, b, input, output);
3936         } else {
3937             testVectorCastFloatToLongFail(a, b, input);
3938         }
3939     }
3940 
3941     static
3942     void testVectorCastFloatMaxToFloat(VectorSpecies<Float> a, VectorSpecies<Float> b,
3943                                             float[] input, float[] output) {
3944         if (S_Max_BIT.vectorBitSize() == b.length() * Float.SIZE) {
3945             testVectorCastFloatToFloat(a, b, input, output);
3946         } else {
3947             testVectorCastFloatToFloatFail(a, b, input);
3948         }
3949     }
3950 
3951     static
3952     void testVectorCastFloatMaxToDouble(VectorSpecies<Float> a, VectorSpecies<Double> b,
3953                                              float[] input, double[] output) {
3954         if (S_Max_BIT.vectorBitSize() == b.length() * Float.SIZE) {
3955             testVectorCastFloatToDouble(a, b, input, output);
3956         } else {
3957             testVectorCastFloatToDoubleFail(a, b, input);
3958         }
3959     }
3960 
3961     static
3962     void testVectorCastDoubleMaxToByte(VectorSpecies<Double> a, VectorSpecies<Byte> b,
3963                                             double[] input, byte[] output) {
3964         if (S_Max_BIT.vectorBitSize() == b.length() * Double.SIZE) {
3965             testVectorCastDoubleToByte(a, b, input, output);
3966         } else {
3967             testVectorCastDoubleToByteFail(a, b, input);
3968         }
3969     }
3970 
3971     static
3972     void testVectorCastDoubleMaxToShort(VectorSpecies<Double> a, VectorSpecies<Short> b,
3973                                              double[] input, short[] output) {
3974         if (S_Max_BIT.vectorBitSize() == b.length() * Double.SIZE) {
3975             testVectorCastDoubleToShort(a, b, input, output);
3976         } else {
3977             testVectorCastDoubleToShortFail(a, b, input);
3978         }
3979     }
3980 
3981     static
3982     void testVectorCastDoubleMaxToInt(VectorSpecies<Double> a, VectorSpecies<Integer> b,
3983                                            double[] input, int[] output) {
3984         if (S_Max_BIT.vectorBitSize() == b.length() * Double.SIZE) {
3985             testVectorCastDoubleToInt(a, b, input, output);
3986         } else {
3987             testVectorCastDoubleToIntFail(a, b, input);
3988         }
3989     }
3990 
3991     static
3992     void testVectorCastDoubleMaxToLong(VectorSpecies<Double> a, VectorSpecies<Long> b,
3993                                             double[] input, long[] output) {
3994         if (S_Max_BIT.vectorBitSize() == b.length() * Double.SIZE) {
3995             testVectorCastDoubleToLong(a, b, input, output);
3996         } else {
3997             testVectorCastDoubleToLongFail(a, b, input);
3998         }
3999     }
4000 
4001     static
4002     void testVectorCastDoubleMaxToFloat(VectorSpecies<Double> a, VectorSpecies<Float> b,
4003                                              double[] input, float[] output) {
4004         if (S_Max_BIT.vectorBitSize() == b.length() * Double.SIZE) {
4005             testVectorCastDoubleToFloat(a, b, input, output);
4006         } else {
4007             testVectorCastDoubleToFloatFail(a, b, input);
4008         }
4009     }
4010 
4011     static
4012     void testVectorCastDoubleMaxToDouble(VectorSpecies<Double> a, VectorSpecies<Double> b,
4013                                               double[] input, double[] output) {
4014         if (S_Max_BIT.vectorBitSize() == b.length() * Double.SIZE) {
4015             testVectorCastDoubleToDouble(a, b, input, output);
4016         } else {
4017             testVectorCastDoubleToDoubleFail(a, b, input);
4018         }
4019     }
4020 
4021     //@Test(dataProvider = "byteUnaryOpProvider")
4022     static void testCastFromByteMax(IntFunction<byte[]> fa) {
4023         byte[] binMax = fa.apply(bspecMax.length());
4024 
4025         byte[] bout64 = new byte[bspec64.length()];
4026         byte[] bout128 = new byte[bspec128.length()];
4027         byte[] bout256 = new byte[bspec256.length()];
4028         byte[] bout512 = new byte[bspec512.length()];
4029         byte[] boutMax = new byte[bspecMax.length()];
4030 
4031         short[] sout64 = new short[sspec64.length()];
4032         short[] sout128 = new short[sspec128.length()];
4033         short[] sout256 = new short[sspec256.length()];
4034         short[] sout512 = new short[sspec512.length()];
4035         short[] soutMax = new short[sspecMax.length()];
4036 
4037         int[] iout64 = new int[ispec64.length()];
4038         int[] iout128 = new int[ispec128.length()];
4039         int[] iout256 = new int[ispec256.length()];
4040         int[] iout512 = new int[ispec512.length()];
4041         int[] ioutMax = new int[ispecMax.length()];
4042 
4043         long[] lout64 = new long[lspec64.length()];
4044         long[] lout128 = new long[lspec128.length()];
4045         long[] lout256 = new long[lspec256.length()];
4046         long[] lout512 = new long[lspec512.length()];
4047         long[] loutMax = new long[lspecMax.length()];
4048 
4049         float[] fout64 = new float[fspec64.length()];
4050         float[] fout128 = new float[fspec128.length()];
4051         float[] fout256 = new float[fspec256.length()];
4052         float[] fout512 = new float[fspec512.length()];
4053         float[] foutMax = new float[fspecMax.length()];
4054 
4055         double[] dout64 = new double[dspec64.length()];
4056         double[] dout128 = new double[dspec128.length()];
4057         double[] dout256 = new double[dspec256.length()];
4058         double[] dout512 = new double[dspec512.length()];
4059         double[] doutMax = new double[dspecMax.length()];
4060 
4061         for (int i = 0; i < NUM_ITER; i++) {
4062             testVectorCastByteMaxToByte(bspecMax, bspec64, binMax, bout64);
4063             testVectorCastByteMaxToByte(bspecMax, bspec128, binMax, bout128);
4064             testVectorCastByteMaxToByte(bspecMax, bspec256, binMax, bout256);
4065             testVectorCastByteMaxToByte(bspecMax, bspec512, binMax, bout512);
4066             testVectorCastByteMaxToByte(bspecMax, bspecMax, binMax, boutMax);
4067 
4068             testVectorCastByteMaxToShort(bspecMax, sspec64, binMax, sout64);
4069             testVectorCastByteMaxToShort(bspecMax, sspec128, binMax, sout128);
4070             testVectorCastByteMaxToShort(bspecMax, sspec256, binMax, sout256);
4071             testVectorCastByteMaxToShort(bspecMax, sspec512, binMax, sout512);
4072             testVectorCastByteMaxToShort(bspecMax, sspecMax, binMax, soutMax);
4073 
4074             testVectorCastByteMaxToInt(bspecMax, ispec64, binMax, iout64);
4075             testVectorCastByteMaxToInt(bspecMax, ispec128, binMax, iout128);
4076             testVectorCastByteMaxToInt(bspecMax, ispec256, binMax, iout256);
4077             testVectorCastByteMaxToInt(bspecMax, ispec512, binMax, iout512);
4078             testVectorCastByteMaxToInt(bspecMax, ispecMax, binMax, ioutMax);
4079 
4080             testVectorCastByteMaxToLong(bspecMax, lspec64, binMax, lout64);
4081             testVectorCastByteMaxToLong(bspecMax, lspec128, binMax, lout128);
4082             testVectorCastByteMaxToLong(bspecMax, lspec256, binMax, lout256);
4083             testVectorCastByteMaxToLong(bspecMax, lspec512, binMax, lout512);
4084             testVectorCastByteMaxToLong(bspecMax, lspecMax, binMax, loutMax);
4085 
4086             testVectorCastByteMaxToFloat(bspecMax, fspec64, binMax, fout64);
4087             testVectorCastByteMaxToFloat(bspecMax, fspec128, binMax, fout128);
4088             testVectorCastByteMaxToFloat(bspecMax, fspec256, binMax, fout256);
4089             testVectorCastByteMaxToFloat(bspecMax, fspec512, binMax, fout512);
4090             testVectorCastByteMaxToFloat(bspecMax, fspecMax, binMax, foutMax);
4091 
4092             testVectorCastByteMaxToDouble(bspecMax, dspec64, binMax, dout64);
4093             testVectorCastByteMaxToDouble(bspecMax, dspec128, binMax, dout128);
4094             testVectorCastByteMaxToDouble(bspecMax, dspec256, binMax, dout256);
4095             testVectorCastByteMaxToDouble(bspecMax, dspec512, binMax, dout512);
4096             testVectorCastByteMaxToDouble(bspecMax, dspecMax, binMax, doutMax);
4097         }
4098     }
4099 
4100     //@Test(dataProvider = "shortUnaryOpProvider")
4101     static void testCastFromShortMax(IntFunction<short[]> fa) {
4102         short[] sinMax = fa.apply(sspecMax.length());
4103 
4104         byte[] bout64 = new byte[bspec64.length()];
4105         byte[] bout128 = new byte[bspec128.length()];
4106         byte[] bout256 = new byte[bspec256.length()];
4107         byte[] bout512 = new byte[bspec512.length()];
4108         byte[] boutMax = new byte[bspecMax.length()];
4109 
4110         short[] sout64 = new short[sspec64.length()];
4111         short[] sout128 = new short[sspec128.length()];
4112         short[] sout256 = new short[sspec256.length()];
4113         short[] sout512 = new short[sspec512.length()];
4114         short[] soutMax = new short[sspecMax.length()];
4115 
4116         int[] iout64 = new int[ispec64.length()];
4117         int[] iout128 = new int[ispec128.length()];
4118         int[] iout256 = new int[ispec256.length()];
4119         int[] iout512 = new int[ispec512.length()];
4120         int[] ioutMax = new int[ispecMax.length()];
4121 
4122         long[] lout64 = new long[lspec64.length()];
4123         long[] lout128 = new long[lspec128.length()];
4124         long[] lout256 = new long[lspec256.length()];
4125         long[] lout512 = new long[lspec512.length()];
4126         long[] loutMax = new long[lspecMax.length()];
4127 
4128         float[] fout64 = new float[fspec64.length()];
4129         float[] fout128 = new float[fspec128.length()];
4130         float[] fout256 = new float[fspec256.length()];
4131         float[] fout512 = new float[fspec512.length()];
4132         float[] foutMax = new float[fspecMax.length()];
4133 
4134         double[] dout64 = new double[dspec64.length()];
4135         double[] dout128 = new double[dspec128.length()];
4136         double[] dout256 = new double[dspec256.length()];
4137         double[] dout512 = new double[dspec512.length()];
4138         double[] doutMax = new double[dspecMax.length()];
4139 
4140         for (int i = 0; i < NUM_ITER; i++) {
4141             testVectorCastShortMaxToByte(sspecMax, bspec64, sinMax, bout64);
4142             testVectorCastShortMaxToByte(sspecMax, bspec128, sinMax, bout128);
4143             testVectorCastShortMaxToByte(sspecMax, bspec256, sinMax, bout256);
4144             testVectorCastShortMaxToByte(sspecMax, bspec512, sinMax, bout512);
4145             testVectorCastShortMaxToByte(sspecMax, bspecMax, sinMax, boutMax);
4146 
4147             testVectorCastShortMaxToShort(sspecMax, sspec64, sinMax, sout64);
4148             testVectorCastShortMaxToShort(sspecMax, sspec128, sinMax, sout128);
4149             testVectorCastShortMaxToShort(sspecMax, sspec256, sinMax, sout256);
4150             testVectorCastShortMaxToShort(sspecMax, sspec512, sinMax, sout512);
4151             testVectorCastShortMaxToShort(sspecMax, sspecMax, sinMax, soutMax);
4152 
4153             testVectorCastShortMaxToInt(sspecMax, ispec64, sinMax, iout64);
4154             testVectorCastShortMaxToInt(sspecMax, ispec128, sinMax, iout128);
4155             testVectorCastShortMaxToInt(sspecMax, ispec256, sinMax, iout256);
4156             testVectorCastShortMaxToInt(sspecMax, ispec512, sinMax, iout512);
4157             testVectorCastShortMaxToInt(sspecMax, ispecMax, sinMax, ioutMax);
4158 
4159             testVectorCastShortMaxToLong(sspecMax, lspec64, sinMax, lout64);
4160             testVectorCastShortMaxToLong(sspecMax, lspec128, sinMax, lout128);
4161             testVectorCastShortMaxToLong(sspecMax, lspec256, sinMax, lout256);
4162             testVectorCastShortMaxToLong(sspecMax, lspec512, sinMax, lout512);
4163             testVectorCastShortMaxToLong(sspecMax, lspecMax, sinMax, loutMax);
4164 
4165             testVectorCastShortMaxToFloat(sspecMax, fspec64, sinMax, fout64);
4166             testVectorCastShortMaxToFloat(sspecMax, fspec128, sinMax, fout128);
4167             testVectorCastShortMaxToFloat(sspecMax, fspec256, sinMax, fout256);
4168             testVectorCastShortMaxToFloat(sspecMax, fspec512, sinMax, fout512);
4169             testVectorCastShortMaxToFloat(sspecMax, fspecMax, sinMax, foutMax);
4170 
4171             testVectorCastShortMaxToDouble(sspecMax, dspec64, sinMax, dout64);
4172             testVectorCastShortMaxToDouble(sspecMax, dspec128, sinMax, dout128);
4173             testVectorCastShortMaxToDouble(sspecMax, dspec256, sinMax, dout256);
4174             testVectorCastShortMaxToDouble(sspecMax, dspec512, sinMax, dout512);
4175             testVectorCastShortMaxToDouble(sspecMax, dspecMax, sinMax, doutMax);
4176         }
4177     }
4178 
4179     //@Test(dataProvider = "intUnaryOpProvider")
4180     static void testCastFromIntMax(IntFunction<int[]> fa) {
4181         int[] iinMax = fa.apply(ispecMax.length());
4182 
4183         byte[] bout64 = new byte[bspec64.length()];
4184         byte[] bout128 = new byte[bspec128.length()];
4185         byte[] bout256 = new byte[bspec256.length()];
4186         byte[] bout512 = new byte[bspec512.length()];
4187         byte[] boutMax = new byte[bspecMax.length()];
4188 
4189         short[] sout64 = new short[sspec64.length()];
4190         short[] sout128 = new short[sspec128.length()];
4191         short[] sout256 = new short[sspec256.length()];
4192         short[] sout512 = new short[sspec512.length()];
4193         short[] soutMax = new short[sspecMax.length()];
4194 
4195         int[] iout64 = new int[ispec64.length()];
4196         int[] iout128 = new int[ispec128.length()];
4197         int[] iout256 = new int[ispec256.length()];
4198         int[] iout512 = new int[ispec512.length()];
4199         int[] ioutMax = new int[ispecMax.length()];
4200 
4201         long[] lout64 = new long[lspec64.length()];
4202         long[] lout128 = new long[lspec128.length()];
4203         long[] lout256 = new long[lspec256.length()];
4204         long[] lout512 = new long[lspec512.length()];
4205         long[] loutMax = new long[lspecMax.length()];
4206 
4207         float[] fout64 = new float[fspec64.length()];
4208         float[] fout128 = new float[fspec128.length()];
4209         float[] fout256 = new float[fspec256.length()];
4210         float[] fout512 = new float[fspec512.length()];
4211         float[] foutMax = new float[fspecMax.length()];
4212 
4213         double[] dout64 = new double[dspec64.length()];
4214         double[] dout128 = new double[dspec128.length()];
4215         double[] dout256 = new double[dspec256.length()];
4216         double[] dout512 = new double[dspec512.length()];
4217         double[] doutMax = new double[dspecMax.length()];
4218 
4219         for (int i = 0; i < NUM_ITER; i++) {
4220             testVectorCastIntMaxToByte(ispecMax, bspec64, iinMax, bout64);
4221             testVectorCastIntMaxToByte(ispecMax, bspec128, iinMax, bout128);
4222             testVectorCastIntMaxToByte(ispecMax, bspec256, iinMax, bout256);
4223             testVectorCastIntMaxToByte(ispecMax, bspec512, iinMax, bout512);
4224             testVectorCastIntMaxToByte(ispecMax, bspecMax, iinMax, boutMax);
4225 
4226             testVectorCastIntMaxToShort(ispecMax, sspec64, iinMax, sout64);
4227             testVectorCastIntMaxToShort(ispecMax, sspec128, iinMax, sout128);
4228             testVectorCastIntMaxToShort(ispecMax, sspec256, iinMax, sout256);
4229             testVectorCastIntMaxToShort(ispecMax, sspec512, iinMax, sout512);
4230             testVectorCastIntMaxToShort(ispecMax, sspecMax, iinMax, soutMax);
4231 
4232             testVectorCastIntMaxToInt(ispecMax, ispec64, iinMax, iout64);
4233             testVectorCastIntMaxToInt(ispecMax, ispec128, iinMax, iout128);
4234             testVectorCastIntMaxToInt(ispecMax, ispec256, iinMax, iout256);
4235             testVectorCastIntMaxToInt(ispecMax, ispec512, iinMax, iout512);
4236             testVectorCastIntMaxToInt(ispecMax, ispecMax, iinMax, ioutMax);
4237 
4238             testVectorCastIntMaxToLong(ispecMax, lspec64, iinMax, lout64);
4239             testVectorCastIntMaxToLong(ispecMax, lspec128, iinMax, lout128);
4240             testVectorCastIntMaxToLong(ispecMax, lspec256, iinMax, lout256);
4241             testVectorCastIntMaxToLong(ispecMax, lspec512, iinMax, lout512);
4242             testVectorCastIntMaxToLong(ispecMax, lspecMax, iinMax, loutMax);
4243 
4244             testVectorCastIntMaxToFloat(ispecMax, fspec64, iinMax, fout64);
4245             testVectorCastIntMaxToFloat(ispecMax, fspec128, iinMax, fout128);
4246             testVectorCastIntMaxToFloat(ispecMax, fspec256, iinMax, fout256);
4247             testVectorCastIntMaxToFloat(ispecMax, fspec512, iinMax, fout512);
4248             testVectorCastIntMaxToFloat(ispecMax, fspecMax, iinMax, foutMax);
4249 
4250             testVectorCastIntMaxToDouble(ispecMax, dspec64, iinMax, dout64);
4251             testVectorCastIntMaxToDouble(ispecMax, dspec128, iinMax, dout128);
4252             testVectorCastIntMaxToDouble(ispecMax, dspec256, iinMax, dout256);
4253             testVectorCastIntMaxToDouble(ispecMax, dspec512, iinMax, dout512);
4254             testVectorCastIntMaxToDouble(ispecMax, dspecMax, iinMax, doutMax);
4255         }
4256     }
4257 
4258     //@Test(dataProvider = "longUnaryOpProvider")
4259     static void testCastFromLongMax(IntFunction<long[]> fa) {
4260         long[] linMax = fa.apply(lspecMax.length());
4261 
4262         byte[] bout64 = new byte[bspec64.length()];
4263         byte[] bout128 = new byte[bspec128.length()];
4264         byte[] bout256 = new byte[bspec256.length()];
4265         byte[] bout512 = new byte[bspec512.length()];
4266         byte[] boutMax = new byte[bspecMax.length()];
4267 
4268         short[] sout64 = new short[sspec64.length()];
4269         short[] sout128 = new short[sspec128.length()];
4270         short[] sout256 = new short[sspec256.length()];
4271         short[] sout512 = new short[sspec512.length()];
4272         short[] soutMax = new short[sspecMax.length()];
4273 
4274         int[] iout64 = new int[ispec64.length()];
4275         int[] iout128 = new int[ispec128.length()];
4276         int[] iout256 = new int[ispec256.length()];
4277         int[] iout512 = new int[ispec512.length()];
4278         int[] ioutMax = new int[ispecMax.length()];
4279 
4280         long[] lout64 = new long[lspec64.length()];
4281         long[] lout128 = new long[lspec128.length()];
4282         long[] lout256 = new long[lspec256.length()];
4283         long[] lout512 = new long[lspec512.length()];
4284         long[] loutMax = new long[lspecMax.length()];
4285 
4286         float[] fout64 = new float[fspec64.length()];
4287         float[] fout128 = new float[fspec128.length()];
4288         float[] fout256 = new float[fspec256.length()];
4289         float[] fout512 = new float[fspec512.length()];
4290         float[] foutMax = new float[fspecMax.length()];
4291 
4292         double[] dout64 = new double[dspec64.length()];
4293         double[] dout128 = new double[dspec128.length()];
4294         double[] dout256 = new double[dspec256.length()];
4295         double[] dout512 = new double[dspec512.length()];
4296         double[] doutMax = new double[dspecMax.length()];
4297 
4298         for (int i = 0; i < NUM_ITER; i++) {
4299             testVectorCastLongMaxToByte(lspecMax, bspec64, linMax, bout64);
4300             testVectorCastLongMaxToByte(lspecMax, bspec128, linMax, bout128);
4301             testVectorCastLongMaxToByte(lspecMax, bspec256, linMax, bout256);
4302             testVectorCastLongMaxToByte(lspecMax, bspec512, linMax, bout512);
4303             testVectorCastLongMaxToByte(lspecMax, bspecMax, linMax, boutMax);
4304 
4305             testVectorCastLongMaxToShort(lspecMax, sspec64, linMax, sout64);
4306             testVectorCastLongMaxToShort(lspecMax, sspec128, linMax, sout128);
4307             testVectorCastLongMaxToShort(lspecMax, sspec256, linMax, sout256);
4308             testVectorCastLongMaxToShort(lspecMax, sspec512, linMax, sout512);
4309             testVectorCastLongMaxToShort(lspecMax, sspecMax, linMax, soutMax);
4310 
4311             testVectorCastLongMaxToInt(lspecMax, ispec64, linMax, iout64);
4312             testVectorCastLongMaxToInt(lspecMax, ispec128, linMax, iout128);
4313             testVectorCastLongMaxToInt(lspecMax, ispec256, linMax, iout256);
4314             testVectorCastLongMaxToInt(lspecMax, ispec512, linMax, iout512);
4315             testVectorCastLongMaxToInt(lspecMax, ispecMax, linMax, ioutMax);
4316 
4317             testVectorCastLongMaxToLong(lspecMax, lspec64, linMax, lout64);
4318             testVectorCastLongMaxToLong(lspecMax, lspec128, linMax, lout128);
4319             testVectorCastLongMaxToLong(lspecMax, lspec256, linMax, lout256);
4320             testVectorCastLongMaxToLong(lspecMax, lspec512, linMax, lout512);
4321             testVectorCastLongMaxToLong(lspecMax, lspecMax, linMax, loutMax);
4322 
4323             testVectorCastLongMaxToFloat(lspecMax, fspec64, linMax, fout64);
4324             testVectorCastLongMaxToFloat(lspecMax, fspec128, linMax, fout128);
4325             testVectorCastLongMaxToFloat(lspecMax, fspec256, linMax, fout256);
4326             testVectorCastLongMaxToFloat(lspecMax, fspec512, linMax, fout512);
4327             testVectorCastLongMaxToFloat(lspecMax, fspecMax, linMax, foutMax);
4328 
4329             testVectorCastLongMaxToDouble(lspecMax, dspec64, linMax, dout64);
4330             testVectorCastLongMaxToDouble(lspecMax, dspec128, linMax, dout128);
4331             testVectorCastLongMaxToDouble(lspecMax, dspec256, linMax, dout256);
4332             testVectorCastLongMaxToDouble(lspecMax, dspec512, linMax, dout512);
4333             testVectorCastLongMaxToDouble(lspecMax, dspecMax, linMax, doutMax);
4334         }
4335     }
4336 
4337     //@Test(dataProvider = "floatUnaryOpProvider")
4338     static void testCastFromFloatMax(IntFunction<float[]> fa) {
4339         float[] finMax = fa.apply(fspecMax.length());
4340 
4341         byte[] bout64 = new byte[bspec64.length()];
4342         byte[] bout128 = new byte[bspec128.length()];
4343         byte[] bout256 = new byte[bspec256.length()];
4344         byte[] bout512 = new byte[bspec512.length()];
4345         byte[] boutMax = new byte[bspecMax.length()];
4346 
4347         short[] sout64 = new short[sspec64.length()];
4348         short[] sout128 = new short[sspec128.length()];
4349         short[] sout256 = new short[sspec256.length()];
4350         short[] sout512 = new short[sspec512.length()];
4351         short[] soutMax = new short[sspecMax.length()];
4352 
4353         int[] iout64 = new int[ispec64.length()];
4354         int[] iout128 = new int[ispec128.length()];
4355         int[] iout256 = new int[ispec256.length()];
4356         int[] iout512 = new int[ispec512.length()];
4357         int[] ioutMax = new int[ispecMax.length()];
4358 
4359         long[] lout64 = new long[lspec64.length()];
4360         long[] lout128 = new long[lspec128.length()];
4361         long[] lout256 = new long[lspec256.length()];
4362         long[] lout512 = new long[lspec512.length()];
4363         long[] loutMax = new long[lspecMax.length()];
4364 
4365         float[] fout64 = new float[fspec64.length()];
4366         float[] fout128 = new float[fspec128.length()];
4367         float[] fout256 = new float[fspec256.length()];
4368         float[] fout512 = new float[fspec512.length()];
4369         float[] foutMax = new float[fspecMax.length()];
4370 
4371         double[] dout64 = new double[dspec64.length()];
4372         double[] dout128 = new double[dspec128.length()];
4373         double[] dout256 = new double[dspec256.length()];
4374         double[] dout512 = new double[dspec512.length()];
4375         double[] doutMax = new double[dspecMax.length()];
4376 
4377         for (int i = 0; i < NUM_ITER; i++) {
4378             testVectorCastFloatMaxToByte(fspecMax, bspec64, finMax, bout64);
4379             testVectorCastFloatMaxToByte(fspecMax, bspec128, finMax, bout128);
4380             testVectorCastFloatMaxToByte(fspecMax, bspec256, finMax, bout256);
4381             testVectorCastFloatMaxToByte(fspecMax, bspec512, finMax, bout512);
4382             testVectorCastFloatMaxToByte(fspecMax, bspecMax, finMax, boutMax);
4383 
4384             testVectorCastFloatMaxToShort(fspecMax, sspec64, finMax, sout64);
4385             testVectorCastFloatMaxToShort(fspecMax, sspec128, finMax, sout128);
4386             testVectorCastFloatMaxToShort(fspecMax, sspec256, finMax, sout256);
4387             testVectorCastFloatMaxToShort(fspecMax, sspec512, finMax, sout512);
4388             testVectorCastFloatMaxToShort(fspecMax, sspecMax, finMax, soutMax);
4389 
4390             testVectorCastFloatMaxToInt(fspecMax, ispec64, finMax, iout64);
4391             testVectorCastFloatMaxToInt(fspecMax, ispec128, finMax, iout128);
4392             testVectorCastFloatMaxToInt(fspecMax, ispec256, finMax, iout256);
4393             testVectorCastFloatMaxToInt(fspecMax, ispec512, finMax, iout512);
4394             testVectorCastFloatMaxToInt(fspecMax, ispecMax, finMax, ioutMax);
4395 
4396             testVectorCastFloatMaxToLong(fspecMax, lspec64, finMax, lout64);
4397             testVectorCastFloatMaxToLong(fspecMax, lspec128, finMax, lout128);
4398             testVectorCastFloatMaxToLong(fspecMax, lspec256, finMax, lout256);
4399             testVectorCastFloatMaxToLong(fspecMax, lspec512, finMax, lout512);
4400             testVectorCastFloatMaxToLong(fspecMax, lspecMax, finMax, loutMax);
4401 
4402             testVectorCastFloatMaxToFloat(fspecMax, fspec64, finMax, fout64);
4403             testVectorCastFloatMaxToFloat(fspecMax, fspec128, finMax, fout128);
4404             testVectorCastFloatMaxToFloat(fspecMax, fspec256, finMax, fout256);
4405             testVectorCastFloatMaxToFloat(fspecMax, fspec512, finMax, fout512);
4406             testVectorCastFloatMaxToFloat(fspecMax, fspecMax, finMax, foutMax);
4407 
4408             testVectorCastFloatMaxToDouble(fspecMax, dspec64, finMax, dout64);
4409             testVectorCastFloatMaxToDouble(fspecMax, dspec128, finMax, dout128);
4410             testVectorCastFloatMaxToDouble(fspecMax, dspec256, finMax, dout256);
4411             testVectorCastFloatMaxToDouble(fspecMax, dspec512, finMax, dout512);
4412             testVectorCastFloatMaxToDouble(fspecMax, dspecMax, finMax, doutMax);
4413         }
4414     }
4415 
4416     //@Test(dataProvider = "doubleUnaryOpProvider")
4417     static void testCastFromDoubleMax(IntFunction<double[]> fa) {
4418         double[] dinMax = fa.apply(dspecMax.length());
4419 
4420         byte[] bout64 = new byte[bspec64.length()];
4421         byte[] bout128 = new byte[bspec128.length()];
4422         byte[] bout256 = new byte[bspec256.length()];
4423         byte[] bout512 = new byte[bspec512.length()];
4424         byte[] boutMax = new byte[bspecMax.length()];
4425 
4426         short[] sout64 = new short[sspec64.length()];
4427         short[] sout128 = new short[sspec128.length()];
4428         short[] sout256 = new short[sspec256.length()];
4429         short[] sout512 = new short[sspec512.length()];
4430         short[] soutMax = new short[sspecMax.length()];
4431 
4432         int[] iout64 = new int[ispec64.length()];
4433         int[] iout128 = new int[ispec128.length()];
4434         int[] iout256 = new int[ispec256.length()];
4435         int[] iout512 = new int[ispec512.length()];
4436         int[] ioutMax = new int[ispecMax.length()];
4437 
4438         long[] lout64 = new long[lspec64.length()];
4439         long[] lout128 = new long[lspec128.length()];
4440         long[] lout256 = new long[lspec256.length()];
4441         long[] lout512 = new long[lspec512.length()];
4442         long[] loutMax = new long[lspecMax.length()];
4443 
4444         float[] fout64 = new float[fspec64.length()];
4445         float[] fout128 = new float[fspec128.length()];
4446         float[] fout256 = new float[fspec256.length()];
4447         float[] fout512 = new float[fspec512.length()];
4448         float[] foutMax = new float[fspecMax.length()];
4449 
4450         double[] dout64 = new double[dspec64.length()];
4451         double[] dout128 = new double[dspec128.length()];
4452         double[] dout256 = new double[dspec256.length()];
4453         double[] dout512 = new double[dspec512.length()];
4454         double[] doutMax = new double[dspecMax.length()];
4455 
4456         for (int i = 0; i < NUM_ITER; i++) {
4457             testVectorCastDoubleMaxToByte(dspecMax, bspec64, dinMax, bout64);
4458             testVectorCastDoubleMaxToByte(dspecMax, bspec128, dinMax, bout128);
4459             testVectorCastDoubleMaxToByte(dspecMax, bspec256, dinMax, bout256);
4460             testVectorCastDoubleMaxToByte(dspecMax, bspec512, dinMax, bout512);
4461             testVectorCastDoubleMaxToByte(dspecMax, bspecMax, dinMax, boutMax);
4462 
4463             testVectorCastDoubleMaxToShort(dspecMax, sspec64, dinMax, sout64);
4464             testVectorCastDoubleMaxToShort(dspecMax, sspec128, dinMax, sout128);
4465             testVectorCastDoubleMaxToShort(dspecMax, sspec256, dinMax, sout256);
4466             testVectorCastDoubleMaxToShort(dspecMax, sspec512, dinMax, sout512);
4467             testVectorCastDoubleMaxToShort(dspecMax, sspecMax, dinMax, soutMax);
4468 
4469             testVectorCastDoubleMaxToInt(dspecMax, ispec64, dinMax, iout64);
4470             testVectorCastDoubleMaxToInt(dspecMax, ispec128, dinMax, iout128);
4471             testVectorCastDoubleMaxToInt(dspecMax, ispec256, dinMax, iout256);
4472             testVectorCastDoubleMaxToInt(dspecMax, ispec512, dinMax, iout512);
4473             testVectorCastDoubleMaxToInt(dspecMax, ispecMax, dinMax, ioutMax);
4474 
4475             testVectorCastDoubleMaxToLong(dspecMax, lspec64, dinMax, lout64);
4476             testVectorCastDoubleMaxToLong(dspecMax, lspec128, dinMax, lout128);
4477             testVectorCastDoubleMaxToLong(dspecMax, lspec256, dinMax, lout256);
4478             testVectorCastDoubleMaxToLong(dspecMax, lspec512, dinMax, lout512);
4479             testVectorCastDoubleMaxToLong(dspecMax, lspecMax, dinMax, loutMax);
4480 
4481             testVectorCastDoubleMaxToFloat(dspecMax, fspec64, dinMax, fout64);
4482             testVectorCastDoubleMaxToFloat(dspecMax, fspec128, dinMax, fout128);
4483             testVectorCastDoubleMaxToFloat(dspecMax, fspec256, dinMax, fout256);
4484             testVectorCastDoubleMaxToFloat(dspecMax, fspec512, dinMax, fout512);
4485             testVectorCastDoubleMaxToFloat(dspecMax, fspecMax, dinMax, foutMax);
4486 
4487             testVectorCastDoubleMaxToDouble(dspecMax, dspec64, dinMax, dout64);
4488             testVectorCastDoubleMaxToDouble(dspecMax, dspec128, dinMax, dout128);
4489             testVectorCastDoubleMaxToDouble(dspecMax, dspec256, dinMax, dout256);
4490             testVectorCastDoubleMaxToDouble(dspecMax, dspec512, dinMax, dout512);
4491             testVectorCastDoubleMaxToDouble(dspecMax, dspecMax, dinMax, doutMax);
4492         }
4493     }
4494 }