ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/tck/AtomicLongTest.java
Revision: 1.29
Committed: Sat Apr 25 04:55:30 2015 UTC (9 years ago) by jsr166
Branch: MAIN
Changes since 1.28: +1 -1 lines
Log Message:
improve main methods; respect system properties; actually fail if a test fails

File Contents

# User Rev Content
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.1 }