14 |
|
|
15 |
|
public class AtomicLongArrayTest extends JSR166TestCase { |
16 |
|
public static void main(String[] args) { |
17 |
< |
junit.textui.TestRunner.run(suite()); |
17 |
> |
main(suite(), args); |
18 |
|
} |
19 |
|
public static Test suite() { |
20 |
|
return new TestSuite(AtomicLongArrayTest.class); |
35 |
|
public void testConstructor2NPE() { |
36 |
|
try { |
37 |
|
long[] a = null; |
38 |
< |
AtomicLongArray aa = new AtomicLongArray(a); |
38 |
> |
new AtomicLongArray(a); |
39 |
|
shouldThrow(); |
40 |
|
} catch (NullPointerException success) {} |
41 |
|
} |
54 |
|
/** |
55 |
|
* get and set for out of bound indices throw IndexOutOfBoundsException |
56 |
|
*/ |
57 |
+ |
@SuppressWarnings("deprecation") |
58 |
|
public void testIndexing() { |
59 |
|
AtomicLongArray aa = new AtomicLongArray(SIZE); |
60 |
|
for (int index : new int[] { -1, SIZE }) { |
160 |
|
* repeated weakCompareAndSet succeeds in changing value when equal |
161 |
|
* to expected |
162 |
|
*/ |
163 |
+ |
@SuppressWarnings("deprecation") |
164 |
|
public void testWeakCompareAndSet() { |
165 |
|
AtomicLongArray aa = new AtomicLongArray(SIZE); |
166 |
|
for (int i = 0; i < SIZE; i++) { |
167 |
|
aa.set(i, 1); |
168 |
< |
while (!aa.weakCompareAndSet(i, 1, 2)); |
169 |
< |
while (!aa.weakCompareAndSet(i, 2, -4)); |
168 |
> |
do {} while (!aa.weakCompareAndSet(i, 1, 2)); |
169 |
> |
do {} while (!aa.weakCompareAndSet(i, 2, -4)); |
170 |
|
assertEquals(-4, aa.get(i)); |
171 |
< |
while (!aa.weakCompareAndSet(i, -4, 7)); |
171 |
> |
do {} while (!aa.weakCompareAndSet(i, -4, 7)); |
172 |
|
assertEquals(7, aa.get(i)); |
173 |
|
} |
174 |
|
} |
277 |
|
|
278 |
|
class Counter extends CheckedRunnable { |
279 |
|
final AtomicLongArray aa; |
280 |
< |
volatile long counts; |
280 |
> |
int decs; |
281 |
|
Counter(AtomicLongArray a) { aa = a; } |
282 |
|
public void realRun() { |
283 |
|
for (;;) { |
287 |
|
assertTrue(v >= 0); |
288 |
|
if (v != 0) { |
289 |
|
done = false; |
290 |
< |
if (aa.compareAndSet(i, v, v-1)) |
291 |
< |
++counts; |
290 |
> |
if (aa.compareAndSet(i, v, v - 1)) |
291 |
> |
decs++; |
292 |
|
} |
293 |
|
} |
294 |
|
if (done) |
308 |
|
aa.set(i, countdown); |
309 |
|
Counter c1 = new Counter(aa); |
310 |
|
Counter c2 = new Counter(aa); |
311 |
< |
Thread t1 = new Thread(c1); |
312 |
< |
Thread t2 = new Thread(c2); |
311 |
< |
t1.start(); |
312 |
< |
t2.start(); |
311 |
> |
Thread t1 = newStartedThread(c1); |
312 |
> |
Thread t2 = newStartedThread(c2); |
313 |
|
t1.join(); |
314 |
|
t2.join(); |
315 |
< |
assertEquals(c1.counts+c2.counts, SIZE * countdown); |
315 |
> |
assertEquals(c1.decs + c2.decs, SIZE * countdown); |
316 |
|
} |
317 |
|
|
318 |
|
/** |
319 |
< |
* a deserialized serialized array holds same values |
319 |
> |
* a deserialized/reserialized array holds same values in same order |
320 |
|
*/ |
321 |
|
public void testSerialization() throws Exception { |
322 |
|
AtomicLongArray x = new AtomicLongArray(SIZE); |