24 |
|
AtomicReferenceArray<Integer> aa = new AtomicReferenceArray<>(SIZE); |
25 |
|
for (int index : new int[] { -1, SIZE }) { |
26 |
|
final int j = index; |
27 |
< |
final Runnable[] tasks = { |
27 |
> |
assertThrows( |
28 |
> |
IndexOutOfBoundsException.class, |
29 |
|
() -> aa.getPlain(j), |
30 |
|
() -> aa.getOpaque(j), |
31 |
|
() -> aa.getAcquire(j), |
35 |
|
() -> aa.compareAndExchange(j, null, null), |
36 |
|
() -> aa.compareAndExchangeAcquire(j, null, null), |
37 |
|
() -> aa.compareAndExchangeRelease(j, null, null), |
38 |
+ |
() -> aa.weakCompareAndSetPlain(j, null, null), |
39 |
|
() -> aa.weakCompareAndSetVolatile(j, null, null), |
40 |
|
() -> aa.weakCompareAndSetAcquire(j, null, null), |
41 |
< |
() -> aa.weakCompareAndSetRelease(j, null, null), |
40 |
< |
}; |
41 |
< |
|
42 |
< |
assertThrows(IndexOutOfBoundsException.class, tasks); |
41 |
> |
() -> aa.weakCompareAndSetRelease(j, null, null)); |
42 |
|
} |
43 |
|
} |
44 |
|
|
185 |
|
assertEquals(seven, aa.get(i)); |
186 |
|
} |
187 |
|
} |
188 |
+ |
|
189 |
+ |
/** |
190 |
+ |
* repeated weakCompareAndSetPlain succeeds in changing value when equal |
191 |
+ |
* to expected |
192 |
+ |
*/ |
193 |
+ |
public void testWeakCompareAndSetPlain() { |
194 |
+ |
AtomicReferenceArray<Integer> aa = new AtomicReferenceArray<>(SIZE); |
195 |
+ |
for (int i = 0; i < SIZE; i++) { |
196 |
+ |
aa.set(i, one); |
197 |
+ |
do {} while (!aa.weakCompareAndSetPlain(i, one, two)); |
198 |
+ |
do {} while (!aa.weakCompareAndSetPlain(i, two, m4)); |
199 |
+ |
assertEquals(m4, aa.get(i)); |
200 |
+ |
do {} while (!aa.weakCompareAndSetPlain(i, m4, seven)); |
201 |
+ |
assertEquals(seven, aa.get(i)); |
202 |
+ |
} |
203 |
+ |
} |
204 |
|
|
205 |
|
/** |
206 |
|
* repeated weakCompareAndSetVolatile succeeds in changing value when equal |