--- old/test/java/lang/invoke/VarHandles/VarHandleTestMethodHandleAccessByte.java 2016-05-31 12:16:48.006368175 +0300 +++ new/test/java/lang/invoke/VarHandles/VarHandleTestMethodHandleAccessByte.java 2016-05-31 12:16:47.906368540 +0300 @@ -39,11 +39,11 @@ import static org.testng.Assert.*; public class VarHandleTestMethodHandleAccessByte extends VarHandleBaseTest { - static final byte static_final_v = (byte)1; + static final byte static_final_v = (byte)0x01; static byte static_v; - final byte final_v = (byte)1; + final byte final_v = (byte)0x01; byte v; @@ -121,120 +121,286 @@ static void testInstanceField(VarHandleTestMethodHandleAccessByte recv, Handles hs) throws Throwable { // Plain { - hs.get(TestAccessMode.SET).invokeExact(recv, (byte)1); + hs.get(TestAccessMode.SET).invokeExact(recv, (byte)0x01); byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(recv); - assertEquals(x, (byte)1, "set byte value"); + assertEquals(x, (byte)0x01, "set byte value"); } // Volatile { - hs.get(TestAccessMode.SET_VOLATILE).invokeExact(recv, (byte)2); + hs.get(TestAccessMode.SET_VOLATILE).invokeExact(recv, (byte)0x23); byte x = (byte) hs.get(TestAccessMode.GET_VOLATILE).invokeExact(recv); - assertEquals(x, (byte)2, "setVolatile byte value"); + assertEquals(x, (byte)0x23, "setVolatile byte value"); } // Lazy { - hs.get(TestAccessMode.SET_RELEASE).invokeExact(recv, (byte)1); + hs.get(TestAccessMode.SET_RELEASE).invokeExact(recv, (byte)0x01); byte x = (byte) hs.get(TestAccessMode.GET_ACQUIRE).invokeExact(recv); - assertEquals(x, (byte)1, "setRelease byte value"); + assertEquals(x, (byte)0x01, "setRelease byte value"); } // Opaque { - hs.get(TestAccessMode.SET_OPAQUE).invokeExact(recv, (byte)2); + hs.get(TestAccessMode.SET_OPAQUE).invokeExact(recv, (byte)0x23); byte x = (byte) hs.get(TestAccessMode.GET_OPAQUE).invokeExact(recv); - assertEquals(x, (byte)2, "setOpaque byte value"); + assertEquals(x, (byte)0x23, "setOpaque byte value"); } + hs.get(TestAccessMode.SET).invokeExact(recv, (byte)0x01); - } + // Compare + { + boolean r = (boolean) hs.get(TestAccessMode.COMPARE_AND_SET).invokeExact(recv, (byte)0x01, (byte)0x23); + assertEquals(r, true, "success compareAndSet byte"); + byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(recv); + assertEquals(x, (byte)0x23, "success compareAndSet byte value"); + } - static void testInstanceFieldUnsupported(VarHandleTestMethodHandleAccessByte recv, Handles hs) throws Throwable { - for (TestAccessMode am : testAccessModesOfType(TestAccessType.COMPARE_AND_SET)) { - checkUOE(am, () -> { - boolean r = (boolean) hs.get(am).invokeExact(recv, (byte)1, (byte)2); - }); + { + boolean r = (boolean) hs.get(TestAccessMode.COMPARE_AND_SET).invokeExact(recv, (byte)0x01, (byte)0x45); + assertEquals(r, false, "failing compareAndSet byte"); + byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(recv); + assertEquals(x, (byte)0x23, "failing compareAndSet byte value"); + } + + { + byte r = (byte) hs.get(TestAccessMode.COMPARE_AND_EXCHANGE_VOLATILE).invokeExact(recv, (byte)0x23, (byte)0x01); + assertEquals(r, (byte)0x23, "success compareAndExchangeVolatile byte"); + byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(recv); + assertEquals(x, (byte)0x01, "success compareAndExchangeVolatile byte value"); + } + + { + byte r = (byte) hs.get(TestAccessMode.COMPARE_AND_EXCHANGE_VOLATILE).invokeExact(recv, (byte)0x23, (byte)0x45); + assertEquals(r, (byte)0x01, "failing compareAndExchangeVolatile byte"); + byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(recv); + assertEquals(x, (byte)0x01, "failing compareAndExchangeVolatile byte value"); + } + + { + byte r = (byte) hs.get(TestAccessMode.COMPARE_AND_EXCHANGE_ACQUIRE).invokeExact(recv, (byte)0x01, (byte)0x23); + assertEquals(r, (byte)0x01, "success compareAndExchangeAcquire byte"); + byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(recv); + assertEquals(x, (byte)0x23, "success compareAndExchangeAcquire byte value"); + } + + { + byte r = (byte) hs.get(TestAccessMode.COMPARE_AND_EXCHANGE_ACQUIRE).invokeExact(recv, (byte)0x01, (byte)0x45); + assertEquals(r, (byte)0x23, "failing compareAndExchangeAcquire byte"); + byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(recv); + assertEquals(x, (byte)0x23, "failing compareAndExchangeAcquire byte value"); + } + + { + byte r = (byte) hs.get(TestAccessMode.COMPARE_AND_EXCHANGE_RELEASE).invokeExact(recv, (byte)0x23, (byte)0x01); + assertEquals(r, (byte)0x23, "success compareAndExchangeRelease byte"); + byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(recv); + assertEquals(x, (byte)0x01, "success compareAndExchangeRelease byte value"); + } + + { + byte r = (byte) hs.get(TestAccessMode.COMPARE_AND_EXCHANGE_RELEASE).invokeExact(recv, (byte)0x23, (byte)0x45); + assertEquals(r, (byte)0x01, "failing compareAndExchangeRelease byte"); + byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(recv); + assertEquals(x, (byte)0x01, "failing compareAndExchangeRelease byte value"); + } + + { + boolean success = false; + for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) { + success = (boolean) hs.get(TestAccessMode.WEAK_COMPARE_AND_SET).invokeExact(recv, (byte)0x01, (byte)0x23); + } + assertEquals(success, true, "weakCompareAndSet byte"); + byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(recv); + assertEquals(x, (byte)0x23, "weakCompareAndSet byte value"); } - for (TestAccessMode am : testAccessModesOfType(TestAccessType.COMPARE_AND_EXCHANGE)) { - checkUOE(am, () -> { - byte r = (byte) hs.get(am).invokeExact(recv, (byte)1, (byte)2); - }); + { + boolean success = false; + for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) { + success = (boolean) hs.get(TestAccessMode.WEAK_COMPARE_AND_SET_ACQUIRE).invokeExact(recv, (byte)0x23, (byte)0x01); + } + assertEquals(success, true, "weakCompareAndSetAcquire byte"); + byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(recv); + assertEquals(x, (byte)0x01, "weakCompareAndSetAcquire byte"); + } + + { + boolean success = false; + for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) { + success = (boolean) hs.get(TestAccessMode.WEAK_COMPARE_AND_SET_RELEASE).invokeExact(recv, (byte)0x01, (byte)0x23); + } + assertEquals(success, true, "weakCompareAndSetRelease byte"); + byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(recv); + assertEquals(x, (byte)0x23, "weakCompareAndSetRelease byte"); } - for (TestAccessMode am : testAccessModesOfType(TestAccessType.GET_AND_SET)) { - checkUOE(am, () -> { - byte r = (byte) hs.get(am).invokeExact(recv, (byte)1); - }); + // Compare set and get + { + byte o = (byte) hs.get(TestAccessMode.GET_AND_SET).invokeExact(recv, (byte)0x01); + assertEquals(o, (byte)0x23, "getAndSet byte"); + byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(recv); + assertEquals(x, (byte)0x01, "getAndSet byte value"); } - for (TestAccessMode am : testAccessModesOfType(TestAccessType.GET_AND_ADD)) { - checkUOE(am, () -> { - byte r = (byte) hs.get(am).invokeExact(recv, (byte)1); - }); + hs.get(TestAccessMode.SET).invokeExact(recv, (byte)0x01); + + // get and add, add and get + { + byte o = (byte) hs.get(TestAccessMode.GET_AND_ADD).invokeExact(recv, (byte)0x45); + assertEquals(o, (byte)0x01, "getAndAdd byte"); + byte c = (byte) hs.get(TestAccessMode.ADD_AND_GET).invokeExact(recv, (byte)0x45); + assertEquals(c, (byte)((byte)0x01 + (byte)0x45 + (byte)0x45), "getAndAdd byte value"); } } + static void testInstanceFieldUnsupported(VarHandleTestMethodHandleAccessByte recv, Handles hs) throws Throwable { + + } + static void testStaticField(Handles hs) throws Throwable { // Plain { - hs.get(TestAccessMode.SET).invokeExact((byte)1); + hs.get(TestAccessMode.SET).invokeExact((byte)0x01); byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(); - assertEquals(x, (byte)1, "set byte value"); + assertEquals(x, (byte)0x01, "set byte value"); } // Volatile { - hs.get(TestAccessMode.SET_VOLATILE).invokeExact((byte)2); + hs.get(TestAccessMode.SET_VOLATILE).invokeExact((byte)0x23); byte x = (byte) hs.get(TestAccessMode.GET_VOLATILE).invokeExact(); - assertEquals(x, (byte)2, "setVolatile byte value"); + assertEquals(x, (byte)0x23, "setVolatile byte value"); } // Lazy { - hs.get(TestAccessMode.SET_RELEASE).invokeExact((byte)1); + hs.get(TestAccessMode.SET_RELEASE).invokeExact((byte)0x01); byte x = (byte) hs.get(TestAccessMode.GET_ACQUIRE).invokeExact(); - assertEquals(x, (byte)1, "setRelease byte value"); + assertEquals(x, (byte)0x01, "setRelease byte value"); } // Opaque { - hs.get(TestAccessMode.SET_OPAQUE).invokeExact((byte)2); + hs.get(TestAccessMode.SET_OPAQUE).invokeExact((byte)0x23); byte x = (byte) hs.get(TestAccessMode.GET_OPAQUE).invokeExact(); - assertEquals(x, (byte)2, "setOpaque byte value"); + assertEquals(x, (byte)0x23, "setOpaque byte value"); } + hs.get(TestAccessMode.SET).invokeExact((byte)0x01); - } + // Compare + { + boolean r = (boolean) hs.get(TestAccessMode.COMPARE_AND_SET).invokeExact((byte)0x01, (byte)0x23); + assertEquals(r, true, "success compareAndSet byte"); + byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(); + assertEquals(x, (byte)0x23, "success compareAndSet byte value"); + } - static void testStaticFieldUnsupported(Handles hs) throws Throwable { - for (TestAccessMode am : testAccessModesOfType(TestAccessType.COMPARE_AND_SET)) { - checkUOE(am, () -> { - boolean r = (boolean) hs.get(am).invokeExact((byte)1, (byte)2); - }); + { + boolean r = (boolean) hs.get(TestAccessMode.COMPARE_AND_SET).invokeExact((byte)0x01, (byte)0x45); + assertEquals(r, false, "failing compareAndSet byte"); + byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(); + assertEquals(x, (byte)0x23, "failing compareAndSet byte value"); + } + + { + byte r = (byte) hs.get(TestAccessMode.COMPARE_AND_EXCHANGE_VOLATILE).invokeExact((byte)0x23, (byte)0x01); + assertEquals(r, (byte)0x23, "success compareAndExchangeVolatile byte"); + byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(); + assertEquals(x, (byte)0x01, "success compareAndExchangeVolatile byte value"); + } + + { + byte r = (byte) hs.get(TestAccessMode.COMPARE_AND_EXCHANGE_VOLATILE).invokeExact((byte)0x23, (byte)0x45); + assertEquals(r, (byte)0x01, "failing compareAndExchangeVolatile byte"); + byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(); + assertEquals(x, (byte)0x01, "failing compareAndExchangeVolatile byte value"); + } + + { + byte r = (byte) hs.get(TestAccessMode.COMPARE_AND_EXCHANGE_ACQUIRE).invokeExact((byte)0x01, (byte)0x23); + assertEquals(r, (byte)0x01, "success compareAndExchangeAcquire byte"); + byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(); + assertEquals(x, (byte)0x23, "success compareAndExchangeAcquire byte value"); + } + + { + byte r = (byte) hs.get(TestAccessMode.COMPARE_AND_EXCHANGE_ACQUIRE).invokeExact((byte)0x01, (byte)0x45); + assertEquals(r, (byte)0x23, "failing compareAndExchangeAcquire byte"); + byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(); + assertEquals(x, (byte)0x23, "failing compareAndExchangeAcquire byte value"); + } + + { + byte r = (byte) hs.get(TestAccessMode.COMPARE_AND_EXCHANGE_RELEASE).invokeExact((byte)0x23, (byte)0x01); + assertEquals(r, (byte)0x23, "success compareAndExchangeRelease byte"); + byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(); + assertEquals(x, (byte)0x01, "success compareAndExchangeRelease byte value"); } - for (TestAccessMode am : testAccessModesOfType(TestAccessType.COMPARE_AND_EXCHANGE)) { - checkUOE(am, () -> { - byte r = (byte) hs.get(am).invokeExact((byte)1, (byte)2); - }); + { + byte r = (byte) hs.get(TestAccessMode.COMPARE_AND_EXCHANGE_RELEASE).invokeExact((byte)0x23, (byte)0x45); + assertEquals(r, (byte)0x01, "failing compareAndExchangeRelease byte"); + byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(); + assertEquals(x, (byte)0x01, "failing compareAndExchangeRelease byte value"); } - for (TestAccessMode am : testAccessModesOfType(TestAccessType.GET_AND_SET)) { - checkUOE(am, () -> { - byte r = (byte) hs.get(am).invokeExact((byte)1); - }); + { + boolean success = false; + for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) { + success = (boolean) hs.get(TestAccessMode.WEAK_COMPARE_AND_SET).invokeExact((byte)0x01, (byte)0x23); + } + assertEquals(success, true, "weakCompareAndSet byte"); + byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(); + assertEquals(x, (byte)0x23, "weakCompareAndSet byte value"); } - for (TestAccessMode am : testAccessModesOfType(TestAccessType.GET_AND_ADD)) { - checkUOE(am, () -> { - byte r = (byte) hs.get(am).invokeExact((byte)1); - }); + { + boolean success = false; + for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) { + success = (boolean) hs.get(TestAccessMode.WEAK_COMPARE_AND_SET_ACQUIRE).invokeExact((byte)0x23, (byte)0x01); + } + assertEquals(success, true, "weakCompareAndSetAcquire byte"); + byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(); + assertEquals(x, (byte)0x01, "weakCompareAndSetAcquire byte"); } + + { + boolean success = false; + for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) { + success = (boolean) hs.get(TestAccessMode.WEAK_COMPARE_AND_SET_RELEASE).invokeExact((byte)0x01, (byte)0x23); + } + assertEquals(success, true, "weakCompareAndSetRelease byte"); + byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(); + assertEquals(x, (byte)0x23, "weakCompareAndSetRelease byte"); + } + + // Compare set and get + { + byte o = (byte) hs.get(TestAccessMode.GET_AND_SET).invokeExact( (byte)0x01); + assertEquals(o, (byte)0x23, "getAndSet byte"); + byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(); + assertEquals(x, (byte)0x01, "getAndSet byte value"); + } + + hs.get(TestAccessMode.SET).invokeExact((byte)0x01); + + // get and add, add and get + { + byte o = (byte) hs.get(TestAccessMode.GET_AND_ADD).invokeExact( (byte)0x45); + assertEquals(o, (byte)0x01, "getAndAdd byte"); + byte c = (byte) hs.get(TestAccessMode.ADD_AND_GET).invokeExact((byte)0x45); + assertEquals(c, (byte)((byte)0x01 + (byte)0x45 + (byte)0x45), "getAndAdd byte value"); + } + } + + static void testStaticFieldUnsupported(Handles hs) throws Throwable { + } @@ -244,34 +410,139 @@ for (int i = 0; i < array.length; i++) { // Plain { - hs.get(TestAccessMode.SET).invokeExact(array, i, (byte)1); + hs.get(TestAccessMode.SET).invokeExact(array, i, (byte)0x01); byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(array, i); - assertEquals(x, (byte)1, "get byte value"); + assertEquals(x, (byte)0x01, "get byte value"); } // Volatile { - hs.get(TestAccessMode.SET_VOLATILE).invokeExact(array, i, (byte)2); + hs.get(TestAccessMode.SET_VOLATILE).invokeExact(array, i, (byte)0x23); byte x = (byte) hs.get(TestAccessMode.GET_VOLATILE).invokeExact(array, i); - assertEquals(x, (byte)2, "setVolatile byte value"); + assertEquals(x, (byte)0x23, "setVolatile byte value"); } // Lazy { - hs.get(TestAccessMode.SET_RELEASE).invokeExact(array, i, (byte)1); + hs.get(TestAccessMode.SET_RELEASE).invokeExact(array, i, (byte)0x01); byte x = (byte) hs.get(TestAccessMode.GET_ACQUIRE).invokeExact(array, i); - assertEquals(x, (byte)1, "setRelease byte value"); + assertEquals(x, (byte)0x01, "setRelease byte value"); } // Opaque { - hs.get(TestAccessMode.SET_OPAQUE).invokeExact(array, i, (byte)2); + hs.get(TestAccessMode.SET_OPAQUE).invokeExact(array, i, (byte)0x23); byte x = (byte) hs.get(TestAccessMode.GET_OPAQUE).invokeExact(array, i); - assertEquals(x, (byte)2, "setOpaque byte value"); + assertEquals(x, (byte)0x23, "setOpaque byte value"); + } + + hs.get(TestAccessMode.SET).invokeExact(array, i, (byte)0x01); + + // Compare + { + boolean r = (boolean) hs.get(TestAccessMode.COMPARE_AND_SET).invokeExact(array, i, (byte)0x01, (byte)0x23); + assertEquals(r, true, "success compareAndSet byte"); + byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(array, i); + assertEquals(x, (byte)0x23, "success compareAndSet byte value"); + } + + { + boolean r = (boolean) hs.get(TestAccessMode.COMPARE_AND_SET).invokeExact(array, i, (byte)0x01, (byte)0x45); + assertEquals(r, false, "failing compareAndSet byte"); + byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(array, i); + assertEquals(x, (byte)0x23, "failing compareAndSet byte value"); + } + + { + byte r = (byte) hs.get(TestAccessMode.COMPARE_AND_EXCHANGE_VOLATILE).invokeExact(array, i, (byte)0x23, (byte)0x01); + assertEquals(r, (byte)0x23, "success compareAndExchangeVolatile byte"); + byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(array, i); + assertEquals(x, (byte)0x01, "success compareAndExchangeVolatile byte value"); + } + + { + byte r = (byte) hs.get(TestAccessMode.COMPARE_AND_EXCHANGE_VOLATILE).invokeExact(array, i, (byte)0x23, (byte)0x45); + assertEquals(r, (byte)0x01, "failing compareAndExchangeVolatile byte"); + byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(array, i); + assertEquals(x, (byte)0x01, "failing compareAndExchangeVolatile byte value"); } + { + byte r = (byte) hs.get(TestAccessMode.COMPARE_AND_EXCHANGE_ACQUIRE).invokeExact(array, i, (byte)0x01, (byte)0x23); + assertEquals(r, (byte)0x01, "success compareAndExchangeAcquire byte"); + byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(array, i); + assertEquals(x, (byte)0x23, "success compareAndExchangeAcquire byte value"); + } + + { + byte r = (byte) hs.get(TestAccessMode.COMPARE_AND_EXCHANGE_ACQUIRE).invokeExact(array, i, (byte)0x01, (byte)0x45); + assertEquals(r, (byte)0x23, "failing compareAndExchangeAcquire byte"); + byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(array, i); + assertEquals(x, (byte)0x23, "failing compareAndExchangeAcquire byte value"); + } + + { + byte r = (byte) hs.get(TestAccessMode.COMPARE_AND_EXCHANGE_RELEASE).invokeExact(array, i, (byte)0x23, (byte)0x01); + assertEquals(r, (byte)0x23, "success compareAndExchangeRelease byte"); + byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(array, i); + assertEquals(x, (byte)0x01, "success compareAndExchangeRelease byte value"); + } + { + byte r = (byte) hs.get(TestAccessMode.COMPARE_AND_EXCHANGE_RELEASE).invokeExact(array, i, (byte)0x23, (byte)0x45); + assertEquals(r, (byte)0x01, "failing compareAndExchangeRelease byte"); + byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(array, i); + assertEquals(x, (byte)0x01, "failing compareAndExchangeRelease byte value"); + } + + { + boolean success = false; + for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) { + success = (boolean) hs.get(TestAccessMode.WEAK_COMPARE_AND_SET).invokeExact(array, i, (byte)0x01, (byte)0x23); + } + assertEquals(success, true, "weakCompareAndSet byte"); + byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(array, i); + assertEquals(x, (byte)0x23, "weakCompareAndSet byte value"); + } + + { + boolean success = false; + for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) { + success = (boolean) hs.get(TestAccessMode.WEAK_COMPARE_AND_SET_ACQUIRE).invokeExact(array, i, (byte)0x23, (byte)0x01); + } + assertEquals(success, true, "weakCompareAndSetAcquire byte"); + byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(array, i); + assertEquals(x, (byte)0x01, "weakCompareAndSetAcquire byte"); + } + + { + boolean success = false; + for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) { + success = (boolean) hs.get(TestAccessMode.WEAK_COMPARE_AND_SET_RELEASE).invokeExact(array, i, (byte)0x01, (byte)0x23); + } + assertEquals(success, true, "weakCompareAndSetRelease byte"); + byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(array, i); + assertEquals(x, (byte)0x23, "weakCompareAndSetRelease byte"); + } + + // Compare set and get + { + byte o = (byte) hs.get(TestAccessMode.GET_AND_SET).invokeExact(array, i, (byte)0x01); + assertEquals(o, (byte)0x23, "getAndSet byte"); + byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(array, i); + assertEquals(x, (byte)0x01, "getAndSet byte value"); + } + + hs.get(TestAccessMode.SET).invokeExact(array, i, (byte)0x01); + + // get and add, add and get + { + byte o = (byte) hs.get(TestAccessMode.GET_AND_ADD).invokeExact(array, i, (byte)0x45); + assertEquals(o, (byte)0x01, "getAndAdd byte"); + byte c = (byte) hs.get(TestAccessMode.ADD_AND_GET).invokeExact(array, i, (byte)0x45); + assertEquals(c, (byte)((byte)0x01 + (byte)0x45 + (byte)0x45), "getAndAdd byte value"); + } } } @@ -279,29 +550,7 @@ byte[] array = new byte[10]; final int i = 0; - for (TestAccessMode am : testAccessModesOfType(TestAccessType.COMPARE_AND_SET)) { - checkUOE(am, () -> { - boolean r = (boolean) hs.get(am).invokeExact(array, i, (byte)1, (byte)2); - }); - } - - for (TestAccessMode am : testAccessModesOfType(TestAccessType.COMPARE_AND_EXCHANGE)) { - checkUOE(am, () -> { - byte r = (byte) hs.get(am).invokeExact(array, i, (byte)1, (byte)2); - }); - } - - for (TestAccessMode am : testAccessModesOfType(TestAccessType.GET_AND_SET)) { - checkUOE(am, () -> { - byte r = (byte) hs.get(am).invokeExact(array, i, (byte)1); - }); - } - for (TestAccessMode am : testAccessModesOfType(TestAccessType.GET_AND_ADD)) { - checkUOE(am, () -> { - byte o = (byte) hs.get(am).invokeExact(array, i, (byte)1); - }); - } } static void testArrayIndexOutOfBounds(Handles hs) throws Throwable { @@ -318,11 +567,33 @@ for (TestAccessMode am : testAccessModesOfType(TestAccessType.SET)) { checkIOOBE(am, () -> { - hs.get(am).invokeExact(array, ci, (byte)1); + hs.get(am).invokeExact(array, ci, (byte)0x01); }); } + for (TestAccessMode am : testAccessModesOfType(TestAccessType.COMPARE_AND_SET)) { + checkIOOBE(am, () -> { + boolean r = (boolean) hs.get(am).invokeExact(array, ci, (byte)0x01, (byte)0x23); + }); + } + for (TestAccessMode am : testAccessModesOfType(TestAccessType.COMPARE_AND_EXCHANGE)) { + checkIOOBE(am, () -> { + byte r = (byte) hs.get(am).invokeExact(array, ci, (byte)0x23, (byte)0x01); + }); + } + + for (TestAccessMode am : testAccessModesOfType(TestAccessType.GET_AND_SET)) { + checkIOOBE(am, () -> { + byte o = (byte) hs.get(am).invokeExact(array, ci, (byte)0x01); + }); + } + + for (TestAccessMode am : testAccessModesOfType(TestAccessType.GET_AND_ADD)) { + checkIOOBE(am, () -> { + byte o = (byte) hs.get(am).invokeExact(array, ci, (byte)0x45); + }); + } } } }