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