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

Comparing jsr166/src/test/tck/DelayQueueTest.java (file contents):
Revision 1.10 by dl, Tue Jun 1 12:54:09 2004 UTC vs.
Revision 1.19 by jsr166, Sat Nov 21 02:33:20 2009 UTC

# Line 2 | Line 2
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.
5 > * Other contributors include Andrew Wright, Jeffrey Hayes,
6 > * Pat Fisher, Mike Judd.
7   */
8  
9   import junit.framework.*;
10   import java.util.*;
11 + import static java.util.concurrent.TimeUnit.MILLISECONDS;
12   import java.util.concurrent.*;
13  
14   public class DelayQueueTest extends JSR166TestCase {
15      public static void main(String[] args) {
16 <        junit.textui.TestRunner.run (suite());  
16 >        junit.textui.TestRunner.run (suite());
17      }
18  
19      public static Test suite() {
20 <        return new TestSuite(DelayQueueTest.class);
20 >        return new TestSuite(DelayQueueTest.class);
21      }
22  
23      private static final int NOCAP = Integer.MAX_VALUE;
# Line 25 | Line 26 | public class DelayQueueTest extends JSR1
26       * A delayed implementation for testing.
27       * Most  tests use Pseudodelays, where delays are all elapsed
28       * (so, no blocking solely for delays) but are still ordered
29 <     */
30 <    static class PDelay implements Delayed {
29 >     */
30 >    static class PDelay implements Delayed {
31          int pseudodelay;
32          PDelay(int i) { pseudodelay = Integer.MIN_VALUE + i; }
33          public int compareTo(PDelay y) {
# Line 69 | Line 70 | public class DelayQueueTest extends JSR1
70      /**
71       * Delayed implementation that actually delays
72       */
73 <    static class NanoDelay implements Delayed {
73 >    static class NanoDelay implements Delayed {
74          long trigger;
75 <        NanoDelay(long i) {
75 >        NanoDelay(long i) {
76              trigger = System.nanoTime() + i;
77          }
78          public int compareTo(NanoDelay y) {
# Line 119 | Line 120 | public class DelayQueueTest extends JSR1
120      private DelayQueue populatedQueue(int n) {
121          DelayQueue q = new DelayQueue();
122          assertTrue(q.isEmpty());
123 <        for(int i = n-1; i >= 0; i-=2)
124 <            assertTrue(q.offer(new PDelay(i)));
125 <        for(int i = (n & 1); i < n; i+=2)
126 <            assertTrue(q.offer(new PDelay(i)));
123 >        for (int i = n-1; i >= 0; i-=2)
124 >            assertTrue(q.offer(new PDelay(i)));
125 >        for (int i = (n & 1); i < n; i+=2)
126 >            assertTrue(q.offer(new PDelay(i)));
127          assertFalse(q.isEmpty());
128          assertEquals(NOCAP, q.remainingCapacity());
129 <        assertEquals(n, q.size());
129 >        assertEquals(n, q.size());
130          return q;
131      }
132 <
132 >
133      /**
134       * A new queue has unbounded capacity
135       */
# Line 225 | Line 226 | public class DelayQueueTest extends JSR1
226       * offer(null) throws NPE
227       */
228      public void testOfferNull() {
229 <        try {
229 >        try {
230              DelayQueue q = new DelayQueue();
231              q.offer(null);
232              shouldThrow();
233 <        } catch (NullPointerException success) { }  
233 >        } catch (NullPointerException success) { }
234      }
235  
236      /**
237       * add(null) throws NPE
238       */
239      public void testAddNull() {
240 <        try {
240 >        try {
241              DelayQueue q = new DelayQueue();
242              q.add(null);
243              shouldThrow();
244 <        } catch (NullPointerException success) { }  
244 >        } catch (NullPointerException success) { }
245      }
246  
247      /**
# Line 338 | Line 339 | public class DelayQueueTest extends JSR1
339       * put(null) throws NPE
340       */
341       public void testPutNull() {
342 <        try {
342 >        try {
343              DelayQueue q = new DelayQueue();
344              q.put(null);
345              shouldThrow();
346 <        }
347 <        catch (NullPointerException success){
348 <        }  
346 >        }
347 >        catch (NullPointerException success) {
348 >        }
349       }
350  
351      /**
# Line 392 | Line 393 | public class DelayQueueTest extends JSR1
393              q.take();
394              t.interrupt();
395              t.join();
396 <        } catch (Exception e){
396 >        } catch (Exception e) {
397              unexpectedException();
398          }
399      }
# Line 407 | Line 408 | public class DelayQueueTest extends JSR1
408                      try {
409                          q.put(new PDelay(0));
410                          q.put(new PDelay(0));
411 <                        threadAssertTrue(q.offer(new PDelay(0), SHORT_DELAY_MS, TimeUnit.MILLISECONDS));
412 <                        threadAssertTrue(q.offer(new PDelay(0), LONG_DELAY_MS, TimeUnit.MILLISECONDS));
411 >                        threadAssertTrue(q.offer(new PDelay(0), SHORT_DELAY_MS, MILLISECONDS));
412 >                        threadAssertTrue(q.offer(new PDelay(0), LONG_DELAY_MS, MILLISECONDS));
413                      } finally { }
414                  }
415              });
416 <        
416 >
417          try {
418              t.start();
419              Thread.sleep(SMALL_DELAY_MS);
420              t.interrupt();
421              t.join();
422 <        } catch (Exception e){
422 >        } catch (Exception e) {
423              unexpectedException();
424          }
425      }
# Line 427 | Line 428 | public class DelayQueueTest extends JSR1
428       * take retrieves elements in priority order
429       */
430      public void testTake() {
431 <        try {
431 >        try {
432              DelayQueue q = populatedQueue(SIZE);
433              for (int i = 0; i < SIZE; ++i) {
434                  assertEquals(new PDelay(i), ((PDelay)q.take()));
435              }
436 <        } catch (InterruptedException e){
437 <            unexpectedException();
438 <        }  
436 >        } catch (InterruptedException e) {
437 >            unexpectedException();
438 >        }
439      }
440  
441      /**
# Line 446 | Line 447 | public class DelayQueueTest extends JSR1
447                  public void run() {
448                      try {
449                          q.take();
450 <                        threadShouldThrow();
451 <                    } catch (InterruptedException success){ }                
450 >                        threadShouldThrow();
451 >                    } catch (InterruptedException success) { }
452                  }
453              });
454          try {
# Line 455 | Line 456 | public class DelayQueueTest extends JSR1
456              Thread.sleep(SHORT_DELAY_MS);
457              t.interrupt();
458              t.join();
459 <        } catch (Exception e){
459 >        } catch (Exception e) {
460              unexpectedException();
461          }
462      }
# Line 473 | Line 474 | public class DelayQueueTest extends JSR1
474                          }
475                          q.take();
476                          threadShouldThrow();
477 <                    } catch (InterruptedException success){
478 <                    }  
477 >                    } catch (InterruptedException success) {
478 >                    }
479                  }});
480          t.start();
481 <        try {
482 <           Thread.sleep(SHORT_DELAY_MS);
481 >        try {
482 >           Thread.sleep(SHORT_DELAY_MS);
483             t.interrupt();
484             t.join();
485          }
486          catch (InterruptedException ie) {
487 <            unexpectedException();
487 >            unexpectedException();
488          }
489      }
490  
# Line 496 | Line 497 | public class DelayQueueTest extends JSR1
497          for (int i = 0; i < SIZE; ++i) {
498              assertEquals(new PDelay(i), ((PDelay)q.poll()));
499          }
500 <        assertNull(q.poll());
500 >        assertNull(q.poll());
501      }
502  
503      /**
# Line 506 | Line 507 | public class DelayQueueTest extends JSR1
507          try {
508              DelayQueue q = populatedQueue(SIZE);
509              for (int i = 0; i < SIZE; ++i) {
510 <                assertEquals(new PDelay(i), ((PDelay)q.poll(0, TimeUnit.MILLISECONDS)));
510 >                assertEquals(new PDelay(i), ((PDelay)q.poll(0, MILLISECONDS)));
511              }
512 <            assertNull(q.poll(0, TimeUnit.MILLISECONDS));
513 <        } catch (InterruptedException e){
514 <            unexpectedException();
515 <        }  
512 >            assertNull(q.poll(0, MILLISECONDS));
513 >        } catch (InterruptedException e) {
514 >            unexpectedException();
515 >        }
516      }
517  
518      /**
# Line 521 | Line 522 | public class DelayQueueTest extends JSR1
522          try {
523              DelayQueue q = populatedQueue(SIZE);
524              for (int i = 0; i < SIZE; ++i) {
525 <                assertEquals(new PDelay(i), ((PDelay)q.poll(SHORT_DELAY_MS, TimeUnit.MILLISECONDS)));
525 >                assertEquals(new PDelay(i), ((PDelay)q.poll(SHORT_DELAY_MS, MILLISECONDS)));
526              }
527 <            assertNull(q.poll(SHORT_DELAY_MS, TimeUnit.MILLISECONDS));
528 <        } catch (InterruptedException e){
529 <            unexpectedException();
530 <        }  
527 >            assertNull(q.poll(SHORT_DELAY_MS, MILLISECONDS));
528 >        } catch (InterruptedException e) {
529 >            unexpectedException();
530 >        }
531      }
532  
533      /**
# Line 539 | Line 540 | public class DelayQueueTest extends JSR1
540                      try {
541                          DelayQueue q = populatedQueue(SIZE);
542                          for (int i = 0; i < SIZE; ++i) {
543 <                            threadAssertEquals(new PDelay(i), ((PDelay)q.poll(SHORT_DELAY_MS, TimeUnit.MILLISECONDS)));
543 >                            threadAssertEquals(new PDelay(i), ((PDelay)q.poll(SHORT_DELAY_MS, MILLISECONDS)));
544                          }
545 <                        threadAssertNull(q.poll(SHORT_DELAY_MS, TimeUnit.MILLISECONDS));
546 <                    } catch (InterruptedException success){
547 <                    }  
545 >                        threadAssertNull(q.poll(SHORT_DELAY_MS, MILLISECONDS));
546 >                    } catch (InterruptedException success) {
547 >                    }
548                  }});
549          t.start();
550 <        try {
551 <           Thread.sleep(SHORT_DELAY_MS);
550 >        try {
551 >           Thread.sleep(SHORT_DELAY_MS);
552             t.interrupt();
553             t.join();
554          }
555          catch (InterruptedException ie) {
556 <            unexpectedException();
556 >            unexpectedException();
557          }
558      }
559  
# Line 565 | Line 566 | public class DelayQueueTest extends JSR1
566          Thread t = new Thread(new Runnable() {
567                  public void run() {
568                      try {
569 <                        threadAssertNull(q.poll(SHORT_DELAY_MS, TimeUnit.MILLISECONDS));
570 <                        q.poll(LONG_DELAY_MS, TimeUnit.MILLISECONDS);
571 <                        q.poll(LONG_DELAY_MS, TimeUnit.MILLISECONDS);
572 <                        threadFail("Should block");
573 <                    } catch (InterruptedException success) { }                
569 >                        threadAssertNull(q.poll(SHORT_DELAY_MS, MILLISECONDS));
570 >                        q.poll(LONG_DELAY_MS, MILLISECONDS);
571 >                        q.poll(LONG_DELAY_MS, MILLISECONDS);
572 >                        threadFail("Should block");
573 >                    } catch (InterruptedException success) { }
574                  }
575              });
576          try {
577              t.start();
578              Thread.sleep(SMALL_DELAY_MS);
579 <            assertTrue(q.offer(new PDelay(0), SHORT_DELAY_MS, TimeUnit.MILLISECONDS));
579 >            assertTrue(q.offer(new PDelay(0), SHORT_DELAY_MS, MILLISECONDS));
580              t.interrupt();
581              t.join();
582 <        } catch (Exception e){
582 >        } catch (Exception e) {
583              unexpectedException();
584          }
585 <    }  
585 >    }
586  
587  
588      /**
# Line 592 | Line 593 | public class DelayQueueTest extends JSR1
593          for (int i = 0; i < SIZE; ++i) {
594              assertEquals(new PDelay(i), ((PDelay)q.peek()));
595              q.poll();
596 <            assertTrue(q.peek() == null ||
597 <                       i != ((PDelay)q.peek()).intValue());
596 >            if (q.isEmpty())
597 >                assertNull(q.peek());
598 >            else
599 >                assertTrue(i != ((PDelay)q.peek()).intValue());
600          }
601 <        assertNull(q.peek());
601 >        assertNull(q.peek());
602      }
603  
604      /**
# Line 625 | Line 628 | public class DelayQueueTest extends JSR1
628          try {
629              q.remove();
630              shouldThrow();
631 <        } catch (NoSuchElementException success){
632 <        }  
631 >        } catch (NoSuchElementException success) {
632 >        }
633      }
634  
635      /**
# Line 643 | Line 646 | public class DelayQueueTest extends JSR1
646          }
647          assertTrue(q.isEmpty());
648      }
649 <        
649 >
650      /**
651       * contains(x) reports true when elements added but not yet removed
652       */
# Line 665 | Line 668 | public class DelayQueueTest extends JSR1
668          assertTrue(q.isEmpty());
669          assertEquals(0, q.size());
670          assertEquals(NOCAP, q.remainingCapacity());
671 <        q.add(new PDelay(1));
671 >        PDelay x = new PDelay(1);
672 >        q.add(x);
673          assertFalse(q.isEmpty());
674 +        assertTrue(q.contains(x));
675          q.clear();
676          assertTrue(q.isEmpty());
677      }
# Line 725 | Line 730 | public class DelayQueueTest extends JSR1
730       */
731      public void testToArray() {
732          DelayQueue q = populatedQueue(SIZE);
733 <        Object[] o = q.toArray();
733 >        Object[] o = q.toArray();
734          Arrays.sort(o);
735 <        try {
736 <        for(int i = 0; i < o.length; i++)
737 <            assertEquals(o[i], q.take());
738 <        } catch (InterruptedException e){
739 <            unexpectedException();
740 <        }    
735 >        try {
736 >        for (int i = 0; i < o.length; i++)
737 >            assertEquals(o[i], q.take());
738 >        } catch (InterruptedException e) {
739 >            unexpectedException();
740 >        }
741      }
742  
743      /**
# Line 740 | Line 745 | public class DelayQueueTest extends JSR1
745       */
746      public void testToArray2() {
747          DelayQueue q = populatedQueue(SIZE);
748 <        PDelay[] ints = new PDelay[SIZE];
749 <        ints = (PDelay[])q.toArray(ints);
748 >        PDelay[] ints = new PDelay[SIZE];
749 >        ints = (PDelay[])q.toArray(ints);
750          Arrays.sort(ints);
751 <        try {
752 <            for(int i = 0; i < ints.length; i++)
753 <                assertEquals(ints[i], q.take());
754 <        } catch (InterruptedException e){
755 <            unexpectedException();
756 <        }    
751 >        try {
752 >            for (int i = 0; i < ints.length; i++)
753 >                assertEquals(ints[i], q.take());
754 >        } catch (InterruptedException e) {
755 >            unexpectedException();
756 >        }
757      }
758  
759  
# Line 756 | Line 761 | public class DelayQueueTest extends JSR1
761       * toArray(null) throws NPE
762       */
763      public void testToArray_BadArg() {
764 <        try {
764 >        try {
765              DelayQueue q = populatedQueue(SIZE);
766 <            Object o[] = q.toArray(null);
767 <            shouldThrow();
768 <        } catch(NullPointerException success){}
766 >            Object o[] = q.toArray(null);
767 >            shouldThrow();
768 >        } catch (NullPointerException success) {}
769      }
770  
771      /**
772       * toArray with incompatible array type throws CCE
773       */
774      public void testToArray1_BadArg() {
775 <        try {
775 >        try {
776              DelayQueue q = populatedQueue(SIZE);
777 <            Object o[] = q.toArray(new String[10] );
778 <            shouldThrow();
779 <        } catch(ArrayStoreException  success){}
777 >            Object o[] = q.toArray(new String[10] );
778 >            shouldThrow();
779 >        } catch (ArrayStoreException  success) {}
780      }
781 <    
781 >
782      /**
783       * iterator iterates through all elements
784       */
785      public void testIterator() {
786          DelayQueue q = populatedQueue(SIZE);
787          int i = 0;
788 <        Iterator it = q.iterator();
789 <        while(it.hasNext()) {
788 >        Iterator it = q.iterator();
789 >        while (it.hasNext()) {
790              assertTrue(q.contains(it.next()));
791              ++i;
792          }
# Line 815 | Line 820 | public class DelayQueueTest extends JSR1
820          for (int i = 0; i < SIZE; ++i) {
821              assertTrue(s.indexOf(String.valueOf(Integer.MIN_VALUE+i)) >= 0);
822          }
823 <    }        
823 >    }
824  
825      /**
826       * offer transfers elements across Executor tasks
# Line 827 | Line 832 | public class DelayQueueTest extends JSR1
832              public void run() {
833                  threadAssertNull(q.poll());
834                  try {
835 <                    threadAssertTrue(null != q.poll(MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS));
835 >                    threadAssertTrue(null != q.poll(MEDIUM_DELAY_MS, MILLISECONDS));
836                      threadAssertTrue(q.isEmpty());
837                  }
838                  catch (InterruptedException e) {
# Line 871 | Line 876 | public class DelayQueueTest extends JSR1
876                  NanoDelay e = (NanoDelay)(q.take());
877                  long tt = e.getTriggerTime();
878                  assertTrue(tt <= System.nanoTime());
879 <                if (i != 0)
879 >                if (i != 0)
880                      assertTrue(tt >= last);
881                  last = tt;
882              }
883          }
884 <        catch(InterruptedException ie) {
884 >        catch (InterruptedException ie) {
885              unexpectedException();
886          }
887      }
888  
889 +    /**
890 +     * peek of a non-empty queue returns non-null even if not expired
891 +     */
892 +    public void testPeekDelayed() {
893 +        DelayQueue q = new DelayQueue();
894 +        q.add(new NanoDelay(Long.MAX_VALUE));
895 +        assert(q.peek() != null);
896 +    }
897 +
898 +
899 +    /**
900 +     * poll of a non-empty queue returns null if no expired elements.
901 +     */
902 +    public void testPollDelayed() {
903 +        DelayQueue q = new DelayQueue();
904 +        q.add(new NanoDelay(Long.MAX_VALUE));
905 +        assertNull(q.poll());
906 +    }
907 +
908 +    /**
909 +     * timed poll of a non-empty queue returns null if no expired elements.
910 +     */
911 +    public void testTimedPollDelayed() {
912 +        DelayQueue q = new DelayQueue();
913 +        q.add(new NanoDelay(LONG_DELAY_MS * 1000000L));
914 +        try {
915 +            assertNull(q.poll(SHORT_DELAY_MS, MILLISECONDS));
916 +        } catch (Exception ex) {
917 +            unexpectedException();
918 +        }
919 +    }
920  
921      /**
922       * drainTo(null) throws NPE
923 <     */
923 >     */
924      public void testDrainToNull() {
925          DelayQueue q = populatedQueue(SIZE);
926          try {
927              q.drainTo(null);
928              shouldThrow();
929 <        } catch(NullPointerException success) {
929 >        } catch (NullPointerException success) {
930          }
931      }
932  
933      /**
934       * drainTo(this) throws IAE
935 <     */
935 >     */
936      public void testDrainToSelf() {
937          DelayQueue q = populatedQueue(SIZE);
938          try {
939              q.drainTo(q);
940              shouldThrow();
941 <        } catch(IllegalArgumentException success) {
941 >        } catch (IllegalArgumentException success) {
942          }
943      }
944  
945      /**
946       * drainTo(c) empties queue into another collection c
947 <     */
947 >     */
948      public void testDrainTo() {
949 <        DelayQueue q = populatedQueue(SIZE);
949 >        DelayQueue q = new DelayQueue();
950 >        PDelay[] elems = new PDelay[SIZE];
951 >        for (int i = 0; i < SIZE; ++i) {
952 >            elems[i] = new PDelay(i);
953 >            q.add(elems[i]);
954 >        }
955          ArrayList l = new ArrayList();
956          q.drainTo(l);
957          assertEquals(q.size(), 0);
958 <        assertEquals(l.size(), SIZE);
958 >        for (int i = 0; i < SIZE; ++i)
959 >            assertEquals(l.get(i), elems[i]);
960 >        q.add(elems[0]);
961 >        q.add(elems[1]);
962 >        assertFalse(q.isEmpty());
963 >        assertTrue(q.contains(elems[0]));
964 >        assertTrue(q.contains(elems[1]));
965 >        l.clear();
966 >        q.drainTo(l);
967 >        assertEquals(q.size(), 0);
968 >        assertEquals(l.size(), 2);
969 >        for (int i = 0; i < 2; ++i)
970 >            assertEquals(l.get(i), elems[i]);
971      }
972  
973      /**
974       * drainTo empties queue
975 <     */
975 >     */
976      public void testDrainToWithActivePut() {
977          final DelayQueue q = populatedQueue(SIZE);
978          Thread t = new Thread(new Runnable() {
# Line 934 | Line 987 | public class DelayQueueTest extends JSR1
987              assertTrue(l.size() >= SIZE);
988              t.join();
989              assertTrue(q.size() + l.size() >= SIZE);
990 <        } catch(Exception e){
990 >        } catch (Exception e) {
991              unexpectedException();
992          }
993      }
994  
995      /**
996       * drainTo(null, n) throws NPE
997 <     */
997 >     */
998      public void testDrainToNullN() {
999          DelayQueue q = populatedQueue(SIZE);
1000          try {
1001              q.drainTo(null, 0);
1002              shouldThrow();
1003 <        } catch(NullPointerException success) {
1003 >        } catch (NullPointerException success) {
1004          }
1005      }
1006  
1007      /**
1008       * drainTo(this, n) throws IAE
1009 <     */
1009 >     */
1010      public void testDrainToSelfN() {
1011          DelayQueue q = populatedQueue(SIZE);
1012          try {
1013              q.drainTo(q, 0);
1014              shouldThrow();
1015 <        } catch(IllegalArgumentException success) {
1015 >        } catch (IllegalArgumentException success) {
1016          }
1017      }
1018  
1019      /**
1020       * drainTo(c, n) empties first max {n, size} elements of queue into c
1021 <     */
1021 >     */
1022      public void testDrainToN() {
1023          for (int i = 0; i < SIZE + 2; ++i) {
1024              DelayQueue q = populatedQueue(SIZE);

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines