ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/tck/AtomicBooleanTest.java
Revision: 1.23
Committed: Wed Dec 31 19:21:20 2014 UTC (9 years, 4 months ago) by jsr166
Branch: MAIN
Changes since 1.22: +3 -3 lines
Log Message:
prefer do {} while (...); to while (...);

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