662 |
|
*/ |
663 |
|
public void testToArray() { |
664 |
|
ConcurrentLinkedDeque q = populatedDeque(SIZE); |
665 |
< |
Object[] o = q.toArray(); |
666 |
< |
for (int i = 0; i < o.length; i++) |
667 |
< |
assertSame(o[i], q.poll()); |
665 |
> |
Object[] a = q.toArray(); |
666 |
> |
assertSame(Object[].class, a.getClass()); |
667 |
> |
for (Object o : a) |
668 |
> |
assertSame(o, q.poll()); |
669 |
> |
assertTrue(q.isEmpty()); |
670 |
|
} |
671 |
|
|
672 |
|
/** |
677 |
|
Integer[] ints = new Integer[SIZE]; |
678 |
|
Integer[] array = q.toArray(ints); |
679 |
|
assertSame(ints, array); |
680 |
< |
for (int i = 0; i < ints.length; i++) |
681 |
< |
assertSame(ints[i], q.poll()); |
680 |
> |
for (Integer o : ints) |
681 |
> |
assertSame(o, q.poll()); |
682 |
> |
assertTrue(q.isEmpty()); |
683 |
|
} |
684 |
|
|
685 |
|
/** |
688 |
|
public void testToArray_NullArg() { |
689 |
|
ConcurrentLinkedDeque q = populatedDeque(SIZE); |
690 |
|
try { |
691 |
< |
q.toArray(null); |
691 |
> |
q.toArray((Object[])null); |
692 |
|
shouldThrow(); |
693 |
|
} catch (NullPointerException success) {} |
694 |
|
} |
913 |
|
} |
914 |
|
|
915 |
|
void runAsync(Runnable r1, Runnable r2) { |
916 |
< |
boolean b = ThreadLocalRandom.current().nextBoolean(); |
916 |
> |
boolean b = randomBoolean(); |
917 |
|
CompletableFuture<Void> f1 = CompletableFuture.runAsync(b ? r1 : r2); |
918 |
|
CompletableFuture<Void> f2 = CompletableFuture.runAsync(b ? r2 : r1); |
919 |
|
f1.join(); |
976 |
|
} |
977 |
|
} |
978 |
|
|
976 |
– |
<T> T chooseRandomly(T... choices) { |
977 |
– |
return choices[ThreadLocalRandom.current().nextInt(choices.length)]; |
978 |
– |
} |
979 |
– |
|
979 |
|
/** |
980 |
|
* Non-traversing Deque operations (that return null) are linearizable. |
981 |
|
* Don't return null when the deque is observably never empty. |
983 |
|
* ant -Djsr166.expensiveTests=true -Djsr166.tckTestClass=ConcurrentLinkedDequeTest -Djsr166.methodFilter=testBug8189387 tck |
984 |
|
*/ |
985 |
|
public void testBug8189387() { |
987 |
– |
final ThreadLocalRandom rnd = ThreadLocalRandom.current(); |
986 |
|
Object x = new Object(); |
987 |
|
for (int n = expensiveTests ? 100_000 : 10; n--> 0; ) { |
988 |
|
ConcurrentLinkedDeque<Object> d = new ConcurrentLinkedDeque<>(); |