--- jsr166/src/test/tck/AtomicLongFieldUpdaterTest.java 2013/04/02 04:11:28 1.25 +++ jsr166/src/test/tck/AtomicLongFieldUpdaterTest.java 2017/09/20 00:41:13 1.33 @@ -6,16 +6,19 @@ * Pat Fisher, Mike Judd. */ -import junit.framework.*; import java.util.concurrent.atomic.AtomicLongFieldUpdater; +import junit.framework.Test; +import junit.framework.TestSuite; + public class AtomicLongFieldUpdaterTest extends JSR166TestCase { volatile long x = 0; - int z; + protected volatile long protectedField; + private volatile long privateField; long w; - + float z; public static void main(String[] args) { - junit.textui.TestRunner.run(suite()); + main(suite(), args); } public static Test suite() { return new TestSuite(AtomicLongFieldUpdaterTest.class); @@ -34,7 +37,7 @@ public class AtomicLongFieldUpdaterTest updaterFor("y"); shouldThrow(); } catch (RuntimeException success) { - assertTrue(success.getCause() != null); + assertNotNull(success.getCause()); } } @@ -59,6 +62,23 @@ public class AtomicLongFieldUpdaterTest } /** + * construction using private field from subclass throws RuntimeException + */ + public void testPrivateFieldInSubclass() { + new NonNestmates.AtomicLongFieldUpdaterTestSubclass() + .checkPrivateAccess(); + } + + /** + * construction from unrelated class; package access is allowed, + * private access is not + */ + public void testUnrelatedClassAccess() { + new NonNestmates().checkPackageAccess(this); + new NonNestmates().checkPrivateAccess(this); + } + + /** * get returns the last value set or assigned */ public void testGetSet() { @@ -103,6 +123,33 @@ public class AtomicLongFieldUpdaterTest } /** + * compareAndSet succeeds in changing protected field value if + * equal to expected else fails + */ + public void testCompareAndSetProtected() { + AtomicLongFieldUpdater a; + a = updaterFor("protectedField"); + protectedField = 1; + assertTrue(a.compareAndSet(this, 1, 2)); + assertTrue(a.compareAndSet(this, 2, -4)); + assertEquals(-4, a.get(this)); + assertFalse(a.compareAndSet(this, -5, 7)); + assertEquals(-4, a.get(this)); + assertTrue(a.compareAndSet(this, -4, 7)); + assertEquals(7, a.get(this)); + } + + /** + * compareAndSet succeeds in changing protected field value if + * equal to expected else fails + */ + public void testCompareAndSetProtectedInSubclass() { + NonNestmates.AtomicLongFieldUpdaterTestSubclass s = + new NonNestmates.AtomicLongFieldUpdaterTestSubclass(); + s.checkCompareAndSetProtectedSub(); + } + + /** * compareAndSet in one thread enables another waiting for value * to succeed */ @@ -132,10 +179,10 @@ public class AtomicLongFieldUpdaterTest AtomicLongFieldUpdater a; a = updaterFor("x"); x = 1; - while (!a.weakCompareAndSet(this, 1, 2)); - while (!a.weakCompareAndSet(this, 2, -4)); + do {} while (!a.weakCompareAndSet(this, 1, 2)); + do {} while (!a.weakCompareAndSet(this, 2, -4)); assertEquals(-4, a.get(this)); - while (!a.weakCompareAndSet(this, -4, 7)); + do {} while (!a.weakCompareAndSet(this, -4, 7)); assertEquals(7, a.get(this)); }