ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/tck/PriorityBlockingQueueTest.java
(Generate patch)

Comparing jsr166/src/test/tck/PriorityBlockingQueueTest.java (file contents):
Revision 1.6 by dl, Thu Sep 25 11:02:41 2003 UTC vs.
Revision 1.15 by jsr166, Sat Nov 21 00:04:40 2009 UTC

# Line 1 | Line 1
1   /*
2 < * Written by members of JCP JSR-166 Expert Group and released to the
3 < * public domain. Use, modify, and redistribute this code in any way
4 < * without acknowledgement. Other contributors include Andrew Wright,
5 < * Jeffrey Hayes, Pat Fischer, Mike Judd.
2 > * 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 > * http://creativecommons.org/licenses/publicdomain
5 > * Other contributors include Andrew Wright, Jeffrey Hayes,
6 > * Pat Fisher, Mike Judd.
7   */
8  
9   import junit.framework.*;
# Line 12 | Line 13 | import java.io.*;
13  
14   public class PriorityBlockingQueueTest extends JSR166TestCase {
15      public static void main(String[] args) {
16 <        junit.textui.TestRunner.run (suite());  
16 >        junit.textui.TestRunner.run (suite());
17      }
18      public static Test suite() {
19          return new TestSuite(PriorityBlockingQueueTest.class);
# Line 21 | Line 22 | public class PriorityBlockingQueueTest e
22      private static final int NOCAP = Integer.MAX_VALUE;
23  
24      /** Sample Comparator */
25 <    static class MyReverseComparator implements Comparator {
25 >    static class MyReverseComparator implements Comparator {
26          public int compare(Object x, Object y) {
27              int i = ((Integer)x).intValue();
28              int j = ((Integer)y).intValue();
# Line 38 | Line 39 | public class PriorityBlockingQueueTest e
39      private PriorityBlockingQueue populatedQueue(int n) {
40          PriorityBlockingQueue q = new PriorityBlockingQueue(n);
41          assertTrue(q.isEmpty());
42 <        for(int i = n-1; i >= 0; i-=2)
42 >        for (int i = n-1; i >= 0; i-=2)
43              assertTrue(q.offer(new Integer(i)));
44 <        for(int i = (n & 1); i < n; i+=2)
44 >        for (int i = (n & 1); i < n; i+=2)
45              assertTrue(q.offer(new Integer(i)));
46          assertFalse(q.isEmpty());
47          assertEquals(NOCAP, q.remainingCapacity());
48          assertEquals(n, q.size());
49          return q;
50      }
51 <
51 >
52      /**
53       * A new queue has unbounded capacity
54       */
# Line 62 | Line 63 | public class PriorityBlockingQueueTest e
63          try {
64              PriorityBlockingQueue q = new PriorityBlockingQueue(0);
65              shouldThrow();
66 <        }
66 <        catch (IllegalArgumentException success) {}
66 >        } catch (IllegalArgumentException success) {}
67      }
68  
69      /**
# Line 73 | Line 73 | public class PriorityBlockingQueueTest e
73          try {
74              PriorityBlockingQueue q = new PriorityBlockingQueue(null);
75              shouldThrow();
76 <        }
77 <        catch (NullPointerException success) {}
76 >        } catch (NullPointerException success) {}
77      }
78  
79      /**
# Line 85 | Line 84 | public class PriorityBlockingQueueTest e
84              Integer[] ints = new Integer[SIZE];
85              PriorityBlockingQueue q = new PriorityBlockingQueue(Arrays.asList(ints));
86              shouldThrow();
87 <        }
89 <        catch (NullPointerException success) {}
87 >        } catch (NullPointerException success) {}
88      }
89  
90      /**
# Line 99 | Line 97 | public class PriorityBlockingQueueTest e
97                  ints[i] = new Integer(i);
98              PriorityBlockingQueue q = new PriorityBlockingQueue(Arrays.asList(ints));
99              shouldThrow();
100 <        }
103 <        catch (NullPointerException success) {}
100 >        } catch (NullPointerException success) {}
101      }
102  
103      /**
104       * Queue contains all elements of collection used to initialize
105       */
106      public void testConstructor6() {
107 <        try {
108 <            Integer[] ints = new Integer[SIZE];
109 <            for (int i = 0; i < SIZE; ++i)
110 <                ints[i] = new Integer(i);
111 <            PriorityBlockingQueue q = new PriorityBlockingQueue(Arrays.asList(ints));
112 <            for (int i = 0; i < SIZE; ++i)
116 <                assertEquals(ints[i], q.poll());
117 <        }
118 <        finally {}
107 >        Integer[] ints = new Integer[SIZE];
108 >        for (int i = 0; i < SIZE; ++i)
109 >            ints[i] = new Integer(i);
110 >        PriorityBlockingQueue q = new PriorityBlockingQueue(Arrays.asList(ints));
111 >        for (int i = 0; i < SIZE; ++i)
112 >            assertEquals(ints[i], q.poll());
113      }
114  
115      /**
116       * The comparator used in constructor is used
117       */
118      public void testConstructor7() {
119 <        try {
120 <            MyReverseComparator cmp = new MyReverseComparator();
121 <            PriorityBlockingQueue q = new PriorityBlockingQueue(SIZE, cmp);
122 <            assertEquals(cmp, q.comparator());
123 <            Integer[] ints = new Integer[SIZE];
124 <            for (int i = 0; i < SIZE; ++i)
125 <                ints[i] = new Integer(i);
126 <            q.addAll(Arrays.asList(ints));
127 <            for (int i = SIZE-1; i >= 0; --i)
134 <                assertEquals(ints[i], q.poll());
135 <        }
136 <        finally {}
119 >        MyReverseComparator cmp = new MyReverseComparator();
120 >        PriorityBlockingQueue q = new PriorityBlockingQueue(SIZE, cmp);
121 >        assertEquals(cmp, q.comparator());
122 >        Integer[] ints = new Integer[SIZE];
123 >        for (int i = 0; i < SIZE; ++i)
124 >            ints[i] = new Integer(i);
125 >        q.addAll(Arrays.asList(ints));
126 >        for (int i = SIZE-1; i >= 0; --i)
127 >            assertEquals(ints[i], q.poll());
128      }
129  
130      /**
# Line 152 | Line 143 | public class PriorityBlockingQueueTest e
143      }
144  
145      /**
146 <     * remainingCapacity does not change when elementa added or removed,
146 >     * remainingCapacity does not change when elements added or removed,
147       * but size does
148       */
149      public void testRemainingCapacity() {
# Line 177 | Line 168 | public class PriorityBlockingQueueTest e
168              PriorityBlockingQueue q = new PriorityBlockingQueue(1);
169              q.offer(null);
170              shouldThrow();
171 <        } catch (NullPointerException success) { }  
171 >        } catch (NullPointerException success) {}
172 >    }
173 >
174 >    /**
175 >     * add(null) throws NPE
176 >     */
177 >    public void testAddNull() {
178 >        try {
179 >            PriorityBlockingQueue q = new PriorityBlockingQueue(1);
180 >            q.add(null);
181 >            shouldThrow();
182 >        } catch (NullPointerException success) {}
183      }
184  
185      /**
# Line 199 | Line 201 | public class PriorityBlockingQueueTest e
201              q.offer(new Object());
202              q.offer(new Object());
203              shouldThrow();
204 <        }
203 <        catch(ClassCastException success) {}
204 >        } catch (ClassCastException success) {}
205      }
206  
207      /**
# Line 222 | Line 223 | public class PriorityBlockingQueueTest e
223              PriorityBlockingQueue q = new PriorityBlockingQueue(1);
224              q.addAll(null);
225              shouldThrow();
226 <        }
227 <        catch (NullPointerException success) {}
226 >        } catch (NullPointerException success) {}
227 >    }
228 >
229 >    /**
230 >     * addAll(this) throws IAE
231 >     */
232 >    public void testAddAllSelf() {
233 >        try {
234 >            PriorityBlockingQueue q = populatedQueue(SIZE);
235 >            q.addAll(q);
236 >            shouldThrow();
237 >        } catch (IllegalArgumentException success) {}
238      }
239 +
240      /**
241       * addAll of a collection with null elements throws NPE
242       */
# Line 234 | Line 246 | public class PriorityBlockingQueueTest e
246              Integer[] ints = new Integer[SIZE];
247              q.addAll(Arrays.asList(ints));
248              shouldThrow();
249 <        }
238 <        catch (NullPointerException success) {}
249 >        } catch (NullPointerException success) {}
250      }
251      /**
252       * addAll of a collection with any null elements throws NPE after
# Line 249 | Line 260 | public class PriorityBlockingQueueTest e
260                  ints[i] = new Integer(i);
261              q.addAll(Arrays.asList(ints));
262              shouldThrow();
263 <        }
253 <        catch (NullPointerException success) {}
263 >        } catch (NullPointerException success) {}
264      }
265  
266      /**
267       * Queue contains all elements of successful addAll
268       */
269      public void testAddAll5() {
270 <        try {
271 <            Integer[] empty = new Integer[0];
272 <            Integer[] ints = new Integer[SIZE];
273 <            for (int i = SIZE-1; i >= 0; --i)
274 <                ints[i] = new Integer(i);
275 <            PriorityBlockingQueue q = new PriorityBlockingQueue(SIZE);
276 <            assertFalse(q.addAll(Arrays.asList(empty)));
277 <            assertTrue(q.addAll(Arrays.asList(ints)));
278 <            for (int i = 0; i < SIZE; ++i)
269 <                assertEquals(ints[i], q.poll());
270 <        }
271 <        finally {}
270 >        Integer[] empty = new Integer[0];
271 >        Integer[] ints = new Integer[SIZE];
272 >        for (int i = SIZE-1; i >= 0; --i)
273 >            ints[i] = new Integer(i);
274 >        PriorityBlockingQueue q = new PriorityBlockingQueue(SIZE);
275 >        assertFalse(q.addAll(Arrays.asList(empty)));
276 >        assertTrue(q.addAll(Arrays.asList(ints)));
277 >        for (int i = 0; i < SIZE; ++i)
278 >            assertEquals(ints[i], q.poll());
279      }
280  
281      /**
# Line 279 | Line 286 | public class PriorityBlockingQueueTest e
286              PriorityBlockingQueue q = new PriorityBlockingQueue(SIZE);
287              q.put(null);
288              shouldThrow();
289 <        }
283 <        catch (NullPointerException success){
284 <        }  
289 >        } catch (NullPointerException success) {}
290       }
291  
292      /**
293       * all elements successfully put are contained
294       */
295       public void testPut() {
296 <         try {
297 <             PriorityBlockingQueue q = new PriorityBlockingQueue(SIZE);
298 <             for (int i = 0; i < SIZE; ++i) {
299 <                 Integer I = new Integer(i);
300 <                 q.put(I);
296 <                 assertTrue(q.contains(I));
297 <             }
298 <             assertEquals(SIZE, q.size());
296 >         PriorityBlockingQueue q = new PriorityBlockingQueue(SIZE);
297 >         for (int i = 0; i < SIZE; ++i) {
298 >             Integer I = new Integer(i);
299 >             q.put(I);
300 >             assertTrue(q.contains(I));
301           }
302 <         finally {
301 <        }
302 >         assertEquals(SIZE, q.size());
303      }
304  
305      /**
306       * put doesn't block waiting for take
307       */
308 <    public void testPutWithTake() {
308 >    public void testPutWithTake() throws InterruptedException {
309          final PriorityBlockingQueue q = new PriorityBlockingQueue(2);
310 <        Thread t = new Thread(new Runnable() {
311 <                public void run() {
312 <                    int added = 0;
313 <                    try {
314 <                        q.put(new Integer(0));
315 <                        ++added;
316 <                        q.put(new Integer(0));
317 <                        ++added;
318 <                        q.put(new Integer(0));
319 <                        ++added;
320 <                        q.put(new Integer(0));
321 <                        ++added;
322 <                        threadAssertTrue(added == 4);
322 <                    } finally {
323 <                    }
324 <                }
325 <            });
326 <        try {
327 <            t.start();
328 <            Thread.sleep(SHORT_DELAY_MS);
329 <            q.take();
330 <            t.interrupt();
331 <            t.join();
332 <        } catch (Exception e){
333 <            unexpectedException();
334 <        }
310 >        final int size = 4;
311 >        Thread t = new Thread(new CheckedRunnable() {
312 >            public void realRun() {
313 >                for (int i = 0; i < size; i++)
314 >                    q.put(new Integer(0));
315 >            }});
316 >
317 >        t.start();
318 >        Thread.sleep(SHORT_DELAY_MS);
319 >        assertEquals(q.size(), size);
320 >        q.take();
321 >        t.interrupt();
322 >        t.join();
323      }
324  
325      /**
326       * timed offer does not time out
327       */
328 <    public void testTimedOffer() {
328 >    public void testTimedOffer() throws InterruptedException {
329          final PriorityBlockingQueue q = new PriorityBlockingQueue(2);
330          Thread t = new Thread(new Runnable() {
331                  public void run() {
# Line 349 | Line 337 | public class PriorityBlockingQueueTest e
337                      } finally { }
338                  }
339              });
340 <        
341 <        try {
342 <            t.start();
343 <            Thread.sleep(SMALL_DELAY_MS);
344 <            t.interrupt();
357 <            t.join();
358 <        } catch (Exception e){
359 <            unexpectedException();
360 <        }
340 >
341 >        t.start();
342 >        Thread.sleep(SMALL_DELAY_MS);
343 >        t.interrupt();
344 >        t.join();
345      }
346  
347      /**
348       * take retrieves elements in priority order
349       */
350 <    public void testTake() {
351 <        try {
352 <            PriorityBlockingQueue q = populatedQueue(SIZE);
353 <            for (int i = 0; i < SIZE; ++i) {
354 <                assertEquals(i, ((Integer)q.take()).intValue());
371 <            }
372 <        } catch (InterruptedException e){
373 <            unexpectedException();
374 <        }  
350 >    public void testTake() throws InterruptedException {
351 >        PriorityBlockingQueue q = populatedQueue(SIZE);
352 >        for (int i = 0; i < SIZE; ++i) {
353 >            assertEquals(i, ((Integer)q.take()).intValue());
354 >        }
355      }
356  
357      /**
358       * take blocks interruptibly when empty
359       */
360 <    public void testTakeFromEmpty() {
360 >    public void testTakeFromEmpty() throws InterruptedException {
361          final PriorityBlockingQueue q = new PriorityBlockingQueue(2);
362 <        Thread t = new Thread(new Runnable() {
363 <                public void run() {
364 <                    try {
365 <                        q.take();
366 <                        threadShouldThrow();
367 <                    } catch (InterruptedException success){ }                
368 <                }
369 <            });
370 <        try {
391 <            t.start();
392 <            Thread.sleep(SHORT_DELAY_MS);
393 <            t.interrupt();
394 <            t.join();
395 <        } catch (Exception e){
396 <            unexpectedException();
397 <        }
362 >        Thread t = new Thread(new CheckedInterruptedRunnable() {
363 >            public void realRun() throws InterruptedException {
364 >                q.take();
365 >            }});
366 >
367 >        t.start();
368 >        Thread.sleep(SHORT_DELAY_MS);
369 >        t.interrupt();
370 >        t.join();
371      }
372  
373      /**
374       * Take removes existing elements until empty, then blocks interruptibly
375       */
376 <    public void testBlockingTake() {
377 <        Thread t = new Thread(new Runnable() {
378 <                public void run() {
379 <                    try {
380 <                        PriorityBlockingQueue q = populatedQueue(SIZE);
381 <                        for (int i = 0; i < SIZE; ++i) {
382 <                            threadAssertEquals(i, ((Integer)q.take()).intValue());
383 <                        }
384 <                        q.take();
385 <                        threadShouldThrow();
413 <                    } catch (InterruptedException success){
414 <                    }  
415 <                }});
376 >    public void testBlockingTake() throws InterruptedException {
377 >        Thread t = new Thread(new CheckedInterruptedRunnable() {
378 >            public void realRun() throws InterruptedException {
379 >                PriorityBlockingQueue q = populatedQueue(SIZE);
380 >                for (int i = 0; i < SIZE; ++i) {
381 >                    threadAssertEquals(i, ((Integer)q.take()).intValue());
382 >                }
383 >                q.take();
384 >            }});
385 >
386          t.start();
387 <        try {
388 <           Thread.sleep(SHORT_DELAY_MS);
389 <           t.interrupt();
420 <           t.join();
421 <        }
422 <        catch (InterruptedException ie) {
423 <            unexpectedException();
424 <        }
387 >        Thread.sleep(SHORT_DELAY_MS);
388 >        t.interrupt();
389 >        t.join();
390      }
391  
392  
# Line 439 | Line 404 | public class PriorityBlockingQueueTest e
404      /**
405       * timed pool with zero timeout succeeds when non-empty, else times out
406       */
407 <    public void testTimedPoll0() {
408 <        try {
409 <            PriorityBlockingQueue q = populatedQueue(SIZE);
410 <            for (int i = 0; i < SIZE; ++i) {
411 <                assertEquals(i, ((Integer)q.poll(0, TimeUnit.MILLISECONDS)).intValue());
412 <            }
448 <            assertNull(q.poll(0, TimeUnit.MILLISECONDS));
449 <        } catch (InterruptedException e){
450 <            unexpectedException();
451 <        }  
407 >    public void testTimedPoll0() throws InterruptedException {
408 >        PriorityBlockingQueue q = populatedQueue(SIZE);
409 >        for (int i = 0; i < SIZE; ++i) {
410 >            assertEquals(i, ((Integer)q.poll(0, TimeUnit.MILLISECONDS)).intValue());
411 >        }
412 >        assertNull(q.poll(0, TimeUnit.MILLISECONDS));
413      }
414  
415      /**
416       * timed pool with nonzero timeout succeeds when non-empty, else times out
417       */
418 <    public void testTimedPoll() {
419 <        try {
420 <            PriorityBlockingQueue q = populatedQueue(SIZE);
421 <            for (int i = 0; i < SIZE; ++i) {
422 <                assertEquals(i, ((Integer)q.poll(SHORT_DELAY_MS, TimeUnit.MILLISECONDS)).intValue());
423 <            }
463 <            assertNull(q.poll(SHORT_DELAY_MS, TimeUnit.MILLISECONDS));
464 <        } catch (InterruptedException e){
465 <            unexpectedException();
466 <        }  
418 >    public void testTimedPoll() throws InterruptedException {
419 >        PriorityBlockingQueue q = populatedQueue(SIZE);
420 >        for (int i = 0; i < SIZE; ++i) {
421 >            assertEquals(i, ((Integer)q.poll(SHORT_DELAY_MS, TimeUnit.MILLISECONDS)).intValue());
422 >        }
423 >        assertNull(q.poll(SHORT_DELAY_MS, TimeUnit.MILLISECONDS));
424      }
425  
426      /**
427       * Interrupted timed poll throws InterruptedException instead of
428       * returning timeout status
429       */
430 <    public void testInterruptedTimedPoll() {
431 <        Thread t = new Thread(new Runnable() {
432 <                public void run() {
433 <                    try {
434 <                        PriorityBlockingQueue q = populatedQueue(SIZE);
435 <                        for (int i = 0; i < SIZE; ++i) {
436 <                            threadAssertEquals(i, ((Integer)q.poll(SHORT_DELAY_MS, TimeUnit.MILLISECONDS)).intValue());
437 <                        }
438 <                        threadAssertNull(q.poll(SHORT_DELAY_MS, TimeUnit.MILLISECONDS));
439 <                    } catch (InterruptedException success){
440 <                    }  
441 <                }});
430 >    public void testInterruptedTimedPoll() throws InterruptedException {
431 >        Thread t = new Thread(new CheckedRunnable() {
432 >            public void realRun() throws InterruptedException {
433 >                PriorityBlockingQueue q = populatedQueue(SIZE);
434 >                for (int i = 0; i < SIZE; ++i) {
435 >                    threadAssertEquals(i, ((Integer)q.poll(SHORT_DELAY_MS, TimeUnit.MILLISECONDS)).intValue());
436 >                }
437 >                try {
438 >                    q.poll(SMALL_DELAY_MS, TimeUnit.MILLISECONDS);
439 >                    threadShouldThrow();
440 >                } catch (InterruptedException success) {}
441 >            }});
442 >
443          t.start();
444 <        try {
445 <           Thread.sleep(SHORT_DELAY_MS);
446 <           t.interrupt();
489 <           t.join();
490 <        }
491 <        catch (InterruptedException ie) {
492 <            unexpectedException();
493 <        }
444 >        Thread.sleep(SHORT_DELAY_MS);
445 >        t.interrupt();
446 >        t.join();
447      }
448  
449      /**
450       *  timed poll before a delayed offer fails; after offer succeeds;
451       *  on interruption throws
452       */
453 <    public void testTimedPollWithOffer() {
453 >    public void testTimedPollWithOffer() throws InterruptedException {
454          final PriorityBlockingQueue q = new PriorityBlockingQueue(2);
455 <        Thread t = new Thread(new Runnable() {
456 <                public void run() {
457 <                    try {
458 <                        threadAssertNull(q.poll(SHORT_DELAY_MS, TimeUnit.MILLISECONDS));
459 <                        q.poll(LONG_DELAY_MS, TimeUnit.MILLISECONDS);
460 <                        q.poll(LONG_DELAY_MS, TimeUnit.MILLISECONDS);
461 <                        threadShouldThrow();
462 <                    } catch (InterruptedException success) { }                
463 <                }
464 <            });
465 <        try {
466 <            t.start();
467 <            Thread.sleep(SMALL_DELAY_MS);
468 <            assertTrue(q.offer(new Integer(0), SHORT_DELAY_MS, TimeUnit.MILLISECONDS));
469 <            t.interrupt();
470 <            t.join();
518 <        } catch (Exception e){
519 <            unexpectedException();
520 <        }
521 <    }  
455 >        Thread t = new Thread(new CheckedRunnable() {
456 >            public void realRun() throws InterruptedException {
457 >                threadAssertNull(q.poll(SHORT_DELAY_MS, TimeUnit.MILLISECONDS));
458 >                threadAssertEquals(0, q.poll(MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS));
459 >                try {
460 >                    q.poll(LONG_DELAY_MS, TimeUnit.MILLISECONDS);
461 >                    threadShouldThrow();
462 >                } catch (InterruptedException success) {}
463 >            }});
464 >
465 >        t.start();
466 >        Thread.sleep(SMALL_DELAY_MS);
467 >        assertTrue(q.offer(new Integer(0), SHORT_DELAY_MS, TimeUnit.MILLISECONDS));
468 >        t.interrupt();
469 >        t.join();
470 >    }
471  
472  
473      /**
# Line 547 | Line 496 | public class PriorityBlockingQueueTest e
496          try {
497              q.element();
498              shouldThrow();
499 <        }
551 <        catch (NoSuchElementException success) {}
499 >        } catch (NoSuchElementException success) {}
500      }
501  
502      /**
# Line 562 | Line 510 | public class PriorityBlockingQueueTest e
510          try {
511              q.remove();
512              shouldThrow();
513 <        } catch (NoSuchElementException success){
566 <        }  
513 >        } catch (NoSuchElementException success) {}
514      }
515  
516      /**
# Line 580 | Line 527 | public class PriorityBlockingQueueTest e
527          }
528          assertTrue(q.isEmpty());
529      }
530 <        
530 >
531      /**
532       * contains(x) reports true when elements added but not yet removed
533       */
# Line 601 | Line 548 | public class PriorityBlockingQueueTest e
548          q.clear();
549          assertTrue(q.isEmpty());
550          assertEquals(0, q.size());
551 <        assertEquals(NOCAP, q.remainingCapacity());
605 <        q.add(new Integer(1));
551 >        q.add(one);
552          assertFalse(q.isEmpty());
553 +        assertTrue(q.contains(one));
554          q.clear();
555          assertTrue(q.isEmpty());
556      }
# Line 660 | Line 607 | public class PriorityBlockingQueueTest e
607      /**
608       *  toArray contains all elements
609       */
610 <    public void testToArray() {
610 >    public void testToArray() throws InterruptedException {
611          PriorityBlockingQueue q = populatedQueue(SIZE);
612          Object[] o = q.toArray();
613          Arrays.sort(o);
614 <        try {
668 <        for(int i = 0; i < o.length; i++)
614 >        for (int i = 0; i < o.length; i++)
615              assertEquals(o[i], q.take());
670        } catch (InterruptedException e){
671            unexpectedException();
672        }    
616      }
617  
618      /**
619       * toArray(a) contains all elements
620       */
621 <    public void testToArray2() {
621 >    public void testToArray2() throws InterruptedException {
622          PriorityBlockingQueue q = populatedQueue(SIZE);
623          Integer[] ints = new Integer[SIZE];
624          ints = (Integer[])q.toArray(ints);
625          Arrays.sort(ints);
626 +        for (int i = 0; i < ints.length; i++)
627 +            assertEquals(ints[i], q.take());
628 +    }
629 +
630 +    /**
631 +     * toArray(null) throws NPE
632 +     */
633 +    public void testToArray_BadArg() {
634          try {
635 <            for(int i = 0; i < ints.length; i++)
636 <                assertEquals(ints[i], q.take());
637 <        } catch (InterruptedException e){
638 <            unexpectedException();
688 <        }    
635 >            PriorityBlockingQueue q = populatedQueue(SIZE);
636 >            Object o[] = q.toArray(null);
637 >            shouldThrow();
638 >        } catch (NullPointerException success) {}
639      }
640 <    
640 >
641 >    /**
642 >     * toArray with incompatible array type throws CCE
643 >     */
644 >    public void testToArray1_BadArg() {
645 >        try {
646 >            PriorityBlockingQueue q = populatedQueue(SIZE);
647 >            Object o[] = q.toArray(new String[10] );
648 >            shouldThrow();
649 >        } catch (ArrayStoreException  success) {}
650 >    }
651 >
652      /**
653       * iterator iterates through all elements
654       */
# Line 695 | Line 656 | public class PriorityBlockingQueueTest e
656          PriorityBlockingQueue q = populatedQueue(SIZE);
657          int i = 0;
658          Iterator it = q.iterator();
659 <        while(it.hasNext()) {
659 >        while (it.hasNext()) {
660              assertTrue(q.contains(it.next()));
661              ++i;
662          }
# Line 731 | Line 692 | public class PriorityBlockingQueueTest e
692          for (int i = 0; i < SIZE; ++i) {
693              assertTrue(s.indexOf(String.valueOf(i)) >= 0);
694          }
695 <    }        
695 >    }
696  
697      /**
698       * offer transfers elements across Executor tasks
# Line 739 | Line 700 | public class PriorityBlockingQueueTest e
700      public void testPollInExecutor() {
701          final PriorityBlockingQueue q = new PriorityBlockingQueue(2);
702          ExecutorService executor = Executors.newFixedThreadPool(2);
703 <        executor.execute(new Runnable() {
704 <            public void run() {
703 >        executor.execute(new CheckedRunnable() {
704 >            public void realRun() throws InterruptedException {
705                  threadAssertNull(q.poll());
706 <                try {
707 <                    threadAssertTrue(null != q.poll(MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS));
708 <                    threadAssertTrue(q.isEmpty());
709 <                }
710 <                catch (InterruptedException e) {
711 <                    threadUnexpectedException();
712 <                }
713 <            }
714 <        });
706 >                threadAssertTrue(null != q.poll(MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS));
707 >                threadAssertTrue(q.isEmpty());
708 >            }});
709 >
710 >        executor.execute(new CheckedRunnable() {
711 >            public void realRun() throws InterruptedException {
712 >                Thread.sleep(SMALL_DELAY_MS);
713 >                q.put(new Integer(1));
714 >            }});
715  
755        executor.execute(new Runnable() {
756            public void run() {
757                try {
758                    Thread.sleep(SMALL_DELAY_MS);
759                    q.put(new Integer(1));
760                }
761                catch (InterruptedException e) {
762                    threadUnexpectedException();
763                }
764            }
765        });
766        
716          joinPool(executor);
717      }
718  
719      /**
720 <     * A deserialized serialized queue has same elements
720 >     * A deserialized serialized queue has same elements
721 >     */
722 >    public void testSerialization() throws Exception {
723 >        PriorityBlockingQueue q = populatedQueue(SIZE);
724 >        ByteArrayOutputStream bout = new ByteArrayOutputStream(10000);
725 >        ObjectOutputStream out = new ObjectOutputStream(new BufferedOutputStream(bout));
726 >        out.writeObject(q);
727 >        out.close();
728 >
729 >        ByteArrayInputStream bin = new ByteArrayInputStream(bout.toByteArray());
730 >        ObjectInputStream in = new ObjectInputStream(new BufferedInputStream(bin));
731 >        PriorityBlockingQueue r = (PriorityBlockingQueue)in.readObject();
732 >        assertEquals(q.size(), r.size());
733 >        while (!q.isEmpty())
734 >            assertEquals(q.remove(), r.remove());
735 >    }
736 >
737 >    /**
738 >     * drainTo(null) throws NPE
739       */
740 <    public void testSerialization() {
740 >    public void testDrainToNull() {
741          PriorityBlockingQueue q = populatedQueue(SIZE);
742          try {
743 <            ByteArrayOutputStream bout = new ByteArrayOutputStream(10000);
744 <            ObjectOutputStream out = new ObjectOutputStream(new BufferedOutputStream(bout));
745 <            out.writeObject(q);
746 <            out.close();
747 <
748 <            ByteArrayInputStream bin = new ByteArrayInputStream(bout.toByteArray());
749 <            ObjectInputStream in = new ObjectInputStream(new BufferedInputStream(bin));
750 <            PriorityBlockingQueue r = (PriorityBlockingQueue)in.readObject();
751 <            assertEquals(q.size(), r.size());
752 <            while (!q.isEmpty())
753 <                assertEquals(q.remove(), r.remove());
754 <        } catch(Exception e){
755 <            unexpectedException();
743 >            q.drainTo(null);
744 >            shouldThrow();
745 >        } catch (NullPointerException success) {}
746 >    }
747 >
748 >    /**
749 >     * drainTo(this) throws IAE
750 >     */
751 >    public void testDrainToSelf() {
752 >        PriorityBlockingQueue q = populatedQueue(SIZE);
753 >        try {
754 >            q.drainTo(q);
755 >            shouldThrow();
756 >        } catch (IllegalArgumentException success) {}
757 >    }
758 >
759 >    /**
760 >     * drainTo(c) empties queue into another collection c
761 >     */
762 >    public void testDrainTo() {
763 >        PriorityBlockingQueue q = populatedQueue(SIZE);
764 >        ArrayList l = new ArrayList();
765 >        q.drainTo(l);
766 >        assertEquals(q.size(), 0);
767 >        assertEquals(l.size(), SIZE);
768 >        for (int i = 0; i < SIZE; ++i)
769 >            assertEquals(l.get(i), new Integer(i));
770 >        q.add(zero);
771 >        q.add(one);
772 >        assertFalse(q.isEmpty());
773 >        assertTrue(q.contains(zero));
774 >        assertTrue(q.contains(one));
775 >        l.clear();
776 >        q.drainTo(l);
777 >        assertEquals(q.size(), 0);
778 >        assertEquals(l.size(), 2);
779 >        for (int i = 0; i < 2; ++i)
780 >            assertEquals(l.get(i), new Integer(i));
781 >    }
782 >
783 >    /**
784 >     * drainTo empties queue
785 >     */
786 >    public void testDrainToWithActivePut() throws InterruptedException {
787 >        final PriorityBlockingQueue q = populatedQueue(SIZE);
788 >        Thread t = new Thread(new CheckedRunnable() {
789 >            public void realRun() {
790 >                q.put(new Integer(SIZE+1));
791 >            }});
792 >
793 >        t.start();
794 >        ArrayList l = new ArrayList();
795 >        q.drainTo(l);
796 >        assertTrue(l.size() >= SIZE);
797 >        for (int i = 0; i < SIZE; ++i)
798 >            assertEquals(l.get(i), new Integer(i));
799 >        t.join();
800 >        assertTrue(q.size() + l.size() >= SIZE);
801 >    }
802 >
803 >    /**
804 >     * drainTo(null, n) throws NPE
805 >     */
806 >    public void testDrainToNullN() {
807 >        PriorityBlockingQueue q = populatedQueue(SIZE);
808 >        try {
809 >            q.drainTo(null, 0);
810 >            shouldThrow();
811 >        } catch (NullPointerException success) {}
812 >    }
813 >
814 >    /**
815 >     * drainTo(this, n) throws IAE
816 >     */
817 >    public void testDrainToSelfN() {
818 >        PriorityBlockingQueue q = populatedQueue(SIZE);
819 >        try {
820 >            q.drainTo(q, 0);
821 >            shouldThrow();
822 >        } catch (IllegalArgumentException success) {}
823 >    }
824 >
825 >    /**
826 >     * drainTo(c, n) empties first max {n, size} elements of queue into c
827 >     */
828 >    public void testDrainToN() {
829 >        PriorityBlockingQueue q = new PriorityBlockingQueue(SIZE*2);
830 >        for (int i = 0; i < SIZE + 2; ++i) {
831 >            for (int j = 0; j < SIZE; j++)
832 >                assertTrue(q.offer(new Integer(j)));
833 >            ArrayList l = new ArrayList();
834 >            q.drainTo(l, i);
835 >            int k = (i < SIZE)? i : SIZE;
836 >            assertEquals(l.size(), k);
837 >            assertEquals(q.size(), SIZE-k);
838 >            for (int j = 0; j < k; ++j)
839 >                assertEquals(l.get(j), new Integer(j));
840 >            while (q.poll() != null) ;
841          }
842      }
843  

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines