ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/tck/AtomicReferenceTest.java
Revision: 1.7
Committed: Fri Jan 9 20:07:36 2004 UTC (20 years, 3 months ago) by dl
Branch: MAIN
CVS Tags: JSR166_PFD
Changes since 1.6: +10 -0 lines
Log Message:
Tests for toString methods

File Contents

# User Rev Content
1 dl 1.1 /*
2 dl 1.6 * Written by Doug Lea with assistance from members of JCP JSR-166
3     * Expert Group and released to the public domain, as explained at
4     * http://creativecommons.org/licenses/publicdomain
5     * Other contributors include Andrew Wright, Jeffrey Hayes,
6     * Pat Fisher, Mike Judd.
7 dl 1.1 */
8    
9     import junit.framework.*;
10     import java.util.concurrent.atomic.*;
11 dl 1.2 import java.io.*;
12 dl 1.1
13 dl 1.3 public class AtomicReferenceTest extends JSR166TestCase {
14 dl 1.1 public static void main (String[] args) {
15     junit.textui.TestRunner.run (suite());
16     }
17     public static Test suite() {
18     return new TestSuite(AtomicReferenceTest.class);
19     }
20    
21 dl 1.4 /**
22 dl 1.5 * constructor initializes to given value
23 dl 1.4 */
24 dl 1.1 public void testConstructor(){
25     AtomicReference ai = new AtomicReference(one);
26     assertEquals(one,ai.get());
27     }
28    
29 dl 1.4 /**
30 dl 1.5 * default constructed initializes to null
31 dl 1.4 */
32 dl 1.1 public void testConstructor2(){
33     AtomicReference ai = new AtomicReference();
34     assertNull(ai.get());
35     }
36    
37 dl 1.4 /**
38 dl 1.5 * get returns the last value set
39 dl 1.4 */
40 dl 1.1 public void testGetSet(){
41     AtomicReference ai = new AtomicReference(one);
42     assertEquals(one,ai.get());
43     ai.set(two);
44     assertEquals(two,ai.get());
45     ai.set(m3);
46     assertEquals(m3,ai.get());
47    
48     }
49 dl 1.4 /**
50 dl 1.5 * compareAndSet succeeds in changing value if equal to expected else fails
51 dl 1.4 */
52 dl 1.1 public void testCompareAndSet(){
53     AtomicReference ai = new AtomicReference(one);
54     assertTrue(ai.compareAndSet(one,two));
55     assertTrue(ai.compareAndSet(two,m4));
56     assertEquals(m4,ai.get());
57     assertFalse(ai.compareAndSet(m5,seven));
58     assertFalse((seven.equals(ai.get())));
59     assertTrue(ai.compareAndSet(m4,seven));
60     assertEquals(seven,ai.get());
61     }
62    
63 dl 1.4 /**
64 dl 1.5 * compareAndSet in one thread enables another waiting for value
65     * to succeed
66     */
67     public void testCompareAndSetInMultipleThreads() {
68     final AtomicReference ai = new AtomicReference(one);
69     Thread t = new Thread(new Runnable() {
70     public void run() {
71     while(!ai.compareAndSet(two, three)) Thread.yield();
72     }});
73     try {
74     t.start();
75     assertTrue(ai.compareAndSet(one, two));
76     t.join(LONG_DELAY_MS);
77     assertFalse(t.isAlive());
78     assertEquals(ai.get(), three);
79     }
80     catch(Exception e) {
81     unexpectedException();
82     }
83     }
84    
85     /**
86     * repeated weakCompareAndSet succeeds in changing value when equal
87     * to expected
88 dl 1.4 */
89 dl 1.1 public void testWeakCompareAndSet(){
90     AtomicReference ai = new AtomicReference(one);
91     while(!ai.weakCompareAndSet(one,two));
92     while(!ai.weakCompareAndSet(two,m4));
93     assertEquals(m4,ai.get());
94     while(!ai.weakCompareAndSet(m4,seven));
95     assertEquals(seven,ai.get());
96     }
97    
98 dl 1.4 /**
99 dl 1.5 * getAndSet returns previous value and sets to given value
100 dl 1.4 */
101 dl 1.1 public void testGetAndSet(){
102     AtomicReference ai = new AtomicReference(one);
103     assertEquals(one,ai.getAndSet(zero));
104     assertEquals(zero,ai.getAndSet(m10));
105     assertEquals(m10,ai.getAndSet(one));
106 dl 1.2 }
107    
108 dl 1.4 /**
109 dl 1.5 * a deserialized serialized atomic holds same value
110 dl 1.4 */
111 dl 1.2 public void testSerialization() {
112     AtomicReference l = new AtomicReference();
113    
114     try {
115     l.set(one);
116     ByteArrayOutputStream bout = new ByteArrayOutputStream(10000);
117     ObjectOutputStream out = new ObjectOutputStream(new BufferedOutputStream(bout));
118     out.writeObject(l);
119     out.close();
120    
121     ByteArrayInputStream bin = new ByteArrayInputStream(bout.toByteArray());
122     ObjectInputStream in = new ObjectInputStream(new BufferedInputStream(bin));
123     AtomicReference r = (AtomicReference) in.readObject();
124     assertEquals(l.get(), r.get());
125     } catch(Exception e){
126 dl 1.4 unexpectedException();
127 dl 1.2 }
128 dl 1.1 }
129    
130 dl 1.7 /**
131     * toString returns current value.
132     */
133     public void testToString() {
134     AtomicReference<Integer> ai = new AtomicReference<Integer>(one);
135     assertEquals(ai.toString(), one.toString());
136     ai.set(two);
137     assertEquals(ai.toString(), two.toString());
138     }
139    
140 dl 1.1 }
141