xref: /aosp_15_r20/art/test/712-varhandle-invocations/src/VarHandleBadCoordinateTests.java (revision 795d594fd825385562da6b089ea9b2033f3abf5a)
1*795d594fSAndroid Build Coastguard Worker /*
2*795d594fSAndroid Build Coastguard Worker  * Copyright (C) 2018 The Android Open Source Project
3*795d594fSAndroid Build Coastguard Worker  *
4*795d594fSAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
5*795d594fSAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
6*795d594fSAndroid Build Coastguard Worker  * You may obtain a copy of the License at
7*795d594fSAndroid Build Coastguard Worker  *
8*795d594fSAndroid Build Coastguard Worker  *      http://www.apache.org/licenses/LICENSE-2.0
9*795d594fSAndroid Build Coastguard Worker  *
10*795d594fSAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
11*795d594fSAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
12*795d594fSAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*795d594fSAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
14*795d594fSAndroid Build Coastguard Worker  * limitations under the License.
15*795d594fSAndroid Build Coastguard Worker  */
16*795d594fSAndroid Build Coastguard Worker 
17*795d594fSAndroid Build Coastguard Worker import java.lang.invoke.MethodHandles;
18*795d594fSAndroid Build Coastguard Worker import java.lang.invoke.VarHandle;
19*795d594fSAndroid Build Coastguard Worker import java.lang.invoke.WrongMethodTypeException;
20*795d594fSAndroid Build Coastguard Worker import java.nio.ByteBuffer;
21*795d594fSAndroid Build Coastguard Worker import java.nio.ByteOrder;
22*795d594fSAndroid Build Coastguard Worker 
23*795d594fSAndroid Build Coastguard Worker public class VarHandleBadCoordinateTests {
24*795d594fSAndroid Build Coastguard Worker     public static class FieldCoordinateTypeTest extends VarHandleUnitTest {
25*795d594fSAndroid Build Coastguard Worker         private static final VarHandle vh;
26*795d594fSAndroid Build Coastguard Worker 
27*795d594fSAndroid Build Coastguard Worker         public static class A {
28*795d594fSAndroid Build Coastguard Worker             public byte field;
29*795d594fSAndroid Build Coastguard Worker         }
30*795d594fSAndroid Build Coastguard Worker 
31*795d594fSAndroid Build Coastguard Worker         public static class B extends A {
32*795d594fSAndroid Build Coastguard Worker             private byte other_field;
33*795d594fSAndroid Build Coastguard Worker         }
34*795d594fSAndroid Build Coastguard Worker 
35*795d594fSAndroid Build Coastguard Worker         public static class C {}
36*795d594fSAndroid Build Coastguard Worker 
37*795d594fSAndroid Build Coastguard Worker         static {
38*795d594fSAndroid Build Coastguard Worker             try {
39*795d594fSAndroid Build Coastguard Worker                 vh = MethodHandles.lookup().findVarHandle(A.class, "field", byte.class);
40*795d594fSAndroid Build Coastguard Worker             } catch (Exception e) {
41*795d594fSAndroid Build Coastguard Worker                 throw new RuntimeException(e);
42*795d594fSAndroid Build Coastguard Worker             }
43*795d594fSAndroid Build Coastguard Worker         }
44*795d594fSAndroid Build Coastguard Worker 
45*795d594fSAndroid Build Coastguard Worker         @Override
doTest()46*795d594fSAndroid Build Coastguard Worker         protected void doTest() {
47*795d594fSAndroid Build Coastguard Worker             vh.compareAndSet(new A(), (byte) 0, (byte) 3);
48*795d594fSAndroid Build Coastguard Worker             vh.compareAndSet(new B(), (byte) 0, (byte) 3);
49*795d594fSAndroid Build Coastguard Worker             try {
50*795d594fSAndroid Build Coastguard Worker                 vh.compareAndSet(new C(), (byte) 0, (byte) 3);
51*795d594fSAndroid Build Coastguard Worker                 failUnreachable();
52*795d594fSAndroid Build Coastguard Worker             } catch (ClassCastException ex) {
53*795d594fSAndroid Build Coastguard Worker             }
54*795d594fSAndroid Build Coastguard Worker             try {
55*795d594fSAndroid Build Coastguard Worker                 vh.compareAndSet(0xbad0bad0, (byte) 0, (byte) 3);
56*795d594fSAndroid Build Coastguard Worker                 failUnreachable();
57*795d594fSAndroid Build Coastguard Worker             } catch (WrongMethodTypeException ex) {
58*795d594fSAndroid Build Coastguard Worker             }
59*795d594fSAndroid Build Coastguard Worker             try {
60*795d594fSAndroid Build Coastguard Worker                 vh.compareAndSet(0xbad0bad0, (byte) 0, Integer.MAX_VALUE);
61*795d594fSAndroid Build Coastguard Worker                 failUnreachable();
62*795d594fSAndroid Build Coastguard Worker             } catch (WrongMethodTypeException ex) {
63*795d594fSAndroid Build Coastguard Worker             }
64*795d594fSAndroid Build Coastguard Worker             try {
65*795d594fSAndroid Build Coastguard Worker                 vh.compareAndSet(0xbad0bad0, (byte) 0);
66*795d594fSAndroid Build Coastguard Worker                 failUnreachable();
67*795d594fSAndroid Build Coastguard Worker             } catch (WrongMethodTypeException ex) {
68*795d594fSAndroid Build Coastguard Worker             }
69*795d594fSAndroid Build Coastguard Worker             try {
70*795d594fSAndroid Build Coastguard Worker                 vh.compareAndSet(new A(), (byte) 0, Integer.MAX_VALUE);
71*795d594fSAndroid Build Coastguard Worker                 failUnreachable();
72*795d594fSAndroid Build Coastguard Worker             } catch (WrongMethodTypeException ex) {
73*795d594fSAndroid Build Coastguard Worker             }
74*795d594fSAndroid Build Coastguard Worker             try {
75*795d594fSAndroid Build Coastguard Worker                 vh.compareAndSet((A) null, (byte) 0, (byte) 3);
76*795d594fSAndroid Build Coastguard Worker                 failUnreachable();
77*795d594fSAndroid Build Coastguard Worker             } catch (NullPointerException ex) {
78*795d594fSAndroid Build Coastguard Worker             }
79*795d594fSAndroid Build Coastguard Worker             try {
80*795d594fSAndroid Build Coastguard Worker                 byte unused = (byte) vh.get();
81*795d594fSAndroid Build Coastguard Worker                 failUnreachable();
82*795d594fSAndroid Build Coastguard Worker             } catch (WrongMethodTypeException ex) {
83*795d594fSAndroid Build Coastguard Worker             }
84*795d594fSAndroid Build Coastguard Worker         }
85*795d594fSAndroid Build Coastguard Worker 
main(String[] args)86*795d594fSAndroid Build Coastguard Worker         public static void main(String[] args) {
87*795d594fSAndroid Build Coastguard Worker             new FieldCoordinateTypeTest().run();
88*795d594fSAndroid Build Coastguard Worker         }
89*795d594fSAndroid Build Coastguard Worker     }
90*795d594fSAndroid Build Coastguard Worker 
91*795d594fSAndroid Build Coastguard Worker     public static class ArrayElementOutOfBoundsIndexTest extends VarHandleUnitTest {
92*795d594fSAndroid Build Coastguard Worker         private static final VarHandle vh;
93*795d594fSAndroid Build Coastguard Worker 
94*795d594fSAndroid Build Coastguard Worker         static {
95*795d594fSAndroid Build Coastguard Worker             try {
96*795d594fSAndroid Build Coastguard Worker                 vh = MethodHandles.arrayElementVarHandle(long[].class);
97*795d594fSAndroid Build Coastguard Worker             } catch (Exception e) {
98*795d594fSAndroid Build Coastguard Worker                 throw new RuntimeException(e);
99*795d594fSAndroid Build Coastguard Worker             }
100*795d594fSAndroid Build Coastguard Worker         }
101*795d594fSAndroid Build Coastguard Worker 
102*795d594fSAndroid Build Coastguard Worker         @Override
doTest()103*795d594fSAndroid Build Coastguard Worker         protected void doTest() {
104*795d594fSAndroid Build Coastguard Worker             long[] values = new long[33];
105*795d594fSAndroid Build Coastguard Worker             try {
106*795d594fSAndroid Build Coastguard Worker                 vh.get(values, -1);
107*795d594fSAndroid Build Coastguard Worker                 failUnreachable();
108*795d594fSAndroid Build Coastguard Worker             } catch (ArrayIndexOutOfBoundsException ex) {
109*795d594fSAndroid Build Coastguard Worker             }
110*795d594fSAndroid Build Coastguard Worker             try {
111*795d594fSAndroid Build Coastguard Worker                 vh.get(values, values.length);
112*795d594fSAndroid Build Coastguard Worker                 failUnreachable();
113*795d594fSAndroid Build Coastguard Worker             } catch (ArrayIndexOutOfBoundsException ex) {
114*795d594fSAndroid Build Coastguard Worker             }
115*795d594fSAndroid Build Coastguard Worker             try {
116*795d594fSAndroid Build Coastguard Worker                 vh.get(values, Integer.MAX_VALUE - 1);
117*795d594fSAndroid Build Coastguard Worker                 failUnreachable();
118*795d594fSAndroid Build Coastguard Worker             } catch (ArrayIndexOutOfBoundsException ex) {
119*795d594fSAndroid Build Coastguard Worker             }
120*795d594fSAndroid Build Coastguard Worker         }
121*795d594fSAndroid Build Coastguard Worker 
main(String[] args)122*795d594fSAndroid Build Coastguard Worker         public static void main(String[] args) {
123*795d594fSAndroid Build Coastguard Worker             new ArrayElementOutOfBoundsIndexTest().run();
124*795d594fSAndroid Build Coastguard Worker         }
125*795d594fSAndroid Build Coastguard Worker     }
126*795d594fSAndroid Build Coastguard Worker 
127*795d594fSAndroid Build Coastguard Worker     public static class ArrayElementBadIndexTypeTest extends VarHandleUnitTest {
128*795d594fSAndroid Build Coastguard Worker         private static final VarHandle vh;
129*795d594fSAndroid Build Coastguard Worker 
130*795d594fSAndroid Build Coastguard Worker         static {
131*795d594fSAndroid Build Coastguard Worker             try {
132*795d594fSAndroid Build Coastguard Worker                 vh = MethodHandles.arrayElementVarHandle(long[].class);
133*795d594fSAndroid Build Coastguard Worker             } catch (Exception e) {
134*795d594fSAndroid Build Coastguard Worker                 throw new RuntimeException(e);
135*795d594fSAndroid Build Coastguard Worker             }
136*795d594fSAndroid Build Coastguard Worker         }
137*795d594fSAndroid Build Coastguard Worker 
138*795d594fSAndroid Build Coastguard Worker         @Override
doTest()139*795d594fSAndroid Build Coastguard Worker         protected void doTest() {
140*795d594fSAndroid Build Coastguard Worker             long[] values = new long[33];
141*795d594fSAndroid Build Coastguard Worker             vh.set(values, Integer.valueOf(3), Long.MIN_VALUE);
142*795d594fSAndroid Build Coastguard Worker             vh.set(values, Byte.valueOf((byte) 0), Long.MIN_VALUE);
143*795d594fSAndroid Build Coastguard Worker             try {
144*795d594fSAndroid Build Coastguard Worker                 vh.set(values, 3.3f, Long.MAX_VALUE);
145*795d594fSAndroid Build Coastguard Worker                 failUnreachable();
146*795d594fSAndroid Build Coastguard Worker             } catch (WrongMethodTypeException ex) {
147*795d594fSAndroid Build Coastguard Worker             }
148*795d594fSAndroid Build Coastguard Worker         }
149*795d594fSAndroid Build Coastguard Worker 
main(String[] args)150*795d594fSAndroid Build Coastguard Worker         public static void main(String[] args) {
151*795d594fSAndroid Build Coastguard Worker             new ArrayElementBadIndexTypeTest().run();
152*795d594fSAndroid Build Coastguard Worker         }
153*795d594fSAndroid Build Coastguard Worker     }
154*795d594fSAndroid Build Coastguard Worker 
155*795d594fSAndroid Build Coastguard Worker     public static class ArrayElementNullArrayTest extends VarHandleUnitTest {
156*795d594fSAndroid Build Coastguard Worker         private static final VarHandle vh;
157*795d594fSAndroid Build Coastguard Worker 
158*795d594fSAndroid Build Coastguard Worker         static {
159*795d594fSAndroid Build Coastguard Worker             try {
160*795d594fSAndroid Build Coastguard Worker                 vh = MethodHandles.arrayElementVarHandle(long[].class);
161*795d594fSAndroid Build Coastguard Worker             } catch (Exception e) {
162*795d594fSAndroid Build Coastguard Worker                 throw new RuntimeException(e);
163*795d594fSAndroid Build Coastguard Worker             }
164*795d594fSAndroid Build Coastguard Worker         }
165*795d594fSAndroid Build Coastguard Worker 
166*795d594fSAndroid Build Coastguard Worker         @Override
doTest()167*795d594fSAndroid Build Coastguard Worker         protected void doTest() {
168*795d594fSAndroid Build Coastguard Worker             long[] values = null;
169*795d594fSAndroid Build Coastguard Worker             try {
170*795d594fSAndroid Build Coastguard Worker                 vh.get(values);
171*795d594fSAndroid Build Coastguard Worker                 failUnreachable();
172*795d594fSAndroid Build Coastguard Worker             } catch (WrongMethodTypeException ex) {
173*795d594fSAndroid Build Coastguard Worker             }
174*795d594fSAndroid Build Coastguard Worker         }
175*795d594fSAndroid Build Coastguard Worker 
main(String[] args)176*795d594fSAndroid Build Coastguard Worker         public static void main(String[] args) {
177*795d594fSAndroid Build Coastguard Worker             new ArrayElementNullArrayTest().run();
178*795d594fSAndroid Build Coastguard Worker         }
179*795d594fSAndroid Build Coastguard Worker     }
180*795d594fSAndroid Build Coastguard Worker 
181*795d594fSAndroid Build Coastguard Worker     public static class ArrayElementWrongArrayTypeTest extends VarHandleUnitTest {
182*795d594fSAndroid Build Coastguard Worker         private static final VarHandle vh;
183*795d594fSAndroid Build Coastguard Worker 
184*795d594fSAndroid Build Coastguard Worker         static {
185*795d594fSAndroid Build Coastguard Worker             try {
186*795d594fSAndroid Build Coastguard Worker                 vh = MethodHandles.arrayElementVarHandle(long[].class);
187*795d594fSAndroid Build Coastguard Worker             } catch (Exception e) {
188*795d594fSAndroid Build Coastguard Worker                 throw new RuntimeException(e);
189*795d594fSAndroid Build Coastguard Worker             }
190*795d594fSAndroid Build Coastguard Worker         }
191*795d594fSAndroid Build Coastguard Worker 
192*795d594fSAndroid Build Coastguard Worker         @Override
doTest()193*795d594fSAndroid Build Coastguard Worker         protected void doTest() {
194*795d594fSAndroid Build Coastguard Worker             try {
195*795d594fSAndroid Build Coastguard Worker                 vh.get(new char[10], 0);
196*795d594fSAndroid Build Coastguard Worker                 failUnreachable();
197*795d594fSAndroid Build Coastguard Worker             } catch (ClassCastException ex) {
198*795d594fSAndroid Build Coastguard Worker             }
199*795d594fSAndroid Build Coastguard Worker         }
200*795d594fSAndroid Build Coastguard Worker 
main(String[] args)201*795d594fSAndroid Build Coastguard Worker         public static void main(String[] args) {
202*795d594fSAndroid Build Coastguard Worker             new ArrayElementWrongArrayTypeTest().run();
203*795d594fSAndroid Build Coastguard Worker         }
204*795d594fSAndroid Build Coastguard Worker     }
205*795d594fSAndroid Build Coastguard Worker 
206*795d594fSAndroid Build Coastguard Worker     public static class ArrayElementMissingIndexTest extends VarHandleUnitTest {
207*795d594fSAndroid Build Coastguard Worker         private static final VarHandle vh;
208*795d594fSAndroid Build Coastguard Worker 
209*795d594fSAndroid Build Coastguard Worker         static {
210*795d594fSAndroid Build Coastguard Worker             try {
211*795d594fSAndroid Build Coastguard Worker                 vh = MethodHandles.arrayElementVarHandle(long[].class);
212*795d594fSAndroid Build Coastguard Worker             } catch (Exception e) {
213*795d594fSAndroid Build Coastguard Worker                 throw new RuntimeException(e);
214*795d594fSAndroid Build Coastguard Worker             }
215*795d594fSAndroid Build Coastguard Worker         }
216*795d594fSAndroid Build Coastguard Worker 
217*795d594fSAndroid Build Coastguard Worker         @Override
doTest()218*795d594fSAndroid Build Coastguard Worker         protected void doTest() {
219*795d594fSAndroid Build Coastguard Worker             long[] values = new long[33];
220*795d594fSAndroid Build Coastguard Worker             try {
221*795d594fSAndroid Build Coastguard Worker                 vh.get(values);
222*795d594fSAndroid Build Coastguard Worker                 failUnreachable();
223*795d594fSAndroid Build Coastguard Worker             } catch (WrongMethodTypeException ex) {
224*795d594fSAndroid Build Coastguard Worker             }
225*795d594fSAndroid Build Coastguard Worker         }
226*795d594fSAndroid Build Coastguard Worker 
main(String[] args)227*795d594fSAndroid Build Coastguard Worker         public static void main(String[] args) {
228*795d594fSAndroid Build Coastguard Worker             new ArrayElementMissingIndexTest().run();
229*795d594fSAndroid Build Coastguard Worker         }
230*795d594fSAndroid Build Coastguard Worker     }
231*795d594fSAndroid Build Coastguard Worker 
232*795d594fSAndroid Build Coastguard Worker     public static class ByteArrayViewOutOfBoundsIndexTest extends VarHandleUnitTest {
233*795d594fSAndroid Build Coastguard Worker         private static final VarHandle vh;
234*795d594fSAndroid Build Coastguard Worker 
235*795d594fSAndroid Build Coastguard Worker         static {
236*795d594fSAndroid Build Coastguard Worker             try {
237*795d594fSAndroid Build Coastguard Worker                 vh = MethodHandles.byteArrayViewVarHandle(int[].class, ByteOrder.BIG_ENDIAN);
238*795d594fSAndroid Build Coastguard Worker             } catch (Exception e) {
239*795d594fSAndroid Build Coastguard Worker                 throw new RuntimeException(e);
240*795d594fSAndroid Build Coastguard Worker             }
241*795d594fSAndroid Build Coastguard Worker         }
242*795d594fSAndroid Build Coastguard Worker 
243*795d594fSAndroid Build Coastguard Worker         @Override
doTest()244*795d594fSAndroid Build Coastguard Worker         protected void doTest() {
245*795d594fSAndroid Build Coastguard Worker             byte[] bytes = new byte[16];
246*795d594fSAndroid Build Coastguard Worker             try {
247*795d594fSAndroid Build Coastguard Worker                 vh.get(bytes, -1);
248*795d594fSAndroid Build Coastguard Worker                 failUnreachable();
249*795d594fSAndroid Build Coastguard Worker             } catch (IndexOutOfBoundsException ex) {
250*795d594fSAndroid Build Coastguard Worker             }
251*795d594fSAndroid Build Coastguard Worker             try {
252*795d594fSAndroid Build Coastguard Worker                 vh.get(bytes, bytes.length);
253*795d594fSAndroid Build Coastguard Worker                 failUnreachable();
254*795d594fSAndroid Build Coastguard Worker             } catch (IndexOutOfBoundsException ex) {
255*795d594fSAndroid Build Coastguard Worker             }
256*795d594fSAndroid Build Coastguard Worker             try {
257*795d594fSAndroid Build Coastguard Worker                 vh.get(bytes, Integer.MAX_VALUE - 1);
258*795d594fSAndroid Build Coastguard Worker                 failUnreachable();
259*795d594fSAndroid Build Coastguard Worker             } catch (IndexOutOfBoundsException ex) {
260*795d594fSAndroid Build Coastguard Worker             }
261*795d594fSAndroid Build Coastguard Worker             try {
262*795d594fSAndroid Build Coastguard Worker                 vh.get(bytes, bytes.length - Integer.SIZE / 8 + 1);
263*795d594fSAndroid Build Coastguard Worker                 failUnreachable();
264*795d594fSAndroid Build Coastguard Worker             } catch (IndexOutOfBoundsException ex) {
265*795d594fSAndroid Build Coastguard Worker             }
266*795d594fSAndroid Build Coastguard Worker             vh.get(bytes, bytes.length - Integer.SIZE / 8);
267*795d594fSAndroid Build Coastguard Worker         }
268*795d594fSAndroid Build Coastguard Worker 
main(String[] args)269*795d594fSAndroid Build Coastguard Worker         public static void main(String[] args) {
270*795d594fSAndroid Build Coastguard Worker             new ByteArrayViewOutOfBoundsIndexTest().run();
271*795d594fSAndroid Build Coastguard Worker         }
272*795d594fSAndroid Build Coastguard Worker     }
273*795d594fSAndroid Build Coastguard Worker 
274*795d594fSAndroid Build Coastguard Worker     public static class ByteArrayViewUnalignedAccessesIndexTest extends VarHandleUnitTest {
275*795d594fSAndroid Build Coastguard Worker         private static final VarHandle vh;
276*795d594fSAndroid Build Coastguard Worker 
277*795d594fSAndroid Build Coastguard Worker         static {
278*795d594fSAndroid Build Coastguard Worker             try {
279*795d594fSAndroid Build Coastguard Worker                 vh = MethodHandles.byteArrayViewVarHandle(int[].class, ByteOrder.BIG_ENDIAN);
280*795d594fSAndroid Build Coastguard Worker             } catch (Exception e) {
281*795d594fSAndroid Build Coastguard Worker                 throw new RuntimeException(e);
282*795d594fSAndroid Build Coastguard Worker             }
283*795d594fSAndroid Build Coastguard Worker         }
284*795d594fSAndroid Build Coastguard Worker 
285*795d594fSAndroid Build Coastguard Worker         @Override
doTest()286*795d594fSAndroid Build Coastguard Worker         protected void doTest() {
287*795d594fSAndroid Build Coastguard Worker             byte[] bytes = new byte[33];
288*795d594fSAndroid Build Coastguard Worker 
289*795d594fSAndroid Build Coastguard Worker             int alignedIndex = VarHandleUnitTestHelpers.alignedOffset_int(bytes, 0);
290*795d594fSAndroid Build Coastguard Worker             for (int i = alignedIndex; i < Integer.SIZE / 8; ++i) {
291*795d594fSAndroid Build Coastguard Worker                 // No exceptions are expected for GET and SET
292*795d594fSAndroid Build Coastguard Worker                 // accessors irrespective of the access alignment.
293*795d594fSAndroid Build Coastguard Worker                 vh.set(bytes, i, 380);
294*795d594fSAndroid Build Coastguard Worker                 vh.get(bytes, i);
295*795d594fSAndroid Build Coastguard Worker                 // Other accessors raise an IllegalStateException if
296*795d594fSAndroid Build Coastguard Worker                 // the access is unaligned.
297*795d594fSAndroid Build Coastguard Worker                 try {
298*795d594fSAndroid Build Coastguard Worker                     vh.compareAndExchange(bytes, i, 777, 320);
299*795d594fSAndroid Build Coastguard Worker                     assertTrue(i == alignedIndex);
300*795d594fSAndroid Build Coastguard Worker                 } catch (IllegalStateException ex) {
301*795d594fSAndroid Build Coastguard Worker                     assertFalse(i == alignedIndex);
302*795d594fSAndroid Build Coastguard Worker                 }
303*795d594fSAndroid Build Coastguard Worker                 try {
304*795d594fSAndroid Build Coastguard Worker                     vh.compareAndExchangeAcquire(bytes, i, 320, 767);
305*795d594fSAndroid Build Coastguard Worker                     assertTrue(i == alignedIndex);
306*795d594fSAndroid Build Coastguard Worker                 } catch (IllegalStateException ex) {
307*795d594fSAndroid Build Coastguard Worker                     assertFalse(i == alignedIndex);
308*795d594fSAndroid Build Coastguard Worker                 }
309*795d594fSAndroid Build Coastguard Worker                 try {
310*795d594fSAndroid Build Coastguard Worker                     vh.compareAndExchangeRelease(bytes, i, 767, 321);
311*795d594fSAndroid Build Coastguard Worker                     assertTrue(i == alignedIndex);
312*795d594fSAndroid Build Coastguard Worker                 } catch (IllegalStateException ex) {
313*795d594fSAndroid Build Coastguard Worker                     assertFalse(i == alignedIndex);
314*795d594fSAndroid Build Coastguard Worker                 }
315*795d594fSAndroid Build Coastguard Worker                 try {
316*795d594fSAndroid Build Coastguard Worker                     vh.compareAndSet(bytes, i, 767, 321);
317*795d594fSAndroid Build Coastguard Worker                     assertTrue(i == alignedIndex);
318*795d594fSAndroid Build Coastguard Worker                 } catch (IllegalStateException ex) {
319*795d594fSAndroid Build Coastguard Worker                     assertFalse(i == alignedIndex);
320*795d594fSAndroid Build Coastguard Worker                 }
321*795d594fSAndroid Build Coastguard Worker                 try {
322*795d594fSAndroid Build Coastguard Worker                     vh.getAcquire(bytes, i);
323*795d594fSAndroid Build Coastguard Worker                     assertTrue(i == alignedIndex);
324*795d594fSAndroid Build Coastguard Worker                 } catch (IllegalStateException ex) {
325*795d594fSAndroid Build Coastguard Worker                     assertFalse(i == alignedIndex);
326*795d594fSAndroid Build Coastguard Worker                 }
327*795d594fSAndroid Build Coastguard Worker                 try {
328*795d594fSAndroid Build Coastguard Worker                     vh.getAndAdd(bytes, i, 117);
329*795d594fSAndroid Build Coastguard Worker                     assertTrue(i == alignedIndex);
330*795d594fSAndroid Build Coastguard Worker                 } catch (IllegalStateException ex) {
331*795d594fSAndroid Build Coastguard Worker                     assertFalse(i == alignedIndex);
332*795d594fSAndroid Build Coastguard Worker                 }
333*795d594fSAndroid Build Coastguard Worker                 try {
334*795d594fSAndroid Build Coastguard Worker                     vh.getAndAddAcquire(bytes, i, 117);
335*795d594fSAndroid Build Coastguard Worker                     assertTrue(i == alignedIndex);
336*795d594fSAndroid Build Coastguard Worker                 } catch (IllegalStateException ex) {
337*795d594fSAndroid Build Coastguard Worker                     assertFalse(i == alignedIndex);
338*795d594fSAndroid Build Coastguard Worker                 }
339*795d594fSAndroid Build Coastguard Worker                 try {
340*795d594fSAndroid Build Coastguard Worker                     vh.getAndAddRelease(bytes, i, 117);
341*795d594fSAndroid Build Coastguard Worker                     assertTrue(i == alignedIndex);
342*795d594fSAndroid Build Coastguard Worker                 } catch (IllegalStateException ex) {
343*795d594fSAndroid Build Coastguard Worker                     assertFalse(i == alignedIndex);
344*795d594fSAndroid Build Coastguard Worker                 }
345*795d594fSAndroid Build Coastguard Worker                 try {
346*795d594fSAndroid Build Coastguard Worker                     vh.getAndBitwiseAnd(bytes, i, 118);
347*795d594fSAndroid Build Coastguard Worker                     assertTrue(i == alignedIndex);
348*795d594fSAndroid Build Coastguard Worker                 } catch (IllegalStateException ex) {
349*795d594fSAndroid Build Coastguard Worker                     assertFalse(i == alignedIndex);
350*795d594fSAndroid Build Coastguard Worker                 }
351*795d594fSAndroid Build Coastguard Worker                 try {
352*795d594fSAndroid Build Coastguard Worker                     vh.getAndBitwiseAndAcquire(bytes, i, 118);
353*795d594fSAndroid Build Coastguard Worker                     assertTrue(i == alignedIndex);
354*795d594fSAndroid Build Coastguard Worker                 } catch (IllegalStateException ex) {
355*795d594fSAndroid Build Coastguard Worker                     assertFalse(i == alignedIndex);
356*795d594fSAndroid Build Coastguard Worker                 }
357*795d594fSAndroid Build Coastguard Worker                 try {
358*795d594fSAndroid Build Coastguard Worker                     vh.getAndBitwiseAndRelease(bytes, i, 118);
359*795d594fSAndroid Build Coastguard Worker                     assertTrue(i == alignedIndex);
360*795d594fSAndroid Build Coastguard Worker                 } catch (IllegalStateException ex) {
361*795d594fSAndroid Build Coastguard Worker                     assertFalse(i == alignedIndex);
362*795d594fSAndroid Build Coastguard Worker                 }
363*795d594fSAndroid Build Coastguard Worker                 try {
364*795d594fSAndroid Build Coastguard Worker                     vh.getAndBitwiseOr(bytes, i, 118);
365*795d594fSAndroid Build Coastguard Worker                     assertTrue(i == alignedIndex);
366*795d594fSAndroid Build Coastguard Worker                 } catch (IllegalStateException ex) {
367*795d594fSAndroid Build Coastguard Worker                     assertFalse(i == alignedIndex);
368*795d594fSAndroid Build Coastguard Worker                 }
369*795d594fSAndroid Build Coastguard Worker                 try {
370*795d594fSAndroid Build Coastguard Worker                     vh.getAndBitwiseOrAcquire(bytes, i, 118);
371*795d594fSAndroid Build Coastguard Worker                     assertTrue(i == alignedIndex);
372*795d594fSAndroid Build Coastguard Worker                 } catch (IllegalStateException ex) {
373*795d594fSAndroid Build Coastguard Worker                     assertFalse(i == alignedIndex);
374*795d594fSAndroid Build Coastguard Worker                 }
375*795d594fSAndroid Build Coastguard Worker                 try {
376*795d594fSAndroid Build Coastguard Worker                     vh.getAndBitwiseOrRelease(bytes, i, 118);
377*795d594fSAndroid Build Coastguard Worker                     assertTrue(i == alignedIndex);
378*795d594fSAndroid Build Coastguard Worker                 } catch (IllegalStateException ex) {
379*795d594fSAndroid Build Coastguard Worker                     assertFalse(i == alignedIndex);
380*795d594fSAndroid Build Coastguard Worker                 }
381*795d594fSAndroid Build Coastguard Worker                 try {
382*795d594fSAndroid Build Coastguard Worker                     vh.getAndBitwiseXor(bytes, i, 118);
383*795d594fSAndroid Build Coastguard Worker                     assertTrue(i == alignedIndex);
384*795d594fSAndroid Build Coastguard Worker                 } catch (IllegalStateException ex) {
385*795d594fSAndroid Build Coastguard Worker                     assertFalse(i == alignedIndex);
386*795d594fSAndroid Build Coastguard Worker                 }
387*795d594fSAndroid Build Coastguard Worker                 try {
388*795d594fSAndroid Build Coastguard Worker                     vh.getAndBitwiseXorAcquire(bytes, i, 118);
389*795d594fSAndroid Build Coastguard Worker                     assertTrue(i == alignedIndex);
390*795d594fSAndroid Build Coastguard Worker                 } catch (IllegalStateException ex) {
391*795d594fSAndroid Build Coastguard Worker                     assertFalse(i == alignedIndex);
392*795d594fSAndroid Build Coastguard Worker                 }
393*795d594fSAndroid Build Coastguard Worker                 try {
394*795d594fSAndroid Build Coastguard Worker                     vh.getAndBitwiseXorRelease(bytes, i, 118);
395*795d594fSAndroid Build Coastguard Worker                     assertTrue(i == alignedIndex);
396*795d594fSAndroid Build Coastguard Worker                 } catch (IllegalStateException ex) {
397*795d594fSAndroid Build Coastguard Worker                     assertFalse(i == alignedIndex);
398*795d594fSAndroid Build Coastguard Worker                 }
399*795d594fSAndroid Build Coastguard Worker                 try {
400*795d594fSAndroid Build Coastguard Worker                     vh.getAndSet(bytes, i, 117);
401*795d594fSAndroid Build Coastguard Worker                     assertTrue(i == alignedIndex);
402*795d594fSAndroid Build Coastguard Worker                 } catch (IllegalStateException ex) {
403*795d594fSAndroid Build Coastguard Worker                     assertFalse(i == alignedIndex);
404*795d594fSAndroid Build Coastguard Worker                 }
405*795d594fSAndroid Build Coastguard Worker                 try {
406*795d594fSAndroid Build Coastguard Worker                     vh.getAndSetAcquire(bytes, i, 117);
407*795d594fSAndroid Build Coastguard Worker                     assertTrue(i == alignedIndex);
408*795d594fSAndroid Build Coastguard Worker                 } catch (IllegalStateException ex) {
409*795d594fSAndroid Build Coastguard Worker                     assertFalse(i == alignedIndex);
410*795d594fSAndroid Build Coastguard Worker                 }
411*795d594fSAndroid Build Coastguard Worker                 try {
412*795d594fSAndroid Build Coastguard Worker                     vh.getAndSetRelease(bytes, i, 117);
413*795d594fSAndroid Build Coastguard Worker                     assertTrue(i == alignedIndex);
414*795d594fSAndroid Build Coastguard Worker                 } catch (IllegalStateException ex) {
415*795d594fSAndroid Build Coastguard Worker                     assertFalse(i == alignedIndex);
416*795d594fSAndroid Build Coastguard Worker                 }
417*795d594fSAndroid Build Coastguard Worker                 try {
418*795d594fSAndroid Build Coastguard Worker                     vh.getOpaque(bytes, i);
419*795d594fSAndroid Build Coastguard Worker                     assertTrue(i == alignedIndex);
420*795d594fSAndroid Build Coastguard Worker                 } catch (IllegalStateException ex) {
421*795d594fSAndroid Build Coastguard Worker                     assertFalse(i == alignedIndex);
422*795d594fSAndroid Build Coastguard Worker                 }
423*795d594fSAndroid Build Coastguard Worker                 try {
424*795d594fSAndroid Build Coastguard Worker                     vh.getVolatile(bytes, i);
425*795d594fSAndroid Build Coastguard Worker                     assertTrue(i == alignedIndex);
426*795d594fSAndroid Build Coastguard Worker                 } catch (IllegalStateException ex) {
427*795d594fSAndroid Build Coastguard Worker                     assertFalse(i == alignedIndex);
428*795d594fSAndroid Build Coastguard Worker                 }
429*795d594fSAndroid Build Coastguard Worker                 try {
430*795d594fSAndroid Build Coastguard Worker                     vh.setOpaque(bytes, i, 777);
431*795d594fSAndroid Build Coastguard Worker                     assertTrue(i == alignedIndex);
432*795d594fSAndroid Build Coastguard Worker                 } catch (IllegalStateException ex) {
433*795d594fSAndroid Build Coastguard Worker                     assertFalse(i == alignedIndex);
434*795d594fSAndroid Build Coastguard Worker                 }
435*795d594fSAndroid Build Coastguard Worker                 try {
436*795d594fSAndroid Build Coastguard Worker                     vh.setRelease(bytes, i, 319);
437*795d594fSAndroid Build Coastguard Worker                     assertTrue(i == alignedIndex);
438*795d594fSAndroid Build Coastguard Worker                 } catch (IllegalStateException ex) {
439*795d594fSAndroid Build Coastguard Worker                     assertFalse(i == alignedIndex);
440*795d594fSAndroid Build Coastguard Worker                 }
441*795d594fSAndroid Build Coastguard Worker                 try {
442*795d594fSAndroid Build Coastguard Worker                     vh.setVolatile(bytes, i, 787);
443*795d594fSAndroid Build Coastguard Worker                     assertTrue(i == alignedIndex);
444*795d594fSAndroid Build Coastguard Worker                 } catch (IllegalStateException ex) {
445*795d594fSAndroid Build Coastguard Worker                     assertFalse(i == alignedIndex);
446*795d594fSAndroid Build Coastguard Worker                 }
447*795d594fSAndroid Build Coastguard Worker                 try {
448*795d594fSAndroid Build Coastguard Worker                     vh.weakCompareAndSet(bytes, i, 787, 340);
449*795d594fSAndroid Build Coastguard Worker                     assertTrue(i == alignedIndex);
450*795d594fSAndroid Build Coastguard Worker                 } catch (IllegalStateException ex) {
451*795d594fSAndroid Build Coastguard Worker                     assertFalse(i == alignedIndex);
452*795d594fSAndroid Build Coastguard Worker                 }
453*795d594fSAndroid Build Coastguard Worker                 try {
454*795d594fSAndroid Build Coastguard Worker                     vh.weakCompareAndSetAcquire(bytes, i, 787, 340);
455*795d594fSAndroid Build Coastguard Worker                     assertTrue(i == alignedIndex);
456*795d594fSAndroid Build Coastguard Worker                 } catch (IllegalStateException ex) {
457*795d594fSAndroid Build Coastguard Worker                     assertFalse(i == alignedIndex);
458*795d594fSAndroid Build Coastguard Worker                 }
459*795d594fSAndroid Build Coastguard Worker                 try {
460*795d594fSAndroid Build Coastguard Worker                     vh.weakCompareAndSetPlain(bytes, i, 787, 340);
461*795d594fSAndroid Build Coastguard Worker                     assertTrue(i == alignedIndex);
462*795d594fSAndroid Build Coastguard Worker                 } catch (IllegalStateException ex) {
463*795d594fSAndroid Build Coastguard Worker                     assertFalse(i == alignedIndex);
464*795d594fSAndroid Build Coastguard Worker                 }
465*795d594fSAndroid Build Coastguard Worker                 try {
466*795d594fSAndroid Build Coastguard Worker                     vh.weakCompareAndSetRelease(bytes, i, 787, 340);
467*795d594fSAndroid Build Coastguard Worker                     assertTrue(i == alignedIndex);
468*795d594fSAndroid Build Coastguard Worker                 } catch (IllegalStateException ex) {
469*795d594fSAndroid Build Coastguard Worker                     assertFalse(i == alignedIndex);
470*795d594fSAndroid Build Coastguard Worker                 }
471*795d594fSAndroid Build Coastguard Worker             }
472*795d594fSAndroid Build Coastguard Worker         }
473*795d594fSAndroid Build Coastguard Worker 
main(String[] args)474*795d594fSAndroid Build Coastguard Worker         public static void main(String[] args) {
475*795d594fSAndroid Build Coastguard Worker             new ByteArrayViewUnalignedAccessesIndexTest().run();
476*795d594fSAndroid Build Coastguard Worker         }
477*795d594fSAndroid Build Coastguard Worker     }
478*795d594fSAndroid Build Coastguard Worker 
479*795d594fSAndroid Build Coastguard Worker     public static class ByteArrayViewBadIndexTypeTest extends VarHandleUnitTest {
480*795d594fSAndroid Build Coastguard Worker         private static final VarHandle vh;
481*795d594fSAndroid Build Coastguard Worker 
482*795d594fSAndroid Build Coastguard Worker         static {
483*795d594fSAndroid Build Coastguard Worker             try {
484*795d594fSAndroid Build Coastguard Worker                 vh = MethodHandles.byteArrayViewVarHandle(int[].class, ByteOrder.LITTLE_ENDIAN);
485*795d594fSAndroid Build Coastguard Worker             } catch (Exception e) {
486*795d594fSAndroid Build Coastguard Worker                 throw new RuntimeException(e);
487*795d594fSAndroid Build Coastguard Worker             }
488*795d594fSAndroid Build Coastguard Worker         }
489*795d594fSAndroid Build Coastguard Worker 
490*795d594fSAndroid Build Coastguard Worker         @Override
doTest()491*795d594fSAndroid Build Coastguard Worker         protected void doTest() {
492*795d594fSAndroid Build Coastguard Worker             byte[] bytes = new byte[16];
493*795d594fSAndroid Build Coastguard Worker             // Boxed index goes through argument conversion so no exception expected.
494*795d594fSAndroid Build Coastguard Worker             vh.get(bytes, Integer.valueOf(3));
495*795d594fSAndroid Build Coastguard Worker             vh.get(bytes, Short.valueOf((short) 3));
496*795d594fSAndroid Build Coastguard Worker 
497*795d594fSAndroid Build Coastguard Worker             try {
498*795d594fSAndroid Build Coastguard Worker                 vh.get(bytes, System.out);
499*795d594fSAndroid Build Coastguard Worker                 failUnreachable();
500*795d594fSAndroid Build Coastguard Worker             } catch (WrongMethodTypeException ex) {
501*795d594fSAndroid Build Coastguard Worker             }
502*795d594fSAndroid Build Coastguard Worker         }
503*795d594fSAndroid Build Coastguard Worker 
main(String[] args)504*795d594fSAndroid Build Coastguard Worker         public static void main(String[] args) {
505*795d594fSAndroid Build Coastguard Worker             new ByteArrayViewBadIndexTypeTest().run();
506*795d594fSAndroid Build Coastguard Worker         }
507*795d594fSAndroid Build Coastguard Worker     }
508*795d594fSAndroid Build Coastguard Worker 
509*795d594fSAndroid Build Coastguard Worker     public static class ByteArrayViewMissingIndexTest extends VarHandleUnitTest {
510*795d594fSAndroid Build Coastguard Worker         private static final VarHandle vh;
511*795d594fSAndroid Build Coastguard Worker 
512*795d594fSAndroid Build Coastguard Worker         static {
513*795d594fSAndroid Build Coastguard Worker             try {
514*795d594fSAndroid Build Coastguard Worker                 vh = MethodHandles.byteArrayViewVarHandle(int[].class, ByteOrder.LITTLE_ENDIAN);
515*795d594fSAndroid Build Coastguard Worker             } catch (Exception e) {
516*795d594fSAndroid Build Coastguard Worker                 throw new RuntimeException(e);
517*795d594fSAndroid Build Coastguard Worker             }
518*795d594fSAndroid Build Coastguard Worker         }
519*795d594fSAndroid Build Coastguard Worker 
520*795d594fSAndroid Build Coastguard Worker         @Override
doTest()521*795d594fSAndroid Build Coastguard Worker         protected void doTest() {
522*795d594fSAndroid Build Coastguard Worker             byte[] bytes = new byte[16];
523*795d594fSAndroid Build Coastguard Worker             try {
524*795d594fSAndroid Build Coastguard Worker                 vh.get(bytes);
525*795d594fSAndroid Build Coastguard Worker                 failUnreachable();
526*795d594fSAndroid Build Coastguard Worker             } catch (WrongMethodTypeException ex) {
527*795d594fSAndroid Build Coastguard Worker             }
528*795d594fSAndroid Build Coastguard Worker         }
529*795d594fSAndroid Build Coastguard Worker 
main(String[] args)530*795d594fSAndroid Build Coastguard Worker         public static void main(String[] args) {
531*795d594fSAndroid Build Coastguard Worker             new ByteArrayViewMissingIndexTest().run();
532*795d594fSAndroid Build Coastguard Worker         }
533*795d594fSAndroid Build Coastguard Worker     }
534*795d594fSAndroid Build Coastguard Worker 
535*795d594fSAndroid Build Coastguard Worker     public static class ByteArrayViewBadByteArrayTest extends VarHandleUnitTest {
536*795d594fSAndroid Build Coastguard Worker         private static final VarHandle vh;
537*795d594fSAndroid Build Coastguard Worker 
538*795d594fSAndroid Build Coastguard Worker         static {
539*795d594fSAndroid Build Coastguard Worker             try {
540*795d594fSAndroid Build Coastguard Worker                 vh = MethodHandles.byteArrayViewVarHandle(int[].class, ByteOrder.LITTLE_ENDIAN);
541*795d594fSAndroid Build Coastguard Worker             } catch (Exception e) {
542*795d594fSAndroid Build Coastguard Worker                 throw new RuntimeException(e);
543*795d594fSAndroid Build Coastguard Worker             }
544*795d594fSAndroid Build Coastguard Worker         }
545*795d594fSAndroid Build Coastguard Worker 
546*795d594fSAndroid Build Coastguard Worker         @Override
doTest()547*795d594fSAndroid Build Coastguard Worker         protected void doTest() {
548*795d594fSAndroid Build Coastguard Worker             byte[] bytes = null;
549*795d594fSAndroid Build Coastguard Worker             try {
550*795d594fSAndroid Build Coastguard Worker                 vh.get(bytes, Integer.valueOf(3));
551*795d594fSAndroid Build Coastguard Worker                 failUnreachable();
552*795d594fSAndroid Build Coastguard Worker             } catch (NullPointerException ex) {
553*795d594fSAndroid Build Coastguard Worker             }
554*795d594fSAndroid Build Coastguard Worker             try {
555*795d594fSAndroid Build Coastguard Worker                 vh.get(System.err, Integer.valueOf(3));
556*795d594fSAndroid Build Coastguard Worker                 failUnreachable();
557*795d594fSAndroid Build Coastguard Worker             } catch (ClassCastException ex) {
558*795d594fSAndroid Build Coastguard Worker             }
559*795d594fSAndroid Build Coastguard Worker         }
560*795d594fSAndroid Build Coastguard Worker 
main(String[] args)561*795d594fSAndroid Build Coastguard Worker         public static void main(String[] args) {
562*795d594fSAndroid Build Coastguard Worker             new ByteArrayViewBadByteArrayTest().run();
563*795d594fSAndroid Build Coastguard Worker         }
564*795d594fSAndroid Build Coastguard Worker     }
565*795d594fSAndroid Build Coastguard Worker 
566*795d594fSAndroid Build Coastguard Worker     public static class ByteBufferViewOutOfBoundsIndexTest extends VarHandleUnitTest {
567*795d594fSAndroid Build Coastguard Worker         private final static int BYTES_PER_FLOAT = Float.SIZE / Byte.SIZE;
568*795d594fSAndroid Build Coastguard Worker 
569*795d594fSAndroid Build Coastguard Worker         private static final VarHandle vh;
570*795d594fSAndroid Build Coastguard Worker 
571*795d594fSAndroid Build Coastguard Worker         static {
572*795d594fSAndroid Build Coastguard Worker             try {
573*795d594fSAndroid Build Coastguard Worker                 vh = MethodHandles.byteBufferViewVarHandle(float[].class, ByteOrder.LITTLE_ENDIAN);
574*795d594fSAndroid Build Coastguard Worker             } catch (Exception e) {
575*795d594fSAndroid Build Coastguard Worker                 throw new RuntimeException(e);
576*795d594fSAndroid Build Coastguard Worker             }
577*795d594fSAndroid Build Coastguard Worker         }
578*795d594fSAndroid Build Coastguard Worker 
579*795d594fSAndroid Build Coastguard Worker         @Override
doTest()580*795d594fSAndroid Build Coastguard Worker         protected void doTest() {
581*795d594fSAndroid Build Coastguard Worker             ByteBuffer[] buffers =
582*795d594fSAndroid Build Coastguard Worker                     new ByteBuffer[] {
583*795d594fSAndroid Build Coastguard Worker                         ByteBuffer.allocateDirect(16),
584*795d594fSAndroid Build Coastguard Worker                         ByteBuffer.allocate(37),
585*795d594fSAndroid Build Coastguard Worker                         ByteBuffer.wrap(new byte[27], 3, 27 - 3)
586*795d594fSAndroid Build Coastguard Worker                     };
587*795d594fSAndroid Build Coastguard Worker             for (ByteBuffer buffer : buffers) {
588*795d594fSAndroid Build Coastguard Worker                 assertThrowsIOOBE(() -> vh.get(buffer, -1));
589*795d594fSAndroid Build Coastguard Worker                 assertThrowsIOOBE(() -> vh.get(buffer, Integer.MIN_VALUE));
590*795d594fSAndroid Build Coastguard Worker                 assertThrowsIOOBE(() -> vh.get(buffer, Integer.MAX_VALUE));
591*795d594fSAndroid Build Coastguard Worker                 assertThrowsIOOBE(() -> vh.get(buffer, buffer.limit()));
592*795d594fSAndroid Build Coastguard Worker                 assertThrowsIOOBE(() -> vh.get(buffer, buffer.limit() - BYTES_PER_FLOAT + 1));
593*795d594fSAndroid Build Coastguard Worker                 vh.get(buffer, buffer.limit() - BYTES_PER_FLOAT);
594*795d594fSAndroid Build Coastguard Worker             }
595*795d594fSAndroid Build Coastguard Worker         }
596*795d594fSAndroid Build Coastguard Worker 
main(String[] args)597*795d594fSAndroid Build Coastguard Worker         public static void main(String[] args) {
598*795d594fSAndroid Build Coastguard Worker             new ByteBufferViewOutOfBoundsIndexTest().run();
599*795d594fSAndroid Build Coastguard Worker         }
600*795d594fSAndroid Build Coastguard Worker     }
601*795d594fSAndroid Build Coastguard Worker 
602*795d594fSAndroid Build Coastguard Worker     public static class ByteBufferViewUnalignedAccessesIndexTest extends VarHandleUnitTest {
603*795d594fSAndroid Build Coastguard Worker         private static final VarHandle vh;
604*795d594fSAndroid Build Coastguard Worker 
605*795d594fSAndroid Build Coastguard Worker         static {
606*795d594fSAndroid Build Coastguard Worker             try {
607*795d594fSAndroid Build Coastguard Worker                 vh = MethodHandles.byteBufferViewVarHandle(int[].class, ByteOrder.BIG_ENDIAN);
608*795d594fSAndroid Build Coastguard Worker             } catch (Exception e) {
609*795d594fSAndroid Build Coastguard Worker                 throw new RuntimeException(e);
610*795d594fSAndroid Build Coastguard Worker             }
611*795d594fSAndroid Build Coastguard Worker         }
612*795d594fSAndroid Build Coastguard Worker 
613*795d594fSAndroid Build Coastguard Worker         @Override
doTest()614*795d594fSAndroid Build Coastguard Worker         protected void doTest() {
615*795d594fSAndroid Build Coastguard Worker             ByteBuffer[] buffers =
616*795d594fSAndroid Build Coastguard Worker                     new ByteBuffer[] {
617*795d594fSAndroid Build Coastguard Worker                         ByteBuffer.allocateDirect(16),
618*795d594fSAndroid Build Coastguard Worker                         ByteBuffer.allocate(37),
619*795d594fSAndroid Build Coastguard Worker                         ByteBuffer.wrap(new byte[27], 3, 27 - 3)
620*795d594fSAndroid Build Coastguard Worker                     };
621*795d594fSAndroid Build Coastguard Worker 
622*795d594fSAndroid Build Coastguard Worker             for (ByteBuffer buffer : buffers) {
623*795d594fSAndroid Build Coastguard Worker                 int alignedIndex = VarHandleUnitTestHelpers.alignedOffset_int(buffer, 0);
624*795d594fSAndroid Build Coastguard Worker                 for (int i = alignedIndex; i < Integer.SIZE / 8; ++i) {
625*795d594fSAndroid Build Coastguard Worker                     // No exceptions are expected for GET and SET
626*795d594fSAndroid Build Coastguard Worker                     // accessors irrespective of the access alignment.
627*795d594fSAndroid Build Coastguard Worker                     vh.set(buffer, i, 380);
628*795d594fSAndroid Build Coastguard Worker                     vh.get(buffer, i);
629*795d594fSAndroid Build Coastguard Worker                     // Other accessors raise an IllegalStateException if
630*795d594fSAndroid Build Coastguard Worker                     // the access is unaligned.
631*795d594fSAndroid Build Coastguard Worker                     try {
632*795d594fSAndroid Build Coastguard Worker                         vh.compareAndExchange(buffer, i, 777, 320);
633*795d594fSAndroid Build Coastguard Worker                         assertTrue(i == alignedIndex);
634*795d594fSAndroid Build Coastguard Worker                     } catch (IllegalStateException ex) {
635*795d594fSAndroid Build Coastguard Worker                         assertFalse(i == alignedIndex);
636*795d594fSAndroid Build Coastguard Worker                     }
637*795d594fSAndroid Build Coastguard Worker                     try {
638*795d594fSAndroid Build Coastguard Worker                         vh.compareAndExchangeAcquire(buffer, i, 320, 767);
639*795d594fSAndroid Build Coastguard Worker                         assertTrue(i == alignedIndex);
640*795d594fSAndroid Build Coastguard Worker                     } catch (IllegalStateException ex) {
641*795d594fSAndroid Build Coastguard Worker                         assertFalse(i == alignedIndex);
642*795d594fSAndroid Build Coastguard Worker                     }
643*795d594fSAndroid Build Coastguard Worker                     try {
644*795d594fSAndroid Build Coastguard Worker                         vh.compareAndExchangeRelease(buffer, i, 767, 321);
645*795d594fSAndroid Build Coastguard Worker                         assertTrue(i == alignedIndex);
646*795d594fSAndroid Build Coastguard Worker                     } catch (IllegalStateException ex) {
647*795d594fSAndroid Build Coastguard Worker                         assertFalse(i == alignedIndex);
648*795d594fSAndroid Build Coastguard Worker                     }
649*795d594fSAndroid Build Coastguard Worker                     try {
650*795d594fSAndroid Build Coastguard Worker                         vh.compareAndSet(buffer, i, 767, 321);
651*795d594fSAndroid Build Coastguard Worker                         assertTrue(i == alignedIndex);
652*795d594fSAndroid Build Coastguard Worker                     } catch (IllegalStateException ex) {
653*795d594fSAndroid Build Coastguard Worker                         assertFalse(i == alignedIndex);
654*795d594fSAndroid Build Coastguard Worker                     }
655*795d594fSAndroid Build Coastguard Worker                     try {
656*795d594fSAndroid Build Coastguard Worker                         vh.getAcquire(buffer, i);
657*795d594fSAndroid Build Coastguard Worker                         assertTrue(i == alignedIndex);
658*795d594fSAndroid Build Coastguard Worker                     } catch (IllegalStateException ex) {
659*795d594fSAndroid Build Coastguard Worker                         assertFalse(i == alignedIndex);
660*795d594fSAndroid Build Coastguard Worker                     }
661*795d594fSAndroid Build Coastguard Worker                     try {
662*795d594fSAndroid Build Coastguard Worker                         vh.getAndAdd(buffer, i, 117);
663*795d594fSAndroid Build Coastguard Worker                         assertTrue(i == alignedIndex);
664*795d594fSAndroid Build Coastguard Worker                     } catch (IllegalStateException ex) {
665*795d594fSAndroid Build Coastguard Worker                         assertFalse(i == alignedIndex);
666*795d594fSAndroid Build Coastguard Worker                     }
667*795d594fSAndroid Build Coastguard Worker                     try {
668*795d594fSAndroid Build Coastguard Worker                         vh.getAndAddAcquire(buffer, i, 117);
669*795d594fSAndroid Build Coastguard Worker                         assertTrue(i == alignedIndex);
670*795d594fSAndroid Build Coastguard Worker                     } catch (IllegalStateException ex) {
671*795d594fSAndroid Build Coastguard Worker                         assertFalse(i == alignedIndex);
672*795d594fSAndroid Build Coastguard Worker                     }
673*795d594fSAndroid Build Coastguard Worker                     try {
674*795d594fSAndroid Build Coastguard Worker                         vh.getAndAddRelease(buffer, i, 117);
675*795d594fSAndroid Build Coastguard Worker                         assertTrue(i == alignedIndex);
676*795d594fSAndroid Build Coastguard Worker                     } catch (IllegalStateException ex) {
677*795d594fSAndroid Build Coastguard Worker                         assertFalse(i == alignedIndex);
678*795d594fSAndroid Build Coastguard Worker                     }
679*795d594fSAndroid Build Coastguard Worker                     try {
680*795d594fSAndroid Build Coastguard Worker                         vh.getAndBitwiseAnd(buffer, i, 118);
681*795d594fSAndroid Build Coastguard Worker                         assertTrue(i == alignedIndex);
682*795d594fSAndroid Build Coastguard Worker                     } catch (IllegalStateException ex) {
683*795d594fSAndroid Build Coastguard Worker                         assertFalse(i == alignedIndex);
684*795d594fSAndroid Build Coastguard Worker                     }
685*795d594fSAndroid Build Coastguard Worker                     try {
686*795d594fSAndroid Build Coastguard Worker                         vh.getAndBitwiseAndAcquire(buffer, i, 118);
687*795d594fSAndroid Build Coastguard Worker                         assertTrue(i == alignedIndex);
688*795d594fSAndroid Build Coastguard Worker                     } catch (IllegalStateException ex) {
689*795d594fSAndroid Build Coastguard Worker                         assertFalse(i == alignedIndex);
690*795d594fSAndroid Build Coastguard Worker                     }
691*795d594fSAndroid Build Coastguard Worker                     try {
692*795d594fSAndroid Build Coastguard Worker                         vh.getAndBitwiseAndRelease(buffer, i, 118);
693*795d594fSAndroid Build Coastguard Worker                         assertTrue(i == alignedIndex);
694*795d594fSAndroid Build Coastguard Worker                     } catch (IllegalStateException ex) {
695*795d594fSAndroid Build Coastguard Worker                         assertFalse(i == alignedIndex);
696*795d594fSAndroid Build Coastguard Worker                     }
697*795d594fSAndroid Build Coastguard Worker                     try {
698*795d594fSAndroid Build Coastguard Worker                         vh.getAndBitwiseOr(buffer, i, 118);
699*795d594fSAndroid Build Coastguard Worker                         assertTrue(i == alignedIndex);
700*795d594fSAndroid Build Coastguard Worker                     } catch (IllegalStateException ex) {
701*795d594fSAndroid Build Coastguard Worker                         assertFalse(i == alignedIndex);
702*795d594fSAndroid Build Coastguard Worker                     }
703*795d594fSAndroid Build Coastguard Worker                     try {
704*795d594fSAndroid Build Coastguard Worker                         vh.getAndBitwiseOrAcquire(buffer, i, 118);
705*795d594fSAndroid Build Coastguard Worker                         assertTrue(i == alignedIndex);
706*795d594fSAndroid Build Coastguard Worker                     } catch (IllegalStateException ex) {
707*795d594fSAndroid Build Coastguard Worker                         assertFalse(i == alignedIndex);
708*795d594fSAndroid Build Coastguard Worker                     }
709*795d594fSAndroid Build Coastguard Worker                     try {
710*795d594fSAndroid Build Coastguard Worker                         vh.getAndBitwiseOrRelease(buffer, i, 118);
711*795d594fSAndroid Build Coastguard Worker                         assertTrue(i == alignedIndex);
712*795d594fSAndroid Build Coastguard Worker                     } catch (IllegalStateException ex) {
713*795d594fSAndroid Build Coastguard Worker                         assertFalse(i == alignedIndex);
714*795d594fSAndroid Build Coastguard Worker                     }
715*795d594fSAndroid Build Coastguard Worker                     try {
716*795d594fSAndroid Build Coastguard Worker                         vh.getAndBitwiseXor(buffer, i, 118);
717*795d594fSAndroid Build Coastguard Worker                         assertTrue(i == alignedIndex);
718*795d594fSAndroid Build Coastguard Worker                     } catch (IllegalStateException ex) {
719*795d594fSAndroid Build Coastguard Worker                         assertFalse(i == alignedIndex);
720*795d594fSAndroid Build Coastguard Worker                     }
721*795d594fSAndroid Build Coastguard Worker                     try {
722*795d594fSAndroid Build Coastguard Worker                         vh.getAndBitwiseXorAcquire(buffer, i, 118);
723*795d594fSAndroid Build Coastguard Worker                         assertTrue(i == alignedIndex);
724*795d594fSAndroid Build Coastguard Worker                     } catch (IllegalStateException ex) {
725*795d594fSAndroid Build Coastguard Worker                         assertFalse(i == alignedIndex);
726*795d594fSAndroid Build Coastguard Worker                     }
727*795d594fSAndroid Build Coastguard Worker                     try {
728*795d594fSAndroid Build Coastguard Worker                         vh.getAndBitwiseXorRelease(buffer, i, 118);
729*795d594fSAndroid Build Coastguard Worker                         assertTrue(i == alignedIndex);
730*795d594fSAndroid Build Coastguard Worker                     } catch (IllegalStateException ex) {
731*795d594fSAndroid Build Coastguard Worker                         assertFalse(i == alignedIndex);
732*795d594fSAndroid Build Coastguard Worker                     }
733*795d594fSAndroid Build Coastguard Worker                     try {
734*795d594fSAndroid Build Coastguard Worker                         vh.getAndSet(buffer, i, 117);
735*795d594fSAndroid Build Coastguard Worker                         assertTrue(i == alignedIndex);
736*795d594fSAndroid Build Coastguard Worker                     } catch (IllegalStateException ex) {
737*795d594fSAndroid Build Coastguard Worker                         assertFalse(i == alignedIndex);
738*795d594fSAndroid Build Coastguard Worker                     }
739*795d594fSAndroid Build Coastguard Worker                     try {
740*795d594fSAndroid Build Coastguard Worker                         vh.getAndSetAcquire(buffer, i, 117);
741*795d594fSAndroid Build Coastguard Worker                         assertTrue(i == alignedIndex);
742*795d594fSAndroid Build Coastguard Worker                     } catch (IllegalStateException ex) {
743*795d594fSAndroid Build Coastguard Worker                         assertFalse(i == alignedIndex);
744*795d594fSAndroid Build Coastguard Worker                     }
745*795d594fSAndroid Build Coastguard Worker                     try {
746*795d594fSAndroid Build Coastguard Worker                         vh.getAndSetRelease(buffer, i, 117);
747*795d594fSAndroid Build Coastguard Worker                         assertTrue(i == alignedIndex);
748*795d594fSAndroid Build Coastguard Worker                     } catch (IllegalStateException ex) {
749*795d594fSAndroid Build Coastguard Worker                         assertFalse(i == alignedIndex);
750*795d594fSAndroid Build Coastguard Worker                     }
751*795d594fSAndroid Build Coastguard Worker                     try {
752*795d594fSAndroid Build Coastguard Worker                         vh.getOpaque(buffer, i);
753*795d594fSAndroid Build Coastguard Worker                         assertTrue(i == alignedIndex);
754*795d594fSAndroid Build Coastguard Worker                     } catch (IllegalStateException ex) {
755*795d594fSAndroid Build Coastguard Worker                         assertFalse(i == alignedIndex);
756*795d594fSAndroid Build Coastguard Worker                     }
757*795d594fSAndroid Build Coastguard Worker                     try {
758*795d594fSAndroid Build Coastguard Worker                         vh.getVolatile(buffer, i);
759*795d594fSAndroid Build Coastguard Worker                         assertTrue(i == alignedIndex);
760*795d594fSAndroid Build Coastguard Worker                     } catch (IllegalStateException ex) {
761*795d594fSAndroid Build Coastguard Worker                         assertFalse(i == alignedIndex);
762*795d594fSAndroid Build Coastguard Worker                     }
763*795d594fSAndroid Build Coastguard Worker                     try {
764*795d594fSAndroid Build Coastguard Worker                         vh.setOpaque(buffer, i, 777);
765*795d594fSAndroid Build Coastguard Worker                         assertTrue(i == alignedIndex);
766*795d594fSAndroid Build Coastguard Worker                     } catch (IllegalStateException ex) {
767*795d594fSAndroid Build Coastguard Worker                         assertFalse(i == alignedIndex);
768*795d594fSAndroid Build Coastguard Worker                     }
769*795d594fSAndroid Build Coastguard Worker                     try {
770*795d594fSAndroid Build Coastguard Worker                         vh.setRelease(buffer, i, 319);
771*795d594fSAndroid Build Coastguard Worker                         assertTrue(i == alignedIndex);
772*795d594fSAndroid Build Coastguard Worker                     } catch (IllegalStateException ex) {
773*795d594fSAndroid Build Coastguard Worker                         assertFalse(i == alignedIndex);
774*795d594fSAndroid Build Coastguard Worker                     }
775*795d594fSAndroid Build Coastguard Worker                     try {
776*795d594fSAndroid Build Coastguard Worker                         vh.setVolatile(buffer, i, 787);
777*795d594fSAndroid Build Coastguard Worker                         assertTrue(i == alignedIndex);
778*795d594fSAndroid Build Coastguard Worker                     } catch (IllegalStateException ex) {
779*795d594fSAndroid Build Coastguard Worker                         assertFalse(i == alignedIndex);
780*795d594fSAndroid Build Coastguard Worker                     }
781*795d594fSAndroid Build Coastguard Worker                     try {
782*795d594fSAndroid Build Coastguard Worker                         vh.weakCompareAndSet(buffer, i, 787, 340);
783*795d594fSAndroid Build Coastguard Worker                         assertTrue(i == alignedIndex);
784*795d594fSAndroid Build Coastguard Worker                     } catch (IllegalStateException ex) {
785*795d594fSAndroid Build Coastguard Worker                         assertFalse(i == alignedIndex);
786*795d594fSAndroid Build Coastguard Worker                     }
787*795d594fSAndroid Build Coastguard Worker                     try {
788*795d594fSAndroid Build Coastguard Worker                         vh.weakCompareAndSetAcquire(buffer, i, 787, 340);
789*795d594fSAndroid Build Coastguard Worker                         assertTrue(i == alignedIndex);
790*795d594fSAndroid Build Coastguard Worker                     } catch (IllegalStateException ex) {
791*795d594fSAndroid Build Coastguard Worker                         assertFalse(i == alignedIndex);
792*795d594fSAndroid Build Coastguard Worker                     }
793*795d594fSAndroid Build Coastguard Worker                     try {
794*795d594fSAndroid Build Coastguard Worker                         vh.weakCompareAndSetPlain(buffer, i, 787, 340);
795*795d594fSAndroid Build Coastguard Worker                         assertTrue(i == alignedIndex);
796*795d594fSAndroid Build Coastguard Worker                     } catch (IllegalStateException ex) {
797*795d594fSAndroid Build Coastguard Worker                         assertFalse(i == alignedIndex);
798*795d594fSAndroid Build Coastguard Worker                     }
799*795d594fSAndroid Build Coastguard Worker                     try {
800*795d594fSAndroid Build Coastguard Worker                         vh.weakCompareAndSetRelease(buffer, i, 787, 340);
801*795d594fSAndroid Build Coastguard Worker                         assertTrue(i == alignedIndex);
802*795d594fSAndroid Build Coastguard Worker                     } catch (IllegalStateException ex) {
803*795d594fSAndroid Build Coastguard Worker                         assertFalse(i == alignedIndex);
804*795d594fSAndroid Build Coastguard Worker                     }
805*795d594fSAndroid Build Coastguard Worker                 }
806*795d594fSAndroid Build Coastguard Worker             }
807*795d594fSAndroid Build Coastguard Worker         }
808*795d594fSAndroid Build Coastguard Worker 
main(String[] args)809*795d594fSAndroid Build Coastguard Worker         public static void main(String[] args) {
810*795d594fSAndroid Build Coastguard Worker             new ByteBufferViewUnalignedAccessesIndexTest().run();
811*795d594fSAndroid Build Coastguard Worker         }
812*795d594fSAndroid Build Coastguard Worker     }
813*795d594fSAndroid Build Coastguard Worker 
814*795d594fSAndroid Build Coastguard Worker     public static class ByteBufferViewBadIndexTypeTest extends VarHandleUnitTest {
815*795d594fSAndroid Build Coastguard Worker         private static final VarHandle vh;
816*795d594fSAndroid Build Coastguard Worker 
817*795d594fSAndroid Build Coastguard Worker         static {
818*795d594fSAndroid Build Coastguard Worker             try {
819*795d594fSAndroid Build Coastguard Worker                 vh = MethodHandles.byteBufferViewVarHandle(int[].class, ByteOrder.LITTLE_ENDIAN);
820*795d594fSAndroid Build Coastguard Worker             } catch (Exception e) {
821*795d594fSAndroid Build Coastguard Worker                 throw new RuntimeException(e);
822*795d594fSAndroid Build Coastguard Worker             }
823*795d594fSAndroid Build Coastguard Worker         }
824*795d594fSAndroid Build Coastguard Worker 
825*795d594fSAndroid Build Coastguard Worker         @Override
doTest()826*795d594fSAndroid Build Coastguard Worker         protected void doTest() {
827*795d594fSAndroid Build Coastguard Worker             ByteBuffer[] buffers =
828*795d594fSAndroid Build Coastguard Worker                     new ByteBuffer[] {
829*795d594fSAndroid Build Coastguard Worker                         ByteBuffer.allocateDirect(16),
830*795d594fSAndroid Build Coastguard Worker                         ByteBuffer.allocate(16),
831*795d594fSAndroid Build Coastguard Worker                         ByteBuffer.wrap(new byte[32], 4, 32 - 4)
832*795d594fSAndroid Build Coastguard Worker                     };
833*795d594fSAndroid Build Coastguard Worker 
834*795d594fSAndroid Build Coastguard Worker             for (ByteBuffer buffer : buffers) {
835*795d594fSAndroid Build Coastguard Worker                 // Boxed index goes through argument conversion so no exception expected.
836*795d594fSAndroid Build Coastguard Worker                 vh.get(buffer, Integer.valueOf(3));
837*795d594fSAndroid Build Coastguard Worker                 vh.get(buffer, Short.valueOf((short) 3));
838*795d594fSAndroid Build Coastguard Worker                 vh.get(buffer, Byte.valueOf((byte) 7));
839*795d594fSAndroid Build Coastguard Worker                 try {
840*795d594fSAndroid Build Coastguard Worker                     vh.get(buffer, System.out);
841*795d594fSAndroid Build Coastguard Worker                     failUnreachable();
842*795d594fSAndroid Build Coastguard Worker                 } catch (WrongMethodTypeException ex) {
843*795d594fSAndroid Build Coastguard Worker                 }
844*795d594fSAndroid Build Coastguard Worker             }
845*795d594fSAndroid Build Coastguard Worker         }
846*795d594fSAndroid Build Coastguard Worker 
main(String[] args)847*795d594fSAndroid Build Coastguard Worker         public static void main(String[] args) {
848*795d594fSAndroid Build Coastguard Worker             new ByteBufferViewBadIndexTypeTest().run();
849*795d594fSAndroid Build Coastguard Worker         }
850*795d594fSAndroid Build Coastguard Worker     }
851*795d594fSAndroid Build Coastguard Worker 
852*795d594fSAndroid Build Coastguard Worker     public static class ByteBufferViewMissingIndexTest extends VarHandleUnitTest {
853*795d594fSAndroid Build Coastguard Worker         private static final VarHandle vh;
854*795d594fSAndroid Build Coastguard Worker 
855*795d594fSAndroid Build Coastguard Worker         static {
856*795d594fSAndroid Build Coastguard Worker             try {
857*795d594fSAndroid Build Coastguard Worker                 vh = MethodHandles.byteBufferViewVarHandle(int[].class, ByteOrder.LITTLE_ENDIAN);
858*795d594fSAndroid Build Coastguard Worker             } catch (Exception e) {
859*795d594fSAndroid Build Coastguard Worker                 throw new RuntimeException(e);
860*795d594fSAndroid Build Coastguard Worker             }
861*795d594fSAndroid Build Coastguard Worker         }
862*795d594fSAndroid Build Coastguard Worker 
863*795d594fSAndroid Build Coastguard Worker         @Override
doTest()864*795d594fSAndroid Build Coastguard Worker         protected void doTest() {
865*795d594fSAndroid Build Coastguard Worker             ByteBuffer[] buffers =
866*795d594fSAndroid Build Coastguard Worker                     new ByteBuffer[] {
867*795d594fSAndroid Build Coastguard Worker                         ByteBuffer.allocateDirect(16),
868*795d594fSAndroid Build Coastguard Worker                         ByteBuffer.allocate(16),
869*795d594fSAndroid Build Coastguard Worker                         ByteBuffer.wrap(new byte[32], 4, 32 - 4)
870*795d594fSAndroid Build Coastguard Worker                     };
871*795d594fSAndroid Build Coastguard Worker             for (ByteBuffer buffer : buffers) {
872*795d594fSAndroid Build Coastguard Worker                 try {
873*795d594fSAndroid Build Coastguard Worker                     vh.get(buffer);
874*795d594fSAndroid Build Coastguard Worker                     failUnreachable();
875*795d594fSAndroid Build Coastguard Worker                 } catch (WrongMethodTypeException ex) {
876*795d594fSAndroid Build Coastguard Worker                 }
877*795d594fSAndroid Build Coastguard Worker             }
878*795d594fSAndroid Build Coastguard Worker         }
879*795d594fSAndroid Build Coastguard Worker 
main(String[] args)880*795d594fSAndroid Build Coastguard Worker         public static void main(String[] args) {
881*795d594fSAndroid Build Coastguard Worker             new ByteBufferViewMissingIndexTest().run();
882*795d594fSAndroid Build Coastguard Worker         }
883*795d594fSAndroid Build Coastguard Worker     }
884*795d594fSAndroid Build Coastguard Worker 
885*795d594fSAndroid Build Coastguard Worker     public static class ByteBufferViewBadByteBufferTest extends VarHandleUnitTest {
886*795d594fSAndroid Build Coastguard Worker         private static final VarHandle vh;
887*795d594fSAndroid Build Coastguard Worker 
888*795d594fSAndroid Build Coastguard Worker         static {
889*795d594fSAndroid Build Coastguard Worker             try {
890*795d594fSAndroid Build Coastguard Worker                 vh = MethodHandles.byteBufferViewVarHandle(int[].class, ByteOrder.LITTLE_ENDIAN);
891*795d594fSAndroid Build Coastguard Worker             } catch (Exception e) {
892*795d594fSAndroid Build Coastguard Worker                 throw new RuntimeException(e);
893*795d594fSAndroid Build Coastguard Worker             }
894*795d594fSAndroid Build Coastguard Worker         }
895*795d594fSAndroid Build Coastguard Worker 
896*795d594fSAndroid Build Coastguard Worker         @Override
doTest()897*795d594fSAndroid Build Coastguard Worker         protected void doTest() {
898*795d594fSAndroid Build Coastguard Worker             if (VarHandleUnitTestHelpers.isRunningOnAndroid()) {
899*795d594fSAndroid Build Coastguard Worker                 ByteBuffer buffer = null;
900*795d594fSAndroid Build Coastguard Worker                 // The RI does not like this test
901*795d594fSAndroid Build Coastguard Worker                 try {
902*795d594fSAndroid Build Coastguard Worker                     vh.get(buffer, 3);
903*795d594fSAndroid Build Coastguard Worker                     failUnreachable();
904*795d594fSAndroid Build Coastguard Worker                 } catch (NullPointerException ex) {
905*795d594fSAndroid Build Coastguard Worker                 }
906*795d594fSAndroid Build Coastguard Worker             }
907*795d594fSAndroid Build Coastguard Worker             try {
908*795d594fSAndroid Build Coastguard Worker                 vh.get(System.err, 3);
909*795d594fSAndroid Build Coastguard Worker                 failUnreachable();
910*795d594fSAndroid Build Coastguard Worker             } catch (ClassCastException ex) {
911*795d594fSAndroid Build Coastguard Worker             }
912*795d594fSAndroid Build Coastguard Worker         }
913*795d594fSAndroid Build Coastguard Worker 
main(String[] args)914*795d594fSAndroid Build Coastguard Worker         public static void main(String[] args) {
915*795d594fSAndroid Build Coastguard Worker             new ByteBufferViewBadByteBufferTest().run();
916*795d594fSAndroid Build Coastguard Worker         }
917*795d594fSAndroid Build Coastguard Worker     }
918*795d594fSAndroid Build Coastguard Worker 
main(String[] args)919*795d594fSAndroid Build Coastguard Worker     public static void main(String[] args) {
920*795d594fSAndroid Build Coastguard Worker         FieldCoordinateTypeTest.main(args);
921*795d594fSAndroid Build Coastguard Worker 
922*795d594fSAndroid Build Coastguard Worker         ArrayElementOutOfBoundsIndexTest.main(args);
923*795d594fSAndroid Build Coastguard Worker         ArrayElementBadIndexTypeTest.main(args);
924*795d594fSAndroid Build Coastguard Worker         ArrayElementNullArrayTest.main(args);
925*795d594fSAndroid Build Coastguard Worker         ArrayElementWrongArrayTypeTest.main(args);
926*795d594fSAndroid Build Coastguard Worker         ArrayElementMissingIndexTest.main(args);
927*795d594fSAndroid Build Coastguard Worker 
928*795d594fSAndroid Build Coastguard Worker         ByteArrayViewOutOfBoundsIndexTest.main(args);
929*795d594fSAndroid Build Coastguard Worker         ByteArrayViewUnalignedAccessesIndexTest.main(args);
930*795d594fSAndroid Build Coastguard Worker         ByteArrayViewBadIndexTypeTest.main(args);
931*795d594fSAndroid Build Coastguard Worker         ByteArrayViewMissingIndexTest.main(args);
932*795d594fSAndroid Build Coastguard Worker         ByteArrayViewBadByteArrayTest.main(args);
933*795d594fSAndroid Build Coastguard Worker 
934*795d594fSAndroid Build Coastguard Worker         ByteBufferViewOutOfBoundsIndexTest.main(args);
935*795d594fSAndroid Build Coastguard Worker         ByteBufferViewUnalignedAccessesIndexTest.main(args);
936*795d594fSAndroid Build Coastguard Worker         ByteBufferViewBadIndexTypeTest.main(args);
937*795d594fSAndroid Build Coastguard Worker         ByteBufferViewMissingIndexTest.main(args);
938*795d594fSAndroid Build Coastguard Worker         ByteBufferViewBadByteBufferTest.main(args);
939*795d594fSAndroid Build Coastguard Worker     }
940*795d594fSAndroid Build Coastguard Worker }
941