--- a/jdk/test/java/lang/invoke/VarHandles/VarHandleTestByteArrayAsDouble.java Fri Apr 29 23:15:15 2016 +0300
+++ b/jdk/test/java/lang/invoke/VarHandles/VarHandleTestByteArrayAsDouble.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 double");
}
+ {
+ boolean r = vh.weakCompareAndSetVolatile(array, i, VALUE_2, VALUE_1);
+ assertEquals(r, true, "weakCompareAndSetVolatile double");
+ double x = (double) vh.get(array, i);
+ assertEquals(x, VALUE_1, "weakCompareAndSetVolatile double value");
+ }
+
// Compare set and get
{
- double o = (double) vh.getAndSet(array, i, VALUE_1);
- assertEquals(o, VALUE_2, "getAndSet double");
+ double o = (double) vh.getAndSet(array, i, VALUE_2);
+ assertEquals(o, VALUE_1, "getAndSet double");
double x = (double) vh.get(array, i);
- assertEquals(x, VALUE_1, "getAndSet double value");
+ assertEquals(x, VALUE_2, "getAndSet double value");
}
}
@@ -832,12 +860,19 @@
assertEquals(x, VALUE_2, "weakCompareAndSetRelease double");
}
+ {
+ boolean r = vh.weakCompareAndSetVolatile(array, i, VALUE_2, VALUE_1);
+ assertEquals(r, true, "weakCompareAndSetVolatile double");
+ double x = (double) vh.get(array, i);
+ assertEquals(x, VALUE_1, "weakCompareAndSetVolatile double value");
+ }
+
// Compare set and get
{
- double o = (double) vh.getAndSet(array, i, VALUE_1);
- assertEquals(o, VALUE_2, "getAndSet double");
+ double o = (double) vh.getAndSet(array, i, VALUE_2);
+ assertEquals(o, VALUE_1, "getAndSet double");
double x = (double) vh.get(array, i);
- assertEquals(x, VALUE_1, "getAndSet double value");
+ assertEquals(x, VALUE_2, "getAndSet double value");
}
}