--- jsr166/src/test/tck/LinkedTransferQueueTest.java 2017/05/13 23:50:00 1.75 +++ jsr166/src/test/tck/LinkedTransferQueueTest.java 2019/09/06 22:47:02 1.85 @@ -227,7 +227,7 @@ public class LinkedTransferQueueTest ext }}); await(pleaseInterrupt); - assertThreadBlocks(t, Thread.State.WAITING); + if (randomBoolean()) assertThreadBlocks(t, Thread.State.WAITING); t.interrupt(); awaitTermination(t); } @@ -278,22 +278,29 @@ public class LinkedTransferQueueTest ext */ public void testInterruptedTimedPoll() throws InterruptedException { final BlockingQueue q = populatedQueue(SIZE); - final CountDownLatch aboutToWait = new CountDownLatch(1); + final CountDownLatch pleaseInterrupt = new CountDownLatch(1); Thread t = newStartedThread(new CheckedRunnable() { public void realRun() throws InterruptedException { - long startTime = System.nanoTime(); - for (int i = 0; i < SIZE; ++i) + for (int i = 0; i < SIZE; i++) assertEquals(i, (int) q.poll(LONG_DELAY_MS, MILLISECONDS)); - aboutToWait.countDown(); + + Thread.currentThread().interrupt(); try { - q.poll(LONG_DELAY_MS, MILLISECONDS); + q.poll(randomTimeout(), randomTimeUnit()); shouldThrow(); } catch (InterruptedException success) {} - assertTrue(millisElapsedSince(startTime) < LONG_DELAY_MS); + assertFalse(Thread.interrupted()); + + pleaseInterrupt.countDown(); + try { + q.poll(LONGER_DELAY_MS, MILLISECONDS); + shouldThrow(); + } catch (InterruptedException success) {} + assertFalse(Thread.interrupted()); }}); - await(aboutToWait); - assertThreadBlocks(t, Thread.State.TIMED_WAITING); + await(pleaseInterrupt); + if (randomBoolean()) assertThreadBlocks(t, Thread.State.TIMED_WAITING); t.interrupt(); awaitTermination(t); checkEmpty(q); @@ -307,15 +314,14 @@ public class LinkedTransferQueueTest ext final BlockingQueue q = populatedQueue(SIZE); Thread t = newStartedThread(new CheckedRunnable() { public void realRun() throws InterruptedException { - long startTime = System.nanoTime(); Thread.currentThread().interrupt(); for (int i = 0; i < SIZE; ++i) - assertEquals(i, (int) q.poll(LONG_DELAY_MS, MILLISECONDS)); + assertEquals(i, (int) q.poll(randomTimeout(), randomTimeUnit())); try { - q.poll(LONG_DELAY_MS, MILLISECONDS); + q.poll(randomTimeout(), randomTimeUnit()); shouldThrow(); } catch (InterruptedException success) {} - assertTrue(millisElapsedSince(startTime) < LONG_DELAY_MS); + assertFalse(Thread.interrupted()); }}); awaitTermination(t); @@ -464,10 +470,11 @@ public class LinkedTransferQueueTest ext */ public void testToArray() { LinkedTransferQueue q = populatedQueue(SIZE); - Object[] o = q.toArray(); - for (int i = 0; i < o.length; i++) { - assertSame(o[i], q.poll()); - } + Object[] a = q.toArray(); + assertSame(Object[].class, a.getClass()); + for (Object o : a) + assertSame(o, q.poll()); + assertTrue(q.isEmpty()); } /** @@ -478,9 +485,9 @@ public class LinkedTransferQueueTest ext Integer[] ints = new Integer[SIZE]; Integer[] array = q.toArray(ints); assertSame(ints, array); - for (int i = 0; i < ints.length; i++) { - assertSame(ints[i], q.poll()); - } + for (Integer o : ints) + assertSame(o, q.poll()); + assertTrue(q.isEmpty()); } /** @@ -636,7 +643,7 @@ public class LinkedTransferQueueTest ext } /** - * A deserialized serialized queue has same elements in same order + * A deserialized/reserialized queue has same elements in same order */ public void testSerialization() throws Exception { Queue x = populatedQueue(SIZE); @@ -763,7 +770,7 @@ public class LinkedTransferQueueTest ext } /** - * transfer waits until a poll occurs. The transfered element + * transfer waits until a poll occurs. The transferred element * is returned by the associated poll. */ public void testTransfer2() throws InterruptedException { @@ -844,7 +851,7 @@ public class LinkedTransferQueueTest ext } /** - * transfer waits until a take occurs. The transfered element + * transfer waits until a take occurs. The transferred element * is returned by the associated take. */ public void testTransfer5() throws InterruptedException { @@ -943,25 +950,23 @@ public class LinkedTransferQueueTest ext Thread t = newStartedThread(new CheckedRunnable() { public void realRun() throws InterruptedException { - long startTime = System.nanoTime(); Thread.currentThread().interrupt(); try { - q.tryTransfer(new Object(), LONG_DELAY_MS, MILLISECONDS); + q.tryTransfer(new Object(), randomTimeout(), randomTimeUnit()); shouldThrow(); } catch (InterruptedException success) {} assertFalse(Thread.interrupted()); pleaseInterrupt.countDown(); try { - q.tryTransfer(new Object(), LONG_DELAY_MS, MILLISECONDS); + q.tryTransfer(new Object(), LONGER_DELAY_MS, MILLISECONDS); shouldThrow(); } catch (InterruptedException success) {} assertFalse(Thread.interrupted()); - assertTrue(millisElapsedSince(startTime) < LONG_DELAY_MS); }}); await(pleaseInterrupt); - assertThreadBlocks(t, Thread.State.TIMED_WAITING); + if (randomBoolean()) assertThreadBlocks(t, Thread.State.TIMED_WAITING); t.interrupt(); awaitTermination(t); checkEmpty(q);