--- jsr166/src/test/tck/BlockingQueueTest.java 2011/06/14 04:30:06 1.11 +++ jsr166/src/test/tck/BlockingQueueTest.java 2014/12/31 19:05:42 1.13 @@ -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. @@ -327,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());