ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/tck/AtomicIntegerTest.java
Revision: 1.21
Committed: Tue Mar 15 19:47:06 2011 UTC (13 years, 1 month ago) by jsr166
Branch: MAIN
CVS Tags: release-1_7_0
Changes since 1.20: +1 -1 lines
Log Message:
Update Creative Commons license URL in legal notices

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