ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/tck/AtomicIntegerTest.java
Revision: 1.23
Committed: Fri Jun 10 20:01:21 2011 UTC (12 years, 10 months ago) by jsr166
Branch: MAIN
Changes since 1.22: +50 -50 lines
Log Message:
whitespace

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.21 * http://creativecommons.org/publicdomain/zero/1.0/
5 jsr166 1.12 * Other contributors include Andrew Wright, Jeffrey Hayes,
6     * Pat Fisher, Mike Judd.
7 dl 1.1 */
8    
9     import junit.framework.*;
10 jsr166 1.22 import java.util.concurrent.atomic.AtomicInteger;
11 dl 1.1
12 dl 1.3 public class AtomicIntegerTest extends JSR166TestCase {
13 jsr166 1.20 public static void main(String[] args) {
14     junit.textui.TestRunner.run(suite());
15 dl 1.1 }
16     public static Test suite() {
17     return new TestSuite(AtomicIntegerTest.class);
18     }
19    
20 jsr166 1.18 final int[] VALUES = {
21     Integer.MIN_VALUE, -1, 0, 1, 42, Integer.MAX_VALUE,
22     };
23    
24 dl 1.4 /**
25 dl 1.5 * constructor initializes to given value
26 dl 1.4 */
27 jsr166 1.14 public void testConstructor() {
28 dl 1.1 AtomicInteger ai = new AtomicInteger(1);
29 jsr166 1.23 assertEquals(1, ai.get());
30 dl 1.1 }
31    
32 dl 1.4 /**
33 dl 1.7 * default constructed initializes to zero
34 dl 1.4 */
35 jsr166 1.14 public void testConstructor2() {
36 dl 1.1 AtomicInteger ai = new AtomicInteger();
37 jsr166 1.23 assertEquals(0, ai.get());
38 dl 1.1 }
39    
40 dl 1.4 /**
41 dl 1.11 * get returns the last value set
42     */
43 jsr166 1.14 public void testGetSet() {
44 dl 1.11 AtomicInteger ai = new AtomicInteger(1);
45 jsr166 1.23 assertEquals(1, ai.get());
46 jsr166 1.17 ai.set(2);
47 jsr166 1.23 assertEquals(2, ai.get());
48 jsr166 1.17 ai.set(-3);
49 jsr166 1.23 assertEquals(-3, ai.get());
50 dl 1.11 }
51    
52     /**
53 dl 1.10 * get returns the last value lazySet in same thread
54 dl 1.4 */
55 jsr166 1.14 public void testGetLazySet() {
56 dl 1.1 AtomicInteger ai = new AtomicInteger(1);
57 jsr166 1.23 assertEquals(1, ai.get());
58 jsr166 1.17 ai.lazySet(2);
59 jsr166 1.23 assertEquals(2, ai.get());
60 jsr166 1.17 ai.lazySet(-3);
61 jsr166 1.23 assertEquals(-3, ai.get());
62 jsr166 1.19 }
63 jsr166 1.12
64 dl 1.4 /**
65 dl 1.5 * compareAndSet succeeds in changing value if equal to expected else fails
66 dl 1.4 */
67 jsr166 1.14 public void testCompareAndSet() {
68 dl 1.1 AtomicInteger ai = new AtomicInteger(1);
69 jsr166 1.23 assertTrue(ai.compareAndSet(1, 2));
70     assertTrue(ai.compareAndSet(2, -4));
71     assertEquals(-4, ai.get());
72     assertFalse(ai.compareAndSet(-5, 7));
73     assertEquals(-4, ai.get());
74     assertTrue(ai.compareAndSet(-4, 7));
75     assertEquals(7, ai.get());
76 dl 1.1 }
77    
78 dl 1.4 /**
79 dl 1.5 * compareAndSet in one thread enables another waiting for value
80     * to succeed
81     */
82 jsr166 1.15 public void testCompareAndSetInMultipleThreads() throws Exception {
83 dl 1.5 final AtomicInteger ai = new AtomicInteger(1);
84 jsr166 1.16 Thread t = new Thread(new CheckedRunnable() {
85     public void realRun() {
86     while (!ai.compareAndSet(2, 3))
87     Thread.yield();
88     }});
89 jsr166 1.15
90     t.start();
91     assertTrue(ai.compareAndSet(1, 2));
92     t.join(LONG_DELAY_MS);
93     assertFalse(t.isAlive());
94     assertEquals(ai.get(), 3);
95 dl 1.5 }
96    
97     /**
98     * repeated weakCompareAndSet succeeds in changing value when equal
99 jsr166 1.12 * to expected
100 dl 1.4 */
101 jsr166 1.14 public void testWeakCompareAndSet() {
102 dl 1.1 AtomicInteger ai = new AtomicInteger(1);
103 jsr166 1.23 while (!ai.weakCompareAndSet(1, 2));
104     while (!ai.weakCompareAndSet(2, -4));
105     assertEquals(-4, ai.get());
106     while (!ai.weakCompareAndSet(-4, 7));
107     assertEquals(7, ai.get());
108 dl 1.1 }
109    
110 dl 1.4 /**
111 dl 1.5 * getAndSet returns previous value and sets to given value
112 dl 1.4 */
113 jsr166 1.14 public void testGetAndSet() {
114 dl 1.1 AtomicInteger ai = new AtomicInteger(1);
115 jsr166 1.23 assertEquals(1, ai.getAndSet(0));
116     assertEquals(0, ai.getAndSet(-10));
117     assertEquals(-10, ai.getAndSet(1));
118 dl 1.1 }
119    
120 dl 1.4 /**
121 dl 1.5 * getAndAdd returns previous value and adds given value
122 dl 1.4 */
123 jsr166 1.14 public void testGetAndAdd() {
124 dl 1.1 AtomicInteger ai = new AtomicInteger(1);
125 jsr166 1.23 assertEquals(1, ai.getAndAdd(2));
126     assertEquals(3, ai.get());
127     assertEquals(3, ai.getAndAdd(-4));
128     assertEquals(-1, ai.get());
129 dl 1.1 }
130    
131 dl 1.4 /**
132 dl 1.5 * getAndDecrement returns previous value and decrements
133 dl 1.4 */
134 jsr166 1.14 public void testGetAndDecrement() {
135 dl 1.1 AtomicInteger ai = new AtomicInteger(1);
136 jsr166 1.23 assertEquals(1, ai.getAndDecrement());
137     assertEquals(0, ai.getAndDecrement());
138     assertEquals(-1, ai.getAndDecrement());
139 dl 1.1 }
140    
141 dl 1.4 /**
142 dl 1.5 * getAndIncrement returns previous value and increments
143 dl 1.4 */
144 jsr166 1.14 public void testGetAndIncrement() {
145 dl 1.1 AtomicInteger ai = new AtomicInteger(1);
146 jsr166 1.23 assertEquals(1, ai.getAndIncrement());
147     assertEquals(2, ai.get());
148 jsr166 1.17 ai.set(-2);
149 jsr166 1.23 assertEquals(-2, ai.getAndIncrement());
150     assertEquals(-1, ai.getAndIncrement());
151     assertEquals(0, ai.getAndIncrement());
152     assertEquals(1, ai.get());
153 dl 1.1 }
154    
155 dl 1.4 /**
156 dl 1.5 * addAndGet adds given value to current, and returns current value
157 dl 1.4 */
158 jsr166 1.14 public void testAddAndGet() {
159 dl 1.1 AtomicInteger ai = new AtomicInteger(1);
160 jsr166 1.23 assertEquals(3, ai.addAndGet(2));
161     assertEquals(3, ai.get());
162     assertEquals(-1, ai.addAndGet(-4));
163     assertEquals(-1, ai.get());
164 dl 1.1 }
165    
166 dl 1.4 /**
167 dl 1.5 * decrementAndGet decrements and returns current value
168 dl 1.4 */
169 jsr166 1.14 public void testDecrementAndGet() {
170 dl 1.1 AtomicInteger ai = new AtomicInteger(1);
171 jsr166 1.23 assertEquals(0, ai.decrementAndGet());
172     assertEquals(-1, ai.decrementAndGet());
173     assertEquals(-2, ai.decrementAndGet());
174     assertEquals(-2, ai.get());
175 dl 1.1 }
176    
177 dl 1.4 /**
178 dl 1.5 * incrementAndGet increments and returns current value
179 dl 1.4 */
180 jsr166 1.14 public void testIncrementAndGet() {
181 dl 1.1 AtomicInteger ai = new AtomicInteger(1);
182 jsr166 1.23 assertEquals(2, ai.incrementAndGet());
183     assertEquals(2, ai.get());
184 jsr166 1.17 ai.set(-2);
185 jsr166 1.23 assertEquals(-1, ai.incrementAndGet());
186     assertEquals(0, ai.incrementAndGet());
187     assertEquals(1, ai.incrementAndGet());
188     assertEquals(1, ai.get());
189 dl 1.2 }
190    
191 dl 1.4 /**
192 dl 1.5 * a deserialized serialized atomic holds same value
193 dl 1.4 */
194 jsr166 1.15 public void testSerialization() throws Exception {
195 jsr166 1.22 AtomicInteger x = new AtomicInteger();
196     AtomicInteger y = serialClone(x);
197     assertTrue(x != y);
198     x.set(22);
199     AtomicInteger z = serialClone(x);
200     assertEquals(22, x.get());
201     assertEquals(0, y.get());
202     assertEquals(22, z.get());
203 dl 1.1 }
204    
205 dl 1.8 /**
206     * toString returns current value.
207 jsr166 1.12 */
208 dl 1.8 public void testToString() {
209     AtomicInteger ai = new AtomicInteger();
210 jsr166 1.18 assertEquals("0", ai.toString());
211     for (int x : VALUES) {
212     ai.set(x);
213     assertEquals(ai.toString(), Integer.toString(x));
214 dl 1.8 }
215     }
216 dl 1.1
217 dl 1.9 /**
218     * intValue returns current value.
219 jsr166 1.12 */
220 dl 1.9 public void testIntValue() {
221     AtomicInteger ai = new AtomicInteger();
222 jsr166 1.18 assertEquals(0, ai.intValue());
223     for (int x : VALUES) {
224     ai.set(x);
225     assertEquals(x, ai.intValue());
226 dl 1.9 }
227     }
228    
229     /**
230     * longValue returns current value.
231 jsr166 1.12 */
232 dl 1.9 public void testLongValue() {
233     AtomicInteger ai = new AtomicInteger();
234 jsr166 1.18 assertEquals(0L, ai.longValue());
235     for (int x : VALUES) {
236     ai.set(x);
237     assertEquals((long)x, ai.longValue());
238 dl 1.9 }
239     }
240    
241     /**
242     * floatValue returns current value.
243 jsr166 1.12 */
244 dl 1.9 public void testFloatValue() {
245     AtomicInteger ai = new AtomicInteger();
246 jsr166 1.18 assertEquals(0.0f, ai.floatValue());
247     for (int x : VALUES) {
248     ai.set(x);
249     assertEquals((float)x, ai.floatValue());
250 dl 1.9 }
251     }
252    
253     /**
254     * doubleValue returns current value.
255 jsr166 1.12 */
256 dl 1.9 public void testDoubleValue() {
257     AtomicInteger ai = new AtomicInteger();
258 jsr166 1.18 assertEquals(0.0d, ai.doubleValue());
259     for (int x : VALUES) {
260     ai.set(x);
261     assertEquals((double)x, ai.doubleValue());
262 dl 1.9 }
263     }
264    
265 dl 1.1 }