--- jsr166/src/test/tck/AtomicLongTest.java 2004/01/11 01:31:34 1.9 +++ jsr166/src/test/tck/AtomicLongTest.java 2009/11/17 03:12:51 1.14 @@ -2,8 +2,8 @@ * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain - * Other contributors include Andrew Wright, Jeffrey Hayes, - * Pat Fisher, Mike Judd. + * Other contributors include Andrew Wright, Jeffrey Hayes, + * Pat Fisher, Mike Judd. */ import junit.framework.*; @@ -21,7 +21,7 @@ public class AtomicLongTest extends JSR1 /** * constructor initializes to given value */ - public void testConstructor(){ + public void testConstructor() { AtomicLong ai = new AtomicLong(1); assertEquals(1,ai.get()); } @@ -29,7 +29,7 @@ public class AtomicLongTest extends JSR1 /** * default constructed initializes to zero */ - public void testConstructor2(){ + public void testConstructor2() { AtomicLong ai = new AtomicLong(); assertEquals(0,ai.get()); } @@ -37,19 +37,33 @@ public class AtomicLongTest extends JSR1 /** * get returns the last value set */ - public void testGetSet(){ + public void testGetSet() { AtomicLong ai = new AtomicLong(1); assertEquals(1,ai.get()); ai.set(2); assertEquals(2,ai.get()); ai.set(-3); assertEquals(-3,ai.get()); - + } + + /** + * get returns the last value lazySet in same thread + */ + public void testGetLazySet() { + AtomicLong ai = new AtomicLong(1); + assertEquals(1,ai.get()); + ai.lazySet(2); + assertEquals(2,ai.get()); + ai.lazySet(-3); + assertEquals(-3,ai.get()); + + } + /** * compareAndSet succeeds in changing value if equal to expected else fails */ - public void testCompareAndSet(){ + public void testCompareAndSet() { AtomicLong ai = new AtomicLong(1); assertTrue(ai.compareAndSet(1,2)); assertTrue(ai.compareAndSet(2,-4)); @@ -64,41 +78,37 @@ public class AtomicLongTest extends JSR1 * compareAndSet in one thread enables another waiting for value * to succeed */ - public void testCompareAndSetInMultipleThreads() { + public void testCompareAndSetInMultipleThreads() throws Exception { final AtomicLong ai = new AtomicLong(1); Thread t = new Thread(new Runnable() { public void run() { - while(!ai.compareAndSet(2, 3)) Thread.yield(); + while (!ai.compareAndSet(2, 3)) Thread.yield(); }}); - try { - t.start(); - assertTrue(ai.compareAndSet(1, 2)); - t.join(LONG_DELAY_MS); - assertFalse(t.isAlive()); - assertEquals(ai.get(), 3); - } - catch(Exception e) { - unexpectedException(); - } + + t.start(); + assertTrue(ai.compareAndSet(1, 2)); + t.join(LONG_DELAY_MS); + assertFalse(t.isAlive()); + assertEquals(ai.get(), 3); } /** * repeated weakCompareAndSet succeeds in changing value when equal - * to expected + * to expected */ - public void testWeakCompareAndSet(){ + public void testWeakCompareAndSet() { AtomicLong ai = new AtomicLong(1); - while(!ai.weakCompareAndSet(1,2)); - while(!ai.weakCompareAndSet(2,-4)); + while (!ai.weakCompareAndSet(1,2)); + while (!ai.weakCompareAndSet(2,-4)); assertEquals(-4,ai.get()); - while(!ai.weakCompareAndSet(-4,7)); + while (!ai.weakCompareAndSet(-4,7)); assertEquals(7,ai.get()); } /** * getAndSet returns previous value and sets to given value */ - public void testGetAndSet(){ + public void testGetAndSet() { AtomicLong ai = new AtomicLong(1); assertEquals(1,ai.getAndSet(0)); assertEquals(0,ai.getAndSet(-10)); @@ -108,7 +118,7 @@ public class AtomicLongTest extends JSR1 /** * getAndAdd returns previous value and adds given value */ - public void testGetAndAdd(){ + public void testGetAndAdd() { AtomicLong ai = new AtomicLong(1); assertEquals(1,ai.getAndAdd(2)); assertEquals(3,ai.get()); @@ -119,7 +129,7 @@ public class AtomicLongTest extends JSR1 /** * getAndDecrement returns previous value and decrements */ - public void testGetAndDecrement(){ + public void testGetAndDecrement() { AtomicLong ai = new AtomicLong(1); assertEquals(1,ai.getAndDecrement()); assertEquals(0,ai.getAndDecrement()); @@ -129,7 +139,7 @@ public class AtomicLongTest extends JSR1 /** * getAndIncrement returns previous value and increments */ - public void testGetAndIncrement(){ + public void testGetAndIncrement() { AtomicLong ai = new AtomicLong(1); assertEquals(1,ai.getAndIncrement()); assertEquals(2,ai.get()); @@ -143,7 +153,7 @@ public class AtomicLongTest extends JSR1 /** * addAndGet adds given value to current, and returns current value */ - public void testAddAndGet(){ + public void testAddAndGet() { AtomicLong ai = new AtomicLong(1); assertEquals(3,ai.addAndGet(2)); assertEquals(3,ai.get()); @@ -154,7 +164,7 @@ public class AtomicLongTest extends JSR1 /** * decrementAndGet decrements and returns current value */ - public void testDecrementAndGet(){ + public void testDecrementAndGet() { AtomicLong ai = new AtomicLong(1); assertEquals(0,ai.decrementAndGet()); assertEquals(-1,ai.decrementAndGet()); @@ -165,7 +175,7 @@ public class AtomicLongTest extends JSR1 /** * incrementAndGet increments and returns current value */ - public void testIncrementAndGet(){ + public void testIncrementAndGet() { AtomicLong ai = new AtomicLong(1); assertEquals(2,ai.incrementAndGet()); assertEquals(2,ai.get()); @@ -179,28 +189,24 @@ public class AtomicLongTest extends JSR1 /** * a deserialized serialized atomic holds same value */ - public void testSerialization() { + public void testSerialization() throws Exception { AtomicLong l = new AtomicLong(); - try { - l.set(-22); - ByteArrayOutputStream bout = new ByteArrayOutputStream(10000); - ObjectOutputStream out = new ObjectOutputStream(new BufferedOutputStream(bout)); - out.writeObject(l); - out.close(); - - ByteArrayInputStream bin = new ByteArrayInputStream(bout.toByteArray()); - ObjectInputStream in = new ObjectInputStream(new BufferedInputStream(bin)); - AtomicLong r = (AtomicLong) in.readObject(); - assertEquals(l.get(), r.get()); - } catch(Exception e){ - unexpectedException(); - } + l.set(-22); + ByteArrayOutputStream bout = new ByteArrayOutputStream(10000); + ObjectOutputStream out = new ObjectOutputStream(new BufferedOutputStream(bout)); + out.writeObject(l); + out.close(); + + ByteArrayInputStream bin = new ByteArrayInputStream(bout.toByteArray()); + ObjectInputStream in = new ObjectInputStream(new BufferedInputStream(bin)); + AtomicLong r = (AtomicLong) in.readObject(); + assertEquals(l.get(), r.get()); } /** * toString returns current value. - */ + */ public void testToString() { AtomicLong ai = new AtomicLong(); for (long i = -12; i < 6; ++i) { @@ -211,7 +217,7 @@ public class AtomicLongTest extends JSR1 /** * longValue returns current value. - */ + */ public void testLongValue() { AtomicLong ai = new AtomicLong(); for (int i = -12; i < 6; ++i) { @@ -222,7 +228,7 @@ public class AtomicLongTest extends JSR1 /** * floatValue returns current value. - */ + */ public void testFloatValue() { AtomicLong ai = new AtomicLong(); for (int i = -12; i < 6; ++i) { @@ -233,7 +239,7 @@ public class AtomicLongTest extends JSR1 /** * doubleValue returns current value. - */ + */ public void testDoubleValue() { AtomicLong ai = new AtomicLong(); for (int i = -12; i < 6; ++i) {