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

Comparing jsr166/src/test/tck/JSR166TestCase.java (file contents):
Revision 1.229 by jsr166, Sun May 14 03:15:37 2017 UTC vs.
Revision 1.232 by jsr166, Mon May 29 19:15:02 2017 UTC

# Line 88 | Line 88 | import java.util.concurrent.SynchronousQ
88   import java.util.concurrent.ThreadFactory;
89   import java.util.concurrent.ThreadLocalRandom;
90   import java.util.concurrent.ThreadPoolExecutor;
91 + import java.util.concurrent.TimeUnit;
92   import java.util.concurrent.TimeoutException;
93   import java.util.concurrent.atomic.AtomicBoolean;
94   import java.util.concurrent.atomic.AtomicReference;
# Line 638 | Line 639 | public class JSR166TestCase extends Test
639      public static long MEDIUM_DELAY_MS;
640      public static long LONG_DELAY_MS;
641  
642 +    private static final long RANDOM_TIMEOUT;
643 +    private static final long RANDOM_EXPIRED_TIMEOUT;
644 +    private static final TimeUnit RANDOM_TIMEUNIT;
645 +    static {
646 +        ThreadLocalRandom rnd = ThreadLocalRandom.current();
647 +        long[] timeouts = { Long.MIN_VALUE, -1, 0, 1, Long.MAX_VALUE };
648 +        RANDOM_TIMEOUT = timeouts[rnd.nextInt(timeouts.length)];
649 +        RANDOM_EXPIRED_TIMEOUT = timeouts[rnd.nextInt(3)];
650 +        TimeUnit[] timeUnits = TimeUnit.values();
651 +        RANDOM_TIMEUNIT = timeUnits[rnd.nextInt(timeUnits.length)];
652 +    }
653 +
654 +    /**
655 +     * Returns a timeout for use when any value at all will do.
656 +     */
657 +    static long randomTimeout() { return RANDOM_TIMEOUT; }
658 +
659 +    /**
660 +     * Returns a timeout that means "no waiting", i.e. not positive.
661 +     */
662 +    static long randomExpiredTimeout() { return RANDOM_EXPIRED_TIMEOUT; }
663 +
664 +    /**
665 +     * Returns a random non-null TimeUnit.
666 +     */
667 +    static TimeUnit randomTimeUnit() { return RANDOM_TIMEUNIT; }
668 +
669      /**
670       * Returns the shortest timed delay. This can be scaled up for
671       * slow machines using the jsr166.delay.factor system property,
# Line 1083 | Line 1111 | public class JSR166TestCase extends Test
1111      }
1112  
1113      /**
1114 +     * Checks that thread does not terminate within the default
1115 +     * millisecond delay of {@code timeoutMillis()}.
1116 +     * TODO: REMOVEME
1117 +     */
1118 +    void assertThreadStaysAlive(Thread thread) {
1119 +        assertThreadStaysAlive(thread, timeoutMillis());
1120 +    }
1121 +
1122 +    /**
1123 +     * Checks that thread does not terminate within the given millisecond delay.
1124 +     * TODO: REMOVEME
1125 +     */
1126 +    void assertThreadStaysAlive(Thread thread, long millis) {
1127 +        try {
1128 +            // No need to optimize the failing case via Thread.join.
1129 +            delay(millis);
1130 +            assertTrue(thread.isAlive());
1131 +        } catch (InterruptedException fail) {
1132 +            threadFail("Unexpected InterruptedException");
1133 +        }
1134 +    }
1135 +
1136 +    /**
1137 +     * Checks that the threads do not terminate within the default
1138 +     * millisecond delay of {@code timeoutMillis()}.
1139 +     * TODO: REMOVEME
1140 +     */
1141 +    void assertThreadsStayAlive(Thread... threads) {
1142 +        assertThreadsStayAlive(timeoutMillis(), threads);
1143 +    }
1144 +
1145 +    /**
1146 +     * Checks that the threads do not terminate within the given millisecond delay.
1147 +     * TODO: REMOVEME
1148 +     */
1149 +    void assertThreadsStayAlive(long millis, Thread... threads) {
1150 +        try {
1151 +            // No need to optimize the failing case via Thread.join.
1152 +            delay(millis);
1153 +            for (Thread thread : threads)
1154 +                assertTrue(thread.isAlive());
1155 +        } catch (InterruptedException fail) {
1156 +            threadFail("Unexpected InterruptedException");
1157 +        }
1158 +    }
1159 +
1160 +    /**
1161       * Checks that future.get times out, with the default timeout of
1162       * {@code timeoutMillis()}.
1163       */
# Line 1625 | Line 1700 | public class JSR166TestCase extends Test
1700          public String call() { throw new NullPointerException(); }
1701      }
1702  
1628    public static class CallableOne implements Callable<Integer> {
1629        public Integer call() { return one; }
1630    }
1631
1632    public class ShortRunnable extends CheckedRunnable {
1633        protected void realRun() throws Throwable {
1634            delay(SHORT_DELAY_MS);
1635        }
1636    }
1637
1638    public class ShortInterruptedRunnable extends CheckedInterruptedRunnable {
1639        protected void realRun() throws InterruptedException {
1640            delay(SHORT_DELAY_MS);
1641        }
1642    }
1643
1644    public class SmallRunnable extends CheckedRunnable {
1645        protected void realRun() throws Throwable {
1646            delay(SMALL_DELAY_MS);
1647        }
1648    }
1649
1703      public class SmallPossiblyInterruptedRunnable extends CheckedRunnable {
1704          protected void realRun() {
1705              try {
# Line 1655 | Line 1708 | public class JSR166TestCase extends Test
1708          }
1709      }
1710  
1658    public class SmallCallable extends CheckedCallable {
1659        protected Object realCall() throws InterruptedException {
1660            delay(SMALL_DELAY_MS);
1661            return Boolean.TRUE;
1662        }
1663    }
1664
1665    public class MediumRunnable extends CheckedRunnable {
1666        protected void realRun() throws Throwable {
1667            delay(MEDIUM_DELAY_MS);
1668        }
1669    }
1670
1671    public class MediumInterruptedRunnable extends CheckedInterruptedRunnable {
1672        protected void realRun() throws InterruptedException {
1673            delay(MEDIUM_DELAY_MS);
1674        }
1675    }
1676
1711      public Runnable possiblyInterruptedRunnable(final long timeoutMillis) {
1712          return new CheckedRunnable() {
1713              protected void realRun() {
# Line 1683 | Line 1717 | public class JSR166TestCase extends Test
1717              }};
1718      }
1719  
1686    public class MediumPossiblyInterruptedRunnable extends CheckedRunnable {
1687        protected void realRun() {
1688            try {
1689                delay(MEDIUM_DELAY_MS);
1690            } catch (InterruptedException ok) {}
1691        }
1692    }
1693
1694    public class LongPossiblyInterruptedRunnable extends CheckedRunnable {
1695        protected void realRun() {
1696            try {
1697                delay(LONG_DELAY_MS);
1698            } catch (InterruptedException ok) {}
1699        }
1700    }
1701
1720      /**
1721       * For use as ThreadFactory in constructors
1722       */
# Line 1712 | Line 1730 | public class JSR166TestCase extends Test
1730          boolean isDone();
1731      }
1732  
1715    public static TrackedRunnable trackedRunnable(final long timeoutMillis) {
1716        return new TrackedRunnable() {
1717                private volatile boolean done = false;
1718                public boolean isDone() { return done; }
1719                public void run() {
1720                    try {
1721                        delay(timeoutMillis);
1722                        done = true;
1723                    } catch (InterruptedException ok) {}
1724                }
1725            };
1726    }
1727
1728    public static class TrackedShortRunnable implements Runnable {
1729        public volatile boolean done = false;
1730        public void run() {
1731            try {
1732                delay(SHORT_DELAY_MS);
1733                done = true;
1734            } catch (InterruptedException ok) {}
1735        }
1736    }
1737
1738    public static class TrackedSmallRunnable implements Runnable {
1739        public volatile boolean done = false;
1740        public void run() {
1741            try {
1742                delay(SMALL_DELAY_MS);
1743                done = true;
1744            } catch (InterruptedException ok) {}
1745        }
1746    }
1747
1748    public static class TrackedMediumRunnable implements Runnable {
1749        public volatile boolean done = false;
1750        public void run() {
1751            try {
1752                delay(MEDIUM_DELAY_MS);
1753                done = true;
1754            } catch (InterruptedException ok) {}
1755        }
1756    }
1757
1758    public static class TrackedLongRunnable implements Runnable {
1759        public volatile boolean done = false;
1760        public void run() {
1761            try {
1762                delay(LONG_DELAY_MS);
1763                done = true;
1764            } catch (InterruptedException ok) {}
1765        }
1766    }
1767
1733      public static class TrackedNoOpRunnable implements Runnable {
1734          public volatile boolean done = false;
1735          public void run() {
# Line 1772 | Line 1737 | public class JSR166TestCase extends Test
1737          }
1738      }
1739  
1775    public static class TrackedCallable implements Callable {
1776        public volatile boolean done = false;
1777        public Object call() {
1778            try {
1779                delay(SMALL_DELAY_MS);
1780                done = true;
1781            } catch (InterruptedException ok) {}
1782            return Boolean.TRUE;
1783        }
1784    }
1785
1740      /**
1741       * Analog of CheckedRunnable for RecursiveAction
1742       */
# Line 1849 | Line 1803 | public class JSR166TestCase extends Test
1803              assertEquals(0, q.size());
1804              assertNull(q.peek());
1805              assertNull(q.poll());
1806 <            assertNull(q.poll(0, MILLISECONDS));
1806 >            assertNull(q.poll(randomExpiredTimeout(), randomTimeUnit()));
1807              assertEquals(q.toString(), "[]");
1808              assertTrue(Arrays.equals(q.toArray(), new Object[0]));
1809              assertFalse(q.iterator().hasNext());

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines