test/jdk/java/lang/invoke/VarHandles/VarHandleTestByteArrayAsDouble.java
changeset 52914 4fa75d8ad418
parent 48710 38872bed90e0
child 53284 a995647f4911
equal deleted inserted replaced
52913:bf2f2560dd53 52914:4fa75d8ad418
    52 
    52 
    53     static final double VALUE_3 = 0xFFFEFDFCFBFAF9F8L;
    53     static final double VALUE_3 = 0xFFFEFDFCFBFAF9F8L;
    54 
    54 
    55 
    55 
    56     @Override
    56     @Override
    57     public void setupVarHandleSources() {
    57     public List<VarHandleSource> setupVarHandleSources(boolean same) {
    58         // Combinations of VarHandle byte[] or ByteBuffer
    58         // Combinations of VarHandle byte[] or ByteBuffer
    59         vhss = new ArrayList<>();
    59         List<VarHandleSource> vhss = new ArrayList<>();
    60         for (MemoryMode endianess : Arrays.asList(MemoryMode.BIG_ENDIAN, MemoryMode.LITTLE_ENDIAN)) {
    60         for (MemoryMode endianess : List.of(MemoryMode.BIG_ENDIAN, MemoryMode.LITTLE_ENDIAN)) {
    61 
    61 
    62             ByteOrder bo = endianess == MemoryMode.BIG_ENDIAN
    62             ByteOrder bo = endianess == MemoryMode.BIG_ENDIAN
    63                     ? ByteOrder.BIG_ENDIAN : ByteOrder.LITTLE_ENDIAN;
    63                     ? ByteOrder.BIG_ENDIAN : ByteOrder.LITTLE_ENDIAN;
       
    64 
       
    65             Class<?> arrayType;
       
    66             if (same) {
       
    67                 arrayType = double[].class;
       
    68             }
       
    69             else {
       
    70                 arrayType = int[].class;
       
    71             }
    64             VarHandleSource aeh = new VarHandleSource(
    72             VarHandleSource aeh = new VarHandleSource(
    65                     MethodHandles.byteArrayViewVarHandle(double[].class, bo),
    73                     MethodHandles.byteArrayViewVarHandle(arrayType, bo),
    66                     endianess, MemoryMode.READ_WRITE);
    74                     endianess, MemoryMode.READ_WRITE);
    67             vhss.add(aeh);
    75             vhss.add(aeh);
    68 
    76 
    69             VarHandleSource bbh = new VarHandleSource(
    77             VarHandleSource bbh = new VarHandleSource(
    70                     MethodHandles.byteBufferViewVarHandle(double[].class, bo),
    78                     MethodHandles.byteBufferViewVarHandle(arrayType, bo),
    71                     endianess, MemoryMode.READ_WRITE);
    79                     endianess, MemoryMode.READ_WRITE);
    72             vhss.add(bbh);
    80             vhss.add(bbh);
    73         }
    81         }
    74     }
    82         return vhss;
    75 
    83     }
       
    84 
       
    85     @Test
       
    86     public void testEqualsAndHashCode() {
       
    87         VarHandle[] vhs1 = setupVarHandleSources(true).stream().
       
    88             map(vhs -> vhs.s).toArray(VarHandle[]::new);
       
    89         VarHandle[] vhs2 = setupVarHandleSources(true).stream().
       
    90             map(vhs -> vhs.s).toArray(VarHandle[]::new);
       
    91 
       
    92         for (int i = 0; i < vhs1.length; i++) {
       
    93             for (int j = 0; j < vhs1.length; j++) {
       
    94                 if (i == j) {
       
    95                     assertEquals(vhs1[i], vhs1[i]);
       
    96                     assertEquals(vhs1[i], vhs2[i]);
       
    97                     assertEquals(vhs1[i].hashCode(), vhs2[i].hashCode());
       
    98                 }
       
    99                 else {
       
   100                     assertNotEquals(vhs1[i], vhs1[j]);
       
   101                     assertNotEquals(vhs1[i], vhs2[j]);
       
   102                 }
       
   103             }
       
   104         }
       
   105 
       
   106         VarHandle[] vhs3 = setupVarHandleSources(false).stream().
       
   107             map(vhs -> vhs.s).toArray(VarHandle[]::new);
       
   108         for (int i = 0; i < vhs1.length; i++) {
       
   109             assertNotEquals(vhs1[i], vhs3[i]);
       
   110         }
       
   111     }
    76 
   112 
    77     @Test(dataProvider = "varHandlesProvider")
   113     @Test(dataProvider = "varHandlesProvider")
    78     public void testIsAccessModeSupported(VarHandleSource vhs) {
   114     public void testIsAccessModeSupported(VarHandleSource vhs) {
    79         VarHandle vh = vhs.s;
   115         VarHandle vh = vhs.s;
    80 
   116