--- jsr166/src/test/tck/ArrayBlockingQueueTest.java 2016/11/06 03:11:15 1.77 +++ jsr166/src/test/tck/ArrayBlockingQueueTest.java 2017/05/14 00:56:43 1.87 @@ -231,12 +231,10 @@ public class ArrayBlockingQueueTest exte */ public void testAdd() { ArrayBlockingQueue q = new ArrayBlockingQueue(SIZE); - for (int i = 0; i < SIZE; ++i) { - assertTrue(q.add(new Integer(i))); - } + for (int i = 0; i < SIZE; i++) assertTrue(q.add((Integer) i)); assertEquals(0, q.remainingCapacity()); try { - q.add(new Integer(SIZE)); + q.add((Integer) SIZE); shouldThrow(); } catch (IllegalStateException success) {} } @@ -270,13 +268,17 @@ public class ArrayBlockingQueueTest exte /** * addAll throws ISE if not enough room */ - public void testAddAll4() { - ArrayBlockingQueue q = new ArrayBlockingQueue(1); - Integer[] ints = new Integer[SIZE]; - for (int i = 0; i < SIZE; ++i) - ints[i] = new Integer(i); + public void testAddAll_insufficientSpace() { + int size = ThreadLocalRandom.current().nextInt(1, SIZE); + ArrayBlockingQueue q = populatedQueue(0, size, size, false); + // Just fits: + q.addAll(populatedQueue(size, size, 2 * size, false)); + assertEquals(0, q.remainingCapacity()); + assertEquals(size, q.size()); + assertEquals(0, q.peek()); try { - q.addAll(Arrays.asList(ints)); + q = populatedQueue(0, size, size, false); + q.addAll(Collections.nCopies(size + 1, 42)); shouldThrow(); } catch (IllegalStateException success) {} } @@ -338,7 +340,7 @@ public class ArrayBlockingQueueTest exte }}); await(pleaseInterrupt); - assertThreadStaysAlive(t); + assertThreadBlocks(t, Thread.State.WAITING); t.interrupt(); awaitTermination(t); assertEquals(SIZE, q.size()); @@ -373,7 +375,7 @@ public class ArrayBlockingQueueTest exte assertEquals(0, q.take()); await(pleaseInterrupt); - assertThreadStaysAlive(t); + assertThreadBlocks(t, Thread.State.WAITING); t.interrupt(); awaitTermination(t); assertEquals(0, q.remainingCapacity()); @@ -397,10 +399,11 @@ public class ArrayBlockingQueueTest exte q.offer(new Object(), 2 * LONG_DELAY_MS, MILLISECONDS); shouldThrow(); } catch (InterruptedException success) {} + assertFalse(Thread.interrupted()); }}); await(pleaseInterrupt); - assertThreadStaysAlive(t); + assertThreadBlocks(t, Thread.State.TIMED_WAITING); t.interrupt(); awaitTermination(t); } @@ -423,9 +426,7 @@ public class ArrayBlockingQueueTest exte final CountDownLatch pleaseInterrupt = new CountDownLatch(1); Thread t = newStartedThread(new CheckedRunnable() { public void realRun() throws InterruptedException { - for (int i = 0; i < SIZE; ++i) { - assertEquals(i, q.take()); - } + for (int i = 0; i < SIZE; i++) assertEquals(i, q.take()); Thread.currentThread().interrupt(); try { @@ -443,7 +444,7 @@ public class ArrayBlockingQueueTest exte }}); await(pleaseInterrupt); - assertThreadStaysAlive(t); + assertThreadBlocks(t, Thread.State.WAITING); t.interrupt(); awaitTermination(t); } @@ -493,24 +494,26 @@ public class ArrayBlockingQueueTest exte */ 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) { assertEquals(i, (int) q.poll(LONG_DELAY_MS, MILLISECONDS)); } - aboutToWait.countDown(); + + pleaseInterrupt.countDown(); try { q.poll(LONG_DELAY_MS, MILLISECONDS); shouldThrow(); - } catch (InterruptedException success) { - assertTrue(millisElapsedSince(startTime) < LONG_DELAY_MS); - } + } catch (InterruptedException success) {} + assertFalse(Thread.interrupted()); + + assertTrue(millisElapsedSince(startTime) < LONG_DELAY_MS); }}); - await(aboutToWait); - waitForThreadToEnterWaitState(t); + await(pleaseInterrupt); + assertThreadBlocks(t, Thread.State.TIMED_WAITING); t.interrupt(); awaitTermination(t); checkEmpty(q); @@ -563,8 +566,10 @@ public class ArrayBlockingQueueTest exte * contains(x) reports true when elements added but not yet removed */ public void testContains() { - ArrayBlockingQueue q = populatedQueue(SIZE); - for (int i = 0; i < SIZE; ++i) { + int size = ThreadLocalRandom.current().nextInt(1, SIZE); + ArrayBlockingQueue q = populatedQueue(size, size, 2 * size, false); + assertFalse(q.contains(null)); + for (int i = 0; i < size; ++i) { assertTrue(q.contains(new Integer(i))); assertEquals(i, q.poll()); assertFalse(q.contains(new Integer(i))); @@ -575,11 +580,13 @@ public class ArrayBlockingQueueTest exte * clear removes all elements */ public void testClear() { - ArrayBlockingQueue q = populatedQueue(SIZE); + int size = ThreadLocalRandom.current().nextInt(1, 5); + ArrayBlockingQueue q = populatedQueue(size, size, 2 * size, false); + int capacity = size + q.remainingCapacity(); q.clear(); assertTrue(q.isEmpty()); assertEquals(0, q.size()); - assertEquals(SIZE, q.remainingCapacity()); + assertEquals(capacity, q.remainingCapacity()); q.add(one); assertFalse(q.isEmpty()); assertTrue(q.contains(one)); @@ -933,8 +940,8 @@ public class ArrayBlockingQueueTest exte */ public void testNeverContainsNull() { Collection[] qs = { - new ArrayBlockingQueue(10), - populatedQueue(2), + populatedQueue(0, 1, 10, false), + populatedQueue(2, 2, 10, true), }; for (Collection q : qs) {