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

Comparing jsr166/src/test/tck/ArrayBlockingQueueTest.java (file contents):
Revision 1.6 by dl, Sun Oct 5 23:00:39 2003 UTC vs.
Revision 1.31 by dl, Wed Sep 29 12:33:48 2010 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  
10   import junit.framework.*;
11   import java.util.*;
12   import java.util.concurrent.*;
13 + import static java.util.concurrent.TimeUnit.MILLISECONDS;
14   import java.io.*;
15  
16   public class ArrayBlockingQueueTest extends JSR166TestCase {
17      public static void main(String[] args) {
18 <        junit.textui.TestRunner.run (suite());  
18 >        junit.textui.TestRunner.run(suite());
19      }
20      public static Test suite() {
21 <        return new TestSuite(ArrayBlockingQueueTest.class);
21 >        return new TestSuite(ArrayBlockingQueueTest.class);
22      }
23  
24      /**
# Line 26 | Line 28 | public class ArrayBlockingQueueTest exte
28      private ArrayBlockingQueue populatedQueue(int n) {
29          ArrayBlockingQueue q = new ArrayBlockingQueue(n);
30          assertTrue(q.isEmpty());
31 <        for(int i = 0; i < n; i++)
32 <            assertTrue(q.offer(new Integer(i)));
31 >        for (int i = 0; i < n; i++)
32 >            assertTrue(q.offer(new Integer(i)));
33          assertFalse(q.isEmpty());
34          assertEquals(0, q.remainingCapacity());
35 <        assertEquals(n, q.size());
35 >        assertEquals(n, q.size());
36          return q;
37      }
38 <
38 >
39      /**
40       * A new queue has the indicated capacity
41       */
# Line 42 | Line 44 | public class ArrayBlockingQueueTest exte
44      }
45  
46      /**
47 <     * Constructor throws IAE if  capacity argument nonpositive
47 >     * Constructor throws IAE if capacity argument nonpositive
48       */
49      public void testConstructor2() {
50          try {
51              ArrayBlockingQueue q = new ArrayBlockingQueue(0);
52              shouldThrow();
53 <        }
52 <        catch (IllegalArgumentException success) {}
53 >        } catch (IllegalArgumentException success) {}
54      }
55  
56      /**
# Line 59 | Line 60 | public class ArrayBlockingQueueTest exte
60          try {
61              ArrayBlockingQueue q = new ArrayBlockingQueue(1, true, null);
62              shouldThrow();
63 <        }
63 <        catch (NullPointerException success) {}
63 >        } catch (NullPointerException success) {}
64      }
65  
66      /**
# Line 71 | Line 71 | public class ArrayBlockingQueueTest exte
71              Integer[] ints = new Integer[SIZE];
72              ArrayBlockingQueue q = new ArrayBlockingQueue(SIZE, false, Arrays.asList(ints));
73              shouldThrow();
74 <        }
75 <        catch (NullPointerException success) {}
74 >        } catch (NullPointerException success) {}
75      }
76  
77      /**
# Line 85 | Line 84 | public class ArrayBlockingQueueTest exte
84                  ints[i] = new Integer(i);
85              ArrayBlockingQueue q = new ArrayBlockingQueue(SIZE, false, Arrays.asList(ints));
86              shouldThrow();
87 <        }
89 <        catch (NullPointerException success) {}
87 >        } catch (NullPointerException success) {}
88      }
89  
90      /**
# Line 99 | Line 97 | public class ArrayBlockingQueueTest exte
97                  ints[i] = new Integer(i);
98              ArrayBlockingQueue q = new ArrayBlockingQueue(1, false, Arrays.asList(ints));
99              shouldThrow();
100 <        }
103 <        catch (IllegalArgumentException success) {}
100 >        } catch (IllegalArgumentException success) {}
101      }
102  
103      /**
104       * Queue contains all elements of collection used to initialize
105       */
106      public void testConstructor7() {
107 <        try {
108 <            Integer[] ints = new Integer[SIZE];
109 <            for (int i = 0; i < SIZE; ++i)
110 <                ints[i] = new Integer(i);
111 <            ArrayBlockingQueue q = new ArrayBlockingQueue(SIZE, true, 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 >        ArrayBlockingQueue q = new ArrayBlockingQueue(SIZE, true, Arrays.asList(ints));
111 >        for (int i = 0; i < SIZE; ++i)
112 >            assertEquals(ints[i], q.poll());
113      }
114  
115      /**
# Line 154 | Line 148 | public class ArrayBlockingQueueTest exte
148       *  offer(null) throws NPE
149       */
150      public void testOfferNull() {
151 <        try {
151 >        try {
152              ArrayBlockingQueue q = new ArrayBlockingQueue(1);
153              q.offer(null);
154              shouldThrow();
155 <        } catch (NullPointerException success) { }  
155 >        } catch (NullPointerException success) {}
156      }
157  
158      /**
159       *  add(null) throws NPE
160       */
161      public void testAddNull() {
162 <        try {
162 >        try {
163              ArrayBlockingQueue q = new ArrayBlockingQueue(1);
164              q.add(null);
165              shouldThrow();
166 <        } catch (NullPointerException success) { }  
166 >        } catch (NullPointerException success) {}
167      }
168  
169      /**
# Line 185 | Line 179 | public class ArrayBlockingQueueTest exte
179       * add succeeds if not full; throws ISE if full
180       */
181      public void testAdd() {
182 <        try {
182 >        try {
183              ArrayBlockingQueue q = new ArrayBlockingQueue(SIZE);
184              for (int i = 0; i < SIZE; ++i) {
185                  assertTrue(q.add(new Integer(i)));
186              }
187              assertEquals(0, q.remainingCapacity());
188              q.add(new Integer(SIZE));
189 <        } catch (IllegalStateException success){
190 <        }  
189 >            shouldThrow();
190 >        } catch (IllegalStateException success) {}
191      }
192  
193      /**
# Line 204 | Line 198 | public class ArrayBlockingQueueTest exte
198              ArrayBlockingQueue q = new ArrayBlockingQueue(1);
199              q.addAll(null);
200              shouldThrow();
201 <        }
208 <        catch (NullPointerException success) {}
201 >        } catch (NullPointerException success) {}
202      }
203  
204      /**
# Line 216 | Line 209 | public class ArrayBlockingQueueTest exte
209              ArrayBlockingQueue q = populatedQueue(SIZE);
210              q.addAll(q);
211              shouldThrow();
212 <        }
220 <        catch (IllegalArgumentException success) {}
212 >        } catch (IllegalArgumentException success) {}
213      }
214  
215  
# Line 230 | Line 222 | public class ArrayBlockingQueueTest exte
222              Integer[] ints = new Integer[SIZE];
223              q.addAll(Arrays.asList(ints));
224              shouldThrow();
225 <        }
234 <        catch (NullPointerException success) {}
225 >        } catch (NullPointerException success) {}
226      }
227 +
228      /**
229       * addAll of a collection with any null elements throws NPE after
230       * possibly adding some elements
# Line 245 | Line 237 | public class ArrayBlockingQueueTest exte
237                  ints[i] = new Integer(i);
238              q.addAll(Arrays.asList(ints));
239              shouldThrow();
240 <        }
249 <        catch (NullPointerException success) {}
240 >        } catch (NullPointerException success) {}
241      }
242 +
243      /**
244       * addAll throws ISE if not enough room
245       */
# Line 259 | Line 251 | public class ArrayBlockingQueueTest exte
251                  ints[i] = new Integer(i);
252              q.addAll(Arrays.asList(ints));
253              shouldThrow();
254 <        }
263 <        catch (IllegalStateException success) {}
254 >        } catch (IllegalStateException success) {}
255      }
256 +
257      /**
258       * Queue contains all elements, in traversal order, of successful addAll
259       */
260      public void testAddAll5() {
261 <        try {
262 <            Integer[] empty = new Integer[0];
263 <            Integer[] ints = new Integer[SIZE];
264 <            for (int i = 0; i < SIZE; ++i)
265 <                ints[i] = new Integer(i);
266 <            ArrayBlockingQueue q = new ArrayBlockingQueue(SIZE);
267 <            assertFalse(q.addAll(Arrays.asList(empty)));
268 <            assertTrue(q.addAll(Arrays.asList(ints)));
269 <            for (int i = 0; i < SIZE; ++i)
278 <                assertEquals(ints[i], q.poll());
279 <        }
280 <        finally {}
261 >        Integer[] empty = new Integer[0];
262 >        Integer[] ints = new Integer[SIZE];
263 >        for (int i = 0; i < SIZE; ++i)
264 >            ints[i] = new Integer(i);
265 >        ArrayBlockingQueue q = new ArrayBlockingQueue(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      }
271  
272      /**
273       *  put(null) throws NPE
274       */
275 <     public void testPutNull() {
276 <        try {
275 >    public void testPutNull() throws InterruptedException {
276 >        try {
277              ArrayBlockingQueue q = new ArrayBlockingQueue(SIZE);
278              q.put(null);
279              shouldThrow();
280 <        }
292 <        catch (NullPointerException success){
293 <        }  
294 <        catch (InterruptedException ie) {
295 <            unexpectedException();
296 <        }
280 >        } catch (NullPointerException success) {}
281       }
282  
283      /**
284       * all elements successfully put are contained
285       */
286 <     public void testPut() {
287 <         try {
288 <             ArrayBlockingQueue q = new ArrayBlockingQueue(SIZE);
289 <             for (int i = 0; i < SIZE; ++i) {
290 <                 Integer I = new Integer(i);
291 <                 q.put(I);
308 <                 assertTrue(q.contains(I));
309 <             }
310 <             assertEquals(0, q.remainingCapacity());
311 <         }
312 <        catch (InterruptedException ie) {
313 <            unexpectedException();
286 >    public void testPut() throws InterruptedException {
287 >        ArrayBlockingQueue q = new ArrayBlockingQueue(SIZE);
288 >        for (int i = 0; i < SIZE; ++i) {
289 >            Integer I = new Integer(i);
290 >            q.put(I);
291 >            assertTrue(q.contains(I));
292          }
293 +        assertEquals(0, q.remainingCapacity());
294      }
295  
296      /**
297       * put blocks interruptibly if full
298       */
299 <    public void testBlockingPut() {
300 <        Thread t = new Thread(new Runnable() {
301 <                public void run() {
302 <                    int added = 0;
303 <                    try {
304 <                        ArrayBlockingQueue q = new ArrayBlockingQueue(SIZE);
305 <                        for (int i = 0; i < SIZE; ++i) {
306 <                            q.put(new Integer(i));
307 <                            ++added;
308 <                        }
309 <                        q.put(new Integer(SIZE));
310 <                        threadShouldThrow();
311 <                    } catch (InterruptedException ie){
312 <                        threadAssertEquals(added, SIZE);
313 <                    }  
314 <                }});
315 <        try {
316 <            t.start();
317 <           Thread.sleep(SHORT_DELAY_MS);
318 <           t.interrupt();
340 <           t.join();
341 <        }
342 <        catch (InterruptedException ie) {
343 <            unexpectedException();
344 <        }
299 >    public void testBlockingPut() throws InterruptedException {
300 >        final ArrayBlockingQueue q = new ArrayBlockingQueue(SIZE);
301 >        Thread t = new Thread(new CheckedRunnable() {
302 >            public void realRun() throws InterruptedException {
303 >                for (int i = 0; i < SIZE; ++i)
304 >                    q.put(i);
305 >                assertEquals(SIZE, q.size());
306 >                assertEquals(0, q.remainingCapacity());
307 >                try {
308 >                    q.put(99);
309 >                    shouldThrow();
310 >                } catch (InterruptedException success) {}
311 >            }});
312 >
313 >        t.start();
314 >        Thread.sleep(SHORT_DELAY_MS);
315 >        t.interrupt();
316 >        t.join();
317 >        assertEquals(SIZE, q.size());
318 >        assertEquals(0, q.remainingCapacity());
319      }
320  
321      /**
322       * put blocks waiting for take when full
323       */
324 <    public void testPutWithTake() {
325 <        final ArrayBlockingQueue q = new ArrayBlockingQueue(2);
326 <        Thread t = new Thread(new Runnable() {
327 <                public void run() {
328 <                    int added = 0;
329 <                    try {
330 <                        q.put(new Object());
331 <                        ++added;
332 <                        q.put(new Object());
333 <                        ++added;
334 <                        q.put(new Object());
335 <                        ++added;
336 <                        q.put(new Object());
337 <                        ++added;
338 <                        threadShouldThrow();
339 <                    } catch (InterruptedException e){
340 <                        threadAssertTrue(added >= 2);
341 <                    }
342 <                }
343 <            });
344 <        try {
371 <            t.start();
372 <            Thread.sleep(SHORT_DELAY_MS);
373 <            q.take();
374 <            t.interrupt();
375 <            t.join();
376 <        } catch (Exception e){
377 <            unexpectedException();
378 <        }
324 >    public void testPutWithTake() throws InterruptedException {
325 >        final int capacity = 2;
326 >        final ArrayBlockingQueue q = new ArrayBlockingQueue(capacity);
327 >        Thread t = new Thread(new CheckedRunnable() {
328 >            public void realRun() throws InterruptedException {
329 >                for (int i = 0; i < capacity + 1; i++)
330 >                    q.put(i);
331 >                try {
332 >                    q.put(99);
333 >                    shouldThrow();
334 >                } catch (InterruptedException success) {}
335 >            }});
336 >
337 >        t.start();
338 >        Thread.sleep(SHORT_DELAY_MS);
339 >        assertEquals(q.remainingCapacity(), 0);
340 >        assertEquals(0, q.take());
341 >        Thread.sleep(SHORT_DELAY_MS);
342 >        t.interrupt();
343 >        t.join();
344 >        assertEquals(q.remainingCapacity(), 0);
345      }
346  
347      /**
348       * timed offer times out if full and elements not taken
349       */
350 <    public void testTimedOffer() {
350 >    public void testTimedOffer() throws InterruptedException {
351          final ArrayBlockingQueue q = new ArrayBlockingQueue(2);
352 <        Thread t = new Thread(new Runnable() {
353 <                public void run() {
354 <                    try {
355 <                        q.put(new Object());
356 <                        q.put(new Object());
357 <                        threadAssertFalse(q.offer(new Object(), SHORT_DELAY_MS/2, TimeUnit.MILLISECONDS));
358 <                        q.offer(new Object(), LONG_DELAY_MS, TimeUnit.MILLISECONDS);
359 <                        threadShouldThrow();
360 <                    } catch (InterruptedException success){}
361 <                }
362 <            });
363 <        
364 <        try {
365 <            t.start();
366 <            Thread.sleep(SHORT_DELAY_MS);
401 <            t.interrupt();
402 <            t.join();
403 <        } catch (Exception e){
404 <            unexpectedException();
405 <        }
352 >        Thread t = new Thread(new CheckedRunnable() {
353 >            public void realRun() throws InterruptedException {
354 >                q.put(new Object());
355 >                q.put(new Object());
356 >                assertFalse(q.offer(new Object(), SHORT_DELAY_MS/2, MILLISECONDS));
357 >                try {
358 >                    q.offer(new Object(), LONG_DELAY_MS, MILLISECONDS);
359 >                    shouldThrow();
360 >                } catch (InterruptedException success) {}
361 >            }});
362 >
363 >        t.start();
364 >        Thread.sleep(SHORT_DELAY_MS);
365 >        t.interrupt();
366 >        t.join();
367      }
368  
369      /**
370       * take retrieves elements in FIFO order
371       */
372 <    public void testTake() {
373 <        try {
374 <            ArrayBlockingQueue q = populatedQueue(SIZE);
375 <            for (int i = 0; i < SIZE; ++i) {
376 <                assertEquals(i, ((Integer)q.take()).intValue());
416 <            }
417 <        } catch (InterruptedException e){
418 <            unexpectedException();
419 <        }  
372 >    public void testTake() throws InterruptedException {
373 >        ArrayBlockingQueue q = populatedQueue(SIZE);
374 >        for (int i = 0; i < SIZE; ++i) {
375 >            assertEquals(i, q.take());
376 >        }
377      }
378  
379      /**
380       * take blocks interruptibly when empty
381       */
382 <    public void testTakeFromEmpty() {
382 >    public void testTakeFromEmpty() throws InterruptedException {
383          final ArrayBlockingQueue q = new ArrayBlockingQueue(2);
384 <        Thread t = new Thread(new Runnable() {
385 <                public void run() {
386 <                    try {
387 <                        q.take();
388 <                        threadShouldThrow();
389 <                    } catch (InterruptedException success){ }                
390 <                }
391 <            });
392 <        try {
436 <            t.start();
437 <            Thread.sleep(SHORT_DELAY_MS);
438 <            t.interrupt();
439 <            t.join();
440 <        } catch (Exception e){
441 <            unexpectedException();
442 <        }
384 >        Thread t = new ThreadShouldThrow(InterruptedException.class) {
385 >            public void realRun() throws InterruptedException {
386 >                q.take();
387 >            }};
388 >
389 >        t.start();
390 >        Thread.sleep(SHORT_DELAY_MS);
391 >        t.interrupt();
392 >        t.join();
393      }
394  
395      /**
396       * Take removes existing elements until empty, then blocks interruptibly
397       */
398 <    public void testBlockingTake() {
399 <        Thread t = new Thread(new Runnable() {
400 <                public void run() {
401 <                    try {
402 <                        ArrayBlockingQueue q = populatedQueue(SIZE);
403 <                        for (int i = 0; i < SIZE; ++i) {
404 <                            threadAssertEquals(i, ((Integer)q.take()).intValue());
405 <                        }
406 <                        q.take();
407 <                        threadShouldThrow();
408 <                    } catch (InterruptedException success){
409 <                    }  
410 <                }});
411 <        try {
412 <            t.start();
413 <            Thread.sleep(SHORT_DELAY_MS);
414 <            t.interrupt();
465 <            t.join();
466 <        }
467 <        catch (InterruptedException ie) {
468 <            unexpectedException();
469 <        }
398 >    public void testBlockingTake() throws InterruptedException {
399 >        final ArrayBlockingQueue q = populatedQueue(SIZE);
400 >        Thread t = new Thread(new CheckedRunnable() {
401 >            public void realRun() throws InterruptedException {
402 >                for (int i = 0; i < SIZE; ++i) {
403 >                    assertEquals(i, q.take());
404 >                }
405 >                try {
406 >                    q.take();
407 >                    shouldThrow();
408 >                } catch (InterruptedException success) {}
409 >            }});
410 >
411 >        t.start();
412 >        Thread.sleep(SHORT_DELAY_MS);
413 >        t.interrupt();
414 >        t.join();
415      }
416  
417  
# Line 476 | Line 421 | public class ArrayBlockingQueueTest exte
421      public void testPoll() {
422          ArrayBlockingQueue q = populatedQueue(SIZE);
423          for (int i = 0; i < SIZE; ++i) {
424 <            assertEquals(i, ((Integer)q.poll()).intValue());
424 >            assertEquals(i, q.poll());
425          }
426 <        assertNull(q.poll());
426 >        assertNull(q.poll());
427      }
428  
429      /**
430       * timed pool with zero timeout succeeds when non-empty, else times out
431       */
432 <    public void testTimedPoll0() {
433 <        try {
434 <            ArrayBlockingQueue q = populatedQueue(SIZE);
435 <            for (int i = 0; i < SIZE; ++i) {
436 <                assertEquals(i, ((Integer)q.poll(0, TimeUnit.MILLISECONDS)).intValue());
437 <            }
493 <            assertNull(q.poll(0, TimeUnit.MILLISECONDS));
494 <        } catch (InterruptedException e){
495 <            unexpectedException();
496 <        }  
432 >    public void testTimedPoll0() throws InterruptedException {
433 >        ArrayBlockingQueue q = populatedQueue(SIZE);
434 >        for (int i = 0; i < SIZE; ++i) {
435 >            assertEquals(i, q.poll(0, MILLISECONDS));
436 >        }
437 >        assertNull(q.poll(0, MILLISECONDS));
438      }
439  
440      /**
441       * timed pool with nonzero timeout succeeds when non-empty, else times out
442       */
443 <    public void testTimedPoll() {
444 <        try {
445 <            ArrayBlockingQueue q = populatedQueue(SIZE);
446 <            for (int i = 0; i < SIZE; ++i) {
447 <                assertEquals(i, ((Integer)q.poll(SHORT_DELAY_MS, TimeUnit.MILLISECONDS)).intValue());
448 <            }
508 <            assertNull(q.poll(SHORT_DELAY_MS, TimeUnit.MILLISECONDS));
509 <        } catch (InterruptedException e){
510 <            unexpectedException();
511 <        }  
443 >    public void testTimedPoll() throws InterruptedException {
444 >        ArrayBlockingQueue q = populatedQueue(SIZE);
445 >        for (int i = 0; i < SIZE; ++i) {
446 >            assertEquals(i, q.poll(SHORT_DELAY_MS, MILLISECONDS));
447 >        }
448 >        assertNull(q.poll(SHORT_DELAY_MS, MILLISECONDS));
449      }
450  
451      /**
452       * Interrupted timed poll throws InterruptedException instead of
453       * returning timeout status
454       */
455 <    public void testInterruptedTimedPoll() {
456 <        Thread t = new Thread(new Runnable() {
457 <                public void run() {
458 <                    try {
459 <                        ArrayBlockingQueue q = populatedQueue(SIZE);
460 <                        for (int i = 0; i < SIZE; ++i) {
461 <                            threadAssertEquals(i, ((Integer)q.poll(SHORT_DELAY_MS, TimeUnit.MILLISECONDS)).intValue());
462 <                        }
463 <                        threadAssertNull(q.poll(SHORT_DELAY_MS, TimeUnit.MILLISECONDS));
464 <                    } catch (InterruptedException success){
465 <                    }  
466 <                }});
467 <        try {
468 <            t.start();
469 <            Thread.sleep(SHORT_DELAY_MS);
470 <            t.interrupt();
471 <            t.join();
535 <        }
536 <        catch (InterruptedException ie) {
537 <            unexpectedException();
538 <        }
455 >    public void testInterruptedTimedPoll() throws InterruptedException {
456 >        Thread t = new Thread(new CheckedRunnable() {
457 >            public void realRun() throws InterruptedException {
458 >                ArrayBlockingQueue q = populatedQueue(SIZE);
459 >                for (int i = 0; i < SIZE; ++i) {
460 >                    assertEquals(i, q.poll(SHORT_DELAY_MS, MILLISECONDS));;
461 >                }
462 >                try {
463 >                    q.poll(SMALL_DELAY_MS, MILLISECONDS);
464 >                    shouldThrow();
465 >                } catch (InterruptedException success) {}
466 >            }});
467 >
468 >        t.start();
469 >        Thread.sleep(SHORT_DELAY_MS);
470 >        t.interrupt();
471 >        t.join();
472      }
473  
474      /**
475       *  timed poll before a delayed offer fails; after offer succeeds;
476       *  on interruption throws
477       */
478 <    public void testTimedPollWithOffer() {
478 >    public void testTimedPollWithOffer() throws InterruptedException {
479          final ArrayBlockingQueue q = new ArrayBlockingQueue(2);
480 <        Thread t = new Thread(new Runnable() {
481 <                public void run() {
482 <                    try {
483 <                        threadAssertNull(q.poll(SHORT_DELAY_MS, TimeUnit.MILLISECONDS));
484 <                        q.poll(LONG_DELAY_MS, TimeUnit.MILLISECONDS);
485 <                        q.poll(LONG_DELAY_MS, TimeUnit.MILLISECONDS);
486 <                        threadShouldThrow();
487 <                    } catch (InterruptedException success) { }                
488 <                }
489 <            });
490 <        try {
491 <            t.start();
492 <            Thread.sleep(SMALL_DELAY_MS);
493 <            assertTrue(q.offer(zero, SHORT_DELAY_MS, TimeUnit.MILLISECONDS));
494 <            t.interrupt();
495 <            t.join();
563 <        } catch (Exception e){
564 <            unexpectedException();
565 <        }
566 <    }  
480 >        Thread t = new Thread(new CheckedRunnable() {
481 >            public void realRun() throws InterruptedException {
482 >                try {
483 >                    assertNull(q.poll(SHORT_DELAY_MS, MILLISECONDS));
484 >                    assertSame(zero, q.poll(LONG_DELAY_MS, MILLISECONDS));
485 >                    q.poll(LONG_DELAY_MS, MILLISECONDS);
486 >                    shouldThrow();
487 >                } catch (InterruptedException success) {}
488 >            }});
489 >
490 >        t.start();
491 >        Thread.sleep(SMALL_DELAY_MS);
492 >        assertTrue(q.offer(zero, SHORT_DELAY_MS, MILLISECONDS));
493 >        t.interrupt();
494 >        t.join();
495 >    }
496  
497  
498      /**
# Line 572 | Line 501 | public class ArrayBlockingQueueTest exte
501      public void testPeek() {
502          ArrayBlockingQueue q = populatedQueue(SIZE);
503          for (int i = 0; i < SIZE; ++i) {
504 <            assertEquals(i, ((Integer)q.peek()).intValue());
505 <            q.poll();
504 >            assertEquals(i, q.peek());
505 >            assertEquals(i, q.poll());
506              assertTrue(q.peek() == null ||
507 <                       i != ((Integer)q.peek()).intValue());
507 >                       !q.peek().equals(i));
508          }
509 <        assertNull(q.peek());
509 >        assertNull(q.peek());
510      }
511  
512      /**
# Line 586 | Line 515 | public class ArrayBlockingQueueTest exte
515      public void testElement() {
516          ArrayBlockingQueue q = populatedQueue(SIZE);
517          for (int i = 0; i < SIZE; ++i) {
518 <            assertEquals(i, ((Integer)q.element()).intValue());
519 <            q.poll();
518 >            assertEquals(i, q.element());
519 >            assertEquals(i, q.poll());
520          }
521          try {
522              q.element();
523              shouldThrow();
524 <        }
596 <        catch (NoSuchElementException success) {}
524 >        } catch (NoSuchElementException success) {}
525      }
526  
527      /**
# Line 602 | Line 530 | public class ArrayBlockingQueueTest exte
530      public void testRemove() {
531          ArrayBlockingQueue q = populatedQueue(SIZE);
532          for (int i = 0; i < SIZE; ++i) {
533 <            assertEquals(i, ((Integer)q.remove()).intValue());
533 >            assertEquals(i, q.remove());
534          }
535          try {
536              q.remove();
537              shouldThrow();
538 <        } catch (NoSuchElementException success){
611 <        }  
538 >        } catch (NoSuchElementException success) {}
539      }
540  
541      /**
# Line 625 | Line 552 | public class ArrayBlockingQueueTest exte
552          }
553          assertTrue(q.isEmpty());
554      }
555 <        
555 >
556      /**
557       * contains(x) reports true when elements added but not yet removed
558       */
# Line 633 | Line 560 | public class ArrayBlockingQueueTest exte
560          ArrayBlockingQueue q = populatedQueue(SIZE);
561          for (int i = 0; i < SIZE; ++i) {
562              assertTrue(q.contains(new Integer(i)));
563 <            q.poll();
563 >            assertEquals(i, q.poll());
564              assertFalse(q.contains(new Integer(i)));
565          }
566      }
# Line 649 | Line 576 | public class ArrayBlockingQueueTest exte
576          assertEquals(SIZE, q.remainingCapacity());
577          q.add(one);
578          assertFalse(q.isEmpty());
579 +        assertTrue(q.contains(one));
580          q.clear();
581          assertTrue(q.isEmpty());
582      }
# Line 705 | Line 633 | public class ArrayBlockingQueueTest exte
633      /**
634       *  toArray contains all elements
635       */
636 <    public void testToArray() {
636 >    public void testToArray() throws InterruptedException {
637          ArrayBlockingQueue q = populatedQueue(SIZE);
638 <        Object[] o = q.toArray();
639 <        try {
640 <        for(int i = 0; i < o.length; i++)
713 <            assertEquals(o[i], q.take());
714 <        } catch (InterruptedException e){
715 <            unexpectedException();
716 <        }    
638 >        Object[] o = q.toArray();
639 >        for (int i = 0; i < o.length; i++)
640 >            assertEquals(o[i], q.take());
641      }
642  
643      /**
644       * toArray(a) contains all elements
645       */
646 <    public void testToArray2() {
646 >    public void testToArray2() throws InterruptedException {
647          ArrayBlockingQueue q = populatedQueue(SIZE);
648 <        Integer[] ints = new Integer[SIZE];
649 <        ints = (Integer[])q.toArray(ints);
650 <        try {
651 <            for(int i = 0; i < ints.length; i++)
728 <                assertEquals(ints[i], q.take());
729 <        } catch (InterruptedException e){
730 <            unexpectedException();
731 <        }    
648 >        Integer[] ints = new Integer[SIZE];
649 >        ints = (Integer[])q.toArray(ints);
650 >        for (int i = 0; i < ints.length; i++)
651 >            assertEquals(ints[i], q.take());
652      }
653  
654      /**
655       * toArray(null) throws NPE
656       */
657      public void testToArray_BadArg() {
658 <        try {
659 <            ArrayBlockingQueue q = populatedQueue(SIZE);
660 <            Object o[] = q.toArray(null);
661 <            shouldThrow();
662 <        } catch(NullPointerException success){}
658 >        ArrayBlockingQueue q = populatedQueue(SIZE);
659 >        try {
660 >            Object o[] = q.toArray(null);
661 >            shouldThrow();
662 >        } catch (NullPointerException success) {}
663      }
664  
665      /**
666 <     * toArray with incompatable array type throws CCE
666 >     * toArray with incompatible array type throws CCE
667       */
668      public void testToArray1_BadArg() {
669 <        try {
670 <            ArrayBlockingQueue q = populatedQueue(SIZE);
671 <            Object o[] = q.toArray(new String[10] );
672 <            shouldThrow();
673 <        } catch(ArrayStoreException  success){}
669 >        ArrayBlockingQueue q = populatedQueue(SIZE);
670 >        try {
671 >            Object o[] = q.toArray(new String[10]);
672 >            shouldThrow();
673 >        } catch (ArrayStoreException success) {}
674      }
675  
676 <    
676 >
677      /**
678       * iterator iterates through all elements
679       */
680 <    public void testIterator() {
680 >    public void testIterator() throws InterruptedException {
681          ArrayBlockingQueue q = populatedQueue(SIZE);
682 <        Iterator it = q.iterator();
683 <        try {
684 <            while(it.hasNext()){
685 <                assertEquals(it.next(), q.take());
766 <            }
767 <        } catch (InterruptedException e){
768 <            unexpectedException();
769 <        }    
682 >        Iterator it = q.iterator();
683 >        while (it.hasNext()) {
684 >            assertEquals(it.next(), q.take());
685 >        }
686      }
687  
688      /**
689       * iterator.remove removes current element
690       */
691 <    public void testIteratorRemove () {
691 >    public void testIteratorRemove() {
692          final ArrayBlockingQueue q = new ArrayBlockingQueue(3);
693          q.add(two);
694          q.add(one);
# Line 781 | Line 697 | public class ArrayBlockingQueueTest exte
697          Iterator it = q.iterator();
698          it.next();
699          it.remove();
700 <        
700 >
701          it = q.iterator();
702 <        assertEquals(it.next(), one);
703 <        assertEquals(it.next(), three);
702 >        assertSame(it.next(), one);
703 >        assertSame(it.next(), three);
704          assertFalse(it.hasNext());
705      }
706  
# Line 801 | Line 717 | public class ArrayBlockingQueueTest exte
717  
718          int k = 0;
719          for (Iterator it = q.iterator(); it.hasNext();) {
720 <            int i = ((Integer)(it.next())).intValue();
805 <            assertEquals(++k, i);
720 >            assertEquals(++k, it.next());
721          }
722          assertEquals(3, k);
723      }
# Line 810 | Line 725 | public class ArrayBlockingQueueTest exte
725      /**
726       * Modifications do not cause iterators to fail
727       */
728 <    public void testWeaklyConsistentIteration () {
728 >    public void testWeaklyConsistentIteration() {
729          final ArrayBlockingQueue q = new ArrayBlockingQueue(3);
730          q.add(one);
731          q.add(two);
732          q.add(three);
733 <        try {
734 <            for (Iterator it = q.iterator(); it.hasNext();) {
735 <                q.remove();
821 <                it.next();
822 <            }
823 <        }
824 <        catch (ConcurrentModificationException e) {
825 <            unexpectedException();
733 >        for (Iterator it = q.iterator(); it.hasNext();) {
734 >            q.remove();
735 >            it.next();
736          }
737          assertEquals(0, q.size());
738      }
# Line 837 | Line 747 | public class ArrayBlockingQueueTest exte
747          for (int i = 0; i < SIZE; ++i) {
748              assertTrue(s.indexOf(String.valueOf(i)) >= 0);
749          }
750 <    }        
750 >    }
751  
752  
753      /**
# Line 848 | Line 758 | public class ArrayBlockingQueueTest exte
758          q.add(one);
759          q.add(two);
760          ExecutorService executor = Executors.newFixedThreadPool(2);
761 <        executor.execute(new Runnable() {
762 <            public void run() {
763 <                threadAssertFalse(q.offer(three));
764 <                try {
765 <                    threadAssertTrue(q.offer(three, MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS));
766 <                    threadAssertEquals(0, q.remainingCapacity());
767 <                }
768 <                catch (InterruptedException e) {
769 <                    threadUnexpectedException();
770 <                }
771 <            }
772 <        });
761 >        executor.execute(new CheckedRunnable() {
762 >            public void realRun() throws InterruptedException {
763 >                assertFalse(q.offer(three));
764 >                assertTrue(q.offer(three, MEDIUM_DELAY_MS, MILLISECONDS));
765 >                assertEquals(0, q.remainingCapacity());
766 >            }});
767 >
768 >        executor.execute(new CheckedRunnable() {
769 >            public void realRun() throws InterruptedException {
770 >                Thread.sleep(SMALL_DELAY_MS);
771 >                assertSame(one, q.take());
772 >            }});
773  
864        executor.execute(new Runnable() {
865            public void run() {
866                try {
867                    Thread.sleep(SMALL_DELAY_MS);
868                    threadAssertEquals(one, q.take());
869                }
870                catch (InterruptedException e) {
871                    threadUnexpectedException();
872                }
873            }
874        });
875        
774          joinPool(executor);
877
775      }
776  
777      /**
# Line 883 | Line 780 | public class ArrayBlockingQueueTest exte
780      public void testPollInExecutor() {
781          final ArrayBlockingQueue q = new ArrayBlockingQueue(2);
782          ExecutorService executor = Executors.newFixedThreadPool(2);
783 <        executor.execute(new Runnable() {
784 <            public void run() {
785 <                threadAssertNull(q.poll());
786 <                try {
787 <                    threadAssertTrue(null != q.poll(MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS));
788 <                    threadAssertTrue(q.isEmpty());
789 <                }
790 <                catch (InterruptedException e) {
791 <                    threadUnexpectedException();
792 <                }
793 <            }
794 <        });
783 >        executor.execute(new CheckedRunnable() {
784 >            public void realRun() throws InterruptedException {
785 >                assertNull(q.poll());
786 >                assertSame(one, q.poll(MEDIUM_DELAY_MS, MILLISECONDS));
787 >                assertTrue(q.isEmpty());
788 >            }});
789 >
790 >        executor.execute(new CheckedRunnable() {
791 >            public void realRun() throws InterruptedException {
792 >                Thread.sleep(SMALL_DELAY_MS);
793 >                q.put(one);
794 >            }});
795  
899        executor.execute(new Runnable() {
900            public void run() {
901                try {
902                    Thread.sleep(SMALL_DELAY_MS);
903                    q.put(one);
904                }
905                catch (InterruptedException e) {
906                    threadUnexpectedException();
907                }
908            }
909        });
910        
796          joinPool(executor);
797      }
798  
799      /**
800       * A deserialized serialized queue has same elements in same order
801       */
802 <    public void testSerialization() {
802 >    public void testSerialization() throws Exception {
803          ArrayBlockingQueue q = populatedQueue(SIZE);
804  
805 <        try {
806 <            ByteArrayOutputStream bout = new ByteArrayOutputStream(10000);
807 <            ObjectOutputStream out = new ObjectOutputStream(new BufferedOutputStream(bout));
808 <            out.writeObject(q);
809 <            out.close();
810 <
811 <            ByteArrayInputStream bin = new ByteArrayInputStream(bout.toByteArray());
812 <            ObjectInputStream in = new ObjectInputStream(new BufferedInputStream(bin));
813 <            ArrayBlockingQueue r = (ArrayBlockingQueue)in.readObject();
814 <            assertEquals(q.size(), r.size());
815 <            while (!q.isEmpty())
931 <                assertEquals(q.remove(), r.remove());
932 <        } catch(Exception e){
933 <            unexpectedException();
934 <        }
805 >        ByteArrayOutputStream bout = new ByteArrayOutputStream(10000);
806 >        ObjectOutputStream out = new ObjectOutputStream(new BufferedOutputStream(bout));
807 >        out.writeObject(q);
808 >        out.close();
809 >
810 >        ByteArrayInputStream bin = new ByteArrayInputStream(bout.toByteArray());
811 >        ObjectInputStream in = new ObjectInputStream(new BufferedInputStream(bin));
812 >        ArrayBlockingQueue r = (ArrayBlockingQueue)in.readObject();
813 >        assertEquals(q.size(), r.size());
814 >        while (!q.isEmpty())
815 >            assertEquals(q.remove(), r.remove());
816      }
817  
818      /**
819       * drainTo(null) throws NPE
820 <     */
820 >     */
821      public void testDrainToNull() {
822          ArrayBlockingQueue q = populatedQueue(SIZE);
823          try {
824              q.drainTo(null);
825              shouldThrow();
826 <        } catch(NullPointerException success) {
946 <        }
826 >        } catch (NullPointerException success) {}
827      }
828  
829      /**
830       * drainTo(this) throws IAE
831 <     */
831 >     */
832      public void testDrainToSelf() {
833          ArrayBlockingQueue q = populatedQueue(SIZE);
834          try {
835              q.drainTo(q);
836              shouldThrow();
837 <        } catch(IllegalArgumentException success) {
958 <        }
837 >        } catch (IllegalArgumentException success) {}
838      }
839  
840      /**
841       * drainTo(c) empties queue into another collection c
842 <     */
842 >     */
843      public void testDrainTo() {
844          ArrayBlockingQueue q = populatedQueue(SIZE);
845          ArrayList l = new ArrayList();
846          q.drainTo(l);
847          assertEquals(q.size(), 0);
848          assertEquals(l.size(), SIZE);
849 <        for (int i = 0; i < SIZE; ++i)
849 >        for (int i = 0; i < SIZE; ++i)
850 >            assertEquals(l.get(i), new Integer(i));
851 >        q.add(zero);
852 >        q.add(one);
853 >        assertFalse(q.isEmpty());
854 >        assertTrue(q.contains(zero));
855 >        assertTrue(q.contains(one));
856 >        l.clear();
857 >        q.drainTo(l);
858 >        assertEquals(q.size(), 0);
859 >        assertEquals(l.size(), 2);
860 >        for (int i = 0; i < 2; ++i)
861              assertEquals(l.get(i), new Integer(i));
862      }
863  
864      /**
865       * drainTo empties full queue, unblocking a waiting put.
866 <     */
867 <    public void testDrainToWithActivePut() {
866 >     */
867 >    public void testDrainToWithActivePut() throws InterruptedException {
868          final ArrayBlockingQueue q = populatedQueue(SIZE);
869 <        Thread t = new Thread(new Runnable() {
870 <                public void run() {
871 <                    try {
872 <                        q.put(new Integer(SIZE+1));
873 <                    } catch (InterruptedException ie){
874 <                        threadUnexpectedException();
875 <                    }
876 <                }
877 <            });
878 <        try {
879 <            t.start();
880 <            ArrayList l = new ArrayList();
881 <            q.drainTo(l);
992 <            assertTrue(l.size() >= SIZE);
993 <            for (int i = 0; i < SIZE; ++i)
994 <                assertEquals(l.get(i), new Integer(i));
995 <            t.join();
996 <            assertTrue(q.size() + l.size() == SIZE+1);
997 <        } catch(Exception e){
998 <            unexpectedException();
999 <        }
869 >        Thread t = new Thread(new CheckedRunnable() {
870 >            public void realRun() throws InterruptedException {
871 >                q.put(new Integer(SIZE+1));
872 >            }});
873 >
874 >        t.start();
875 >        ArrayList l = new ArrayList();
876 >        q.drainTo(l);
877 >        assertTrue(l.size() >= SIZE);
878 >        for (int i = 0; i < SIZE; ++i)
879 >            assertEquals(l.get(i), new Integer(i));
880 >        t.join();
881 >        assertTrue(q.size() + l.size() >= SIZE);
882      }
883  
884      /**
885       * drainTo(null, n) throws NPE
886 <     */
886 >     */
887      public void testDrainToNullN() {
888          ArrayBlockingQueue q = populatedQueue(SIZE);
889          try {
890              q.drainTo(null, 0);
891              shouldThrow();
892 <        } catch(NullPointerException success) {
1011 <        }
892 >        } catch (NullPointerException success) {}
893      }
894  
895      /**
896       * drainTo(this, n) throws IAE
897 <     */
897 >     */
898      public void testDrainToSelfN() {
899          ArrayBlockingQueue q = populatedQueue(SIZE);
900          try {
901              q.drainTo(q, 0);
902              shouldThrow();
903 <        } catch(IllegalArgumentException success) {
1023 <        }
903 >        } catch (IllegalArgumentException success) {}
904      }
905  
906      /**
907       * drainTo(c, n) empties first max {n, size} elements of queue into c
908 <     */
908 >     */
909      public void testDrainToN() {
910 +        ArrayBlockingQueue q = new ArrayBlockingQueue(SIZE*2);
911          for (int i = 0; i < SIZE + 2; ++i) {
912 <            ArrayBlockingQueue q = populatedQueue(SIZE);
912 >            for (int j = 0; j < SIZE; j++)
913 >                assertTrue(q.offer(new Integer(j)));
914              ArrayList l = new ArrayList();
915              q.drainTo(l, i);
916              int k = (i < SIZE)? i : SIZE;
1035            assertEquals(q.size(), SIZE-k);
917              assertEquals(l.size(), k);
918 <            for (int j = 0; j < k; ++j)
918 >            assertEquals(q.size(), SIZE-k);
919 >            for (int j = 0; j < k; ++j)
920                  assertEquals(l.get(j), new Integer(j));
921 +            while (q.poll() != null) ;
922          }
923      }
924  
1042
925   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines