diff -r 79b158dae903 -r add11bc0e6e2 jdk/test/java/lang/invoke/VarHandles/VarHandleTestByteArrayAsFloat.java --- a/jdk/test/java/lang/invoke/VarHandles/VarHandleTestByteArrayAsFloat.java Fri Apr 29 23:15:15 2016 +0300 +++ b/jdk/test/java/lang/invoke/VarHandles/VarHandleTestByteArrayAsFloat.java Fri Apr 29 13:46:19 2016 -0700 @@ -93,6 +93,7 @@ assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.COMPARE_AND_EXCHANGE_ACQUIRE)); assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.COMPARE_AND_EXCHANGE_RELEASE)); assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.WEAK_COMPARE_AND_SET)); + assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.WEAK_COMPARE_AND_SET_VOLATILE)); assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.WEAK_COMPARE_AND_SET_ACQUIRE)); assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.WEAK_COMPARE_AND_SET_RELEASE)); assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_SET)); @@ -239,6 +240,10 @@ }); checkROBE(() -> { + boolean r = vh.weakCompareAndSetVolatile(array, ci, VALUE_1, VALUE_2); + }); + + checkROBE(() -> { boolean r = vh.weakCompareAndSetAcquire(array, ci, VALUE_1, VALUE_2); }); @@ -334,6 +339,10 @@ }); checkIOOBE(() -> { + boolean r = vh.weakCompareAndSetVolatile(array, ci, VALUE_1, VALUE_2); + }); + + checkIOOBE(() -> { boolean r = vh.weakCompareAndSetAcquire(array, ci, VALUE_1, VALUE_2); }); @@ -415,6 +424,10 @@ }); checkIOOBE(() -> { + boolean r = vh.weakCompareAndSetVolatile(array, ci, VALUE_1, VALUE_2); + }); + + checkIOOBE(() -> { boolean r = vh.weakCompareAndSetAcquire(array, ci, VALUE_1, VALUE_2); }); @@ -487,6 +500,10 @@ }); checkISE(() -> { + boolean r = vh.weakCompareAndSetVolatile(array, ci, VALUE_1, VALUE_2); + }); + + checkISE(() -> { boolean r = vh.weakCompareAndSetAcquire(array, ci, VALUE_1, VALUE_2); }); @@ -562,6 +579,10 @@ }); checkISE(() -> { + boolean r = vh.weakCompareAndSetVolatile(array, ci, VALUE_1, VALUE_2); + }); + + checkISE(() -> { boolean r = vh.weakCompareAndSetAcquire(array, ci, VALUE_1, VALUE_2); }); @@ -699,12 +720,19 @@ assertEquals(x, VALUE_2, "weakCompareAndSetRelease float"); } + { + boolean r = vh.weakCompareAndSetVolatile(array, i, VALUE_2, VALUE_1); + assertEquals(r, true, "weakCompareAndSetVolatile float"); + float x = (float) vh.get(array, i); + assertEquals(x, VALUE_1, "weakCompareAndSetVolatile float value"); + } + // Compare set and get { - float o = (float) vh.getAndSet(array, i, VALUE_1); - assertEquals(o, VALUE_2, "getAndSet float"); + float o = (float) vh.getAndSet(array, i, VALUE_2); + assertEquals(o, VALUE_1, "getAndSet float"); float x = (float) vh.get(array, i); - assertEquals(x, VALUE_1, "getAndSet float value"); + assertEquals(x, VALUE_2, "getAndSet float value"); } } @@ -832,12 +860,19 @@ assertEquals(x, VALUE_2, "weakCompareAndSetRelease float"); } + { + boolean r = vh.weakCompareAndSetVolatile(array, i, VALUE_2, VALUE_1); + assertEquals(r, true, "weakCompareAndSetVolatile float"); + float x = (float) vh.get(array, i); + assertEquals(x, VALUE_1, "weakCompareAndSetVolatile float value"); + } + // Compare set and get { - float o = (float) vh.getAndSet(array, i, VALUE_1); - assertEquals(o, VALUE_2, "getAndSet float"); + float o = (float) vh.getAndSet(array, i, VALUE_2); + assertEquals(o, VALUE_1, "getAndSet float"); float x = (float) vh.get(array, i); - assertEquals(x, VALUE_1, "getAndSet float value"); + assertEquals(x, VALUE_2, "getAndSet float value"); } }