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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.12 - (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.11 * 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 AtomicLongTest 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(AtomicLongTest.class);
19 :     }
20 :    
21 : dl 1.4 /**
22 : dl 1.5 * constructor initializes to given value
23 : dl 1.4 */
24 : dl 1.1 public void testConstructor(){
25 :     AtomicLong ai = new AtomicLong(1);
26 :     assertEquals(1,ai.get());
27 :     }
28 :    
29 : dl 1.4 /**
30 : dl 1.7 * default constructed initializes to zero
31 : dl 1.4 */
32 : dl 1.1 public void testConstructor2(){
33 :     AtomicLong ai = new AtomicLong();
34 :     assertEquals(0,ai.get());
35 :     }
36 :    
37 : dl 1.4 /**
38 : dl 1.5 * get returns the last value set
39 : dl 1.4 */
40 : dl 1.1 public void testGetSet(){
41 :     AtomicLong ai = new AtomicLong(1);
42 :     assertEquals(1,ai.get());
43 :     ai.set(2);
44 :     assertEquals(2,ai.get());
45 :     ai.set(-3);
46 :     assertEquals(-3,ai.get());
47 : jsr166 1.11
48 : dl 1.1 }
49 : dl 1.10
50 :     /**
51 :     * get returns the last value lazySet in same thread
52 :     */
53 :     public void testGetLazySet(){
54 :     AtomicLong ai = new AtomicLong(1);
55 :     assertEquals(1,ai.get());
56 :     ai.lazySet(2);
57 :     assertEquals(2,ai.get());
58 :     ai.lazySet(-3);
59 :     assertEquals(-3,ai.get());
60 : jsr166 1.11
61 : dl 1.10 }
62 :    
63 : dl 1.4 /**
64 : dl 1.5 * compareAndSet succeeds in changing value if equal to expected else fails
65 : dl 1.4 */
66 : dl 1.1 public void testCompareAndSet(){
67 :     AtomicLong ai = new AtomicLong(1);
68 :     assertTrue(ai.compareAndSet(1,2));
69 :     assertTrue(ai.compareAndSet(2,-4));
70 :     assertEquals(-4,ai.get());
71 :     assertFalse(ai.compareAndSet(-5,7));
72 :     assertFalse((7 == ai.get()));
73 :     assertTrue(ai.compareAndSet(-4,7));
74 :     assertEquals(7,ai.get());
75 :     }
76 :    
77 : dl 1.4 /**
78 : dl 1.5 * compareAndSet in one thread enables another waiting for value
79 :     * to succeed
80 :     */
81 :     public void testCompareAndSetInMultipleThreads() {
82 :     final AtomicLong ai = new AtomicLong(1);
83 :     Thread t = new Thread(new Runnable() {
84 :     public void run() {
85 : jsr166 1.12 while (!ai.compareAndSet(2, 3)) Thread.yield();
86 : dl 1.5 }});
87 :     try {
88 :     t.start();
89 :     assertTrue(ai.compareAndSet(1, 2));
90 :     t.join(LONG_DELAY_MS);
91 :     assertFalse(t.isAlive());
92 :     assertEquals(ai.get(), 3);
93 :     }
94 : jsr166 1.12 catch (Exception e) {
95 : dl 1.5 unexpectedException();
96 :     }
97 :     }
98 :    
99 :     /**
100 :     * repeated weakCompareAndSet succeeds in changing value when equal
101 : jsr166 1.11 * to expected
102 : dl 1.4 */
103 : dl 1.1 public void testWeakCompareAndSet(){
104 :     AtomicLong ai = new AtomicLong(1);
105 : jsr166 1.12 while (!ai.weakCompareAndSet(1,2));
106 :     while (!ai.weakCompareAndSet(2,-4));
107 : dl 1.1 assertEquals(-4,ai.get());
108 : jsr166 1.12 while (!ai.weakCompareAndSet(-4,7));
109 : dl 1.1 assertEquals(7,ai.get());
110 :     }
111 :    
112 : dl 1.4 /**
113 : dl 1.5 * getAndSet returns previous value and sets to given value
114 : dl 1.4 */
115 : dl 1.1 public void testGetAndSet(){
116 :     AtomicLong ai = new AtomicLong(1);
117 :     assertEquals(1,ai.getAndSet(0));
118 :     assertEquals(0,ai.getAndSet(-10));
119 :     assertEquals(-10,ai.getAndSet(1));
120 :     }
121 :    
122 : dl 1.4 /**
123 : dl 1.5 * getAndAdd returns previous value and adds given value
124 : dl 1.4 */
125 : dl 1.1 public void testGetAndAdd(){
126 :     AtomicLong ai = new AtomicLong(1);
127 :     assertEquals(1,ai.getAndAdd(2));
128 :     assertEquals(3,ai.get());
129 :     assertEquals(3,ai.getAndAdd(-4));
130 :     assertEquals(-1,ai.get());
131 :     }
132 :    
133 : dl 1.4 /**
134 : dl 1.5 * getAndDecrement returns previous value and decrements
135 : dl 1.4 */
136 : dl 1.1 public void testGetAndDecrement(){
137 :     AtomicLong ai = new AtomicLong(1);
138 :     assertEquals(1,ai.getAndDecrement());
139 :     assertEquals(0,ai.getAndDecrement());
140 :     assertEquals(-1,ai.getAndDecrement());
141 :     }
142 :    
143 : dl 1.4 /**
144 : dl 1.5 * getAndIncrement returns previous value and increments
145 : dl 1.4 */
146 : dl 1.1 public void testGetAndIncrement(){
147 :     AtomicLong ai = new AtomicLong(1);
148 :     assertEquals(1,ai.getAndIncrement());
149 :     assertEquals(2,ai.get());
150 :     ai.set(-2);
151 :     assertEquals(-2,ai.getAndIncrement());
152 :     assertEquals(-1,ai.getAndIncrement());
153 :     assertEquals(0,ai.getAndIncrement());
154 :     assertEquals(1,ai.get());
155 :     }
156 :    
157 : dl 1.4 /**
158 : dl 1.5 * addAndGet adds given value to current, and returns current value
159 : dl 1.4 */
160 : dl 1.1 public void testAddAndGet(){
161 :     AtomicLong ai = new AtomicLong(1);
162 :     assertEquals(3,ai.addAndGet(2));
163 :     assertEquals(3,ai.get());
164 :     assertEquals(-1,ai.addAndGet(-4));
165 :     assertEquals(-1,ai.get());
166 :     }
167 :    
168 : dl 1.4 /**
169 : dl 1.5 * decrementAndGet decrements and returns current value
170 : dl 1.4 */
171 : dl 1.1 public void testDecrementAndGet(){
172 :     AtomicLong ai = new AtomicLong(1);
173 :     assertEquals(0,ai.decrementAndGet());
174 :     assertEquals(-1,ai.decrementAndGet());
175 :     assertEquals(-2,ai.decrementAndGet());
176 :     assertEquals(-2,ai.get());
177 :     }
178 :    
179 : dl 1.4 /**
180 : dl 1.5 * incrementAndGet increments and returns current value
181 : dl 1.4 */
182 : dl 1.1 public void testIncrementAndGet(){
183 :     AtomicLong ai = new AtomicLong(1);
184 :     assertEquals(2,ai.incrementAndGet());
185 :     assertEquals(2,ai.get());
186 :     ai.set(-2);
187 :     assertEquals(-1,ai.incrementAndGet());
188 :     assertEquals(0,ai.incrementAndGet());
189 :     assertEquals(1,ai.incrementAndGet());
190 :     assertEquals(1,ai.get());
191 :     }
192 :    
193 : dl 1.4 /**
194 : dl 1.5 * a deserialized serialized atomic holds same value
195 : dl 1.4 */
196 : dl 1.2 public void testSerialization() {
197 :     AtomicLong l = new AtomicLong();
198 :    
199 :     try {
200 :     l.set(-22);
201 :     ByteArrayOutputStream bout = new ByteArrayOutputStream(10000);
202 :     ObjectOutputStream out = new ObjectOutputStream(new BufferedOutputStream(bout));
203 :     out.writeObject(l);
204 :     out.close();
205 :    
206 :     ByteArrayInputStream bin = new ByteArrayInputStream(bout.toByteArray());
207 :     ObjectInputStream in = new ObjectInputStream(new BufferedInputStream(bin));
208 :     AtomicLong r = (AtomicLong) in.readObject();
209 :     assertEquals(l.get(), r.get());
210 : jsr166 1.12 } catch (Exception e){
211 : dl 1.4 unexpectedException();
212 : dl 1.2 }
213 :     }
214 : dl 1.1
215 : dl 1.8 /**
216 :     * toString returns current value.
217 : jsr166 1.11 */
218 : dl 1.8 public void testToString() {
219 :     AtomicLong ai = new AtomicLong();
220 :     for (long i = -12; i < 6; ++i) {
221 :     ai.set(i);
222 :     assertEquals(ai.toString(), Long.toString(i));
223 :     }
224 :     }
225 : dl 1.9
226 :     /**
227 :     * longValue returns current value.
228 : jsr166 1.11 */
229 : dl 1.9 public void testLongValue() {
230 :     AtomicLong ai = new AtomicLong();
231 :     for (int i = -12; i < 6; ++i) {
232 :     ai.set(i);
233 :     assertEquals((long)i, ai.longValue());
234 :     }
235 :     }
236 :    
237 :     /**
238 :     * floatValue returns current value.
239 : jsr166 1.11 */
240 : dl 1.9 public void testFloatValue() {
241 :     AtomicLong ai = new AtomicLong();
242 :     for (int i = -12; i < 6; ++i) {
243 :     ai.set(i);
244 :     assertEquals((float)i, ai.floatValue());
245 :     }
246 :     }
247 :    
248 :     /**
249 :     * doubleValue returns current value.
250 : jsr166 1.11 */
251 : dl 1.9 public void testDoubleValue() {
252 :     AtomicLong ai = new AtomicLong();
253 :     for (int i = -12; i < 6; ++i) {
254 :     ai.set(i);
255 :     assertEquals((double)i, ai.doubleValue());
256 :     }
257 :     }
258 :    
259 :    
260 : dl 1.1 }

Doug Lea
ViewVC Help
Powered by ViewVC 1.0.8