FileDocCategorySizeDatePackage
AtomicReferenceTest.javaAPI DocAndroid 1.5 API4372Wed May 06 22:41:02 BST 2009tests.api.java.util.concurrent

AtomicReferenceTest

public class AtomicReferenceTest extends JSR166TestCase

Fields Summary
Constructors Summary
Methods Summary
public static voidmain(java.lang.String[] args)

        junit.textui.TestRunner.run (suite());
    
public static junit.framework.Testsuite()

        return new TestSuite(AtomicReferenceTest.class);
    
public voidtestCompareAndSet()
compareAndSet succeeds in changing value if equal to expected else fails

        AtomicReference ai = new AtomicReference(one);
        assertTrue(ai.compareAndSet(one,two));
        assertTrue(ai.compareAndSet(two,m4));
        assertEquals(m4,ai.get());
        assertFalse(ai.compareAndSet(m5,seven));
        assertFalse((seven.equals(ai.get())));
        assertTrue(ai.compareAndSet(m4,seven));
        assertEquals(seven,ai.get());
    
public voidtestCompareAndSetInMultipleThreads()
compareAndSet in one thread enables another waiting for value to succeed

        final AtomicReference ai = new AtomicReference(one);
        Thread t = new Thread(new Runnable() {
                public void run() {
                    while(!ai.compareAndSet(two, three)) Thread.yield();
                }});
        try {
            t.start();
            assertTrue(ai.compareAndSet(one, two));
            t.join(LONG_DELAY_MS);
            assertFalse(t.isAlive());
            assertEquals(ai.get(), three);
        }
        catch(Exception e) {
            unexpectedException();
        }
    
public voidtestConstructor()
constructor initializes to given value

        AtomicReference ai = new AtomicReference(one);
        assertEquals(one,ai.get());
    
public voidtestConstructor2()
default constructed initializes to null

        AtomicReference ai = new AtomicReference();
        assertNull(ai.get());
    
public voidtestGetAndSet()
getAndSet returns previous value and sets to given value

        AtomicReference ai = new AtomicReference(one);
        assertEquals(one,ai.getAndSet(zero));
        assertEquals(zero,ai.getAndSet(m10));
        assertEquals(m10,ai.getAndSet(one));
    
public voidtestGetSet()
get returns the last value set

        AtomicReference ai = new AtomicReference(one);
        assertEquals(one,ai.get());
        ai.set(two);
        assertEquals(two,ai.get());
        ai.set(m3);
        assertEquals(m3,ai.get());
        
    
public voidtestSerialization()
a deserialized serialized atomic holds same value

        AtomicReference l = new AtomicReference();

        try {
            l.set(one);
            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));
            AtomicReference r = (AtomicReference) in.readObject();
            assertEquals(l.get(), r.get());
        } catch(Exception e){
            unexpectedException();
        }
    
public voidtestToString()
toString returns current value.

        AtomicReference<Integer> ai = new AtomicReference<Integer>(one); 
        assertEquals(ai.toString(), one.toString());
        ai.set(two);
        assertEquals(ai.toString(), two.toString());
    
public voidtestWeakCompareAndSet()
repeated weakCompareAndSet succeeds in changing value when equal to expected

        AtomicReference ai = new AtomicReference(one);
        while(!ai.weakCompareAndSet(one,two));
        while(!ai.weakCompareAndSet(two,m4));
        assertEquals(m4,ai.get());
        while(!ai.weakCompareAndSet(m4,seven));
        assertEquals(seven,ai.get());