[cvs] / jsr166 / src / test / tck / AtomicBooleanTest.java Repository:
ViewVC logotype

Annotation of /jsr166/src/test/tck/AtomicBooleanTest.java

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.15 - (view) (download)

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

Doug Lea
ViewVC Help
Powered by ViewVC 1.0.8