< prev index next >

test/compiler/unsafe/JdkInternalMiscUnsafeAccessTestBoolean.java

Print this page

        

@@ -142,10 +142,119 @@
             boolean x = UNSAFE.getBooleanOpaque(base, offset);
             assertEquals(x, false, "putOpaque boolean value");
         }
 
 
+        UNSAFE.putBoolean(base, offset, true);
+
+        // Compare
+        {
+            boolean r = UNSAFE.compareAndSwapBoolean(base, offset, true, false);
+            assertEquals(r, true, "success compareAndSwap boolean");
+            boolean x = UNSAFE.getBoolean(base, offset);
+            assertEquals(x, false, "success compareAndSwap boolean value");
+        }
+
+        {
+            boolean r = UNSAFE.compareAndSwapBoolean(base, offset, true, false);
+            assertEquals(r, false, "failing compareAndSwap boolean");
+            boolean x = UNSAFE.getBoolean(base, offset);
+            assertEquals(x, false, "failing compareAndSwap boolean value");
+        }
+
+        // Advanced compare
+        {
+            boolean r = UNSAFE.compareAndExchangeBooleanVolatile(base, offset, false, true);
+            assertEquals(r, false, "success compareAndExchangeVolatile boolean");
+            boolean x = UNSAFE.getBoolean(base, offset);
+            assertEquals(x, true, "success compareAndExchangeVolatile boolean value");
+        }
+
+        {
+            boolean r = UNSAFE.compareAndExchangeBooleanVolatile(base, offset, false, false);
+            assertEquals(r, true, "failing compareAndExchangeVolatile boolean");
+            boolean x = UNSAFE.getBoolean(base, offset);
+            assertEquals(x, true, "failing compareAndExchangeVolatile boolean value");
+        }
+
+        {
+            boolean r = UNSAFE.compareAndExchangeBooleanAcquire(base, offset, true, false);
+            assertEquals(r, true, "success compareAndExchangeAcquire boolean");
+            boolean x = UNSAFE.getBoolean(base, offset);
+            assertEquals(x, false, "success compareAndExchangeAcquire boolean value");
+        }
+
+        {
+            boolean r = UNSAFE.compareAndExchangeBooleanAcquire(base, offset, true, false);
+            assertEquals(r, false, "failing compareAndExchangeAcquire boolean");
+            boolean x = UNSAFE.getBoolean(base, offset);
+            assertEquals(x, false, "failing compareAndExchangeAcquire boolean value");
+        }
+
+        {
+            boolean r = UNSAFE.compareAndExchangeBooleanRelease(base, offset, false, true);
+            assertEquals(r, false, "success compareAndExchangeRelease boolean");
+            boolean x = UNSAFE.getBoolean(base, offset);
+            assertEquals(x, true, "success compareAndExchangeRelease boolean value");
+        }
+
+        {
+            boolean r = UNSAFE.compareAndExchangeBooleanRelease(base, offset, false, false);
+            assertEquals(r, true, "failing compareAndExchangeRelease boolean");
+            boolean x = UNSAFE.getBoolean(base, offset);
+            assertEquals(x, true, "failing compareAndExchangeRelease boolean value");
+        }
+
+        {
+            boolean success = false;
+            for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) {
+                success = UNSAFE.weakCompareAndSwapBoolean(base, offset, true, false);
+            }
+            assertEquals(success, true, "weakCompareAndSwap boolean");
+            boolean x = UNSAFE.getBoolean(base, offset);
+            assertEquals(x, false, "weakCompareAndSwap boolean value");
+        }
+
+        {
+            boolean success = false;
+            for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) {
+                success = UNSAFE.weakCompareAndSwapBooleanAcquire(base, offset, false, true);
+            }
+            assertEquals(success, true, "weakCompareAndSwapAcquire boolean");
+            boolean x = UNSAFE.getBoolean(base, offset);
+            assertEquals(x, true, "weakCompareAndSwapAcquire boolean");
+        }
+
+        {
+            boolean success = false;
+            for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) {
+                success = UNSAFE.weakCompareAndSwapBooleanRelease(base, offset, true, false);
+            }
+            assertEquals(success, true, "weakCompareAndSwapRelease boolean");
+            boolean x = UNSAFE.getBoolean(base, offset);
+            assertEquals(x, false, "weakCompareAndSwapRelease boolean");
+        }
+
+        {
+            boolean success = false;
+            for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) {
+                success = UNSAFE.weakCompareAndSwapBooleanVolatile(base, offset, false, true);
+            }
+            assertEquals(success, true, "weakCompareAndSwapVolatile boolean");
+            boolean x = UNSAFE.getBoolean(base, offset);
+            assertEquals(x, true, "weakCompareAndSwapVolatile boolean");
+        }
+
+        UNSAFE.putBoolean(base, offset, false);
+
+        // Compare set and get
+        {
+            boolean o = UNSAFE.getAndSetBoolean(base, offset, true);
+            assertEquals(o, false, "getAndSet boolean");
+            boolean x = UNSAFE.getBoolean(base, offset);
+            assertEquals(x, true, "getAndSet boolean value");
+        }
 
     }
 
 }
 
< prev index next >