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

# Content
1 /*
2 * 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 */
8
9 import junit.framework.*;
10 import java.util.concurrent.atomic.*;
11 import java.io.*;
12
13 public class AtomicReferenceTest extends JSR166TestCase {
14 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 /**
22 * constructor initializes to given value
23 */
24 public void testConstructor(){
25 AtomicReference ai = new AtomicReference(one);
26 assertEquals(one,ai.get());
27 }
28
29 /**
30 * default constructed initializes to null
31 */
32 public void testConstructor2(){
33 AtomicReference ai = new AtomicReference();
34 assertNull(ai.get());
35 }
36
37 /**
38 * get returns the last value set
39 */
40 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 /**
50 * compareAndSet succeeds in changing value if equal to expected else fails
51 */
52 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 /**
64 * 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 */
89 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 /**
99 * getAndSet returns previous value and sets to given value
100 */
101 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 }
107
108 /**
109 * a deserialized serialized atomic holds same value
110 */
111 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 unexpectedException();
127 }
128 }
129
130 /**
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 }
141