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

Comparing jsr166/src/test/tck/LinkedTransferQueueTest.java (file contents):
Revision 1.5 by jsr166, Sun Aug 2 08:17:31 2009 UTC vs.
Revision 1.10 by jsr166, Thu Aug 6 03:55:39 2009 UTC

# Line 17 | Line 17 | import java.util.ConcurrentModificationE
17   import java.util.Iterator;
18   import java.util.NoSuchElementException;
19   import java.util.concurrent.*;
20 + import static java.util.concurrent.TimeUnit.MILLISECONDS;
21   import junit.framework.Test;
22   import junit.framework.TestSuite;
23  
24 + @SuppressWarnings({"unchecked", "rawtypes"})
25   public class LinkedTransferQueueTest extends JSR166TestCase {
26  
27      public static void main(String[] args) {
# Line 31 | Line 33 | public class LinkedTransferQueueTest ext
33      }
34  
35      /**
36 <     * Constructor builds new queue with size being zero and empty being true
36 >     * Constructor builds new queue with size being zero and empty
37 >     * being true
38       */
39      public void testConstructor1() {
40          assertEquals(0, new LinkedTransferQueue().size());
# Line 39 | Line 42 | public class LinkedTransferQueueTest ext
42      }
43  
44      /**
45 <     * Initializing constructor with null collection throws NullPointerException
45 >     * Initializing constructor with null collection throws
46 >     * NullPointerException
47       */
48      public void testConstructor2() {
49          try {
# Line 50 | Line 54 | public class LinkedTransferQueueTest ext
54      }
55  
56      /**
57 <     * Initializing from Collection of null elements throws NullPointerException
57 >     * Initializing from Collection of null elements throws
58 >     * NullPointerException
59       */
60      public void testConstructor3() {
61          try {
62              Integer[] ints = new Integer[SIZE];
63 <            LinkedTransferQueue q = new LinkedTransferQueue(Arrays.asList(ints));
63 >            new LinkedTransferQueue(Arrays.asList(ints));
64              shouldThrow();
65          } catch (NullPointerException success) {
66          }
# Line 71 | Line 76 | public class LinkedTransferQueueTest ext
76              for (int i = 0; i < SIZE - 1; ++i) {
77                  ints[i] = i;
78              }
79 <            LinkedTransferQueue q = new LinkedTransferQueue(Arrays.asList(ints));
79 >            new LinkedTransferQueue(Arrays.asList(ints));
80              shouldThrow();
81          } catch (NullPointerException success) {
82          }
# Line 86 | Line 91 | public class LinkedTransferQueueTest ext
91              for (int i = 0; i < SIZE; ++i) {
92                  ints[i] = i;
93              }
94 <            LinkedTransferQueue q = new LinkedTransferQueue(Arrays.asList(ints));
94 >            LinkedTransferQueue q
95 >                = new LinkedTransferQueue(Arrays.asList(ints));
96              for (int i = 0; i < SIZE; ++i) {
97                  assertEquals(ints[i], q.poll());
98              }
# Line 173 | Line 179 | public class LinkedTransferQueueTest ext
179      }
180  
181      /**
182 <     * addAll of a collection with any null elements throws NullPointerException after
183 <     * possibly adding some elements
182 >     * addAll of a collection with any null elements throws
183 >     * NullPointerException after possibly adding some elements
184       */
185      public void testAddAll3() {
186          try {
# Line 244 | Line 250 | public class LinkedTransferQueueTest ext
250       */
251      public void testTakeFromEmpty() throws InterruptedException {
252          final LinkedTransferQueue q = new LinkedTransferQueue();
253 <        Thread t = new Thread(new Runnable() {
254 <            public void run() {
255 <                try {
250 <                    q.take();
251 <                    threadShouldThrow();
252 <                } catch (InterruptedException success) {
253 <                } catch (Throwable ex) {
254 <                    threadUnexpectedException(ex);
255 <                }
253 >        Thread t = newStartedThread(new CheckedInterruptedRunnable() {
254 >            void realRun() throws InterruptedException {
255 >                q.take();
256              }});
257        t.start();
257          Thread.sleep(SHORT_DELAY_MS);
258          t.interrupt();
259          t.join();
# Line 264 | Line 263 | public class LinkedTransferQueueTest ext
263       * Take removes existing elements until empty, then blocks interruptibly
264       */
265      public void testBlockingTake() throws InterruptedException {
266 <        Thread t = new Thread(new Runnable() {
267 <            public void run() {
268 <                try {
269 <                    LinkedTransferQueue<Integer> q = populatedQueue(SIZE);
270 <                    for (int i = 0; i < SIZE; ++i) {
272 <                        threadAssertEquals(i, (int) q.take());
273 <                    }
274 <                    q.take();
275 <                    threadShouldThrow();
276 <                } catch (InterruptedException success) {
277 <                } catch (Throwable ex) {
278 <                    threadUnexpectedException(ex);
266 >        Thread t = newStartedThread(new CheckedInterruptedRunnable() {
267 >            void realRun() throws InterruptedException {
268 >                LinkedTransferQueue<Integer> q = populatedQueue(SIZE);
269 >                for (int i = 0; i < SIZE; ++i) {
270 >                    threadAssertEquals(i, (int) q.take());
271                  }
272 +                q.take();
273              }});
281        t.start();
274          Thread.sleep(SHORT_DELAY_MS);
275          t.interrupt();
276          t.join();
# Line 301 | Line 293 | public class LinkedTransferQueueTest ext
293      public void testTimedPoll0() throws InterruptedException {
294          LinkedTransferQueue<Integer> q = populatedQueue(SIZE);
295          for (int i = 0; i < SIZE; ++i) {
296 <            assertEquals(i, (int) q.poll(0, TimeUnit.MILLISECONDS));
296 >            assertEquals(i, (int) q.poll(0, MILLISECONDS));
297          }
298 <        assertNull(q.poll(0, TimeUnit.MILLISECONDS));
298 >        assertNull(q.poll(0, MILLISECONDS));
299      }
300  
301      /**
# Line 312 | Line 304 | public class LinkedTransferQueueTest ext
304      public void testTimedPoll() throws InterruptedException {
305          LinkedTransferQueue<Integer> q = populatedQueue(SIZE);
306          for (int i = 0; i < SIZE; ++i) {
307 <            assertEquals(i, (int) q.poll(SHORT_DELAY_MS, TimeUnit.MILLISECONDS));
307 >            assertEquals(i, (int) q.poll(SHORT_DELAY_MS, MILLISECONDS));
308          }
309 <        assertNull(q.poll(SHORT_DELAY_MS, TimeUnit.MILLISECONDS));
309 >        assertNull(q.poll(SHORT_DELAY_MS, MILLISECONDS));
310      }
311  
312      /**
# Line 322 | Line 314 | public class LinkedTransferQueueTest ext
314       * returning timeout status
315       */
316      public void testInterruptedTimedPoll() throws InterruptedException {
317 <        Thread t = new Thread(new Runnable() {
318 <            public void run() {
319 <                try {
320 <                    LinkedTransferQueue<Integer> q = populatedQueue(SIZE);
321 <                    for (int i = 0; i < SIZE; ++i) {
322 <                        threadAssertEquals(i, (int) q.poll(SHORT_DELAY_MS, TimeUnit.MILLISECONDS));
331 <                    }
332 <                    threadAssertNull(q.poll(SHORT_DELAY_MS, TimeUnit.MILLISECONDS));
333 <                } catch (InterruptedException success) {
334 <                } catch (Throwable ex) {
335 <                    threadUnexpectedException(ex);
317 >        final LinkedTransferQueue<Integer> q = populatedQueue(SIZE);
318 >        Thread t = newStartedThread(new CheckedInterruptedRunnable() {
319 >            void realRun() throws InterruptedException {
320 >                for (int i = 0; i < SIZE; ++i) {
321 >                    threadAssertEquals(i, (int) q.poll(LONG_DELAY_MS,
322 >                                                       MILLISECONDS));
323                  }
324 +                q.poll(LONG_DELAY_MS, MILLISECONDS);
325              }});
326 <        t.start();
339 <        Thread.sleep(SHORT_DELAY_MS);
326 >        Thread.sleep(SMALL_DELAY_MS);
327          t.interrupt();
328          t.join();
329 +        assertEquals(q.size(), 0);
330 +        assertNull(q.poll());
331      }
332  
333      /**
# Line 347 | Line 336 | public class LinkedTransferQueueTest ext
336       */
337      public void testTimedPollWithOffer() throws InterruptedException {
338          final LinkedTransferQueue q = new LinkedTransferQueue();
339 <        Thread t = new Thread(new Runnable() {
340 <            public void run() {
341 <                try {
342 <                    threadAssertNull(q.poll(SHORT_DELAY_MS, TimeUnit.MILLISECONDS));
343 <                    q.poll(LONG_DELAY_MS, TimeUnit.MILLISECONDS);
355 <                    q.poll(LONG_DELAY_MS, TimeUnit.MILLISECONDS);
356 <                    threadShouldThrow();
357 <                } catch (InterruptedException success) {
358 <                } catch (Throwable ex) {
359 <                    threadUnexpectedException(ex);
360 <                }
339 >        Thread t = newStartedThread(new CheckedInterruptedRunnable() {
340 >            void realRun() throws InterruptedException {
341 >                threadAssertNull(q.poll(SHORT_DELAY_MS, MILLISECONDS));
342 >                q.poll(LONG_DELAY_MS, MILLISECONDS);
343 >                q.poll(LONG_DELAY_MS, MILLISECONDS);
344              }});
362        t.start();
345          Thread.sleep(SMALL_DELAY_MS);
346 <        assertTrue(q.offer(zero, SHORT_DELAY_MS, TimeUnit.MILLISECONDS));
346 >        assertTrue(q.offer(zero, SHORT_DELAY_MS, MILLISECONDS));
347          t.interrupt();
348          t.join();
349      }
# Line 482 | Line 464 | public class LinkedTransferQueueTest ext
464      }
465  
466      /**
467 <     * retainAll(c) retains only those elements of c and reports true if changed
467 >     * retainAll(c) retains only those elements of c and reports true
468 >     * if changed
469       */
470      public void testRetainAll() {
471          LinkedTransferQueue q = populatedQueue(SIZE);
# Line 501 | Line 484 | public class LinkedTransferQueueTest ext
484      }
485  
486      /**
487 <     * removeAll(c) removes only those elements of c and reports true if changed
487 >     * removeAll(c) removes only those elements of c and reports true
488 >     * if changed
489       */
490      public void testRemoveAll() {
491          for (int i = 1; i < SIZE; ++i) {
# Line 568 | Line 552 | public class LinkedTransferQueueTest ext
552      public void testIterator() throws InterruptedException {
553          LinkedTransferQueue q = populatedQueue(SIZE);
554          Iterator it = q.iterator();
555 +        int i = 0;
556          while (it.hasNext()) {
557 <            assertEquals(it.next(), q.take());
557 >            assertEquals(it.next(), i++);
558          }
559 +        assertEquals(i, SIZE);
560      }
561  
562      /**
# Line 596 | Line 582 | public class LinkedTransferQueueTest ext
582       * iterator ordering is FIFO
583       */
584      public void testIteratorOrdering() {
585 <        final LinkedTransferQueue<Integer> q = new LinkedTransferQueue<Integer>();
585 >        final LinkedTransferQueue<Integer> q
586 >            = new LinkedTransferQueue<Integer>();
587          assertEquals(Integer.MAX_VALUE, q.remainingCapacity());
588          q.add(one);
589          q.add(two);
# Line 643 | Line 630 | public class LinkedTransferQueueTest ext
630          q.add(one);
631          q.add(two);
632          ExecutorService executor = Executors.newFixedThreadPool(2);
633 <        executor.execute(new Runnable() {
634 <            public void run() {
635 <                try {
636 <                    threadAssertTrue(q.offer(three, MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS));
637 <                } catch (Throwable ex) {
651 <                    threadUnexpectedException(ex);
652 <                }
633 >
634 >        executor.execute(new CheckedRunnable() {
635 >            void realRun() {
636 >                threadAssertTrue(q.offer(three, MEDIUM_DELAY_MS,
637 >                                         MILLISECONDS));
638              }});
639  
640 <        executor.execute(new Runnable() {
641 <            public void run() {
642 <                try {
643 <                    Thread.sleep(SMALL_DELAY_MS);
659 <                    threadAssertEquals(one, q.take());
660 <                } catch (Throwable ex) {
661 <                    threadUnexpectedException(ex);
662 <                }
640 >        executor.execute(new CheckedRunnable() {
641 >            void realRun() throws InterruptedException {
642 >                Thread.sleep(SMALL_DELAY_MS);
643 >                threadAssertEquals(one, q.take());
644              }});
645  
646          joinPool(executor);
# Line 671 | Line 652 | public class LinkedTransferQueueTest ext
652      public void testPollInExecutor() {
653          final LinkedTransferQueue q = new LinkedTransferQueue();
654          ExecutorService executor = Executors.newFixedThreadPool(2);
655 <        executor.execute(new Runnable() {
656 <            public void run() {
657 <                try {
658 <                    threadAssertNull(q.poll());
659 <                    threadAssertTrue(null != q.poll(MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS));
660 <                    threadAssertTrue(q.isEmpty());
661 <                } catch (Throwable  ex) {
681 <                    threadUnexpectedException(ex);
682 <                }
655 >
656 >        executor.execute(new CheckedRunnable() {
657 >            void realRun() throws InterruptedException {
658 >                threadAssertNull(q.poll());
659 >                threadAssertTrue(null != q.poll(MEDIUM_DELAY_MS,
660 >                                                MILLISECONDS));
661 >                threadAssertTrue(q.isEmpty());
662              }});
663  
664 <        executor.execute(new Runnable() {
665 <            public void run() {
666 <                try {
667 <                    Thread.sleep(SMALL_DELAY_MS);
689 <                    q.put(one);
690 <                } catch (Throwable ex) {
691 <                    threadUnexpectedException(ex);
692 <                }
664 >        executor.execute(new CheckedRunnable() {
665 >            void realRun() throws InterruptedException {
666 >                Thread.sleep(SMALL_DELAY_MS);
667 >                q.put(one);
668              }});
669  
670          joinPool(executor);
# Line 702 | Line 677 | public class LinkedTransferQueueTest ext
677          LinkedTransferQueue q = populatedQueue(SIZE);
678  
679          ByteArrayOutputStream bout = new ByteArrayOutputStream(10000);
680 <        ObjectOutputStream out = new ObjectOutputStream(new BufferedOutputStream(bout));
680 >        ObjectOutputStream out
681 >            = new ObjectOutputStream(new BufferedOutputStream(bout));
682          out.writeObject(q);
683          out.close();
684  
685 <        ByteArrayInputStream bin = new ByteArrayInputStream(bout.toByteArray());
686 <        ObjectInputStream in = new ObjectInputStream(new BufferedInputStream(bin));
685 >        ByteArrayInputStream bin
686 >            = new ByteArrayInputStream(bout.toByteArray());
687 >        ObjectInputStream in
688 >            = new ObjectInputStream(new BufferedInputStream(bin));
689          LinkedTransferQueue r = (LinkedTransferQueue) in.readObject();
690  
691          assertEquals(q.size(), r.size());
# Line 771 | Line 749 | public class LinkedTransferQueueTest ext
749       */
750      public void testDrainToWithActivePut() throws InterruptedException {
751          final LinkedTransferQueue q = populatedQueue(SIZE);
752 <        Thread t = new Thread(new Runnable() {
753 <            public void run() {
754 <                try {
777 <                    q.put(SIZE + 1);
778 <                } catch (Throwable ex) {
779 <                    threadUnexpectedException(ex);
780 <                }
752 >        Thread t = newStartedThread(new CheckedRunnable() {
753 >            void realRun() {
754 >                q.put(SIZE + 1);
755              }});
782        t.start();
756          ArrayList l = new ArrayList();
757          q.drainTo(l);
758          assertTrue(l.size() >= SIZE);
# Line 837 | Line 810 | public class LinkedTransferQueueTest ext
810      }
811  
812      /**
813 <     * poll and take should decrement the waiting consumer count
813 >     * poll and take decrement the waiting consumer count
814       */
815      public void testWaitingConsumer() throws InterruptedException {
816          final LinkedTransferQueue q = new LinkedTransferQueue();
817          final ConsumerObserver waiting = new ConsumerObserver();
818 <        new Thread(new Runnable() {
819 <            public void run() {
820 <                try {
821 <                    threadAssertTrue(q.hasWaitingConsumer());
822 <                    waiting.setWaitingConsumer(q.getWaitingConsumerCount());
823 <                    threadAssertTrue(q.offer(new Object()));
824 <                } catch (Throwable ex) {
825 <                    threadUnexpectedException(ex);
826 <                }
827 <            }}).start();
828 <        assertTrue(q.poll(LONG_DELAY_MS, TimeUnit.MILLISECONDS) != null);
829 <        assertTrue(q.getWaitingConsumerCount() < waiting.getWaitingConsumers());
818 >
819 >        Thread t = newStartedThread(new CheckedRunnable() {
820 >            void realRun() throws InterruptedException {
821 >                Thread.sleep(SMALL_DELAY_MS);
822 >                threadAssertTrue(q.hasWaitingConsumer());
823 >                waiting.setWaitingConsumer(q.getWaitingConsumerCount());
824 >                threadAssertTrue(q.offer(new Object()));
825 >            }});
826 >
827 >        assertTrue(q.poll(LONG_DELAY_MS, MILLISECONDS) != null);
828 >        assertTrue(q.getWaitingConsumerCount()
829 >                   < waiting.getWaitingConsumers());
830 >        t.join();
831      }
832  
833      /**
# Line 869 | Line 843 | public class LinkedTransferQueueTest ext
843      }
844  
845      /**
846 <     * transfer attempts to insert into the queue then wait until that
847 <     * object is removed via take or poll.
846 >     * transfer waits until a poll occurs. The transfered element
847 >     * is returned by this associated poll.
848       */
849      public void testTransfer2() throws InterruptedException {
850 <        final LinkedTransferQueue<Integer> q = new LinkedTransferQueue<Integer>();
850 >        final LinkedTransferQueue<Integer> q
851 >            = new LinkedTransferQueue<Integer>();
852  
853 <        new Thread(new Runnable() {
854 <            public void run() {
855 <                try {
856 <                    q.transfer(SIZE);
857 <                    threadAssertTrue(q.isEmpty());
883 <                } catch (Throwable ex) {
884 <                    threadUnexpectedException(ex);
885 <                }
886 <            }}).start();
853 >        Thread t = newStartedThread(new CheckedRunnable() {
854 >            void realRun() throws InterruptedException {
855 >                q.transfer(SIZE);
856 >                threadAssertTrue(q.isEmpty());
857 >            }});
858  
859          Thread.sleep(SHORT_DELAY_MS);
860          assertEquals(1, q.size());
861          assertEquals(SIZE, (int) q.poll());
862          assertTrue(q.isEmpty());
863 +        t.join();
864      }
865  
866      /**
867 <     * transfer will attempt to transfer in fifo order and continue
896 <     * waiting if the element being transfered is not polled or taken
867 >     * transfer waits until a poll occurs, and then transfers in fifo order
868       */
869      public void testTransfer3() throws InterruptedException {
870 <        final LinkedTransferQueue<Integer> q = new LinkedTransferQueue<Integer>();
870 >        final LinkedTransferQueue<Integer> q
871 >            = new LinkedTransferQueue<Integer>();
872  
873 <        Thread first =
874 <            new Thread(new Runnable() {
875 <                public void run() {
876 <                    try {
877 <                        Integer i = SIZE + 1;
878 <                        q.transfer(i);
879 <                        threadAssertTrue(!q.contains(i));
908 <                        threadAssertEquals(1, q.size());
909 <                    } catch (Throwable ex) {
910 <                        threadUnexpectedException(ex);
911 <                    }
912 <                }});
913 <        first.start();
873 >        Thread first = newStartedThread(new CheckedRunnable() {
874 >            void realRun() throws InterruptedException {
875 >                Integer i = SIZE + 1;
876 >                q.transfer(i);
877 >                threadAssertTrue(!q.contains(i));
878 >                threadAssertEquals(1, q.size());
879 >            }});
880  
881 <        Thread interruptedThread =
882 <            new Thread(new Runnable() {
883 <                public void run() {
884 <                    try {
885 <                        while (q.size() == 0)
886 <                            Thread.yield();
921 <                        q.transfer(SIZE);
922 <                        threadShouldThrow();
923 <                    } catch (InterruptedException success) {
924 <                    } catch (Throwable ex) {
925 <                        threadUnexpectedException(ex);
926 <                    }
881 >        Thread interruptedThread = newStartedThread(
882 >            new CheckedInterruptedRunnable() {
883 >                void realRun() throws InterruptedException {
884 >                    while (q.size() == 0)
885 >                        Thread.yield();
886 >                    q.transfer(SIZE);
887                  }});
928        interruptedThread.start();
888  
889          while (q.size() < 2)
890              Thread.yield();
# Line 940 | Line 899 | public class LinkedTransferQueueTest ext
899      }
900  
901      /**
902 <     * transfer will wait as long as a poll or take occurs if one does occur
903 <     * the waiting is finished and the thread that tries to poll/take
945 <     * wins in retrieving the element
902 >     * transfer waits until a poll occurs, at which point the polling
903 >     * thread returns the element
904       */
905      public void testTransfer4() throws InterruptedException {
906          final LinkedTransferQueue q = new LinkedTransferQueue();
907 <        new Thread(new Runnable() {
908 <            public void run() {
909 <                try {
910 <                    q.transfer(four);
911 <                    threadAssertFalse(q.contains(four));
912 <                    threadAssertEquals(three, q.poll());
913 <                } catch (Throwable ex) {
914 <                    threadUnexpectedException(ex);
915 <                }
958 <            }}).start();
959 <        Thread.sleep(MEDIUM_DELAY_MS);
907 >
908 >        Thread t = newStartedThread(new CheckedRunnable() {
909 >            void realRun() throws InterruptedException {
910 >                q.transfer(four);
911 >                threadAssertFalse(q.contains(four));
912 >                threadAssertEquals(three, q.poll());
913 >            }});
914 >
915 >        Thread.sleep(SHORT_DELAY_MS);
916          assertTrue(q.offer(three));
917          assertEquals(four, q.poll());
918 +        t.join();
919 +    }
920 +
921 +    /**
922 +     * transfer waits until a take occurs. The transfered element
923 +     * is returned by this associated take.
924 +     */
925 +    public void testTransfer5() throws InterruptedException {
926 +        final LinkedTransferQueue<Integer> q
927 +            = new LinkedTransferQueue<Integer>();
928 +
929 +        Thread t = newStartedThread(new CheckedRunnable() {
930 +            void realRun() throws InterruptedException {
931 +                q.transfer(SIZE);
932 +                threadAssertTrue(q.isEmpty());
933 +            }});
934 +
935 +        Thread.sleep(SHORT_DELAY_MS);
936 +        assertEquals(SIZE, (int) q.take());
937 +        assertTrue(q.isEmpty());
938 +        t.join();
939      }
940  
941      /**
# Line 968 | Line 945 | public class LinkedTransferQueueTest ext
945          try {
946              final LinkedTransferQueue q = new LinkedTransferQueue();
947              q.tryTransfer(null);
948 <            this.shouldThrow();
948 >            shouldThrow();
949          } catch (NullPointerException ex) {
950          }
951      }
# Line 992 | Line 969 | public class LinkedTransferQueueTest ext
969      public void testTryTransfer3() throws InterruptedException {
970          final Object hotPotato = new Object();
971          final LinkedTransferQueue q = new LinkedTransferQueue();
972 <        new Thread(new Runnable() {
973 <            public void run() {
974 <                try {
975 <                    while (! q.hasWaitingConsumer())
976 <                        Thread.yield();
977 <                    threadAssertTrue(q.hasWaitingConsumer());
978 <                    threadAssertTrue(q.isEmpty());
979 <                    threadAssertTrue(q.size() == 0);
980 <                    threadAssertTrue(q.tryTransfer(hotPotato));
981 <                } catch (Throwable ex) {
982 <                    threadUnexpectedException(ex);
983 <                }
1007 <            }}).start();
1008 <        assertTrue(q.poll(LONG_DELAY_MS, TimeUnit.MILLISECONDS) == hotPotato);
972 >
973 >        Thread t = newStartedThread(new CheckedRunnable() {
974 >            void realRun() {
975 >                while (! q.hasWaitingConsumer())
976 >                    Thread.yield();
977 >                threadAssertTrue(q.hasWaitingConsumer());
978 >                threadAssertTrue(q.isEmpty());
979 >                threadAssertTrue(q.size() == 0);
980 >                threadAssertTrue(q.tryTransfer(hotPotato));
981 >            }});
982 >
983 >        assertTrue(q.poll(MEDIUM_DELAY_MS, MILLISECONDS) == hotPotato);
984          assertTrue(q.isEmpty());
985 +        t.join();
986      }
987  
988      /**
# Line 1016 | Line 992 | public class LinkedTransferQueueTest ext
992      public void testTryTransfer4() throws InterruptedException {
993          final Object hotPotato = new Object();
994          final LinkedTransferQueue q = new LinkedTransferQueue();
995 <        new Thread(new Runnable() {
996 <            public void run() {
997 <                try {
998 <                    while (! q.hasWaitingConsumer())
999 <                        Thread.yield();
1000 <                    threadAssertTrue(q.hasWaitingConsumer());
1001 <                    threadAssertTrue(q.isEmpty());
1002 <                    threadAssertTrue(q.size() == 0);
1003 <                    threadAssertTrue(q.tryTransfer(hotPotato));
1004 <                } catch (Throwable ex) {
1005 <                    threadUnexpectedException(ex);
1030 <                }
1031 <            }}).start();
995 >
996 >        Thread t = newStartedThread(new CheckedRunnable() {
997 >            void realRun() {
998 >                while (! q.hasWaitingConsumer())
999 >                    Thread.yield();
1000 >                threadAssertTrue(q.hasWaitingConsumer());
1001 >                threadAssertTrue(q.isEmpty());
1002 >                threadAssertTrue(q.size() == 0);
1003 >                threadAssertTrue(q.tryTransfer(hotPotato));
1004 >            }});
1005 >
1006          assertTrue(q.take() == hotPotato);
1007          assertTrue(q.isEmpty());
1008 +        t.join();
1009      }
1010  
1011      /**
1012 <     * tryTransfer waits the amount given if interrupted, show an
1013 <     * interrupted exception
1012 >     * tryTransfer waits the amount given if interrupted, and
1013 >     * throws interrupted exception
1014       */
1015      public void testTryTransfer5() throws InterruptedException {
1016          final LinkedTransferQueue q = new LinkedTransferQueue();
1017 <        Thread toInterrupt = new Thread(new Runnable() {
1018 <            public void run() {
1019 <                try {
1020 <                    q.tryTransfer(new Object(), LONG_DELAY_MS, TimeUnit.MILLISECONDS);
1046 <                    threadShouldThrow();
1047 <                } catch (InterruptedException success) {
1048 <                } catch (Throwable ex) {
1049 <                    threadUnexpectedException(ex);
1050 <                }
1017 >
1018 >        Thread toInterrupt = newStartedThread(new CheckedInterruptedRunnable() {
1019 >            void realRun() throws InterruptedException {
1020 >                q.tryTransfer(new Object(), LONG_DELAY_MS, MILLISECONDS);
1021              }});
1022 <        toInterrupt.start();
1022 >
1023          Thread.sleep(SMALL_DELAY_MS);
1024          toInterrupt.interrupt();
1025 +        toInterrupt.join();
1026      }
1027  
1028      /**
# Line 1059 | Line 1030 | public class LinkedTransferQueueTest ext
1030       */
1031      public void testTryTransfer6() throws InterruptedException {
1032          final LinkedTransferQueue q = new LinkedTransferQueue();
1033 <        new Thread(new Runnable() {
1034 <            public void run() {
1035 <                try {
1036 <                    threadAssertFalse(q.tryTransfer(new Object(), SHORT_DELAY_MS, TimeUnit.MILLISECONDS));
1037 <                } catch (Throwable ex) {
1038 <                    threadUnexpectedException(ex);
1039 <                }
1040 <            }}).start();
1041 <        Thread.sleep(LONG_DELAY_MS);
1033 >
1034 >        Thread t = newStartedThread(new CheckedRunnable() {
1035 >            void realRun() throws InterruptedException {
1036 >                threadAssertFalse
1037 >                    (q.tryTransfer(new Object(),
1038 >                                   SHORT_DELAY_MS, MILLISECONDS));
1039 >            }});
1040 >
1041 >        Thread.sleep(SMALL_DELAY_MS);
1042          assertTrue(q.isEmpty());
1043 +        t.join();
1044      }
1045  
1046      /**
# Line 1078 | Line 1050 | public class LinkedTransferQueueTest ext
1050      public void testTryTransfer7() throws InterruptedException {
1051          final LinkedTransferQueue q = new LinkedTransferQueue();
1052          assertTrue(q.offer(four));
1053 <        new Thread(new Runnable() {
1054 <            public void run() {
1055 <                try {
1056 <                    threadAssertTrue(q.tryTransfer(five, LONG_DELAY_MS, TimeUnit.MILLISECONDS));
1057 <                    threadAssertTrue(q.isEmpty());
1058 <                } catch (Throwable ex) {
1059 <                    threadUnexpectedException(ex);
1060 <                }
1089 <            }}).start();
1053 >
1054 >        Thread t = newStartedThread(new CheckedRunnable() {
1055 >            void realRun() throws InterruptedException {
1056 >                threadAssertTrue(q.tryTransfer(five,
1057 >                                               MEDIUM_DELAY_MS, MILLISECONDS));
1058 >                threadAssertTrue(q.isEmpty());
1059 >            }});
1060 >
1061          Thread.sleep(SHORT_DELAY_MS);
1062          assertEquals(2, q.size());
1063          assertEquals(four, q.poll());
1064          assertEquals(five, q.poll());
1065          assertTrue(q.isEmpty());
1066 +        t.join();
1067      }
1068  
1069      /**
# Line 1102 | Line 1074 | public class LinkedTransferQueueTest ext
1074          final LinkedTransferQueue q = new LinkedTransferQueue();
1075          assertTrue(q.offer(four));
1076          assertEquals(1, q.size());
1077 <        assertFalse(q.tryTransfer(five, SHORT_DELAY_MS, TimeUnit.MILLISECONDS));
1077 >        assertFalse(q.tryTransfer(five, SHORT_DELAY_MS, MILLISECONDS));
1078          assertEquals(1, q.size());
1079          assertEquals(four, q.poll());
1080          threadAssertTrue(q.isEmpty());

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines