ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/tck/AtomicLongTest.java
Revision: 1.34
Committed: Tue Jan 26 13:33:05 2021 UTC (3 years, 3 months ago) by dl
Branch: MAIN
CVS Tags: HEAD
Changes since 1.33: +1 -0 lines
Log Message:
Replace Integer with Item class

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 dl 1.34 @SuppressWarnings("deprecation")
106 jsr166 1.13 public void testWeakCompareAndSet() {
107 dl 1.1 AtomicLong ai = new AtomicLong(1);
108 jsr166 1.28 do {} while (!ai.weakCompareAndSet(1, 2));
109     do {} while (!ai.weakCompareAndSet(2, -4));
110 jsr166 1.23 assertEquals(-4, ai.get());
111 jsr166 1.28 do {} while (!ai.weakCompareAndSet(-4, 7));
112 jsr166 1.23 assertEquals(7, ai.get());
113 dl 1.1 }
114    
115 dl 1.4 /**
116 dl 1.5 * getAndSet returns previous value and sets to given value
117 dl 1.4 */
118 jsr166 1.13 public void testGetAndSet() {
119 dl 1.1 AtomicLong ai = new AtomicLong(1);
120 jsr166 1.23 assertEquals(1, ai.getAndSet(0));
121     assertEquals(0, ai.getAndSet(-10));
122     assertEquals(-10, ai.getAndSet(1));
123 dl 1.1 }
124    
125 dl 1.4 /**
126 dl 1.5 * getAndAdd returns previous value and adds given value
127 dl 1.4 */
128 jsr166 1.13 public void testGetAndAdd() {
129 dl 1.1 AtomicLong ai = new AtomicLong(1);
130 jsr166 1.23 assertEquals(1, ai.getAndAdd(2));
131     assertEquals(3, ai.get());
132     assertEquals(3, ai.getAndAdd(-4));
133     assertEquals(-1, ai.get());
134 dl 1.1 }
135    
136 dl 1.4 /**
137 dl 1.5 * getAndDecrement returns previous value and decrements
138 dl 1.4 */
139 jsr166 1.13 public void testGetAndDecrement() {
140 dl 1.1 AtomicLong ai = new AtomicLong(1);
141 jsr166 1.23 assertEquals(1, ai.getAndDecrement());
142     assertEquals(0, ai.getAndDecrement());
143     assertEquals(-1, ai.getAndDecrement());
144 dl 1.1 }
145    
146 dl 1.4 /**
147 dl 1.5 * getAndIncrement returns previous value and increments
148 dl 1.4 */
149 jsr166 1.13 public void testGetAndIncrement() {
150 dl 1.1 AtomicLong ai = new AtomicLong(1);
151 jsr166 1.23 assertEquals(1, ai.getAndIncrement());
152     assertEquals(2, ai.get());
153 jsr166 1.16 ai.set(-2);
154 jsr166 1.23 assertEquals(-2, ai.getAndIncrement());
155     assertEquals(-1, ai.getAndIncrement());
156     assertEquals(0, ai.getAndIncrement());
157     assertEquals(1, ai.get());
158 dl 1.1 }
159    
160 dl 1.4 /**
161 dl 1.5 * addAndGet adds given value to current, and returns current value
162 dl 1.4 */
163 jsr166 1.13 public void testAddAndGet() {
164 dl 1.1 AtomicLong ai = new AtomicLong(1);
165 jsr166 1.23 assertEquals(3, ai.addAndGet(2));
166     assertEquals(3, ai.get());
167     assertEquals(-1, ai.addAndGet(-4));
168     assertEquals(-1, ai.get());
169 dl 1.1 }
170    
171 dl 1.4 /**
172 dl 1.5 * decrementAndGet decrements and returns current value
173 dl 1.4 */
174 jsr166 1.13 public void testDecrementAndGet() {
175 dl 1.1 AtomicLong ai = new AtomicLong(1);
176 jsr166 1.23 assertEquals(0, ai.decrementAndGet());
177     assertEquals(-1, ai.decrementAndGet());
178     assertEquals(-2, ai.decrementAndGet());
179     assertEquals(-2, ai.get());
180 dl 1.1 }
181    
182 dl 1.4 /**
183 dl 1.5 * incrementAndGet increments and returns current value
184 dl 1.4 */
185 jsr166 1.13 public void testIncrementAndGet() {
186 dl 1.1 AtomicLong ai = new AtomicLong(1);
187 jsr166 1.23 assertEquals(2, ai.incrementAndGet());
188     assertEquals(2, ai.get());
189 jsr166 1.16 ai.set(-2);
190 jsr166 1.23 assertEquals(-1, ai.incrementAndGet());
191     assertEquals(0, ai.incrementAndGet());
192     assertEquals(1, ai.incrementAndGet());
193     assertEquals(1, ai.get());
194 dl 1.1 }
195    
196 dl 1.4 /**
197 jsr166 1.33 * a deserialized/reserialized atomic holds same value
198 dl 1.4 */
199 jsr166 1.14 public void testSerialization() throws Exception {
200 jsr166 1.22 AtomicLong x = new AtomicLong();
201     AtomicLong y = serialClone(x);
202 jsr166 1.26 assertNotSame(x, y);
203 jsr166 1.22 x.set(-22);
204     AtomicLong z = serialClone(x);
205 jsr166 1.26 assertNotSame(y, z);
206 jsr166 1.22 assertEquals(-22, x.get());
207     assertEquals(0, y.get());
208     assertEquals(-22, z.get());
209 dl 1.2 }
210 dl 1.1
211 dl 1.8 /**
212     * toString returns current value.
213 jsr166 1.11 */
214 dl 1.8 public void testToString() {
215     AtomicLong ai = new AtomicLong();
216 jsr166 1.17 assertEquals("0", ai.toString());
217 jsr166 1.25 for (long x : VALUES) {
218     ai.set(x);
219     assertEquals(Long.toString(x), ai.toString());
220 dl 1.8 }
221     }
222 dl 1.9
223     /**
224 jsr166 1.17 * intValue returns current value.
225     */
226     public void testIntValue() {
227     AtomicLong ai = new AtomicLong();
228     assertEquals(0, ai.intValue());
229     for (long x : VALUES) {
230     ai.set(x);
231     assertEquals((int)x, ai.intValue());
232     }
233     }
234    
235     /**
236 dl 1.9 * longValue returns current value.
237 jsr166 1.11 */
238 dl 1.9 public void testLongValue() {
239     AtomicLong ai = new AtomicLong();
240 jsr166 1.17 assertEquals(0L, ai.longValue());
241     for (long x : VALUES) {
242     ai.set(x);
243 jsr166 1.21 assertEquals(x, ai.longValue());
244 dl 1.9 }
245     }
246    
247     /**
248     * floatValue returns current value.
249 jsr166 1.11 */
250 dl 1.9 public void testFloatValue() {
251     AtomicLong ai = new AtomicLong();
252 jsr166 1.17 assertEquals(0.0f, ai.floatValue());
253     for (long x : VALUES) {
254     ai.set(x);
255     assertEquals((float)x, ai.floatValue());
256 dl 1.9 }
257     }
258    
259     /**
260     * doubleValue returns current value.
261 jsr166 1.11 */
262 dl 1.9 public void testDoubleValue() {
263     AtomicLong ai = new AtomicLong();
264 jsr166 1.17 assertEquals(0.0d, ai.doubleValue());
265     for (long x : VALUES) {
266     ai.set(x);
267     assertEquals((double)x, ai.doubleValue());
268 dl 1.9 }
269     }
270    
271 dl 1.1 }