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 |