static void testArrayIndexOutOfBounds(Handles hs) throws Throwable { int[] array = new int[10]; for (int i : new int[] {-1, Integer.MIN_VALUE, 10, 11, Integer.MAX_VALUE}) { final int ci = i; for (TestAccessMode am : testAccessModesOfType(TestAccessType.GET)) { checkIOOBE( am, () -> { int x = (int) hs.get(am).invokeExact(array, ci); }); } for (TestAccessMode am : testAccessModesOfType(TestAccessType.SET)) { checkIOOBE( am, () -> { hs.get(am).invokeExact(array, ci, 0x01234567); }); } for (TestAccessMode am : testAccessModesOfType(TestAccessType.COMPARE_AND_SET)) { checkIOOBE( am, () -> { boolean r = (boolean) hs.get(am).invokeExact(array, ci, 0x01234567, 0x89ABCDEF); }); } for (TestAccessMode am : testAccessModesOfType(TestAccessType.COMPARE_AND_EXCHANGE)) { checkIOOBE( am, () -> { int r = (int) hs.get(am).invokeExact(array, ci, 0x89ABCDEF, 0x01234567); }); } for (TestAccessMode am : testAccessModesOfType(TestAccessType.GET_AND_SET)) { checkIOOBE( am, () -> { int o = (int) hs.get(am).invokeExact(array, ci, 0x01234567); }); } for (TestAccessMode am : testAccessModesOfType(TestAccessType.GET_AND_ADD)) { checkIOOBE( am, () -> { int o = (int) hs.get(am).invokeExact(array, ci, 0xCAFEBABE); }); } for (TestAccessMode am : testAccessModesOfType(TestAccessType.GET_AND_BITWISE)) { checkIOOBE( am, () -> { int o = (int) hs.get(am).invokeExact(array, ci, 0xCAFEBABE); }); } } }