ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/tck/PriorityBlockingQueueTest.java
Revision: 1.70
Committed: Tue Nov 22 16:48:36 2016 UTC (7 years, 5 months ago) by jsr166
Branch: MAIN
Changes since 1.69: +9 -1 lines
Log Message:
use CollectionImplementation

File Contents

# User Rev Content
1 dl 1.1 /*
2 dl 1.8 * 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.41 * 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 jsr166 1.54 import static java.util.concurrent.TimeUnit.MILLISECONDS;
10    
11     import java.util.ArrayList;
12 jsr166 1.45 import java.util.Arrays;
13     import java.util.Collection;
14     import java.util.Comparator;
15     import java.util.Iterator;
16     import java.util.NoSuchElementException;
17 jsr166 1.46 import java.util.Queue;
18 jsr166 1.45 import java.util.concurrent.BlockingQueue;
19     import java.util.concurrent.CountDownLatch;
20     import java.util.concurrent.Executors;
21     import java.util.concurrent.ExecutorService;
22 jsr166 1.54 import java.util.concurrent.PriorityBlockingQueue;
23    
24     import junit.framework.Test;
25 dl 1.1
26 dl 1.3 public class PriorityBlockingQueueTest extends JSR166TestCase {
27 jsr166 1.29
28     public static class Generic extends BlockingQueueTest {
29     protected BlockingQueue emptyCollection() {
30     return new PriorityBlockingQueue();
31     }
32     }
33    
34     public static class InitialCapacity extends BlockingQueueTest {
35     protected BlockingQueue emptyCollection() {
36 jsr166 1.47 return new PriorityBlockingQueue(SIZE);
37 jsr166 1.29 }
38     }
39    
40 dl 1.1 public static void main(String[] args) {
41 jsr166 1.61 main(suite(), args);
42 dl 1.1 }
43 jsr166 1.29
44 dl 1.1 public static Test suite() {
45 jsr166 1.70 class Implementation implements CollectionImplementation {
46     public Class<?> klazz() { return PriorityBlockingQueue.class; }
47     public Collection emptyCollection() { return new PriorityBlockingQueue(); }
48     public Object makeElement(int i) { return i; }
49     public boolean isConcurrent() { return true; }
50     public boolean permitsNulls() { return false; }
51     }
52 jsr166 1.29 return newTestSuite(PriorityBlockingQueueTest.class,
53     new Generic().testSuite(),
54 jsr166 1.70 new InitialCapacity().testSuite(),
55     CollectionTest.testSuite(new Implementation()));
56 dl 1.1 }
57    
58 dl 1.3 /** Sample Comparator */
59 jsr166 1.12 static class MyReverseComparator implements Comparator {
60 dl 1.1 public int compare(Object x, Object y) {
61 jsr166 1.24 return ((Comparable)y).compareTo(x);
62 dl 1.1 }
63     }
64    
65     /**
66 jsr166 1.51 * Returns a new queue of given size containing consecutive
67 jsr166 1.69 * Integers 0 ... n - 1.
68 dl 1.1 */
69 jsr166 1.38 private PriorityBlockingQueue<Integer> populatedQueue(int n) {
70     PriorityBlockingQueue<Integer> q =
71     new PriorityBlockingQueue<Integer>(n);
72 dl 1.1 assertTrue(q.isEmpty());
73 jsr166 1.64 for (int i = n - 1; i >= 0; i -= 2)
74 jsr166 1.16 assertTrue(q.offer(new Integer(i)));
75 jsr166 1.56 for (int i = (n & 1); i < n; i += 2)
76 jsr166 1.16 assertTrue(q.offer(new Integer(i)));
77 dl 1.1 assertFalse(q.isEmpty());
78 jsr166 1.59 assertEquals(Integer.MAX_VALUE, q.remainingCapacity());
79 jsr166 1.16 assertEquals(n, q.size());
80 jsr166 1.69 assertEquals((Integer) 0, q.peek());
81 dl 1.1 return q;
82     }
83 jsr166 1.12
84 dl 1.5 /**
85 dl 1.6 * A new queue has unbounded capacity
86 dl 1.5 */
87     public void testConstructor1() {
88 jsr166 1.59 assertEquals(Integer.MAX_VALUE,
89     new PriorityBlockingQueue(SIZE).remainingCapacity());
90 dl 1.1 }
91    
92 dl 1.5 /**
93 jsr166 1.19 * Constructor throws IAE if capacity argument nonpositive
94 dl 1.5 */
95     public void testConstructor2() {
96 dl 1.1 try {
97 jsr166 1.45 new PriorityBlockingQueue(0);
98 dl 1.5 shouldThrow();
99 jsr166 1.15 } catch (IllegalArgumentException success) {}
100 dl 1.1 }
101    
102 dl 1.5 /**
103 dl 1.6 * Initializing from null Collection throws NPE
104 dl 1.5 */
105     public void testConstructor3() {
106 dl 1.1 try {
107 jsr166 1.45 new PriorityBlockingQueue(null);
108 dl 1.5 shouldThrow();
109 jsr166 1.15 } catch (NullPointerException success) {}
110 dl 1.1 }
111    
112 dl 1.5 /**
113 dl 1.6 * Initializing from Collection of null elements throws NPE
114 dl 1.5 */
115     public void testConstructor4() {
116 jsr166 1.45 Collection<Integer> elements = Arrays.asList(new Integer[SIZE]);
117 dl 1.1 try {
118 jsr166 1.45 new PriorityBlockingQueue(elements);
119 dl 1.5 shouldThrow();
120 jsr166 1.15 } catch (NullPointerException success) {}
121 dl 1.1 }
122    
123 dl 1.5 /**
124 dl 1.6 * Initializing from Collection with some null elements throws NPE
125 dl 1.5 */
126     public void testConstructor5() {
127 jsr166 1.45 Integer[] ints = new Integer[SIZE];
128 jsr166 1.63 for (int i = 0; i < SIZE - 1; ++i)
129 jsr166 1.45 ints[i] = i;
130     Collection<Integer> elements = Arrays.asList(ints);
131 dl 1.1 try {
132 jsr166 1.45 new PriorityBlockingQueue(elements);
133 dl 1.5 shouldThrow();
134 jsr166 1.15 } catch (NullPointerException success) {}
135 dl 1.1 }
136    
137 dl 1.5 /**
138 dl 1.6 * Queue contains all elements of collection used to initialize
139 dl 1.5 */
140     public void testConstructor6() {
141 jsr166 1.15 Integer[] ints = new Integer[SIZE];
142     for (int i = 0; i < SIZE; ++i)
143 jsr166 1.45 ints[i] = i;
144 jsr166 1.15 PriorityBlockingQueue q = new PriorityBlockingQueue(Arrays.asList(ints));
145     for (int i = 0; i < SIZE; ++i)
146     assertEquals(ints[i], q.poll());
147 dl 1.1 }
148    
149 dl 1.5 /**
150 dl 1.6 * The comparator used in constructor is used
151 dl 1.5 */
152     public void testConstructor7() {
153 jsr166 1.15 MyReverseComparator cmp = new MyReverseComparator();
154     PriorityBlockingQueue q = new PriorityBlockingQueue(SIZE, cmp);
155     assertEquals(cmp, q.comparator());
156     Integer[] ints = new Integer[SIZE];
157     for (int i = 0; i < SIZE; ++i)
158     ints[i] = new Integer(i);
159     q.addAll(Arrays.asList(ints));
160 jsr166 1.63 for (int i = SIZE - 1; i >= 0; --i)
161 jsr166 1.15 assertEquals(ints[i], q.poll());
162 dl 1.1 }
163    
164 dl 1.5 /**
165 dl 1.6 * isEmpty is true before add, false after
166 dl 1.5 */
167 dl 1.1 public void testEmpty() {
168     PriorityBlockingQueue q = new PriorityBlockingQueue(2);
169     assertTrue(q.isEmpty());
170 jsr166 1.59 assertEquals(Integer.MAX_VALUE, q.remainingCapacity());
171 dl 1.6 q.add(one);
172 dl 1.1 assertFalse(q.isEmpty());
173 dl 1.6 q.add(two);
174 dl 1.1 q.remove();
175     q.remove();
176     assertTrue(q.isEmpty());
177     }
178    
179 dl 1.5 /**
180 jsr166 1.59 * remainingCapacity() always returns Integer.MAX_VALUE
181 dl 1.5 */
182     public void testRemainingCapacity() {
183 jsr166 1.59 BlockingQueue q = populatedQueue(SIZE);
184 dl 1.3 for (int i = 0; i < SIZE; ++i) {
185 jsr166 1.59 assertEquals(Integer.MAX_VALUE, q.remainingCapacity());
186     assertEquals(SIZE - i, q.size());
187     assertEquals(i, q.remove());
188 dl 1.1 }
189 dl 1.3 for (int i = 0; i < SIZE; ++i) {
190 jsr166 1.59 assertEquals(Integer.MAX_VALUE, q.remainingCapacity());
191 dl 1.1 assertEquals(i, q.size());
192 jsr166 1.59 assertTrue(q.add(i));
193 dl 1.1 }
194     }
195    
196 dl 1.5 /**
197 dl 1.6 * Offer of comparable element succeeds
198 dl 1.5 */
199 dl 1.1 public void testOffer() {
200     PriorityBlockingQueue q = new PriorityBlockingQueue(1);
201 dl 1.6 assertTrue(q.offer(zero));
202     assertTrue(q.offer(one));
203 dl 1.1 }
204    
205 dl 1.5 /**
206 dl 1.6 * Offer of non-Comparable throws CCE
207 dl 1.5 */
208 dl 1.1 public void testOfferNonComparable() {
209 jsr166 1.60 PriorityBlockingQueue q = new PriorityBlockingQueue(1);
210 dl 1.1 try {
211     q.offer(new Object());
212 dl 1.5 shouldThrow();
213 jsr166 1.67 } catch (ClassCastException success) {
214     assertTrue(q.isEmpty());
215     assertEquals(0, q.size());
216     assertNull(q.poll());
217     }
218 dl 1.1 }
219    
220 dl 1.5 /**
221 dl 1.6 * add of comparable succeeds
222 dl 1.5 */
223     public void testAdd() {
224 dl 1.3 PriorityBlockingQueue q = new PriorityBlockingQueue(SIZE);
225     for (int i = 0; i < SIZE; ++i) {
226 dl 1.1 assertEquals(i, q.size());
227     assertTrue(q.add(new Integer(i)));
228     }
229     }
230    
231 dl 1.5 /**
232 dl 1.7 * addAll(this) throws IAE
233     */
234     public void testAddAllSelf() {
235 jsr166 1.62 PriorityBlockingQueue q = populatedQueue(SIZE);
236 dl 1.7 try {
237     q.addAll(q);
238     shouldThrow();
239 jsr166 1.15 } catch (IllegalArgumentException success) {}
240 dl 1.7 }
241    
242 dl 1.5 /**
243 dl 1.6 * addAll of a collection with any null elements throws NPE after
244     * possibly adding some elements
245 dl 1.5 */
246     public void testAddAll3() {
247 jsr166 1.62 PriorityBlockingQueue q = new PriorityBlockingQueue(SIZE);
248     Integer[] ints = new Integer[SIZE];
249 jsr166 1.63 for (int i = 0; i < SIZE - 1; ++i)
250 jsr166 1.62 ints[i] = new Integer(i);
251 dl 1.1 try {
252     q.addAll(Arrays.asList(ints));
253 dl 1.5 shouldThrow();
254 jsr166 1.15 } catch (NullPointerException success) {}
255 dl 1.1 }
256    
257 dl 1.5 /**
258 dl 1.6 * Queue contains all elements of successful addAll
259 dl 1.5 */
260     public void testAddAll5() {
261 jsr166 1.15 Integer[] empty = new Integer[0];
262     Integer[] ints = new Integer[SIZE];
263 jsr166 1.63 for (int i = SIZE - 1; i >= 0; --i)
264 jsr166 1.15 ints[i] = new Integer(i);
265     PriorityBlockingQueue q = new PriorityBlockingQueue(SIZE);
266     assertFalse(q.addAll(Arrays.asList(empty)));
267     assertTrue(q.addAll(Arrays.asList(ints)));
268     for (int i = 0; i < SIZE; ++i)
269     assertEquals(ints[i], q.poll());
270 dl 1.1 }
271    
272 dl 1.5 /**
273 dl 1.6 * all elements successfully put are contained
274 dl 1.5 */
275 jsr166 1.42 public void testPut() {
276     PriorityBlockingQueue q = new PriorityBlockingQueue(SIZE);
277     for (int i = 0; i < SIZE; ++i) {
278 jsr166 1.57 Integer x = new Integer(i);
279     q.put(x);
280     assertTrue(q.contains(x));
281 jsr166 1.42 }
282     assertEquals(SIZE, q.size());
283 dl 1.1 }
284    
285 dl 1.5 /**
286 dl 1.6 * put doesn't block waiting for take
287 dl 1.5 */
288 jsr166 1.15 public void testPutWithTake() throws InterruptedException {
289 dl 1.1 final PriorityBlockingQueue q = new PriorityBlockingQueue(2);
290 jsr166 1.15 final int size = 4;
291 jsr166 1.44 Thread t = newStartedThread(new CheckedRunnable() {
292 jsr166 1.15 public void realRun() {
293     for (int i = 0; i < size; i++)
294     q.put(new Integer(0));
295     }});
296    
297 jsr166 1.44 awaitTermination(t);
298     assertEquals(size, q.size());
299 jsr166 1.15 q.take();
300 dl 1.1 }
301    
302 dl 1.5 /**
303 dl 1.6 * timed offer does not time out
304 dl 1.5 */
305 jsr166 1.15 public void testTimedOffer() throws InterruptedException {
306 dl 1.1 final PriorityBlockingQueue q = new PriorityBlockingQueue(2);
307 jsr166 1.44 Thread t = newStartedThread(new CheckedRunnable() {
308 jsr166 1.18 public void realRun() {
309     q.put(new Integer(0));
310     q.put(new Integer(0));
311 jsr166 1.22 assertTrue(q.offer(new Integer(0), SHORT_DELAY_MS, MILLISECONDS));
312     assertTrue(q.offer(new Integer(0), LONG_DELAY_MS, MILLISECONDS));
313 jsr166 1.18 }});
314 jsr166 1.12
315 jsr166 1.44 awaitTermination(t);
316 dl 1.1 }
317    
318 dl 1.5 /**
319 dl 1.6 * take retrieves elements in priority order
320 dl 1.5 */
321 jsr166 1.15 public void testTake() throws InterruptedException {
322     PriorityBlockingQueue q = populatedQueue(SIZE);
323     for (int i = 0; i < SIZE; ++i) {
324 jsr166 1.24 assertEquals(i, q.take());
325 jsr166 1.15 }
326 dl 1.1 }
327    
328 dl 1.5 /**
329 dl 1.6 * Take removes existing elements until empty, then blocks interruptibly
330 dl 1.5 */
331 jsr166 1.15 public void testBlockingTake() throws InterruptedException {
332 jsr166 1.23 final PriorityBlockingQueue q = populatedQueue(SIZE);
333 jsr166 1.44 final CountDownLatch pleaseInterrupt = new CountDownLatch(1);
334     Thread t = newStartedThread(new CheckedRunnable() {
335 jsr166 1.15 public void realRun() throws InterruptedException {
336     for (int i = 0; i < SIZE; ++i) {
337 jsr166 1.23 assertEquals(i, q.take());
338 jsr166 1.15 }
339 jsr166 1.44
340     Thread.currentThread().interrupt();
341 jsr166 1.23 try {
342     q.take();
343     shouldThrow();
344     } catch (InterruptedException success) {}
345 jsr166 1.44 assertFalse(Thread.interrupted());
346    
347     pleaseInterrupt.countDown();
348     try {
349     q.take();
350     shouldThrow();
351     } catch (InterruptedException success) {}
352     assertFalse(Thread.interrupted());
353 jsr166 1.15 }});
354    
355 jsr166 1.44 await(pleaseInterrupt);
356     assertThreadStaysAlive(t);
357 jsr166 1.15 t.interrupt();
358 jsr166 1.44 awaitTermination(t);
359 dl 1.1 }
360    
361 dl 1.5 /**
362 dl 1.6 * poll succeeds unless empty
363 dl 1.5 */
364     public void testPoll() {
365 dl 1.3 PriorityBlockingQueue q = populatedQueue(SIZE);
366     for (int i = 0; i < SIZE; ++i) {
367 jsr166 1.24 assertEquals(i, q.poll());
368 dl 1.1 }
369 jsr166 1.16 assertNull(q.poll());
370 dl 1.1 }
371    
372 dl 1.5 /**
373 jsr166 1.34 * timed poll with zero timeout succeeds when non-empty, else times out
374 dl 1.5 */
375 jsr166 1.15 public void testTimedPoll0() throws InterruptedException {
376     PriorityBlockingQueue q = populatedQueue(SIZE);
377     for (int i = 0; i < SIZE; ++i) {
378 jsr166 1.24 assertEquals(i, q.poll(0, MILLISECONDS));
379 jsr166 1.15 }
380 jsr166 1.17 assertNull(q.poll(0, MILLISECONDS));
381 dl 1.1 }
382    
383 dl 1.5 /**
384 jsr166 1.34 * timed poll with nonzero timeout succeeds when non-empty, else times out
385 dl 1.5 */
386 jsr166 1.15 public void testTimedPoll() throws InterruptedException {
387 jsr166 1.44 PriorityBlockingQueue<Integer> q = populatedQueue(SIZE);
388 jsr166 1.15 for (int i = 0; i < SIZE; ++i) {
389 jsr166 1.44 long startTime = System.nanoTime();
390     assertEquals(i, (int) q.poll(LONG_DELAY_MS, MILLISECONDS));
391     assertTrue(millisElapsedSince(startTime) < LONG_DELAY_MS);
392     }
393     long startTime = System.nanoTime();
394     assertNull(q.poll(timeoutMillis(), MILLISECONDS));
395     assertTrue(millisElapsedSince(startTime) >= timeoutMillis());
396     checkEmpty(q);
397 dl 1.1 }
398    
399 dl 1.5 /**
400 dl 1.6 * Interrupted timed poll throws InterruptedException instead of
401     * returning timeout status
402 dl 1.5 */
403 jsr166 1.15 public void testInterruptedTimedPoll() throws InterruptedException {
404 jsr166 1.40 final BlockingQueue<Integer> q = populatedQueue(SIZE);
405     final CountDownLatch aboutToWait = new CountDownLatch(1);
406     Thread t = newStartedThread(new CheckedRunnable() {
407 jsr166 1.15 public void realRun() throws InterruptedException {
408 jsr166 1.66 long startTime = System.nanoTime();
409 jsr166 1.15 for (int i = 0; i < SIZE; ++i) {
410 jsr166 1.40 assertEquals(i, (int) q.poll(LONG_DELAY_MS, MILLISECONDS));
411 jsr166 1.15 }
412 jsr166 1.40 aboutToWait.countDown();
413 jsr166 1.15 try {
414 jsr166 1.44 q.poll(LONG_DELAY_MS, MILLISECONDS);
415 jsr166 1.18 shouldThrow();
416 jsr166 1.40 } catch (InterruptedException success) {
417 jsr166 1.66 assertTrue(millisElapsedSince(startTime) < LONG_DELAY_MS);
418 jsr166 1.40 }
419 jsr166 1.15 }});
420    
421 jsr166 1.40 aboutToWait.await();
422 jsr166 1.68 waitForThreadToEnterWaitState(t);
423 jsr166 1.15 t.interrupt();
424 jsr166 1.66 awaitTermination(t);
425 dl 1.1 }
426    
427 dl 1.5 /**
428 dl 1.6 * peek returns next element, or null if empty
429 dl 1.5 */
430     public void testPeek() {
431 dl 1.3 PriorityBlockingQueue q = populatedQueue(SIZE);
432     for (int i = 0; i < SIZE; ++i) {
433 jsr166 1.24 assertEquals(i, q.peek());
434     assertEquals(i, q.poll());
435 dl 1.1 assertTrue(q.peek() == null ||
436 jsr166 1.24 !q.peek().equals(i));
437 dl 1.1 }
438 jsr166 1.16 assertNull(q.peek());
439 dl 1.1 }
440    
441 dl 1.5 /**
442 dl 1.6 * element returns next element, or throws NSEE if empty
443 dl 1.5 */
444     public void testElement() {
445 dl 1.3 PriorityBlockingQueue q = populatedQueue(SIZE);
446     for (int i = 0; i < SIZE; ++i) {
447 jsr166 1.24 assertEquals(i, q.element());
448     assertEquals(i, q.poll());
449 dl 1.1 }
450     try {
451     q.element();
452 dl 1.5 shouldThrow();
453 jsr166 1.15 } catch (NoSuchElementException success) {}
454 dl 1.1 }
455    
456 dl 1.5 /**
457 dl 1.6 * remove removes next element, or throws NSEE if empty
458 dl 1.5 */
459     public void testRemove() {
460 dl 1.3 PriorityBlockingQueue q = populatedQueue(SIZE);
461     for (int i = 0; i < SIZE; ++i) {
462 jsr166 1.24 assertEquals(i, q.remove());
463 dl 1.1 }
464     try {
465     q.remove();
466 dl 1.5 shouldThrow();
467 jsr166 1.15 } catch (NoSuchElementException success) {}
468 dl 1.1 }
469    
470 dl 1.5 /**
471 dl 1.6 * contains(x) reports true when elements added but not yet removed
472 dl 1.5 */
473     public void testContains() {
474 dl 1.3 PriorityBlockingQueue q = populatedQueue(SIZE);
475     for (int i = 0; i < SIZE; ++i) {
476 dl 1.1 assertTrue(q.contains(new Integer(i)));
477     q.poll();
478     assertFalse(q.contains(new Integer(i)));
479     }
480     }
481    
482 dl 1.5 /**
483 dl 1.6 * clear removes all elements
484 dl 1.5 */
485     public void testClear() {
486 dl 1.3 PriorityBlockingQueue q = populatedQueue(SIZE);
487 dl 1.1 q.clear();
488     assertTrue(q.isEmpty());
489     assertEquals(0, q.size());
490 dl 1.11 q.add(one);
491 dl 1.1 assertFalse(q.isEmpty());
492 dl 1.11 assertTrue(q.contains(one));
493 dl 1.1 q.clear();
494     assertTrue(q.isEmpty());
495     }
496    
497 dl 1.5 /**
498 dl 1.6 * containsAll(c) is true when c contains a subset of elements
499 dl 1.5 */
500     public void testContainsAll() {
501 dl 1.3 PriorityBlockingQueue q = populatedQueue(SIZE);
502     PriorityBlockingQueue p = new PriorityBlockingQueue(SIZE);
503     for (int i = 0; i < SIZE; ++i) {
504 dl 1.1 assertTrue(q.containsAll(p));
505     assertFalse(p.containsAll(q));
506     p.add(new Integer(i));
507     }
508     assertTrue(p.containsAll(q));
509     }
510    
511 dl 1.5 /**
512 dl 1.6 * retainAll(c) retains only those elements of c and reports true if changed
513 dl 1.5 */
514     public void testRetainAll() {
515 dl 1.3 PriorityBlockingQueue q = populatedQueue(SIZE);
516     PriorityBlockingQueue p = populatedQueue(SIZE);
517     for (int i = 0; i < SIZE; ++i) {
518 dl 1.1 boolean changed = q.retainAll(p);
519     if (i == 0)
520     assertFalse(changed);
521     else
522     assertTrue(changed);
523    
524     assertTrue(q.containsAll(p));
525 jsr166 1.63 assertEquals(SIZE - i, q.size());
526 dl 1.1 p.remove();
527     }
528     }
529    
530 dl 1.5 /**
531 dl 1.6 * removeAll(c) removes only those elements of c and reports true if changed
532 dl 1.5 */
533     public void testRemoveAll() {
534 dl 1.3 for (int i = 1; i < SIZE; ++i) {
535     PriorityBlockingQueue q = populatedQueue(SIZE);
536     PriorityBlockingQueue p = populatedQueue(i);
537 dl 1.1 assertTrue(q.removeAll(p));
538 jsr166 1.63 assertEquals(SIZE - i, q.size());
539 dl 1.1 for (int j = 0; j < i; ++j) {
540 jsr166 1.57 Integer x = (Integer)(p.remove());
541     assertFalse(q.contains(x));
542 dl 1.1 }
543     }
544     }
545    
546 dl 1.5 /**
547 jsr166 1.30 * toArray contains all elements
548 dl 1.5 */
549 jsr166 1.15 public void testToArray() throws InterruptedException {
550 dl 1.3 PriorityBlockingQueue q = populatedQueue(SIZE);
551 jsr166 1.16 Object[] o = q.toArray();
552 dl 1.1 Arrays.sort(o);
553 jsr166 1.16 for (int i = 0; i < o.length; i++)
554 jsr166 1.37 assertSame(o[i], q.take());
555 dl 1.1 }
556    
557 dl 1.5 /**
558 dl 1.6 * toArray(a) contains all elements
559 dl 1.5 */
560 jsr166 1.15 public void testToArray2() throws InterruptedException {
561 jsr166 1.38 PriorityBlockingQueue<Integer> q = populatedQueue(SIZE);
562 jsr166 1.16 Integer[] ints = new Integer[SIZE];
563 jsr166 1.38 Integer[] array = q.toArray(ints);
564     assertSame(ints, array);
565 dl 1.1 Arrays.sort(ints);
566 jsr166 1.15 for (int i = 0; i < ints.length; i++)
567 jsr166 1.37 assertSame(ints[i], q.take());
568 dl 1.1 }
569 dl 1.7
570     /**
571 jsr166 1.35 * toArray(incompatible array type) throws ArrayStoreException
572 dl 1.7 */
573     public void testToArray1_BadArg() {
574 jsr166 1.24 PriorityBlockingQueue q = populatedQueue(SIZE);
575 jsr166 1.16 try {
576 jsr166 1.35 q.toArray(new String[10]);
577 jsr166 1.16 shouldThrow();
578 jsr166 1.19 } catch (ArrayStoreException success) {}
579 dl 1.7 }
580 jsr166 1.12
581 dl 1.5 /**
582 dl 1.6 * iterator iterates through all elements
583 dl 1.5 */
584     public void testIterator() {
585 dl 1.3 PriorityBlockingQueue q = populatedQueue(SIZE);
586 jsr166 1.16 Iterator it = q.iterator();
587 jsr166 1.58 int i;
588     for (i = 0; it.hasNext(); i++)
589 dl 1.1 assertTrue(q.contains(it.next()));
590 dl 1.3 assertEquals(i, SIZE);
591 jsr166 1.58 assertIteratorExhausted(it);
592     }
593    
594     /**
595     * iterator of empty collection has no elements
596     */
597     public void testEmptyIterator() {
598     assertIteratorExhausted(new PriorityBlockingQueue().iterator());
599 dl 1.1 }
600    
601 dl 1.5 /**
602 dl 1.6 * iterator.remove removes current element
603 dl 1.5 */
604 jsr166 1.26 public void testIteratorRemove() {
605 dl 1.1 final PriorityBlockingQueue q = new PriorityBlockingQueue(3);
606     q.add(new Integer(2));
607     q.add(new Integer(1));
608     q.add(new Integer(3));
609    
610     Iterator it = q.iterator();
611     it.next();
612     it.remove();
613    
614     it = q.iterator();
615     assertEquals(it.next(), new Integer(2));
616     assertEquals(it.next(), new Integer(3));
617     assertFalse(it.hasNext());
618     }
619    
620 dl 1.5 /**
621 dl 1.6 * toString contains toStrings of elements
622 dl 1.5 */
623     public void testToString() {
624 dl 1.3 PriorityBlockingQueue q = populatedQueue(SIZE);
625 dl 1.1 String s = q.toString();
626 dl 1.3 for (int i = 0; i < SIZE; ++i) {
627 jsr166 1.44 assertTrue(s.contains(String.valueOf(i)));
628 dl 1.1 }
629 jsr166 1.12 }
630 dl 1.1
631 dl 1.5 /**
632 jsr166 1.44 * timed poll transfers elements across Executor tasks
633 dl 1.5 */
634 dl 1.1 public void testPollInExecutor() {
635     final PriorityBlockingQueue q = new PriorityBlockingQueue(2);
636 jsr166 1.44 final CheckedBarrier threadsStarted = new CheckedBarrier(2);
637 jsr166 1.65 final ExecutorService executor = Executors.newFixedThreadPool(2);
638     try (PoolCleaner cleaner = cleaner(executor)) {
639     executor.execute(new CheckedRunnable() {
640     public void realRun() throws InterruptedException {
641     assertNull(q.poll());
642     threadsStarted.await();
643     assertSame(one, q.poll(LONG_DELAY_MS, MILLISECONDS));
644     checkEmpty(q);
645     }});
646    
647     executor.execute(new CheckedRunnable() {
648     public void realRun() throws InterruptedException {
649     threadsStarted.await();
650     q.put(one);
651     }});
652     }
653 dl 1.2 }
654    
655 dl 1.5 /**
656 jsr166 1.12 * A deserialized serialized queue has same elements
657 dl 1.5 */
658 jsr166 1.15 public void testSerialization() throws Exception {
659 jsr166 1.46 Queue x = populatedQueue(SIZE);
660     Queue y = serialClone(x);
661    
662 jsr166 1.52 assertNotSame(x, y);
663 jsr166 1.46 assertEquals(x.size(), y.size());
664     while (!x.isEmpty()) {
665     assertFalse(y.isEmpty());
666     assertEquals(x.remove(), y.remove());
667     }
668     assertTrue(y.isEmpty());
669 dl 1.1 }
670 dl 1.7
671     /**
672     * drainTo(c) empties queue into another collection c
673 jsr166 1.12 */
674 dl 1.7 public void testDrainTo() {
675     PriorityBlockingQueue q = populatedQueue(SIZE);
676     ArrayList l = new ArrayList();
677     q.drainTo(l);
678 jsr166 1.48 assertEquals(0, q.size());
679     assertEquals(SIZE, l.size());
680 jsr166 1.12 for (int i = 0; i < SIZE; ++i)
681 dl 1.7 assertEquals(l.get(i), new Integer(i));
682 dl 1.11 q.add(zero);
683     q.add(one);
684     assertFalse(q.isEmpty());
685     assertTrue(q.contains(zero));
686     assertTrue(q.contains(one));
687     l.clear();
688     q.drainTo(l);
689 jsr166 1.48 assertEquals(0, q.size());
690     assertEquals(2, l.size());
691 jsr166 1.12 for (int i = 0; i < 2; ++i)
692 dl 1.11 assertEquals(l.get(i), new Integer(i));
693 dl 1.7 }
694    
695     /**
696     * drainTo empties queue
697 jsr166 1.12 */
698 jsr166 1.15 public void testDrainToWithActivePut() throws InterruptedException {
699 dl 1.7 final PriorityBlockingQueue q = populatedQueue(SIZE);
700 jsr166 1.15 Thread t = new Thread(new CheckedRunnable() {
701     public void realRun() {
702 jsr166 1.63 q.put(new Integer(SIZE + 1));
703 jsr166 1.15 }});
704    
705     t.start();
706     ArrayList l = new ArrayList();
707     q.drainTo(l);
708     assertTrue(l.size() >= SIZE);
709     for (int i = 0; i < SIZE; ++i)
710     assertEquals(l.get(i), new Integer(i));
711     t.join();
712     assertTrue(q.size() + l.size() >= SIZE);
713 dl 1.7 }
714    
715     /**
716 jsr166 1.31 * drainTo(c, n) empties first min(n, size) elements of queue into c
717 jsr166 1.12 */
718 dl 1.7 public void testDrainToN() {
719 jsr166 1.63 PriorityBlockingQueue q = new PriorityBlockingQueue(SIZE * 2);
720 dl 1.7 for (int i = 0; i < SIZE + 2; ++i) {
721 jsr166 1.13 for (int j = 0; j < SIZE; j++)
722 dl 1.11 assertTrue(q.offer(new Integer(j)));
723 dl 1.7 ArrayList l = new ArrayList();
724     q.drainTo(l, i);
725 jsr166 1.32 int k = (i < SIZE) ? i : SIZE;
726 jsr166 1.49 assertEquals(k, l.size());
727 jsr166 1.63 assertEquals(SIZE - k, q.size());
728 jsr166 1.12 for (int j = 0; j < k; ++j)
729 dl 1.11 assertEquals(l.get(j), new Integer(j));
730 jsr166 1.55 do {} while (q.poll() != null);
731 dl 1.7 }
732     }
733    
734 jsr166 1.53 /**
735     * remove(null), contains(null) always return false
736     */
737     public void testNeverContainsNull() {
738     Collection<?>[] qs = {
739     new PriorityBlockingQueue<Object>(),
740     populatedQueue(2),
741     };
742    
743     for (Collection<?> q : qs) {
744     assertFalse(q.contains(null));
745     assertFalse(q.remove(null));
746     }
747     }
748    
749 dl 1.1 }