18f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle/* 28f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * Written by Doug Lea with assistance from members of JCP JSR-166 38f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * Expert Group and released to the public domain, as explained at 48f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * http://creativecommons.org/publicdomain/zero/1.0/ 58f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * Other contributors include Andrew Wright, Jeffrey Hayes, 68f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * Pat Fisher, Mike Judd. 78f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 88f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 98f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravlepackage jsr166; 108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravleimport java.util.concurrent.atomic.AtomicLongFieldUpdater; 128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 138e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamathimport junit.framework.Test; 148e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamathimport junit.framework.TestSuite; 158e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath 168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravlepublic class AtomicLongFieldUpdaterTest extends JSR166TestCase { 178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle volatile long x = 0; 188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle int z; 198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle long w; 208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 218e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath // android-note: Removed because the CTS runner does a bad job of 228e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath // retrying tests that have suite() declarations. 238e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath // 248e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath // public static void main(String[] args) { 258e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath // main(suite(), args); 268e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath // } 278e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath // public static Test suite() { 288e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath // return new TestSuite(...); 298e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath // } 308e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath 318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle AtomicLongFieldUpdater<AtomicLongFieldUpdaterTest> updaterFor(String fieldName) { 328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle return AtomicLongFieldUpdater.newUpdater 338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle (AtomicLongFieldUpdaterTest.class, fieldName); 348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * Construction with non-existent field throws RuntimeException 388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testConstructor() { 408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle updaterFor("y"); 428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (RuntimeException success) { 448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertNotNull(success.getCause()); 458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * construction with field not of given type throws IllegalArgumentException 508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testConstructor2() { 528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle updaterFor("z"); 548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (IllegalArgumentException success) {} 568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * construction with non-volatile field throws IllegalArgumentException 608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testConstructor3() { 628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle updaterFor("w"); 648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (IllegalArgumentException success) {} 668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * get returns the last value set or assigned 708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testGetSet() { 728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle AtomicLongFieldUpdater<AtomicLongFieldUpdaterTest> a; 738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle a = updaterFor("x"); 748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle x = 1; 758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(1, a.get(this)); 768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle a.set(this, 2); 778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(2, a.get(this)); 788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle a.set(this, -3); 798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(-3, a.get(this)); 808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * get returns the last value lazySet by same thread 848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testGetLazySet() { 868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle AtomicLongFieldUpdater<AtomicLongFieldUpdaterTest> a; 878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle a = updaterFor("x"); 888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle x = 1; 898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(1, a.get(this)); 908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle a.lazySet(this, 2); 918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(2, a.get(this)); 928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle a.lazySet(this, -3); 938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(-3, a.get(this)); 948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * compareAndSet succeeds in changing value if equal to expected else fails 988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testCompareAndSet() { 1008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle AtomicLongFieldUpdater<AtomicLongFieldUpdaterTest> a; 1018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle a = updaterFor("x"); 1028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle x = 1; 1038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(a.compareAndSet(this, 1, 2)); 1048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(a.compareAndSet(this, 2, -4)); 1058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(-4, a.get(this)); 1068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(a.compareAndSet(this, -5, 7)); 1078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(-4, a.get(this)); 1088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(a.compareAndSet(this, -4, 7)); 1098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(7, a.get(this)); 1108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 1118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 1128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 1138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * compareAndSet in one thread enables another waiting for value 1148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * to succeed 1158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 1168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testCompareAndSetInMultipleThreads() throws Exception { 1178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle x = 1; 1188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final AtomicLongFieldUpdater<AtomicLongFieldUpdaterTest> a; 1198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle a = updaterFor("x"); 1208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 1218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Thread t = new Thread(new CheckedRunnable() { 1228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void realRun() { 1238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle while (!a.compareAndSet(AtomicLongFieldUpdaterTest.this, 2, 3)) 1248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Thread.yield(); 1258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}); 1268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 1278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle t.start(); 1288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(a.compareAndSet(this, 1, 2)); 1298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle t.join(LONG_DELAY_MS); 1308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(t.isAlive()); 1318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(3, a.get(this)); 1328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 1338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 1348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 1358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * repeated weakCompareAndSet succeeds in changing value when equal 1368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * to expected 1378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 1388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testWeakCompareAndSet() { 1398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle AtomicLongFieldUpdater<AtomicLongFieldUpdaterTest> a; 1408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle a = updaterFor("x"); 1418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle x = 1; 1428e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath do {} while (!a.weakCompareAndSet(this, 1, 2)); 1438e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath do {} while (!a.weakCompareAndSet(this, 2, -4)); 1448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(-4, a.get(this)); 1458e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath do {} while (!a.weakCompareAndSet(this, -4, 7)); 1468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(7, a.get(this)); 1478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 1488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 1498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 1508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * getAndSet returns previous value and sets to given value 1518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 1528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testGetAndSet() { 1538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle AtomicLongFieldUpdater<AtomicLongFieldUpdaterTest> a; 1548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle a = updaterFor("x"); 1558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle x = 1; 1568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(1, a.getAndSet(this, 0)); 1578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(0, a.getAndSet(this, -10)); 1588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(-10, a.getAndSet(this, 1)); 1598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 1608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 1618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 1628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * getAndAdd returns previous value and adds given value 1638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 1648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testGetAndAdd() { 1658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle AtomicLongFieldUpdater<AtomicLongFieldUpdaterTest> a; 1668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle a = updaterFor("x"); 1678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle x = 1; 1688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(1, a.getAndAdd(this, 2)); 1698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(3, a.get(this)); 1708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(3, a.getAndAdd(this, -4)); 1718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(-1, a.get(this)); 1728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 1738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 1748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 1758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * getAndDecrement returns previous value and decrements 1768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 1778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testGetAndDecrement() { 1788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle AtomicLongFieldUpdater<AtomicLongFieldUpdaterTest> a; 1798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle a = updaterFor("x"); 1808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle x = 1; 1818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(1, a.getAndDecrement(this)); 1828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(0, a.getAndDecrement(this)); 1838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(-1, a.getAndDecrement(this)); 1848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 1858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 1868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 1878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * getAndIncrement returns previous value and increments 1888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 1898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testGetAndIncrement() { 1908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle AtomicLongFieldUpdater<AtomicLongFieldUpdaterTest> a; 1918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle a = updaterFor("x"); 1928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle x = 1; 1938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(1, a.getAndIncrement(this)); 1948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(2, a.get(this)); 1958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle a.set(this, -2); 1968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(-2, a.getAndIncrement(this)); 1978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(-1, a.getAndIncrement(this)); 1988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(0, a.getAndIncrement(this)); 1998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(1, a.get(this)); 2008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 2018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 2028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 2038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * addAndGet adds given value to current, and returns current value 2048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 2058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testAddAndGet() { 2068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle AtomicLongFieldUpdater<AtomicLongFieldUpdaterTest> a; 2078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle a = updaterFor("x"); 2088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle x = 1; 2098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(3, a.addAndGet(this, 2)); 2108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(3, a.get(this)); 2118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(-1, a.addAndGet(this, -4)); 2128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(-1, a.get(this)); 2138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 2148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 2158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 2168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * decrementAndGet decrements and returns current value 2178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 2188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testDecrementAndGet() { 2198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle AtomicLongFieldUpdater<AtomicLongFieldUpdaterTest> a; 2208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle a = updaterFor("x"); 2218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle x = 1; 2228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(0, a.decrementAndGet(this)); 2238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(-1, a.decrementAndGet(this)); 2248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(-2, a.decrementAndGet(this)); 2258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(-2, a.get(this)); 2268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 2278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 2288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 2298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * incrementAndGet increments and returns current value 2308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 2318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testIncrementAndGet() { 2328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle AtomicLongFieldUpdater<AtomicLongFieldUpdaterTest> a; 2338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle a = updaterFor("x"); 2348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle x = 1; 2358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(2, a.incrementAndGet(this)); 2368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(2, a.get(this)); 2378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle a.set(this, -2); 2388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(-1, a.incrementAndGet(this)); 2398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(0, a.incrementAndGet(this)); 2408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(1, a.incrementAndGet(this)); 2418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(1, a.get(this)); 2428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 2438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 2448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle} 245