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

Comparing jsr166/src/test/tck/BlockingQueueTest.java (file contents):
Revision 1.8 by jsr166, Mon May 30 22:43:20 2011 UTC vs.
Revision 1.14 by jsr166, Wed Dec 31 20:09:08 2014 UTC

# Line 7 | Line 7
7   * Pat Fisher, Mike Judd.
8   */
9  
10 < import junit.framework.*;
10 > import static java.util.concurrent.TimeUnit.MILLISECONDS;
11 >
12 > import java.util.ArrayList;
13   import java.util.Arrays;
14   import java.util.Collection;
15   import java.util.Queue;
16   import java.util.concurrent.BlockingQueue;
17   import java.util.concurrent.CountDownLatch;
18 < import static java.util.concurrent.TimeUnit.MILLISECONDS;
18 >
19 > import junit.framework.Test;
20 > import junit.framework.TestSuite;
21  
22   /**
23   * Contains "contract" tests applicable to all BlockingQueue implementations.
# Line 39 | Line 43 | public abstract class BlockingQueueTest
43      //----------------------------------------------------------------
44      // Configuration methods
45      //----------------------------------------------------------------
46 <    
46 >
47      /** Returns an empty instance of the implementation class. */
48      protected abstract BlockingQueue emptyCollection();
49  
# Line 54 | Line 58 | public abstract class BlockingQueueTest
58      //----------------------------------------------------------------
59      // Tests
60      //----------------------------------------------------------------
61 <    
61 >
62      /**
63       * offer(null) throws NullPointerException
64       */
# Line 180 | Line 184 | public abstract class BlockingQueueTest
184      }
185  
186      /**
187 +     * drainTo(c, n) returns 0 and does nothing when n <= 0
188 +     */
189 +    public void testDrainToNonPositiveMaxElements() {
190 +        final BlockingQueue q = emptyCollection();
191 +        final int[] ns = { 0, -1, -42, Integer.MIN_VALUE };
192 +        for (int n : ns)
193 +            assertEquals(0, q.drainTo(new ArrayList(), n));
194 +        if (q.remainingCapacity() > 0) {
195 +            // Not SynchronousQueue, that is
196 +            Object one = makeElement(1);
197 +            q.add(one);
198 +            ArrayList c = new ArrayList();
199 +            for (int n : ns)
200 +                assertEquals(0, q.drainTo(new ArrayList(), n));
201 +            assertEquals(1, q.size());
202 +            assertSame(one, q.poll());
203 +            assertTrue(c.isEmpty());
204 +        }
205 +    }
206 +
207 +    /**
208       * timed poll before a delayed offer times out; after offer succeeds;
209       * on interruption throws
210       */
# Line 305 | Line 330 | public abstract class BlockingQueueTest
330          awaitTermination(t);
331      }
332  
333 +    /**
334 +     * remove(x) removes x and returns true if present
335 +     * TODO: move to superclass CollectionTest.java
336 +     */
337 +    public void testRemoveElement() {
338 +        final BlockingQueue q = emptyCollection();
339 +        final int size = Math.min(q.remainingCapacity(), SIZE);
340 +        final Object[] elts = new Object[size];
341 +        assertFalse(q.contains(makeElement(99)));
342 +        assertFalse(q.remove(makeElement(99)));
343 +        checkEmpty(q);
344 +        for (int i = 0; i < size; i++)
345 +            q.add(elts[i] = makeElement(i));
346 +        for (int i = 1; i < size; i += 2) {
347 +            for (int pass = 0; pass < 2; pass++) {
348 +                assertEquals((pass == 0), q.contains(elts[i]));
349 +                assertEquals((pass == 0), q.remove(elts[i]));
350 +                assertFalse(q.contains(elts[i]));
351 +                assertTrue(q.contains(elts[i-1]));
352 +                if (i < size - 1)
353 +                    assertTrue(q.contains(elts[i+1]));
354 +            }
355 +        }
356 +        if (size > 0)
357 +            assertTrue(q.contains(elts[0]));
358 +        for (int i = size-2; i >= 0; i -= 2) {
359 +            assertTrue(q.contains(elts[i]));
360 +            assertFalse(q.contains(elts[i+1]));
361 +            assertTrue(q.remove(elts[i]));
362 +            assertFalse(q.contains(elts[i]));
363 +            assertFalse(q.remove(elts[i+1]));
364 +            assertFalse(q.contains(elts[i+1]));
365 +        }
366 +        checkEmpty(q);
367 +    }
368 +
369      /** For debugging. */
370      public void XXXXtestFails() {
371          fail(emptyCollection().getClass().toString());

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines