ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/tck/AtomicBooleanTest.java
Revision: 1.19
Committed: Tue May 31 16:16:23 2011 UTC (12 years, 11 months ago) by jsr166
Branch: MAIN
Changes since 1.18: +8 -14 lines
Log Message:
use serialClone in serialization tests; update imports

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