--- jsr166/src/test/tck/BlockingQueueTest.java 2011/06/14 03:22:38 1.10 +++ jsr166/src/test/tck/BlockingQueueTest.java 2015/05/24 01:42:14 1.16 @@ -7,14 +7,17 @@ * Pat Fisher, Mike Judd. */ -import junit.framework.*; +import static java.util.concurrent.TimeUnit.MILLISECONDS; + import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Queue; import java.util.concurrent.BlockingQueue; import java.util.concurrent.CountDownLatch; -import static java.util.concurrent.TimeUnit.MILLISECONDS; + +import junit.framework.Test; +import junit.framework.TestSuite; /** * Contains "contract" tests applicable to all BlockingQueue implementations. @@ -181,26 +184,20 @@ public abstract class BlockingQueueTest } /** - * drainTo(c, -n) returns 0 - */ - public void testDrainToNegativeMaxElements() { - final BlockingQueue q = emptyCollection(); - assertEquals(0, q.drainTo(new ArrayList(), -42)); - } - - /** - * drainTo(c, 0) returns 0 and does nothing + * drainTo(c, n) returns 0 and does nothing when n <= 0 */ - public void testDrainToZeroMaxElements() { + public void testDrainToNonPositiveMaxElements() { final BlockingQueue q = emptyCollection(); - if (q.remainingCapacity() == 0) { - // SynchronousQueue, for example - assertEquals(0, q.drainTo(new ArrayList(), 0)); - } else { + final int[] ns = { 0, -1, -42, Integer.MIN_VALUE }; + for (int n : ns) + assertEquals(0, q.drainTo(new ArrayList(), n)); + if (q.remainingCapacity() > 0) { + // Not SynchronousQueue, that is Object one = makeElement(1); q.add(one); ArrayList c = new ArrayList(); - assertEquals(0, q.drainTo(c, 0)); + for (int n : ns) + assertEquals(0, q.drainTo(new ArrayList(), n)); assertEquals(1, q.size()); assertSame(one, q.poll()); assertTrue(c.isEmpty()); @@ -333,6 +330,42 @@ public abstract class BlockingQueueTest awaitTermination(t); } + /** + * remove(x) removes x and returns true if present + * TODO: move to superclass CollectionTest.java + */ + public void testRemoveElement() { + final BlockingQueue q = emptyCollection(); + final int size = Math.min(q.remainingCapacity(), SIZE); + final Object[] elts = new Object[size]; + assertFalse(q.contains(makeElement(99))); + assertFalse(q.remove(makeElement(99))); + checkEmpty(q); + for (int i = 0; i < size; i++) + q.add(elts[i] = makeElement(i)); + for (int i = 1; i < size; i += 2) { + for (int pass = 0; pass < 2; pass++) { + assertEquals((pass == 0), q.contains(elts[i])); + assertEquals((pass == 0), q.remove(elts[i])); + assertFalse(q.contains(elts[i])); + assertTrue(q.contains(elts[i - 1])); + if (i < size - 1) + assertTrue(q.contains(elts[i + 1])); + } + } + if (size > 0) + assertTrue(q.contains(elts[0])); + for (int i = size - 2; i >= 0; i -= 2) { + assertTrue(q.contains(elts[i])); + assertFalse(q.contains(elts[i + 1])); + assertTrue(q.remove(elts[i])); + assertFalse(q.contains(elts[i])); + assertFalse(q.remove(elts[i + 1])); + assertFalse(q.contains(elts[i + 1])); + } + checkEmpty(q); + } + /** For debugging. */ public void XXXXtestFails() { fail(emptyCollection().getClass().toString());