diff -r 3a1f262311cf -r 9d757281c666 rt/emul/compacttest/src/test/java/org/apidesign/bck2brwsr/tck/AtomicTest.java --- a/rt/emul/compacttest/src/test/java/org/apidesign/bck2brwsr/tck/AtomicTest.java Wed Nov 19 19:32:00 2014 +0100 +++ b/rt/emul/compacttest/src/test/java/org/apidesign/bck2brwsr/tck/AtomicTest.java Mon Feb 09 20:36:12 2015 +0100 @@ -19,7 +19,10 @@ import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicInteger; +import java.util.concurrent.atomic.AtomicIntegerFieldUpdater; +import java.util.concurrent.atomic.AtomicLongFieldUpdater; import java.util.concurrent.atomic.AtomicReference; +import java.util.concurrent.atomic.AtomicReferenceFieldUpdater; import org.apidesign.bck2brwsr.vmtest.Compare; import org.apidesign.bck2brwsr.vmtest.VMTest; import org.testng.annotations.Factory; @@ -29,6 +32,31 @@ * @author Jaroslav Tulach */ public class AtomicTest { + private volatile int intValue; + private static AtomicIntegerFieldUpdater intUpdater; + static AtomicIntegerFieldUpdater getIntUpdater() { + if (intUpdater == null) { + intUpdater = AtomicIntegerFieldUpdater.newUpdater(AtomicTest.class, "intValue"); + } + return intUpdater; + } + private volatile long longValue; + private static AtomicLongFieldUpdater longUpdater; + static AtomicLongFieldUpdater getLongUpdater() { + if (longUpdater == null) { + longUpdater = AtomicLongFieldUpdater.newUpdater(AtomicTest.class, "longValue"); + } + return longUpdater; + } + private volatile Number refValue; + private static AtomicReferenceFieldUpdater refUpdater; + static AtomicReferenceFieldUpdater getRefUpdater() { + if (refUpdater == null) { + refUpdater = AtomicReferenceFieldUpdater.newUpdater(AtomicTest.class, Number.class, "refValue"); + } + return refUpdater; + } + @Compare public boolean atomicBoolean() { AtomicBoolean ab = new AtomicBoolean(); ab.set(true); @@ -48,6 +76,32 @@ return ar.getAndSet("Other"); } + @Compare public int intUpdater() { + intValue = Integer.MAX_VALUE / 2; + final AtomicIntegerFieldUpdater u = getIntUpdater(); + u.compareAndSet(this, 0, 10); + u.addAndGet(this, 3); + int thirteen = u.getAndAdd(this, 7); + return thirteen + u.get(this); + } + + @Compare public long longUpdater() { + longValue = Long.MAX_VALUE / 2; + final AtomicLongFieldUpdater u = getLongUpdater(); + u.compareAndSet(this, 0, 10); + u.addAndGet(this, 3); + long thirteen = u.getAndAdd(this, 7); + return thirteen + u.get(this); + } + + @Compare public int refUpdater() { + final AtomicReferenceFieldUpdater u = getRefUpdater(); + u.set(this, 0); + u.compareAndSet(this, 0, 10); + Number ten = u.getAndSet(this, 3); + return u.get(this).intValue() + ten.intValue(); + } + @Factory public static Object[] create() { return VMTest.create(AtomicTest.class); }