ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/tck/AtomicBooleanTest.java
Revision: 1.14
Committed: Tue Nov 17 06:58:50 2009 UTC (14 years, 6 months ago) by jsr166
Branch: MAIN
Changes since 1.13: +4 -4 lines
Log Message:
Runnable => CheckedRunnable

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 AtomicBooleanTest 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(AtomicBooleanTest.class);
19 }
20
21 /**
22 * constructor initializes to given value
23 */
24 public void testConstructor() {
25 AtomicBoolean ai = new AtomicBoolean(true);
26 assertEquals(true,ai.get());
27 }
28
29 /**
30 * default constructed initializes to false
31 */
32 public void testConstructor2() {
33 AtomicBoolean ai = new AtomicBoolean();
34 assertEquals(false,ai.get());
35 }
36
37 /**
38 * get returns the last value set
39 */
40 public void testGetSet() {
41 AtomicBoolean ai = new AtomicBoolean(true);
42 assertEquals(true,ai.get());
43 ai.set(false);
44 assertEquals(false,ai.get());
45 ai.set(true);
46 assertEquals(true,ai.get());
47
48 }
49
50 /**
51 * get returns the last value lazySet in same thread
52 */
53 public void testGetLazySet() {
54 AtomicBoolean ai = new AtomicBoolean(true);
55 assertEquals(true,ai.get());
56 ai.lazySet(false);
57 assertEquals(false,ai.get());
58 ai.lazySet(true);
59 assertEquals(true,ai.get());
60
61 }
62
63 /**
64 * compareAndSet succeeds in changing value if equal to expected else fails
65 */
66 public void testCompareAndSet() {
67 AtomicBoolean ai = new AtomicBoolean(true);
68 assertTrue(ai.compareAndSet(true,false));
69 assertEquals(false,ai.get());
70 assertTrue(ai.compareAndSet(false,false));
71 assertEquals(false,ai.get());
72 assertFalse(ai.compareAndSet(true,false));
73 assertFalse((ai.get()));
74 assertTrue(ai.compareAndSet(false,true));
75 assertEquals(true,ai.get());
76 }
77
78 /**
79 * compareAndSet in one thread enables another waiting for value
80 * to succeed
81 */
82 public void testCompareAndSetInMultipleThreads() throws Exception {
83 final AtomicBoolean ai = new AtomicBoolean(true);
84 Thread t = new Thread(new CheckedRunnable() {
85 public void realRun() {
86 while (!ai.compareAndSet(false, true)) Thread.yield();
87 }});
88
89 t.start();
90 assertTrue(ai.compareAndSet(true, false));
91 t.join(LONG_DELAY_MS);
92 assertFalse(t.isAlive());
93 }
94
95 /**
96 * repeated weakCompareAndSet succeeds in changing value when equal
97 * to expected
98 */
99 public void testWeakCompareAndSet() {
100 AtomicBoolean ai = new AtomicBoolean(true);
101 while (!ai.weakCompareAndSet(true,false));
102 assertEquals(false,ai.get());
103 while (!ai.weakCompareAndSet(false,false));
104 assertEquals(false,ai.get());
105 while (!ai.weakCompareAndSet(false,true));
106 assertEquals(true,ai.get());
107 }
108
109 /**
110 * getAndSet returns previous value and sets to given value
111 */
112 public void testGetAndSet() {
113 AtomicBoolean ai = new AtomicBoolean(true);
114 assertEquals(true,ai.getAndSet(false));
115 assertEquals(false,ai.getAndSet(false));
116 assertEquals(false,ai.getAndSet(true));
117 assertEquals(true,ai.get());
118 }
119
120 /**
121 * a deserialized serialized atomic holds same value
122 */
123 public void testSerialization() throws Exception {
124 AtomicBoolean l = new AtomicBoolean();
125
126 l.set(true);
127 ByteArrayOutputStream bout = new ByteArrayOutputStream(10000);
128 ObjectOutputStream out = new ObjectOutputStream(new BufferedOutputStream(bout));
129 out.writeObject(l);
130 out.close();
131
132 ByteArrayInputStream bin = new ByteArrayInputStream(bout.toByteArray());
133 ObjectInputStream in = new ObjectInputStream(new BufferedInputStream(bin));
134 AtomicBoolean r = (AtomicBoolean) in.readObject();
135 assertEquals(l.get(), r.get());
136 }
137
138 /**
139 * toString returns current value.
140 */
141 public void testToString() {
142 AtomicBoolean ai = new AtomicBoolean();
143 assertEquals(ai.toString(), Boolean.toString(false));
144 ai.set(true);
145 assertEquals(ai.toString(), Boolean.toString(true));
146 }
147
148 }