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

Doug Lea
ViewVC Help
Powered by ViewVC 1.0.8