[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.30 - (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 : jsr166 1.20 * http://creativecommons.org/publicdomain/zero/1.0/
5 : jsr166 1.11 * Other contributors include Andrew Wright, Jeffrey Hayes,
6 :     * Pat Fisher, Mike Judd.
7 : dl 1.1 */
8 :    
9 : jsr166 1.22 import java.util.concurrent.atomic.AtomicLong;
10 : dl 1.1
11 : jsr166 1.27 import junit.framework.Test;
12 :     import junit.framework.TestSuite;
13 :    
14 : dl 1.3 public class AtomicLongTest extends JSR166TestCase {
15 : jsr166 1.19 public static void main(String[] args) {
16 : jsr166 1.29 main(suite(), args);
17 : dl 1.1 }
18 :     public static Test suite() {
19 :     return new TestSuite(AtomicLongTest.class);
20 :     }
21 :    
22 : jsr166 1.17 final long[] VALUES = {
23 :     Long.MIN_VALUE,
24 :     Integer.MIN_VALUE, -1, 0, 1, 42, Integer.MAX_VALUE,
25 :     Long.MAX_VALUE,
26 :     };
27 :    
28 : dl 1.4 /**
29 : dl 1.5 * constructor initializes to given value
30 : dl 1.4 */
31 : jsr166 1.13 public void testConstructor() {
32 : dl 1.1 AtomicLong ai = new AtomicLong(1);
33 : jsr166 1.23 assertEquals(1, ai.get());
34 : dl 1.1 }
35 :    
36 : dl 1.4 /**
37 : dl 1.7 * default constructed initializes to zero
38 : dl 1.4 */
39 : jsr166 1.13 public void testConstructor2() {
40 : dl 1.1 AtomicLong ai = new AtomicLong();
41 : jsr166 1.23 assertEquals(0, ai.get());
42 : dl 1.1 }
43 :    
44 : dl 1.4 /**
45 : dl 1.5 * get returns the last value set
46 : dl 1.4 */
47 : jsr166 1.13 public void testGetSet() {
48 : dl 1.1 AtomicLong ai = new AtomicLong(1);
49 : jsr166 1.23 assertEquals(1, ai.get());
50 : jsr166 1.16 ai.set(2);
51 : jsr166 1.23 assertEquals(2, ai.get());
52 : jsr166 1.16 ai.set(-3);
53 : jsr166 1.23 assertEquals(-3, ai.get());
54 : dl 1.1 }
55 : dl 1.10
56 :     /**
57 :     * get returns the last value lazySet in same thread
58 :     */
59 : jsr166 1.13 public void testGetLazySet() {
60 : dl 1.10 AtomicLong ai = new AtomicLong(1);
61 : jsr166 1.23 assertEquals(1, ai.get());
62 : jsr166 1.16 ai.lazySet(2);
63 : jsr166 1.23 assertEquals(2, ai.get());
64 : jsr166 1.16 ai.lazySet(-3);
65 : jsr166 1.23 assertEquals(-3, ai.get());
66 : dl 1.10 }
67 :    
68 : dl 1.4 /**
69 : dl 1.5 * compareAndSet succeeds in changing value if equal to expected else fails
70 : dl 1.4 */
71 : jsr166 1.13 public void testCompareAndSet() {
72 : dl 1.1 AtomicLong ai = new AtomicLong(1);
73 : jsr166 1.23 assertTrue(ai.compareAndSet(1, 2));
74 :     assertTrue(ai.compareAndSet(2, -4));
75 :     assertEquals(-4, ai.get());
76 :     assertFalse(ai.compareAndSet(-5, 7));
77 :     assertEquals(-4, ai.get());
78 :     assertTrue(ai.compareAndSet(-4, 7));
79 :     assertEquals(7, ai.get());
80 : dl 1.1 }
81 :    
82 : dl 1.4 /**
83 : dl 1.5 * compareAndSet in one thread enables another waiting for value
84 :     * to succeed
85 :     */
86 : jsr166 1.14 public void testCompareAndSetInMultipleThreads() throws Exception {
87 : dl 1.5 final AtomicLong ai = new AtomicLong(1);
88 : jsr166 1.15 Thread t = new Thread(new CheckedRunnable() {
89 :     public void realRun() {
90 :     while (!ai.compareAndSet(2, 3))
91 :     Thread.yield();
92 :     }});
93 : jsr166 1.14
94 :     t.start();
95 :     assertTrue(ai.compareAndSet(1, 2));
96 :     t.join(LONG_DELAY_MS);
97 :     assertFalse(t.isAlive());
98 : jsr166 1.23 assertEquals(3, ai.get());
99 : dl 1.5 }
100 :    
101 :     /**
102 :     * repeated weakCompareAndSet succeeds in changing value when equal
103 : jsr166 1.11 * to expected
104 : dl 1.4 */
105 : jsr166 1.13 public void testWeakCompareAndSet() {
106 : dl 1.1 AtomicLong ai = new AtomicLong(1);
107 : jsr166 1.28 do {} while (!ai.weakCompareAndSet(1, 2));
108 :     do {} while (!ai.weakCompareAndSet(2, -4));
109 : jsr166 1.23 assertEquals(-4, ai.get());
110 : jsr166 1.28 do {} while (!ai.weakCompareAndSet(-4, 7));
111 : jsr166 1.23 assertEquals(7, ai.get());
112 : dl 1.1 }
113 :    
114 : dl 1.4 /**
115 : dl 1.5 * getAndSet returns previous value and sets to given value
116 : dl 1.4 */
117 : jsr166 1.13 public void testGetAndSet() {
118 : dl 1.1 AtomicLong ai = new AtomicLong(1);
119 : jsr166 1.23 assertEquals(1, ai.getAndSet(0));
120 :     assertEquals(0, ai.getAndSet(-10));
121 :     assertEquals(-10, ai.getAndSet(1));
122 : dl 1.1 }
123 :    
124 : dl 1.4 /**
125 : dl 1.5 * getAndAdd returns previous value and adds given value
126 : dl 1.4 */
127 : jsr166 1.13 public void testGetAndAdd() {
128 : dl 1.1 AtomicLong ai = new AtomicLong(1);
129 : jsr166 1.23 assertEquals(1, ai.getAndAdd(2));
130 :     assertEquals(3, ai.get());
131 :     assertEquals(3, ai.getAndAdd(-4));
132 :     assertEquals(-1, ai.get());
133 : dl 1.1 }
134 :    
135 : dl 1.4 /**
136 : dl 1.5 * getAndDecrement returns previous value and decrements
137 : dl 1.4 */
138 : jsr166 1.13 public void testGetAndDecrement() {
139 : dl 1.1 AtomicLong ai = new AtomicLong(1);
140 : jsr166 1.23 assertEquals(1, ai.getAndDecrement());
141 :     assertEquals(0, ai.getAndDecrement());
142 :     assertEquals(-1, ai.getAndDecrement());
143 : dl 1.1 }
144 :    
145 : dl 1.4 /**
146 : dl 1.5 * getAndIncrement returns previous value and increments
147 : dl 1.4 */
148 : jsr166 1.13 public void testGetAndIncrement() {
149 : dl 1.1 AtomicLong ai = new AtomicLong(1);
150 : jsr166 1.23 assertEquals(1, ai.getAndIncrement());
151 :     assertEquals(2, ai.get());
152 : jsr166 1.16 ai.set(-2);
153 : jsr166 1.23 assertEquals(-2, ai.getAndIncrement());
154 :     assertEquals(-1, ai.getAndIncrement());
155 :     assertEquals(0, ai.getAndIncrement());
156 :     assertEquals(1, ai.get());
157 : dl 1.1 }
158 :    
159 : dl 1.4 /**
160 : dl 1.5 * addAndGet adds given value to current, and returns current value
161 : dl 1.4 */
162 : jsr166 1.13 public void testAddAndGet() {
163 : dl 1.1 AtomicLong ai = new AtomicLong(1);
164 : jsr166 1.23 assertEquals(3, ai.addAndGet(2));
165 :     assertEquals(3, ai.get());
166 :     assertEquals(-1, ai.addAndGet(-4));
167 :     assertEquals(-1, ai.get());
168 : dl 1.1 }
169 :    
170 : dl 1.4 /**
171 : dl 1.5 * decrementAndGet decrements and returns current value
172 : dl 1.4 */
173 : jsr166 1.13 public void testDecrementAndGet() {
174 : dl 1.1 AtomicLong ai = new AtomicLong(1);
175 : jsr166 1.23 assertEquals(0, ai.decrementAndGet());
176 :     assertEquals(-1, ai.decrementAndGet());
177 :     assertEquals(-2, ai.decrementAndGet());
178 :     assertEquals(-2, ai.get());
179 : dl 1.1 }
180 :    
181 : dl 1.4 /**
182 : dl 1.5 * incrementAndGet increments and returns current value
183 : dl 1.4 */
184 : jsr166 1.13 public void testIncrementAndGet() {
185 : dl 1.1 AtomicLong ai = new AtomicLong(1);
186 : jsr166 1.23 assertEquals(2, ai.incrementAndGet());
187 :     assertEquals(2, ai.get());
188 : jsr166 1.16 ai.set(-2);
189 : jsr166 1.23 assertEquals(-1, ai.incrementAndGet());
190 :     assertEquals(0, ai.incrementAndGet());
191 :     assertEquals(1, ai.incrementAndGet());
192 :     assertEquals(1, ai.get());
193 : dl 1.1 }
194 :    
195 : dl 1.4 /**
196 : dl 1.5 * a deserialized serialized atomic holds same value
197 : dl 1.4 */
198 : jsr166 1.14 public void testSerialization() throws Exception {
199 : jsr166 1.22 AtomicLong x = new AtomicLong();
200 :     AtomicLong y = serialClone(x);
201 : jsr166 1.26 assertNotSame(x, y);
202 : jsr166 1.22 x.set(-22);
203 :     AtomicLong z = serialClone(x);
204 : jsr166 1.26 assertNotSame(y, z);
205 : jsr166 1.22 assertEquals(-22, x.get());
206 :     assertEquals(0, y.get());
207 :     assertEquals(-22, z.get());
208 : dl 1.2 }
209 : dl 1.1
210 : dl 1.8 /**
211 :     * toString returns current value.
212 : jsr166 1.11 */
213 : dl 1.8 public void testToString() {
214 :     AtomicLong ai = new AtomicLong();
215 : jsr166 1.17 assertEquals("0", ai.toString());
216 : jsr166 1.25 for (long x : VALUES) {
217 :     ai.set(x);
218 :     assertEquals(Long.toString(x), ai.toString());
219 : dl 1.8 }
220 :     }
221 : dl 1.9
222 :     /**
223 : jsr166 1.17 * intValue returns current value.
224 :     */
225 :     public void testIntValue() {
226 :     AtomicLong ai = new AtomicLong();
227 :     assertEquals(0, ai.intValue());
228 :     for (long x : VALUES) {
229 :     ai.set(x);
230 :     assertEquals((int)x, ai.intValue());
231 :     }
232 :     }
233 :    
234 :     /**
235 : dl 1.9 * longValue returns current value.
236 : jsr166 1.11 */
237 : dl 1.9 public void testLongValue() {
238 :     AtomicLong ai = new AtomicLong();
239 : jsr166 1.17 assertEquals(0L, ai.longValue());
240 :     for (long x : VALUES) {
241 :     ai.set(x);
242 : jsr166 1.21 assertEquals(x, ai.longValue());
243 : dl 1.9 }
244 :     }
245 :    
246 :     /**
247 :     * floatValue returns current value.
248 : jsr166 1.11 */
249 : dl 1.9 public void testFloatValue() {
250 :     AtomicLong ai = new AtomicLong();
251 : jsr166 1.17 assertEquals(0.0f, ai.floatValue());
252 :     for (long x : VALUES) {
253 :     ai.set(x);
254 :     assertEquals((float)x, ai.floatValue());
255 : dl 1.9 }
256 :     }
257 :    
258 :     /**
259 :     * doubleValue returns current value.
260 : jsr166 1.11 */
261 : dl 1.9 public void testDoubleValue() {
262 :     AtomicLong ai = new AtomicLong();
263 : jsr166 1.17 assertEquals(0.0d, ai.doubleValue());
264 :     for (long x : VALUES) {
265 :     ai.set(x);
266 :     assertEquals((double)x, ai.doubleValue());
267 : dl 1.9 }
268 :     }
269 :    
270 : dl 1.30 // jdk9
271 :    
272 :     /**
273 :     * getPlain returns the last value set
274 :     */
275 :     public void testGetPlainSet() {
276 :     AtomicLong ai = new AtomicLong(1);
277 :     assertEquals(1, ai.getPlain());
278 :     ai.set(2);
279 :     assertEquals(2, ai.getPlain());
280 :     ai.set(-3);
281 :     assertEquals(-3, ai.getPlain());
282 :     }
283 :    
284 :     /**
285 :     * getOpaque returns the last value set
286 :     */
287 :     public void testGetOpaqueSet() {
288 :     AtomicLong ai = new AtomicLong(1);
289 :     assertEquals(1, ai.getOpaque());
290 :     ai.set(2);
291 :     assertEquals(2, ai.getOpaque());
292 :     ai.set(-3);
293 :     assertEquals(-3, ai.getOpaque());
294 :     }
295 :    
296 :     /**
297 :     * getAcquire returns the last value set
298 :     */
299 :     public void testGetAcquireSet() {
300 :     AtomicLong ai = new AtomicLong(1);
301 :     assertEquals(1, ai.getAcquire());
302 :     ai.set(2);
303 :     assertEquals(2, ai.getAcquire());
304 :     ai.set(-3);
305 :     assertEquals(-3, ai.getAcquire());
306 :     }
307 :    
308 :     /**
309 :     * get returns the last value setPlain
310 :     */
311 :     public void testGetSetPlain() {
312 :     AtomicLong ai = new AtomicLong(1);
313 :     assertEquals(1, ai.get());
314 :     ai.setPlain(2);
315 :     assertEquals(2, ai.get());
316 :     ai.setPlain(-3);
317 :     assertEquals(-3, ai.get());
318 :     }
319 :    
320 :     /**
321 :     * get returns the last value setOpaque
322 :     */
323 :     public void testGetSetOpaque() {
324 :     AtomicLong ai = new AtomicLong(1);
325 :     assertEquals(1, ai.get());
326 :     ai.setOpaque(2);
327 :     assertEquals(2, ai.get());
328 :     ai.setOpaque(-3);
329 :     assertEquals(-3, ai.get());
330 :     }
331 :    
332 :     /**
333 :     * get returns the last value setRelease
334 :     */
335 :     public void testGetSetRelease() {
336 :     AtomicLong ai = new AtomicLong(1);
337 :     assertEquals(1, ai.get());
338 :     ai.setRelease(2);
339 :     assertEquals(2, ai.get());
340 :     ai.setRelease(-3);
341 :     assertEquals(-3, ai.get());
342 :     }
343 :    
344 :     /**
345 :     * compareAndExchange succeeds in changing value if equal to
346 :     * expected else fails
347 :     */
348 :     public void testCompareAndExchange() {
349 :     AtomicLong ai = new AtomicLong(1);
350 :     assertEquals(1, ai.compareAndExchange(1, 2));
351 :     assertEquals(2, ai.compareAndExchange(2, -4));
352 :     assertEquals(-4, ai.get());
353 :     assertEquals(-4, ai.compareAndExchange(-5, 7));
354 :     assertEquals(-4, ai.get());
355 :     assertEquals(-4, ai.compareAndExchange(-4, 7));
356 :     assertEquals(7, ai.get());
357 :     }
358 :    
359 :     /**
360 :     * compareAndExchangeAcquire succeeds in changing value if equal to
361 :     * expected else fails
362 :     */
363 :     public void testCompareAndExchangeAcquire() {
364 :     AtomicLong ai = new AtomicLong(1);
365 :     assertEquals(1, ai.compareAndExchangeAcquire(1, 2));
366 :     assertEquals(2, ai.compareAndExchangeAcquire(2, -4));
367 :     assertEquals(-4, ai.get());
368 :     assertEquals(-4, ai.compareAndExchangeAcquire(-5, 7));
369 :     assertEquals(-4, ai.get());
370 :     assertEquals(-4, ai.compareAndExchangeAcquire(-4, 7));
371 :     assertEquals(7, ai.get());
372 :     }
373 :    
374 :     /**
375 :     * compareAndExchangeRelease succeeds in changing value if equal to
376 :     * expected else fails
377 :     */
378 :     public void testCompareAndExchangeRelease() {
379 :     AtomicLong ai = new AtomicLong(1);
380 :     assertEquals(1, ai.compareAndExchangeRelease(1, 2));
381 :     assertEquals(2, ai.compareAndExchangeRelease(2, -4));
382 :     assertEquals(-4, ai.get());
383 :     assertEquals(-4, ai.compareAndExchangeRelease(-5, 7));
384 :     assertEquals(-4, ai.get());
385 :     assertEquals(-4, ai.compareAndExchangeRelease(-4, 7));
386 :     assertEquals(7, ai.get());
387 :     }
388 :    
389 :     /**
390 :     * repeated weakCompareAndSetVolatile succeeds in changing value when equal
391 :     * to expected
392 :     */
393 :     public void testWeakCompareAndSetVolatile() {
394 :     AtomicLong ai = new AtomicLong(1);
395 :     do {} while (!ai.weakCompareAndSetVolatile(1, 2));
396 :     do {} while (!ai.weakCompareAndSetVolatile(2, -4));
397 :     assertEquals(-4, ai.get());
398 :     do {} while (!ai.weakCompareAndSetVolatile(-4, 7));
399 :     assertEquals(7, ai.get());
400 :     }
401 :    
402 :     /**
403 :     * repeated weakCompareAndSetAcquire succeeds in changing value when equal
404 :     * to expected
405 :     */
406 :     public void testWeakCompareAndSetAcquire() {
407 :     AtomicLong ai = new AtomicLong(1);
408 :     do {} while (!ai.weakCompareAndSetAcquire(1, 2));
409 :     do {} while (!ai.weakCompareAndSetAcquire(2, -4));
410 :     assertEquals(-4, ai.get());
411 :     do {} while (!ai.weakCompareAndSetAcquire(-4, 7));
412 :     assertEquals(7, ai.get());
413 :     }
414 :    
415 :     /**
416 :     * repeated weakCompareAndSetRelease succeeds in changing value when equal
417 :     * to expected
418 :     */
419 :     public void testWeakCompareAndSetRelease() {
420 :     AtomicLong ai = new AtomicLong(1);
421 :     do {} while (!ai.weakCompareAndSetRelease(1, 2));
422 :     do {} while (!ai.weakCompareAndSetRelease(2, -4));
423 :     assertEquals(-4, ai.get());
424 :     do {} while (!ai.weakCompareAndSetRelease(-4, 7));
425 :     assertEquals(7, ai.get());
426 :     }
427 :    
428 : dl 1.1 }

Doug Lea
ViewVC Help
Powered by ViewVC 1.0.8