[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.11 - (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 :     assertEquals(true,ai.get());
27 :     }
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 :     assertEquals(false,ai.get());
35 :     }
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 :     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 :     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 :     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 : dl 1.4 /**
79 : dl 1.5 * compareAndSet in one thread enables another waiting for value
80 :     * to succeed
81 :     */
82 :     public void testCompareAndSetInMultipleThreads() {
83 :     final AtomicBoolean ai = new AtomicBoolean(true);
84 :     Thread t = new Thread(new Runnable() {
85 :     public void run() {
86 : jsr166 1.11 while (!ai.compareAndSet(false, true)) Thread.yield();
87 : dl 1.5 }});
88 :     try {
89 :     t.start();
90 :     assertTrue(ai.compareAndSet(true, false));
91 :     t.join(LONG_DELAY_MS);
92 :     assertFalse(t.isAlive());
93 :     }
94 : jsr166 1.11 catch (Exception e) {
95 : dl 1.5 unexpectedException();
96 :     }
97 :     }
98 :    
99 :     /**
100 :     * repeated weakCompareAndSet succeeds in changing value when equal
101 : jsr166 1.10 * to expected
102 : dl 1.4 */
103 :     public void testWeakCompareAndSet() {
104 : dl 1.1 AtomicBoolean ai = new AtomicBoolean(true);
105 : jsr166 1.11 while (!ai.weakCompareAndSet(true,false));
106 : dl 1.1 assertEquals(false,ai.get());
107 : jsr166 1.11 while (!ai.weakCompareAndSet(false,false));
108 : dl 1.1 assertEquals(false,ai.get());
109 : jsr166 1.11 while (!ai.weakCompareAndSet(false,true));
110 : dl 1.1 assertEquals(true,ai.get());
111 :     }
112 :    
113 : dl 1.4 /**
114 : dl 1.5 * getAndSet returns previous value and sets to given value
115 : dl 1.4 */
116 :     public void testGetAndSet() {
117 : dl 1.1 AtomicBoolean ai = new AtomicBoolean(true);
118 :     assertEquals(true,ai.getAndSet(false));
119 :     assertEquals(false,ai.getAndSet(false));
120 :     assertEquals(false,ai.getAndSet(true));
121 :     assertEquals(true,ai.get());
122 : dl 1.2 }
123 :    
124 : dl 1.4 /**
125 : dl 1.5 * a deserialized serialized atomic holds same value
126 : dl 1.4 */
127 : dl 1.2 public void testSerialization() {
128 :     AtomicBoolean l = new AtomicBoolean();
129 :    
130 :     try {
131 :     l.set(true);
132 :     ByteArrayOutputStream bout = new ByteArrayOutputStream(10000);
133 :     ObjectOutputStream out = new ObjectOutputStream(new BufferedOutputStream(bout));
134 :     out.writeObject(l);
135 :     out.close();
136 :    
137 :     ByteArrayInputStream bin = new ByteArrayInputStream(bout.toByteArray());
138 :     ObjectInputStream in = new ObjectInputStream(new BufferedInputStream(bin));
139 :     AtomicBoolean r = (AtomicBoolean) in.readObject();
140 :     assertEquals(l.get(), r.get());
141 : jsr166 1.11 } catch (Exception e){
142 : dl 1.2 e.printStackTrace();
143 : dl 1.4 unexpectedException();
144 : dl 1.2 }
145 : dl 1.1 }
146 :    
147 : dl 1.8 /**
148 :     * toString returns current value.
149 : jsr166 1.10 */
150 : dl 1.8 public void testToString() {
151 : jsr166 1.10 AtomicBoolean ai = new AtomicBoolean();
152 : dl 1.8 assertEquals(ai.toString(), Boolean.toString(false));
153 :     ai.set(true);
154 :     assertEquals(ai.toString(), Boolean.toString(true));
155 :     }
156 : dl 1.1
157 :     }

Doug Lea
ViewVC Help
Powered by ViewVC 1.0.8