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

Comparing jsr166/src/test/tck/LinkedBlockingDequeTest.java (file contents):
Revision 1.61 by jsr166, Sun Oct 4 18:49:02 2015 UTC vs.
Revision 1.89 by jsr166, Wed Jan 27 01:57:24 2021 UTC

# Line 41 | Line 41 | public class LinkedBlockingDequeTest ext
41      }
42  
43      public static Test suite() {
44 +        class Implementation implements CollectionImplementation {
45 +            public Class<?> klazz() { return LinkedBlockingDeque.class; }
46 +            public Collection emptyCollection() { return new LinkedBlockingDeque(); }
47 +            public Object makeElement(int i) { return JSR166TestCase.itemFor(i); }
48 +            public boolean isConcurrent() { return true; }
49 +            public boolean permitsNulls() { return false; }
50 +        }
51          return newTestSuite(LinkedBlockingDequeTest.class,
52                              new Unbounded().testSuite(),
53 <                            new Bounded().testSuite());
53 >                            new Bounded().testSuite(),
54 >                            CollectionTest.testSuite(new Implementation()));
55      }
56  
57      /**
58       * Returns a new deque of given size containing consecutive
59 <     * Integers 0 ... n.
59 >     * Items 0 ... n - 1.
60       */
61 <    private LinkedBlockingDeque<Integer> populatedDeque(int n) {
62 <        LinkedBlockingDeque<Integer> q =
55 <            new LinkedBlockingDeque<Integer>(n);
61 >    private static LinkedBlockingDeque<Item> populatedDeque(int n) {
62 >        LinkedBlockingDeque<Item> q = new LinkedBlockingDeque<>(n);
63          assertTrue(q.isEmpty());
64          for (int i = 0; i < n; i++)
65 <            assertTrue(q.offer(new Integer(i)));
65 >            mustOffer(q, i);
66          assertFalse(q.isEmpty());
67 <        assertEquals(0, q.remainingCapacity());
68 <        assertEquals(n, q.size());
67 >        mustEqual(0, q.remainingCapacity());
68 >        mustEqual(n, q.size());
69 >        mustEqual(0, q.peekFirst());
70 >        mustEqual((n - 1), q.peekLast());
71          return q;
72      }
73  
# Line 66 | Line 75 | public class LinkedBlockingDequeTest ext
75       * isEmpty is true before add, false after
76       */
77      public void testEmpty() {
78 <        LinkedBlockingDeque q = new LinkedBlockingDeque();
78 >        LinkedBlockingDeque<Item> q = new LinkedBlockingDeque<>();
79          assertTrue(q.isEmpty());
80 <        q.add(new Integer(1));
80 >        q.add(one);
81          assertFalse(q.isEmpty());
82 <        q.add(new Integer(2));
82 >        q.add(two);
83          q.removeFirst();
84          q.removeFirst();
85          assertTrue(q.isEmpty());
# Line 80 | Line 89 | public class LinkedBlockingDequeTest ext
89       * size changes when elements added and removed
90       */
91      public void testSize() {
92 <        LinkedBlockingDeque q = populatedDeque(SIZE);
92 >        LinkedBlockingDeque<Item> q = populatedDeque(SIZE);
93          for (int i = 0; i < SIZE; ++i) {
94 <            assertEquals(SIZE - i, q.size());
94 >            mustEqual(SIZE - i, q.size());
95              q.removeFirst();
96          }
97          for (int i = 0; i < SIZE; ++i) {
98 <            assertEquals(i, q.size());
99 <            q.add(new Integer(i));
98 >            mustEqual(i, q.size());
99 >            mustAdd(q, one);
100          }
101      }
102  
# Line 95 | Line 104 | public class LinkedBlockingDequeTest ext
104       * offerFirst(null) throws NullPointerException
105       */
106      public void testOfferFirstNull() {
107 <        LinkedBlockingDeque q = new LinkedBlockingDeque();
107 >        LinkedBlockingDeque<Item> q = new LinkedBlockingDeque<>();
108          try {
109              q.offerFirst(null);
110              shouldThrow();
# Line 106 | Line 115 | public class LinkedBlockingDequeTest ext
115       * offerLast(null) throws NullPointerException
116       */
117      public void testOfferLastNull() {
118 <        LinkedBlockingDeque q = new LinkedBlockingDeque();
118 >        LinkedBlockingDeque<Item> q = new LinkedBlockingDeque<>();
119          try {
120              q.offerLast(null);
121              shouldThrow();
# Line 117 | Line 126 | public class LinkedBlockingDequeTest ext
126       * OfferFirst succeeds
127       */
128      public void testOfferFirst() {
129 <        LinkedBlockingDeque q = new LinkedBlockingDeque();
130 <        assertTrue(q.offerFirst(new Integer(0)));
131 <        assertTrue(q.offerFirst(new Integer(1)));
129 >        LinkedBlockingDeque<Item> q = new LinkedBlockingDeque<>();
130 >        assertTrue(q.offerFirst(zero));
131 >        assertTrue(q.offerFirst(two));
132      }
133  
134      /**
135       * OfferLast succeeds
136       */
137      public void testOfferLast() {
138 <        LinkedBlockingDeque q = new LinkedBlockingDeque();
139 <        assertTrue(q.offerLast(new Integer(0)));
140 <        assertTrue(q.offerLast(new Integer(1)));
138 >        LinkedBlockingDeque<Item> q = new LinkedBlockingDeque<>();
139 >        assertTrue(q.offerLast(zero));
140 >        assertTrue(q.offerLast(one));
141      }
142  
143      /**
144       * pollFirst succeeds unless empty
145       */
146      public void testPollFirst() {
147 <        LinkedBlockingDeque q = populatedDeque(SIZE);
147 >        LinkedBlockingDeque<Item> q = populatedDeque(SIZE);
148          for (int i = 0; i < SIZE; ++i) {
149 <            assertEquals(i, q.pollFirst());
149 >            mustEqual(i, q.pollFirst());
150          }
151          assertNull(q.pollFirst());
152      }
# Line 146 | Line 155 | public class LinkedBlockingDequeTest ext
155       * pollLast succeeds unless empty
156       */
157      public void testPollLast() {
158 <        LinkedBlockingDeque q = populatedDeque(SIZE);
158 >        LinkedBlockingDeque<Item> q = populatedDeque(SIZE);
159          for (int i = SIZE - 1; i >= 0; --i) {
160 <            assertEquals(i, q.pollLast());
160 >            mustEqual(i, q.pollLast());
161          }
162          assertNull(q.pollLast());
163      }
# Line 157 | Line 166 | public class LinkedBlockingDequeTest ext
166       * peekFirst returns next element, or null if empty
167       */
168      public void testPeekFirst() {
169 <        LinkedBlockingDeque q = populatedDeque(SIZE);
169 >        LinkedBlockingDeque<Item> q = populatedDeque(SIZE);
170          for (int i = 0; i < SIZE; ++i) {
171 <            assertEquals(i, q.peekFirst());
172 <            assertEquals(i, q.pollFirst());
171 >            mustEqual(i, q.peekFirst());
172 >            mustEqual(i, q.pollFirst());
173              assertTrue(q.peekFirst() == null ||
174                         !q.peekFirst().equals(i));
175          }
# Line 171 | Line 180 | public class LinkedBlockingDequeTest ext
180       * peek returns next element, or null if empty
181       */
182      public void testPeek() {
183 <        LinkedBlockingDeque q = populatedDeque(SIZE);
183 >        LinkedBlockingDeque<Item> q = populatedDeque(SIZE);
184          for (int i = 0; i < SIZE; ++i) {
185 <            assertEquals(i, q.peek());
186 <            assertEquals(i, q.pollFirst());
185 >            mustEqual(i, q.peek());
186 >            mustEqual(i, q.pollFirst());
187              assertTrue(q.peek() == null ||
188                         !q.peek().equals(i));
189          }
# Line 185 | Line 194 | public class LinkedBlockingDequeTest ext
194       * peekLast returns next element, or null if empty
195       */
196      public void testPeekLast() {
197 <        LinkedBlockingDeque q = populatedDeque(SIZE);
197 >        LinkedBlockingDeque<Item> q = populatedDeque(SIZE);
198          for (int i = SIZE - 1; i >= 0; --i) {
199 <            assertEquals(i, q.peekLast());
200 <            assertEquals(i, q.pollLast());
199 >            mustEqual(i, q.peekLast());
200 >            mustEqual(i, q.pollLast());
201              assertTrue(q.peekLast() == null ||
202                         !q.peekLast().equals(i));
203          }
# Line 199 | Line 208 | public class LinkedBlockingDequeTest ext
208       * getFirst() returns first element, or throws NSEE if empty
209       */
210      public void testFirstElement() {
211 <        LinkedBlockingDeque q = populatedDeque(SIZE);
211 >        LinkedBlockingDeque<Item> q = populatedDeque(SIZE);
212          for (int i = 0; i < SIZE; ++i) {
213 <            assertEquals(i, q.getFirst());
214 <            assertEquals(i, q.pollFirst());
213 >            mustEqual(i, q.getFirst());
214 >            mustEqual(i, q.pollFirst());
215          }
216          try {
217              q.getFirst();
# Line 215 | Line 224 | public class LinkedBlockingDequeTest ext
224       * getLast() returns last element, or throws NSEE if empty
225       */
226      public void testLastElement() {
227 <        LinkedBlockingDeque q = populatedDeque(SIZE);
227 >        LinkedBlockingDeque<Item> q = populatedDeque(SIZE);
228          for (int i = SIZE - 1; i >= 0; --i) {
229 <            assertEquals(i, q.getLast());
230 <            assertEquals(i, q.pollLast());
229 >            mustEqual(i, q.getLast());
230 >            mustEqual(i, q.pollLast());
231          }
232          try {
233              q.getLast();
# Line 231 | Line 240 | public class LinkedBlockingDequeTest ext
240       * removeFirst() removes first element, or throws NSEE if empty
241       */
242      public void testRemoveFirst() {
243 <        LinkedBlockingDeque q = populatedDeque(SIZE);
243 >        LinkedBlockingDeque<Item> q = populatedDeque(SIZE);
244          for (int i = 0; i < SIZE; ++i) {
245 <            assertEquals(i, q.removeFirst());
245 >            mustEqual(i, q.removeFirst());
246          }
247          try {
248              q.removeFirst();
# Line 246 | Line 255 | public class LinkedBlockingDequeTest ext
255       * removeLast() removes last element, or throws NSEE if empty
256       */
257      public void testRemoveLast() {
258 <        LinkedBlockingDeque q = populatedDeque(SIZE);
258 >        LinkedBlockingDeque<Item> q = populatedDeque(SIZE);
259          for (int i = SIZE - 1; i >= 0; --i) {
260 <            assertEquals(i, q.removeLast());
260 >            mustEqual(i, q.removeLast());
261          }
262          try {
263              q.removeLast();
# Line 261 | Line 270 | public class LinkedBlockingDequeTest ext
270       * remove removes next element, or throws NSEE if empty
271       */
272      public void testRemove() {
273 <        LinkedBlockingDeque q = populatedDeque(SIZE);
273 >        LinkedBlockingDeque<Item> q = populatedDeque(SIZE);
274          for (int i = 0; i < SIZE; ++i) {
275 <            assertEquals(i, q.remove());
275 >            mustEqual(i, q.remove());
276          }
277          try {
278              q.remove();
# Line 275 | Line 284 | public class LinkedBlockingDequeTest ext
284       * removeFirstOccurrence(x) removes x and returns true if present
285       */
286      public void testRemoveFirstOccurrence() {
287 <        LinkedBlockingDeque q = populatedDeque(SIZE);
287 >        LinkedBlockingDeque<Item> q = populatedDeque(SIZE);
288          for (int i = 1; i < SIZE; i += 2) {
289 <            assertTrue(q.removeFirstOccurrence(new Integer(i)));
289 >            assertTrue(q.removeFirstOccurrence(itemFor(i)));
290          }
291          for (int i = 0; i < SIZE; i += 2) {
292 <            assertTrue(q.removeFirstOccurrence(new Integer(i)));
293 <            assertFalse(q.removeFirstOccurrence(new Integer(i + 1)));
292 >            assertTrue(q.removeFirstOccurrence(itemFor(i)));
293 >            assertFalse(q.removeFirstOccurrence(itemFor(i + 1)));
294          }
295          assertTrue(q.isEmpty());
296      }
# Line 290 | Line 299 | public class LinkedBlockingDequeTest ext
299       * removeLastOccurrence(x) removes x and returns true if present
300       */
301      public void testRemoveLastOccurrence() {
302 <        LinkedBlockingDeque q = populatedDeque(SIZE);
302 >        LinkedBlockingDeque<Item> q = populatedDeque(SIZE);
303          for (int i = 1; i < SIZE; i += 2) {
304 <            assertTrue(q.removeLastOccurrence(new Integer(i)));
304 >            assertTrue(q.removeLastOccurrence(itemFor(i)));
305          }
306          for (int i = 0; i < SIZE; i += 2) {
307 <            assertTrue(q.removeLastOccurrence(new Integer(i)));
308 <            assertFalse(q.removeLastOccurrence(new Integer(i + 1)));
307 >            assertTrue(q.removeLastOccurrence(itemFor(i)));
308 >            assertFalse(q.removeLastOccurrence(itemFor(i + 1)));
309          }
310          assertTrue(q.isEmpty());
311      }
# Line 305 | Line 314 | public class LinkedBlockingDequeTest ext
314       * peekFirst returns element inserted with addFirst
315       */
316      public void testAddFirst() {
317 <        LinkedBlockingDeque q = populatedDeque(3);
317 >        LinkedBlockingDeque<Item> q = populatedDeque(3);
318          q.pollLast();
319          q.addFirst(four);
320          assertSame(four, q.peekFirst());
# Line 315 | Line 324 | public class LinkedBlockingDequeTest ext
324       * peekLast returns element inserted with addLast
325       */
326      public void testAddLast() {
327 <        LinkedBlockingDeque q = populatedDeque(3);
327 >        LinkedBlockingDeque<Item> q = populatedDeque(3);
328          q.pollLast();
329          q.addLast(four);
330          assertSame(four, q.peekLast());
# Line 326 | Line 335 | public class LinkedBlockingDequeTest ext
335       * none given
336       */
337      public void testConstructor1() {
338 <        assertEquals(SIZE, new LinkedBlockingDeque(SIZE).remainingCapacity());
339 <        assertEquals(Integer.MAX_VALUE, new LinkedBlockingDeque().remainingCapacity());
338 >        mustEqual(SIZE, new LinkedBlockingDeque<Item>(SIZE).remainingCapacity());
339 >        mustEqual(Integer.MAX_VALUE, new LinkedBlockingDeque<Item>().remainingCapacity());
340      }
341  
342      /**
# Line 335 | Line 344 | public class LinkedBlockingDequeTest ext
344       */
345      public void testConstructor2() {
346          try {
347 <            new LinkedBlockingDeque(0);
347 >            new LinkedBlockingDeque<Item>(0);
348              shouldThrow();
349          } catch (IllegalArgumentException success) {}
350      }
# Line 345 | Line 354 | public class LinkedBlockingDequeTest ext
354       */
355      public void testConstructor3() {
356          try {
357 <            new LinkedBlockingDeque(null);
357 >            new LinkedBlockingDeque<Item>(null);
358              shouldThrow();
359          } catch (NullPointerException success) {}
360      }
# Line 354 | Line 363 | public class LinkedBlockingDequeTest ext
363       * Initializing from Collection of null elements throws NullPointerException
364       */
365      public void testConstructor4() {
366 <        Collection<Integer> elements = Arrays.asList(new Integer[SIZE]);
366 >        Collection<Item> elements = Arrays.asList(new Item[SIZE]);
367          try {
368 <            new LinkedBlockingDeque(elements);
368 >            new LinkedBlockingDeque<Item>(elements);
369              shouldThrow();
370          } catch (NullPointerException success) {}
371      }
# Line 366 | Line 375 | public class LinkedBlockingDequeTest ext
375       * NullPointerException
376       */
377      public void testConstructor5() {
378 <        Integer[] ints = new Integer[SIZE];
379 <        for (int i = 0; i < SIZE - 1; ++i)
380 <            ints[i] = i;
372 <        Collection<Integer> elements = Arrays.asList(ints);
378 >        Item[] items = new Item[2];
379 >        items[0] = zero;
380 >        Collection<Item> elements = Arrays.asList(items);
381          try {
382 <            new LinkedBlockingDeque(elements);
382 >            new LinkedBlockingDeque<Item>(elements);
383              shouldThrow();
384          } catch (NullPointerException success) {}
385      }
# Line 380 | Line 388 | public class LinkedBlockingDequeTest ext
388       * Deque contains all elements of collection used to initialize
389       */
390      public void testConstructor6() {
391 <        Integer[] ints = new Integer[SIZE];
391 >        Item[] items = defaultItems;
392 >        LinkedBlockingDeque<Item> q = new LinkedBlockingDeque<>(Arrays.asList(items));
393          for (int i = 0; i < SIZE; ++i)
394 <            ints[i] = i;
386 <        LinkedBlockingDeque q = new LinkedBlockingDeque(Arrays.asList(ints));
387 <        for (int i = 0; i < SIZE; ++i)
388 <            assertEquals(ints[i], q.poll());
394 >            mustEqual(items[i], q.poll());
395      }
396  
397      /**
398       * Deque transitions from empty to full when elements added
399       */
400      public void testEmptyFull() {
401 <        LinkedBlockingDeque q = new LinkedBlockingDeque(2);
401 >        LinkedBlockingDeque<Item> q = new LinkedBlockingDeque<>(2);
402          assertTrue(q.isEmpty());
403 <        assertEquals("should have room for 2", 2, q.remainingCapacity());
403 >        mustEqual(2, q.remainingCapacity());
404          q.add(one);
405          assertFalse(q.isEmpty());
406          q.add(two);
407          assertFalse(q.isEmpty());
408 <        assertEquals(0, q.remainingCapacity());
408 >        mustEqual(0, q.remainingCapacity());
409          assertFalse(q.offer(three));
410      }
411  
# Line 407 | Line 413 | public class LinkedBlockingDequeTest ext
413       * remainingCapacity decreases on add, increases on remove
414       */
415      public void testRemainingCapacity() {
416 <        BlockingQueue q = populatedDeque(SIZE);
416 >        BlockingQueue<Item> q = populatedDeque(SIZE);
417          for (int i = 0; i < SIZE; ++i) {
418 <            assertEquals(i, q.remainingCapacity());
419 <            assertEquals(SIZE, q.size() + q.remainingCapacity());
420 <            assertEquals(i, q.remove());
418 >            mustEqual(i, q.remainingCapacity());
419 >            mustEqual(SIZE, q.size() + q.remainingCapacity());
420 >            mustEqual(i, q.remove());
421          }
422          for (int i = 0; i < SIZE; ++i) {
423 <            assertEquals(SIZE - i, q.remainingCapacity());
424 <            assertEquals(SIZE, q.size() + q.remainingCapacity());
425 <            assertTrue(q.add(i));
423 >            mustEqual(SIZE - i, q.remainingCapacity());
424 >            mustEqual(SIZE, q.size() + q.remainingCapacity());
425 >            mustAdd(q, i);
426          }
427      }
428  
# Line 424 | Line 430 | public class LinkedBlockingDequeTest ext
430       * push(null) throws NPE
431       */
432      public void testPushNull() {
433 <        LinkedBlockingDeque q = new LinkedBlockingDeque(1);
433 >        LinkedBlockingDeque<Item> q = new LinkedBlockingDeque<>(1);
434          try {
435              q.push(null);
436              shouldThrow();
# Line 432 | Line 438 | public class LinkedBlockingDequeTest ext
438      }
439  
440      /**
441 <     * push succeeds if not full; throws ISE if full
441 >     * push succeeds if not full; throws IllegalStateException if full
442       */
443      public void testPush() {
444 <        LinkedBlockingDeque q = new LinkedBlockingDeque(SIZE);
444 >        LinkedBlockingDeque<Item> q = new LinkedBlockingDeque<>(SIZE);
445          for (int i = 0; i < SIZE; ++i) {
446 <            Integer x = new Integer(i);
446 >            Item x = itemFor(i);
447              q.push(x);
448 <            assertEquals(x, q.peek());
448 >            mustEqual(x, q.peek());
449          }
450 <        assertEquals(0, q.remainingCapacity());
450 >        mustEqual(0, q.remainingCapacity());
451          try {
452 <            q.push(new Integer(SIZE));
452 >            q.push(itemFor(SIZE));
453              shouldThrow();
454          } catch (IllegalStateException success) {}
455      }
# Line 452 | Line 458 | public class LinkedBlockingDequeTest ext
458       * peekFirst returns element inserted with push
459       */
460      public void testPushWithPeek() {
461 <        LinkedBlockingDeque q = populatedDeque(3);
461 >        LinkedBlockingDeque<Item> q = populatedDeque(3);
462          q.pollLast();
463          q.push(four);
464          assertSame(four, q.peekFirst());
# Line 462 | Line 468 | public class LinkedBlockingDequeTest ext
468       * pop removes next element, or throws NSEE if empty
469       */
470      public void testPop() {
471 <        LinkedBlockingDeque q = populatedDeque(SIZE);
471 >        LinkedBlockingDeque<Item> q = populatedDeque(SIZE);
472          for (int i = 0; i < SIZE; ++i) {
473 <            assertEquals(i, q.pop());
473 >            mustEqual(i, q.pop());
474          }
475          try {
476              q.pop();
# Line 476 | Line 482 | public class LinkedBlockingDequeTest ext
482       * Offer succeeds if not full; fails if full
483       */
484      public void testOffer() {
485 <        LinkedBlockingDeque q = new LinkedBlockingDeque(1);
485 >        LinkedBlockingDeque<Item> q = new LinkedBlockingDeque<>(1);
486          assertTrue(q.offer(zero));
487          assertFalse(q.offer(one));
488      }
489  
490      /**
491 <     * add succeeds if not full; throws ISE if full
491 >     * add succeeds if not full; throws IllegalStateException if full
492       */
493      public void testAdd() {
494 <        LinkedBlockingDeque q = new LinkedBlockingDeque(SIZE);
494 >        LinkedBlockingDeque<Item> q = new LinkedBlockingDeque<>(SIZE);
495          for (int i = 0; i < SIZE; ++i)
496 <            assertTrue(q.add(new Integer(i)));
497 <        assertEquals(0, q.remainingCapacity());
496 >            mustAdd(q, i);
497 >        mustEqual(0, q.remainingCapacity());
498          try {
499 <            q.add(new Integer(SIZE));
499 >            q.add(itemFor(SIZE));
500              shouldThrow();
501          } catch (IllegalStateException success) {}
502      }
503  
504      /**
505 <     * addAll(this) throws IAE
505 >     * addAll(this) throws IllegalArgumentException
506       */
507      public void testAddAllSelf() {
508 <        LinkedBlockingDeque q = populatedDeque(SIZE);
508 >        LinkedBlockingDeque<Item> q = populatedDeque(SIZE);
509          try {
510              q.addAll(q);
511              shouldThrow();
# Line 511 | Line 517 | public class LinkedBlockingDequeTest ext
517       * possibly adding some elements
518       */
519      public void testAddAll3() {
520 <        LinkedBlockingDeque q = new LinkedBlockingDeque(SIZE);
521 <        Integer[] ints = new Integer[SIZE];
522 <        for (int i = 0; i < SIZE - 1; ++i)
517 <            ints[i] = new Integer(i);
518 <        Collection<Integer> elements = Arrays.asList(ints);
520 >        LinkedBlockingDeque<Item> q = new LinkedBlockingDeque<>(SIZE);
521 >        Item[] items = new Item[2]; items[0] = zero;
522 >        Collection<Item> elements = Arrays.asList(items);
523          try {
524              q.addAll(elements);
525              shouldThrow();
# Line 526 | Line 530 | public class LinkedBlockingDequeTest ext
530       * addAll throws IllegalStateException if not enough room
531       */
532      public void testAddAll4() {
533 <        LinkedBlockingDeque q = new LinkedBlockingDeque(SIZE - 1);
534 <        Integer[] ints = new Integer[SIZE];
535 <        for (int i = 0; i < SIZE; ++i)
532 <            ints[i] = new Integer(i);
533 <        Collection<Integer> elements = Arrays.asList(ints);
533 >        LinkedBlockingDeque<Item> q = new LinkedBlockingDeque<>(SIZE - 1);
534 >        Item[] items = defaultItems;
535 >        Collection<Item> elements = Arrays.asList(items);
536          try {
537              q.addAll(elements);
538              shouldThrow();
# Line 541 | Line 543 | public class LinkedBlockingDequeTest ext
543       * Deque contains all elements, in traversal order, of successful addAll
544       */
545      public void testAddAll5() {
546 <        Integer[] empty = new Integer[0];
547 <        Integer[] ints = new Integer[SIZE];
548 <        for (int i = 0; i < SIZE; ++i)
547 <            ints[i] = new Integer(i);
548 <        LinkedBlockingDeque q = new LinkedBlockingDeque(SIZE);
546 >        Item[] empty = new Item[0];
547 >        Item[] items = defaultItems;
548 >        LinkedBlockingDeque<Item> q = new LinkedBlockingDeque<>(SIZE);
549          assertFalse(q.addAll(Arrays.asList(empty)));
550 <        assertTrue(q.addAll(Arrays.asList(ints)));
550 >        assertTrue(q.addAll(Arrays.asList(items)));
551          for (int i = 0; i < SIZE; ++i)
552 <            assertEquals(ints[i], q.poll());
552 >            mustEqual(items[i], q.poll());
553      }
554  
555      /**
556       * all elements successfully put are contained
557       */
558      public void testPut() throws InterruptedException {
559 <        LinkedBlockingDeque q = new LinkedBlockingDeque(SIZE);
559 >        LinkedBlockingDeque<Item> q = new LinkedBlockingDeque<>(SIZE);
560          for (int i = 0; i < SIZE; ++i) {
561 <            Integer x = new Integer(i);
561 >            Item x = itemFor(i);
562              q.put(x);
563 <            assertTrue(q.contains(x));
563 >            mustContain(q, x);
564          }
565 <        assertEquals(0, q.remainingCapacity());
565 >        mustEqual(0, q.remainingCapacity());
566      }
567  
568      /**
569       * put blocks interruptibly if full
570       */
571      public void testBlockingPut() throws InterruptedException {
572 <        final LinkedBlockingDeque q = new LinkedBlockingDeque(SIZE);
572 >        final LinkedBlockingDeque<Item> q = new LinkedBlockingDeque<>(SIZE);
573          final CountDownLatch pleaseInterrupt = new CountDownLatch(1);
574          Thread t = newStartedThread(new CheckedRunnable() {
575              public void realRun() throws InterruptedException {
576                  for (int i = 0; i < SIZE; ++i)
577 <                    q.put(i);
578 <                assertEquals(SIZE, q.size());
579 <                assertEquals(0, q.remainingCapacity());
577 >                    q.put(itemFor(i));
578 >                mustEqual(SIZE, q.size());
579 >                mustEqual(0, q.remainingCapacity());
580  
581                  Thread.currentThread().interrupt();
582                  try {
583 <                    q.put(99);
583 >                    q.put(ninetynine);
584                      shouldThrow();
585                  } catch (InterruptedException success) {}
586                  assertFalse(Thread.interrupted());
587  
588                  pleaseInterrupt.countDown();
589                  try {
590 <                    q.put(99);
590 >                    q.put(ninetynine);
591                      shouldThrow();
592                  } catch (InterruptedException success) {}
593                  assertFalse(Thread.interrupted());
594              }});
595  
596          await(pleaseInterrupt);
597 <        assertThreadStaysAlive(t);
597 >        if (randomBoolean()) assertThreadBlocks(t, Thread.State.WAITING);
598          t.interrupt();
599          awaitTermination(t);
600 <        assertEquals(SIZE, q.size());
601 <        assertEquals(0, q.remainingCapacity());
600 >        mustEqual(SIZE, q.size());
601 >        mustEqual(0, q.remainingCapacity());
602      }
603  
604      /**
# Line 606 | Line 606 | public class LinkedBlockingDequeTest ext
606       */
607      public void testPutWithTake() throws InterruptedException {
608          final int capacity = 2;
609 <        final LinkedBlockingDeque q = new LinkedBlockingDeque(capacity);
609 >        final LinkedBlockingDeque<Item> q = new LinkedBlockingDeque<>(capacity);
610          final CountDownLatch pleaseTake = new CountDownLatch(1);
611          final CountDownLatch pleaseInterrupt = new CountDownLatch(1);
612          Thread t = newStartedThread(new CheckedRunnable() {
613              public void realRun() throws InterruptedException {
614                  for (int i = 0; i < capacity; i++)
615 <                    q.put(i);
615 >                    q.put(itemFor(i));
616                  pleaseTake.countDown();
617 <                q.put(86);
617 >                q.put(eightysix);
618 >
619 >                Thread.currentThread().interrupt();
620 >                try {
621 >                    q.put(ninetynine);
622 >                    shouldThrow();
623 >                } catch (InterruptedException success) {}
624 >                assertFalse(Thread.interrupted());
625  
626                  pleaseInterrupt.countDown();
627                  try {
628 <                    q.put(99);
628 >                    q.put(ninetynine);
629                      shouldThrow();
630                  } catch (InterruptedException success) {}
631                  assertFalse(Thread.interrupted());
632              }});
633  
634          await(pleaseTake);
635 <        assertEquals(0, q.remainingCapacity());
636 <        assertEquals(0, q.take());
635 >        mustEqual(0, q.remainingCapacity());
636 >        mustEqual(0, q.take());
637  
638          await(pleaseInterrupt);
639 <        assertThreadStaysAlive(t);
639 >        if (randomBoolean()) assertThreadBlocks(t, Thread.State.WAITING);
640          t.interrupt();
641          awaitTermination(t);
642 <        assertEquals(0, q.remainingCapacity());
642 >        mustEqual(0, q.remainingCapacity());
643      }
644  
645      /**
646       * timed offer times out if full and elements not taken
647       */
648 <    public void testTimedOffer() throws InterruptedException {
649 <        final LinkedBlockingDeque q = new LinkedBlockingDeque(2);
648 >    public void testTimedOffer() {
649 >        final LinkedBlockingDeque<Item> q = new LinkedBlockingDeque<>(2);
650          final CountDownLatch pleaseInterrupt = new CountDownLatch(1);
651          Thread t = newStartedThread(new CheckedRunnable() {
652              public void realRun() throws InterruptedException {
653 <                q.put(new Object());
654 <                q.put(new Object());
653 >                q.put(zero);
654 >                q.put(one);
655                  long startTime = System.nanoTime();
656 <                assertFalse(q.offer(new Object(), timeoutMillis(), MILLISECONDS));
656 >
657 >                assertFalse(q.offer(two, timeoutMillis(), MILLISECONDS));
658                  assertTrue(millisElapsedSince(startTime) >= timeoutMillis());
659 +
660 +                Thread.currentThread().interrupt();
661 +                try {
662 +                    q.offer(three, randomTimeout(), randomTimeUnit());
663 +                    shouldThrow();
664 +                } catch (InterruptedException success) {}
665 +                assertFalse(Thread.interrupted());
666 +
667                  pleaseInterrupt.countDown();
668                  try {
669 <                    q.offer(new Object(), 2 * LONG_DELAY_MS, MILLISECONDS);
669 >                    q.offer(four, LONGER_DELAY_MS, MILLISECONDS);
670                      shouldThrow();
671                  } catch (InterruptedException success) {}
672 +                assertFalse(Thread.interrupted());
673              }});
674  
675          await(pleaseInterrupt);
676 <        assertThreadStaysAlive(t);
676 >        if (randomBoolean()) assertThreadBlocks(t, Thread.State.TIMED_WAITING);
677          t.interrupt();
678          awaitTermination(t);
679      }
# Line 665 | Line 682 | public class LinkedBlockingDequeTest ext
682       * take retrieves elements in FIFO order
683       */
684      public void testTake() throws InterruptedException {
685 <        LinkedBlockingDeque q = populatedDeque(SIZE);
685 >        LinkedBlockingDeque<Item> q = populatedDeque(SIZE);
686          for (int i = 0; i < SIZE; ++i) {
687 <            assertEquals(i, q.take());
687 >            mustEqual(i, q.take());
688          }
689      }
690  
# Line 675 | Line 692 | public class LinkedBlockingDequeTest ext
692       * take removes existing elements until empty, then blocks interruptibly
693       */
694      public void testBlockingTake() throws InterruptedException {
695 <        final LinkedBlockingDeque q = populatedDeque(SIZE);
695 >        final LinkedBlockingDeque<Item> q = populatedDeque(SIZE);
696          final CountDownLatch pleaseInterrupt = new CountDownLatch(1);
697          Thread t = newStartedThread(new CheckedRunnable() {
698              public void realRun() throws InterruptedException {
699 <                for (int i = 0; i < SIZE; ++i) {
683 <                    assertEquals(i, q.take());
684 <                }
699 >                for (int i = 0; i < SIZE; i++) mustEqual(i, q.take());
700  
701                  Thread.currentThread().interrupt();
702                  try {
# Line 699 | Line 714 | public class LinkedBlockingDequeTest ext
714              }});
715  
716          await(pleaseInterrupt);
717 <        assertThreadStaysAlive(t);
717 >        if (randomBoolean()) assertThreadBlocks(t, Thread.State.WAITING);
718          t.interrupt();
719          awaitTermination(t);
720      }
# Line 708 | Line 723 | public class LinkedBlockingDequeTest ext
723       * poll succeeds unless empty
724       */
725      public void testPoll() {
726 <        LinkedBlockingDeque q = populatedDeque(SIZE);
726 >        LinkedBlockingDeque<Item> q = populatedDeque(SIZE);
727          for (int i = 0; i < SIZE; ++i) {
728 <            assertEquals(i, q.poll());
728 >            mustEqual(i, q.poll());
729          }
730          assertNull(q.poll());
731      }
# Line 719 | Line 734 | public class LinkedBlockingDequeTest ext
734       * timed poll with zero timeout succeeds when non-empty, else times out
735       */
736      public void testTimedPoll0() throws InterruptedException {
737 <        LinkedBlockingDeque q = populatedDeque(SIZE);
737 >        LinkedBlockingDeque<Item> q = populatedDeque(SIZE);
738          for (int i = 0; i < SIZE; ++i) {
739 <            assertEquals(i, q.poll(0, MILLISECONDS));
739 >            mustEqual(i, q.poll(0, MILLISECONDS));
740          }
741          assertNull(q.poll(0, MILLISECONDS));
742      }
# Line 730 | Line 745 | public class LinkedBlockingDequeTest ext
745       * timed poll with nonzero timeout succeeds when non-empty, else times out
746       */
747      public void testTimedPoll() throws InterruptedException {
748 <        LinkedBlockingDeque q = populatedDeque(SIZE);
748 >        LinkedBlockingDeque<Item> q = populatedDeque(SIZE);
749          for (int i = 0; i < SIZE; ++i) {
750              long startTime = System.nanoTime();
751 <            assertEquals(i, q.poll(LONG_DELAY_MS, MILLISECONDS));
751 >            mustEqual(i, q.poll(LONG_DELAY_MS, MILLISECONDS));
752              assertTrue(millisElapsedSince(startTime) < LONG_DELAY_MS);
753          }
754          long startTime = System.nanoTime();
# Line 747 | Line 762 | public class LinkedBlockingDequeTest ext
762       * returning timeout status
763       */
764      public void testInterruptedTimedPoll() throws InterruptedException {
765 <        final BlockingQueue<Integer> q = populatedDeque(SIZE);
766 <        final CountDownLatch aboutToWait = new CountDownLatch(1);
765 >        final BlockingQueue<Item> q = populatedDeque(SIZE);
766 >        final CountDownLatch pleaseInterrupt = new CountDownLatch(1);
767          Thread t = newStartedThread(new CheckedRunnable() {
768              public void realRun() throws InterruptedException {
769 <                for (int i = 0; i < SIZE; ++i) {
770 <                    long t0 = System.nanoTime();
771 <                    assertEquals(i, (int) q.poll(LONG_DELAY_MS, MILLISECONDS));
772 <                    assertTrue(millisElapsedSince(t0) < SMALL_DELAY_MS);
773 <                }
774 <                long t0 = System.nanoTime();
775 <                aboutToWait.countDown();
776 <                try {
777 <                    q.poll(MEDIUM_DELAY_MS, MILLISECONDS);
778 <                    shouldThrow();
779 <                } catch (InterruptedException success) {
780 <                    assertTrue(millisElapsedSince(t0) < MEDIUM_DELAY_MS);
781 <                }
769 >                for (int i = 0; i < SIZE; i++)
770 >                    mustEqual(i, q.poll(LONG_DELAY_MS, MILLISECONDS));
771 >
772 >                Thread.currentThread().interrupt();
773 >                try {
774 >                    q.poll(randomTimeout(), randomTimeUnit());
775 >                    shouldThrow();
776 >                } catch (InterruptedException success) {}
777 >                assertFalse(Thread.interrupted());
778 >
779 >                pleaseInterrupt.countDown();
780 >                try {
781 >                    q.poll(LONGER_DELAY_MS, MILLISECONDS);
782 >                    shouldThrow();
783 >                } catch (InterruptedException success) {}
784 >                assertFalse(Thread.interrupted());
785              }});
786  
787 <        aboutToWait.await();
788 <        waitForThreadToEnterWaitState(t, SMALL_DELAY_MS);
787 >        await(pleaseInterrupt);
788 >        if (randomBoolean()) assertThreadBlocks(t, Thread.State.TIMED_WAITING);
789          t.interrupt();
790 <        awaitTermination(t, MEDIUM_DELAY_MS);
790 >        awaitTermination(t);
791          checkEmpty(q);
792      }
793  
# Line 777 | Line 795 | public class LinkedBlockingDequeTest ext
795       * putFirst(null) throws NPE
796       */
797      public void testPutFirstNull() throws InterruptedException {
798 <        LinkedBlockingDeque q = new LinkedBlockingDeque(SIZE);
798 >        LinkedBlockingDeque<Item> q = new LinkedBlockingDeque<>(SIZE);
799          try {
800              q.putFirst(null);
801              shouldThrow();
# Line 788 | Line 806 | public class LinkedBlockingDequeTest ext
806       * all elements successfully putFirst are contained
807       */
808      public void testPutFirst() throws InterruptedException {
809 <        LinkedBlockingDeque q = new LinkedBlockingDeque(SIZE);
809 >        LinkedBlockingDeque<Item> q = new LinkedBlockingDeque<>(SIZE);
810          for (int i = 0; i < SIZE; ++i) {
811 <            Integer x = new Integer(i);
811 >            Item x = itemFor(i);
812              q.putFirst(x);
813 <            assertTrue(q.contains(x));
813 >            mustContain(q, x);
814          }
815 <        assertEquals(0, q.remainingCapacity());
815 >        mustEqual(0, q.remainingCapacity());
816      }
817  
818      /**
819       * putFirst blocks interruptibly if full
820       */
821      public void testBlockingPutFirst() throws InterruptedException {
822 <        final LinkedBlockingDeque q = new LinkedBlockingDeque(SIZE);
822 >        final LinkedBlockingDeque<Item> q = new LinkedBlockingDeque<>(SIZE);
823          final CountDownLatch pleaseInterrupt = new CountDownLatch(1);
824          Thread t = newStartedThread(new CheckedRunnable() {
825              public void realRun() throws InterruptedException {
826                  for (int i = 0; i < SIZE; ++i)
827 <                    q.putFirst(i);
828 <                assertEquals(SIZE, q.size());
829 <                assertEquals(0, q.remainingCapacity());
827 >                    q.putFirst(itemFor(i));
828 >                mustEqual(SIZE, q.size());
829 >                mustEqual(0, q.remainingCapacity());
830  
831                  Thread.currentThread().interrupt();
832                  try {
833 <                    q.putFirst(99);
833 >                    q.putFirst(ninetynine);
834                      shouldThrow();
835                  } catch (InterruptedException success) {}
836                  assertFalse(Thread.interrupted());
837  
838                  pleaseInterrupt.countDown();
839                  try {
840 <                    q.putFirst(99);
840 >                    q.putFirst(ninetynine);
841                      shouldThrow();
842                  } catch (InterruptedException success) {}
843                  assertFalse(Thread.interrupted());
844              }});
845  
846          await(pleaseInterrupt);
847 <        assertThreadStaysAlive(t);
847 >        if (randomBoolean()) assertThreadBlocks(t, Thread.State.WAITING);
848          t.interrupt();
849          awaitTermination(t);
850 <        assertEquals(SIZE, q.size());
851 <        assertEquals(0, q.remainingCapacity());
850 >        mustEqual(SIZE, q.size());
851 >        mustEqual(0, q.remainingCapacity());
852      }
853  
854      /**
# Line 838 | Line 856 | public class LinkedBlockingDequeTest ext
856       */
857      public void testPutFirstWithTake() throws InterruptedException {
858          final int capacity = 2;
859 <        final LinkedBlockingDeque q = new LinkedBlockingDeque(capacity);
859 >        final LinkedBlockingDeque<Item> q = new LinkedBlockingDeque<>(capacity);
860          final CountDownLatch pleaseTake = new CountDownLatch(1);
861          final CountDownLatch pleaseInterrupt = new CountDownLatch(1);
862          Thread t = newStartedThread(new CheckedRunnable() {
863              public void realRun() throws InterruptedException {
864                  for (int i = 0; i < capacity; i++)
865 <                    q.putFirst(i);
865 >                    q.putFirst(itemFor(i));
866                  pleaseTake.countDown();
867 <                q.putFirst(86);
867 >                q.putFirst(eightysix);
868  
869                  pleaseInterrupt.countDown();
870                  try {
871 <                    q.putFirst(99);
871 >                    q.putFirst(ninetynine);
872                      shouldThrow();
873                  } catch (InterruptedException success) {}
874                  assertFalse(Thread.interrupted());
875              }});
876  
877          await(pleaseTake);
878 <        assertEquals(0, q.remainingCapacity());
879 <        assertEquals(capacity - 1, q.take());
878 >        mustEqual(0, q.remainingCapacity());
879 >        mustEqual(capacity - 1, q.take());
880  
881          await(pleaseInterrupt);
882 <        assertThreadStaysAlive(t);
882 >        if (randomBoolean()) assertThreadBlocks(t, Thread.State.WAITING);
883          t.interrupt();
884          awaitTermination(t);
885 <        assertEquals(0, q.remainingCapacity());
885 >        mustEqual(0, q.remainingCapacity());
886      }
887  
888      /**
889       * timed offerFirst times out if full and elements not taken
890       */
891 <    public void testTimedOfferFirst() throws InterruptedException {
892 <        final LinkedBlockingDeque q = new LinkedBlockingDeque(2);
891 >    public void testTimedOfferFirst() {
892 >        final LinkedBlockingDeque<Item> q = new LinkedBlockingDeque<>(2);
893          final CountDownLatch pleaseInterrupt = new CountDownLatch(1);
894          Thread t = newStartedThread(new CheckedRunnable() {
895              public void realRun() throws InterruptedException {
896 <                q.putFirst(new Object());
897 <                q.putFirst(new Object());
896 >                q.putFirst(zero);
897 >                q.putFirst(one);
898                  long startTime = System.nanoTime();
899 <                assertFalse(q.offerFirst(new Object(), timeoutMillis(), MILLISECONDS));
899 >
900 >                assertFalse(q.offerFirst(two, timeoutMillis(), MILLISECONDS));
901                  assertTrue(millisElapsedSince(startTime) >= timeoutMillis());
902 +
903 +                Thread.currentThread().interrupt();
904 +                try {
905 +                    q.offerFirst(three, randomTimeout(), randomTimeUnit());
906 +                    shouldThrow();
907 +                } catch (InterruptedException success) {}
908 +                assertFalse(Thread.interrupted());
909 +
910                  pleaseInterrupt.countDown();
911                  try {
912 <                    q.offerFirst(new Object(), 2 * LONG_DELAY_MS, MILLISECONDS);
912 >                    q.offerFirst(four, LONGER_DELAY_MS, MILLISECONDS);
913                      shouldThrow();
914                  } catch (InterruptedException success) {}
915 +                assertFalse(Thread.interrupted());
916              }});
917  
918          await(pleaseInterrupt);
919 <        assertThreadStaysAlive(t);
919 >        if (randomBoolean()) assertThreadBlocks(t, Thread.State.TIMED_WAITING);
920          t.interrupt();
921          awaitTermination(t);
922      }
# Line 897 | Line 925 | public class LinkedBlockingDequeTest ext
925       * take retrieves elements in FIFO order
926       */
927      public void testTakeFirst() throws InterruptedException {
928 <        LinkedBlockingDeque q = populatedDeque(SIZE);
928 >        LinkedBlockingDeque<Item> q = populatedDeque(SIZE);
929          for (int i = 0; i < SIZE; ++i) {
930 <            assertEquals(i, q.takeFirst());
930 >            mustEqual(i, q.takeFirst());
931          }
932      }
933  
# Line 907 | Line 935 | public class LinkedBlockingDequeTest ext
935       * takeFirst() blocks interruptibly when empty
936       */
937      public void testTakeFirstFromEmptyBlocksInterruptibly() {
938 <        final BlockingDeque q = new LinkedBlockingDeque();
938 >        final BlockingDeque<Item> q = new LinkedBlockingDeque<>();
939          final CountDownLatch threadStarted = new CountDownLatch(1);
940          Thread t = newStartedThread(new CheckedRunnable() {
941              public void realRun() {
# Line 920 | Line 948 | public class LinkedBlockingDequeTest ext
948              }});
949  
950          await(threadStarted);
951 <        assertThreadStaysAlive(t);
951 >        if (randomBoolean()) assertThreadBlocks(t, Thread.State.WAITING);
952          t.interrupt();
953          awaitTermination(t);
954      }
# Line 930 | Line 958 | public class LinkedBlockingDequeTest ext
958       * before waiting
959       */
960      public void testTakeFirstFromEmptyAfterInterrupt() {
961 <        final BlockingDeque q = new LinkedBlockingDeque();
961 >        final BlockingDeque<Item> q = new LinkedBlockingDeque<>();
962          Thread t = newStartedThread(new CheckedRunnable() {
963              public void realRun() {
964                  Thread.currentThread().interrupt();
# Line 948 | Line 976 | public class LinkedBlockingDequeTest ext
976       * takeLast() blocks interruptibly when empty
977       */
978      public void testTakeLastFromEmptyBlocksInterruptibly() {
979 <        final BlockingDeque q = new LinkedBlockingDeque();
979 >        final BlockingDeque<Item> q = new LinkedBlockingDeque<>();
980          final CountDownLatch threadStarted = new CountDownLatch(1);
981          Thread t = newStartedThread(new CheckedRunnable() {
982              public void realRun() {
# Line 961 | Line 989 | public class LinkedBlockingDequeTest ext
989              }});
990  
991          await(threadStarted);
992 <        assertThreadStaysAlive(t);
992 >        if (randomBoolean()) assertThreadBlocks(t, Thread.State.WAITING);
993          t.interrupt();
994          awaitTermination(t);
995      }
# Line 971 | Line 999 | public class LinkedBlockingDequeTest ext
999       * before waiting
1000       */
1001      public void testTakeLastFromEmptyAfterInterrupt() {
1002 <        final BlockingDeque q = new LinkedBlockingDeque();
1002 >        final BlockingDeque<Item> q = new LinkedBlockingDeque<>();
1003          Thread t = newStartedThread(new CheckedRunnable() {
1004              public void realRun() {
1005                  Thread.currentThread().interrupt();
# Line 989 | Line 1017 | public class LinkedBlockingDequeTest ext
1017       * takeFirst removes existing elements until empty, then blocks interruptibly
1018       */
1019      public void testBlockingTakeFirst() throws InterruptedException {
1020 <        final LinkedBlockingDeque q = populatedDeque(SIZE);
1020 >        final LinkedBlockingDeque<Item> q = populatedDeque(SIZE);
1021          final CountDownLatch pleaseInterrupt = new CountDownLatch(1);
1022          Thread t = newStartedThread(new CheckedRunnable() {
1023              public void realRun() throws InterruptedException {
1024 <                for (int i = 0; i < SIZE; ++i) {
997 <                    assertEquals(i, q.takeFirst());
998 <                }
1024 >                for (int i = 0; i < SIZE; i++) mustEqual(i, q.takeFirst());
1025  
1026                  Thread.currentThread().interrupt();
1027                  try {
# Line 1013 | Line 1039 | public class LinkedBlockingDequeTest ext
1039              }});
1040  
1041          await(pleaseInterrupt);
1042 <        assertThreadStaysAlive(t);
1042 >        if (randomBoolean()) assertThreadBlocks(t, Thread.State.WAITING);
1043          t.interrupt();
1044          awaitTermination(t);
1045      }
# Line 1022 | Line 1048 | public class LinkedBlockingDequeTest ext
1048       * timed pollFirst with zero timeout succeeds when non-empty, else times out
1049       */
1050      public void testTimedPollFirst0() throws InterruptedException {
1051 <        LinkedBlockingDeque q = populatedDeque(SIZE);
1051 >        LinkedBlockingDeque<Item> q = populatedDeque(SIZE);
1052          for (int i = 0; i < SIZE; ++i) {
1053 <            assertEquals(i, q.pollFirst(0, MILLISECONDS));
1053 >            mustEqual(i, q.pollFirst(0, MILLISECONDS));
1054          }
1055          assertNull(q.pollFirst(0, MILLISECONDS));
1056      }
# Line 1033 | Line 1059 | public class LinkedBlockingDequeTest ext
1059       * timed pollFirst with nonzero timeout succeeds when non-empty, else times out
1060       */
1061      public void testTimedPollFirst() throws InterruptedException {
1062 <        LinkedBlockingDeque q = populatedDeque(SIZE);
1062 >        LinkedBlockingDeque<Item> q = populatedDeque(SIZE);
1063          for (int i = 0; i < SIZE; ++i) {
1064              long startTime = System.nanoTime();
1065 <            assertEquals(i, q.pollFirst(LONG_DELAY_MS, MILLISECONDS));
1065 >            mustEqual(i, q.pollFirst(LONG_DELAY_MS, MILLISECONDS));
1066              assertTrue(millisElapsedSince(startTime) < LONG_DELAY_MS);
1067          }
1068          long startTime = System.nanoTime();
# Line 1050 | Line 1076 | public class LinkedBlockingDequeTest ext
1076       * returning timeout status
1077       */
1078      public void testInterruptedTimedPollFirst() throws InterruptedException {
1079 +        final LinkedBlockingDeque<Item> q = populatedDeque(SIZE);
1080          final CountDownLatch pleaseInterrupt = new CountDownLatch(1);
1081          Thread t = newStartedThread(new CheckedRunnable() {
1082              public void realRun() throws InterruptedException {
1083 <                LinkedBlockingDeque q = populatedDeque(SIZE);
1084 <                for (int i = 0; i < SIZE; ++i) {
1058 <                    assertEquals(i, q.pollFirst(LONG_DELAY_MS, MILLISECONDS));
1059 <                }
1083 >                for (int i = 0; i < SIZE; i++)
1084 >                    mustEqual(i, q.pollFirst(LONG_DELAY_MS, MILLISECONDS));
1085  
1086                  Thread.currentThread().interrupt();
1087                  try {
1088 <                    q.pollFirst(SMALL_DELAY_MS, MILLISECONDS);
1088 >                    q.pollFirst(randomTimeout(), randomTimeUnit());
1089                      shouldThrow();
1090                  } catch (InterruptedException success) {}
1091                  assertFalse(Thread.interrupted());
1092  
1093                  pleaseInterrupt.countDown();
1094                  try {
1095 <                    q.pollFirst(LONG_DELAY_MS, MILLISECONDS);
1095 >                    q.pollFirst(LONGER_DELAY_MS, MILLISECONDS);
1096                      shouldThrow();
1097                  } catch (InterruptedException success) {}
1098                  assertFalse(Thread.interrupted());
1099              }});
1100  
1101          await(pleaseInterrupt);
1102 <        assertThreadStaysAlive(t);
1102 >        if (randomBoolean()) assertThreadBlocks(t, Thread.State.TIMED_WAITING);
1103          t.interrupt();
1104          awaitTermination(t);
1105      }
# Line 1084 | Line 1109 | public class LinkedBlockingDequeTest ext
1109       * on interruption throws
1110       */
1111      public void testTimedPollFirstWithOfferFirst() throws InterruptedException {
1112 <        final LinkedBlockingDeque q = new LinkedBlockingDeque(2);
1112 >        final LinkedBlockingDeque<Item> q = new LinkedBlockingDeque<>(2);
1113          final CheckedBarrier barrier = new CheckedBarrier(2);
1114          Thread t = newStartedThread(new CheckedRunnable() {
1115              public void realRun() throws InterruptedException {
# Line 1098 | Line 1123 | public class LinkedBlockingDequeTest ext
1123  
1124                  Thread.currentThread().interrupt();
1125                  try {
1126 <                    q.pollFirst(LONG_DELAY_MS, MILLISECONDS);
1126 >                    q.pollFirst(randomTimeout(), randomTimeUnit());
1127                      shouldThrow();
1128                  } catch (InterruptedException success) {}
1129  
# Line 1107 | Line 1132 | public class LinkedBlockingDequeTest ext
1132                      q.pollFirst(LONG_DELAY_MS, MILLISECONDS);
1133                      shouldThrow();
1134                  } catch (InterruptedException success) {}
1135 +                assertFalse(Thread.interrupted());
1136 +
1137                  assertTrue(millisElapsedSince(startTime) < LONG_DELAY_MS);
1138              }});
1139  
# Line 1115 | Line 1142 | public class LinkedBlockingDequeTest ext
1142          assertTrue(q.offerFirst(zero, LONG_DELAY_MS, MILLISECONDS));
1143          assertTrue(millisElapsedSince(startTime) < LONG_DELAY_MS);
1144          barrier.await();
1145 <        assertThreadStaysAlive(t);
1145 >        if (randomBoolean()) assertThreadBlocks(t, Thread.State.TIMED_WAITING);
1146          t.interrupt();
1147          awaitTermination(t);
1148      }
# Line 1124 | Line 1151 | public class LinkedBlockingDequeTest ext
1151       * putLast(null) throws NPE
1152       */
1153      public void testPutLastNull() throws InterruptedException {
1154 <        LinkedBlockingDeque q = new LinkedBlockingDeque(SIZE);
1154 >        LinkedBlockingDeque<Item> q = new LinkedBlockingDeque<>(SIZE);
1155          try {
1156              q.putLast(null);
1157              shouldThrow();
# Line 1135 | Line 1162 | public class LinkedBlockingDequeTest ext
1162       * all elements successfully putLast are contained
1163       */
1164      public void testPutLast() throws InterruptedException {
1165 <        LinkedBlockingDeque q = new LinkedBlockingDeque(SIZE);
1165 >        LinkedBlockingDeque<Item> q = new LinkedBlockingDeque<>(SIZE);
1166          for (int i = 0; i < SIZE; ++i) {
1167 <            Integer x = new Integer(i);
1167 >            Item x = itemFor(i);
1168              q.putLast(x);
1169 <            assertTrue(q.contains(x));
1169 >            mustContain(q, x);
1170          }
1171 <        assertEquals(0, q.remainingCapacity());
1171 >        mustEqual(0, q.remainingCapacity());
1172      }
1173  
1174      /**
1175       * putLast blocks interruptibly if full
1176       */
1177      public void testBlockingPutLast() throws InterruptedException {
1178 <        final LinkedBlockingDeque q = new LinkedBlockingDeque(SIZE);
1178 >        final LinkedBlockingDeque<Item> q = new LinkedBlockingDeque<>(SIZE);
1179          final CountDownLatch pleaseInterrupt = new CountDownLatch(1);
1180          Thread t = newStartedThread(new CheckedRunnable() {
1181              public void realRun() throws InterruptedException {
1182                  for (int i = 0; i < SIZE; ++i)
1183 <                    q.putLast(i);
1184 <                assertEquals(SIZE, q.size());
1185 <                assertEquals(0, q.remainingCapacity());
1183 >                    q.putLast(itemFor(i));
1184 >                mustEqual(SIZE, q.size());
1185 >                mustEqual(0, q.remainingCapacity());
1186  
1187                  Thread.currentThread().interrupt();
1188                  try {
1189 <                    q.putLast(99);
1189 >                    q.putLast(ninetynine);
1190                      shouldThrow();
1191                  } catch (InterruptedException success) {}
1192                  assertFalse(Thread.interrupted());
1193  
1194                  pleaseInterrupt.countDown();
1195                  try {
1196 <                    q.putLast(99);
1196 >                    q.putLast(ninetynine);
1197                      shouldThrow();
1198                  } catch (InterruptedException success) {}
1199                  assertFalse(Thread.interrupted());
1200              }});
1201  
1202          await(pleaseInterrupt);
1203 <        assertThreadStaysAlive(t);
1203 >        if (randomBoolean()) assertThreadBlocks(t, Thread.State.WAITING);
1204          t.interrupt();
1205          awaitTermination(t);
1206 <        assertEquals(SIZE, q.size());
1207 <        assertEquals(0, q.remainingCapacity());
1206 >        mustEqual(SIZE, q.size());
1207 >        mustEqual(0, q.remainingCapacity());
1208      }
1209  
1210      /**
# Line 1185 | Line 1212 | public class LinkedBlockingDequeTest ext
1212       */
1213      public void testPutLastWithTake() throws InterruptedException {
1214          final int capacity = 2;
1215 <        final LinkedBlockingDeque q = new LinkedBlockingDeque(capacity);
1215 >        final LinkedBlockingDeque<Item> q = new LinkedBlockingDeque<>(capacity);
1216          final CountDownLatch pleaseTake = new CountDownLatch(1);
1217          final CountDownLatch pleaseInterrupt = new CountDownLatch(1);
1218          Thread t = newStartedThread(new CheckedRunnable() {
1219              public void realRun() throws InterruptedException {
1220                  for (int i = 0; i < capacity; i++)
1221 <                    q.putLast(i);
1221 >                    q.putLast(itemFor(i));
1222                  pleaseTake.countDown();
1223 <                q.putLast(86);
1223 >                q.putLast(eightysix);
1224 >
1225 >                Thread.currentThread().interrupt();
1226 >                try {
1227 >                    q.putLast(ninetynine);
1228 >                    shouldThrow();
1229 >                } catch (InterruptedException success) {}
1230 >                assertFalse(Thread.interrupted());
1231  
1232                  pleaseInterrupt.countDown();
1233                  try {
1234 <                    q.putLast(99);
1234 >                    q.putLast(ninetynine);
1235                      shouldThrow();
1236                  } catch (InterruptedException success) {}
1237                  assertFalse(Thread.interrupted());
1238              }});
1239  
1240          await(pleaseTake);
1241 <        assertEquals(0, q.remainingCapacity());
1242 <        assertEquals(0, q.take());
1241 >        mustEqual(0, q.remainingCapacity());
1242 >        mustEqual(0, q.take());
1243  
1244          await(pleaseInterrupt);
1245 <        assertThreadStaysAlive(t);
1245 >        if (randomBoolean()) assertThreadBlocks(t, Thread.State.WAITING);
1246          t.interrupt();
1247          awaitTermination(t);
1248 <        assertEquals(0, q.remainingCapacity());
1248 >        mustEqual(0, q.remainingCapacity());
1249      }
1250  
1251      /**
1252       * timed offerLast times out if full and elements not taken
1253       */
1254 <    public void testTimedOfferLast() throws InterruptedException {
1255 <        final LinkedBlockingDeque q = new LinkedBlockingDeque(2);
1254 >    public void testTimedOfferLast() {
1255 >        final LinkedBlockingDeque<Item> q = new LinkedBlockingDeque<>(2);
1256          final CountDownLatch pleaseInterrupt = new CountDownLatch(1);
1257          Thread t = newStartedThread(new CheckedRunnable() {
1258              public void realRun() throws InterruptedException {
1259 <                q.putLast(new Object());
1260 <                q.putLast(new Object());
1259 >                q.putLast(zero);
1260 >                q.putLast(one);
1261                  long startTime = System.nanoTime();
1262 <                assertFalse(q.offerLast(new Object(), timeoutMillis(), MILLISECONDS));
1262 >
1263 >                assertFalse(q.offerLast(two, timeoutMillis(), MILLISECONDS));
1264                  assertTrue(millisElapsedSince(startTime) >= timeoutMillis());
1265 +
1266 +                Thread.currentThread().interrupt();
1267 +                try {
1268 +                    q.offerLast(three, randomTimeout(), randomTimeUnit());
1269 +                    shouldThrow();
1270 +                } catch (InterruptedException success) {}
1271 +
1272                  pleaseInterrupt.countDown();
1273                  try {
1274 <                    q.offerLast(new Object(), 2 * LONG_DELAY_MS, MILLISECONDS);
1274 >                    q.offerLast(four, LONGER_DELAY_MS, MILLISECONDS);
1275                      shouldThrow();
1276                  } catch (InterruptedException success) {}
1277              }});
1278  
1279          await(pleaseInterrupt);
1280 <        assertThreadStaysAlive(t);
1280 >        if (randomBoolean()) assertThreadBlocks(t, Thread.State.TIMED_WAITING);
1281          t.interrupt();
1282          awaitTermination(t);
1283      }
# Line 1244 | Line 1286 | public class LinkedBlockingDequeTest ext
1286       * takeLast retrieves elements in FIFO order
1287       */
1288      public void testTakeLast() throws InterruptedException {
1289 <        LinkedBlockingDeque q = populatedDeque(SIZE);
1289 >        LinkedBlockingDeque<Item> q = populatedDeque(SIZE);
1290          for (int i = 0; i < SIZE; ++i) {
1291 <            assertEquals(SIZE - i - 1, q.takeLast());
1291 >            mustEqual(SIZE - i - 1, q.takeLast());
1292          }
1293      }
1294  
# Line 1254 | Line 1296 | public class LinkedBlockingDequeTest ext
1296       * takeLast removes existing elements until empty, then blocks interruptibly
1297       */
1298      public void testBlockingTakeLast() throws InterruptedException {
1299 <        final LinkedBlockingDeque q = populatedDeque(SIZE);
1299 >        final LinkedBlockingDeque<Item> q = populatedDeque(SIZE);
1300          final CountDownLatch pleaseInterrupt = new CountDownLatch(1);
1301          Thread t = newStartedThread(new CheckedRunnable() {
1302              public void realRun() throws InterruptedException {
1303 <                for (int i = 0; i < SIZE; ++i) {
1304 <                    assertEquals(SIZE - i - 1, q.takeLast());
1263 <                }
1303 >                for (int i = 0; i < SIZE; i++)
1304 >                    mustEqual(SIZE - i - 1, q.takeLast());
1305  
1306                  Thread.currentThread().interrupt();
1307                  try {
# Line 1278 | Line 1319 | public class LinkedBlockingDequeTest ext
1319              }});
1320  
1321          await(pleaseInterrupt);
1322 <        assertThreadStaysAlive(t);
1322 >        if (randomBoolean()) assertThreadBlocks(t, Thread.State.WAITING);
1323          t.interrupt();
1324          awaitTermination(t);
1325      }
# Line 1287 | Line 1328 | public class LinkedBlockingDequeTest ext
1328       * timed pollLast with zero timeout succeeds when non-empty, else times out
1329       */
1330      public void testTimedPollLast0() throws InterruptedException {
1331 <        LinkedBlockingDeque q = populatedDeque(SIZE);
1331 >        LinkedBlockingDeque<Item> q = populatedDeque(SIZE);
1332          for (int i = 0; i < SIZE; ++i) {
1333 <            assertEquals(SIZE - i - 1, q.pollLast(0, MILLISECONDS));
1333 >            mustEqual(SIZE - i - 1, q.pollLast(0, MILLISECONDS));
1334          }
1335          assertNull(q.pollLast(0, MILLISECONDS));
1336      }
# Line 1298 | Line 1339 | public class LinkedBlockingDequeTest ext
1339       * timed pollLast with nonzero timeout succeeds when non-empty, else times out
1340       */
1341      public void testTimedPollLast() throws InterruptedException {
1342 <        LinkedBlockingDeque q = populatedDeque(SIZE);
1342 >        LinkedBlockingDeque<Item> q = populatedDeque(SIZE);
1343          for (int i = 0; i < SIZE; ++i) {
1344              long startTime = System.nanoTime();
1345 <            assertEquals(SIZE - i - 1, q.pollLast(LONG_DELAY_MS, MILLISECONDS));
1345 >            mustEqual(SIZE - i - 1, q.pollLast(LONG_DELAY_MS, MILLISECONDS));
1346              assertTrue(millisElapsedSince(startTime) < LONG_DELAY_MS);
1347          }
1348          long startTime = System.nanoTime();
# Line 1315 | Line 1356 | public class LinkedBlockingDequeTest ext
1356       * returning timeout status
1357       */
1358      public void testInterruptedTimedPollLast() throws InterruptedException {
1359 +        final LinkedBlockingDeque<Item> q = populatedDeque(SIZE);
1360          final CountDownLatch pleaseInterrupt = new CountDownLatch(1);
1361          Thread t = newStartedThread(new CheckedRunnable() {
1362              public void realRun() throws InterruptedException {
1363 <                LinkedBlockingDeque q = populatedDeque(SIZE);
1364 <                for (int i = 0; i < SIZE; ++i) {
1323 <                    assertEquals(SIZE - i - 1,
1363 >                for (int i = 0; i < SIZE; i++)
1364 >                    mustEqual(SIZE - i - 1,
1365                                   q.pollLast(LONG_DELAY_MS, MILLISECONDS));
1325                }
1366  
1367                  Thread.currentThread().interrupt();
1368                  try {
1369 <                    q.pollLast(LONG_DELAY_MS, MILLISECONDS);
1369 >                    q.pollLast(randomTimeout(), randomTimeUnit());
1370                      shouldThrow();
1371                  } catch (InterruptedException success) {}
1372                  assertFalse(Thread.interrupted());
1373  
1374                  pleaseInterrupt.countDown();
1375                  try {
1376 <                    q.pollLast(LONG_DELAY_MS, MILLISECONDS);
1376 >                    q.pollLast(LONGER_DELAY_MS, MILLISECONDS);
1377                      shouldThrow();
1378                  } catch (InterruptedException success) {}
1379                  assertFalse(Thread.interrupted());
1380              }});
1381  
1382          await(pleaseInterrupt);
1383 <        assertThreadStaysAlive(t);
1383 >        if (randomBoolean()) assertThreadBlocks(t, Thread.State.TIMED_WAITING);
1384          t.interrupt();
1385          awaitTermination(t);
1386 +        checkEmpty(q);
1387      }
1388  
1389      /**
# Line 1350 | Line 1391 | public class LinkedBlockingDequeTest ext
1391       * on interruption throws
1392       */
1393      public void testTimedPollWithOfferLast() throws InterruptedException {
1394 <        final LinkedBlockingDeque q = new LinkedBlockingDeque(2);
1394 >        final LinkedBlockingDeque<Item> q = new LinkedBlockingDeque<>(2);
1395          final CheckedBarrier barrier = new CheckedBarrier(2);
1396          Thread t = newStartedThread(new CheckedRunnable() {
1397              public void realRun() throws InterruptedException {
# Line 1364 | Line 1405 | public class LinkedBlockingDequeTest ext
1405  
1406                  Thread.currentThread().interrupt();
1407                  try {
1408 <                    q.poll(LONG_DELAY_MS, MILLISECONDS);
1408 >                    q.poll(randomTimeout(), randomTimeUnit());
1409                      shouldThrow();
1410                  } catch (InterruptedException success) {}
1411                  assertFalse(Thread.interrupted());
# Line 1375 | Line 1416 | public class LinkedBlockingDequeTest ext
1416                      shouldThrow();
1417                  } catch (InterruptedException success) {}
1418                  assertFalse(Thread.interrupted());
1419 +
1420 +                assertTrue(millisElapsedSince(startTime) < LONG_DELAY_MS);
1421              }});
1422  
1423          barrier.await();
# Line 1383 | Line 1426 | public class LinkedBlockingDequeTest ext
1426          assertTrue(millisElapsedSince(startTime) < LONG_DELAY_MS);
1427  
1428          barrier.await();
1429 <        assertThreadStaysAlive(t);
1429 >        if (randomBoolean()) assertThreadBlocks(t, Thread.State.TIMED_WAITING);
1430          t.interrupt();
1431          awaitTermination(t);
1432      }
# Line 1392 | Line 1435 | public class LinkedBlockingDequeTest ext
1435       * element returns next element, or throws NSEE if empty
1436       */
1437      public void testElement() {
1438 <        LinkedBlockingDeque q = populatedDeque(SIZE);
1438 >        LinkedBlockingDeque<Item> q = populatedDeque(SIZE);
1439          for (int i = 0; i < SIZE; ++i) {
1440 <            assertEquals(i, q.element());
1440 >            mustEqual(i, q.element());
1441              q.poll();
1442          }
1443          try {
# Line 1407 | Line 1450 | public class LinkedBlockingDequeTest ext
1450       * contains(x) reports true when elements added but not yet removed
1451       */
1452      public void testContains() {
1453 <        LinkedBlockingDeque q = populatedDeque(SIZE);
1453 >        LinkedBlockingDeque<Item> q = populatedDeque(SIZE);
1454          for (int i = 0; i < SIZE; ++i) {
1455 <            assertTrue(q.contains(new Integer(i)));
1455 >            mustContain(q, i);
1456              q.poll();
1457 <            assertFalse(q.contains(new Integer(i)));
1457 >            mustNotContain(q, i);
1458          }
1459      }
1460  
# Line 1419 | Line 1462 | public class LinkedBlockingDequeTest ext
1462       * clear removes all elements
1463       */
1464      public void testClear() {
1465 <        LinkedBlockingDeque q = populatedDeque(SIZE);
1465 >        LinkedBlockingDeque<Item> q = populatedDeque(SIZE);
1466          q.clear();
1467          assertTrue(q.isEmpty());
1468 <        assertEquals(0, q.size());
1469 <        assertEquals(SIZE, q.remainingCapacity());
1468 >        mustEqual(0, q.size());
1469 >        mustEqual(SIZE, q.remainingCapacity());
1470          q.add(one);
1471          assertFalse(q.isEmpty());
1472 <        assertTrue(q.contains(one));
1472 >        mustContain(q, one);
1473          q.clear();
1474          assertTrue(q.isEmpty());
1475      }
# Line 1435 | Line 1478 | public class LinkedBlockingDequeTest ext
1478       * containsAll(c) is true when c contains a subset of elements
1479       */
1480      public void testContainsAll() {
1481 <        LinkedBlockingDeque q = populatedDeque(SIZE);
1482 <        LinkedBlockingDeque p = new LinkedBlockingDeque(SIZE);
1481 >        LinkedBlockingDeque<Item> q = populatedDeque(SIZE);
1482 >        LinkedBlockingDeque<Item> p = new LinkedBlockingDeque<>(SIZE);
1483          for (int i = 0; i < SIZE; ++i) {
1484              assertTrue(q.containsAll(p));
1485              assertFalse(p.containsAll(q));
1486 <            p.add(new Integer(i));
1486 >            mustAdd(p, i);
1487          }
1488          assertTrue(p.containsAll(q));
1489      }
# Line 1449 | Line 1492 | public class LinkedBlockingDequeTest ext
1492       * retainAll(c) retains only those elements of c and reports true if changed
1493       */
1494      public void testRetainAll() {
1495 <        LinkedBlockingDeque q = populatedDeque(SIZE);
1496 <        LinkedBlockingDeque p = populatedDeque(SIZE);
1495 >        LinkedBlockingDeque<Item> q = populatedDeque(SIZE);
1496 >        LinkedBlockingDeque<Item> p = populatedDeque(SIZE);
1497          for (int i = 0; i < SIZE; ++i) {
1498              boolean changed = q.retainAll(p);
1499              if (i == 0)
# Line 1459 | Line 1502 | public class LinkedBlockingDequeTest ext
1502                  assertTrue(changed);
1503  
1504              assertTrue(q.containsAll(p));
1505 <            assertEquals(SIZE - i, q.size());
1505 >            mustEqual(SIZE - i, q.size());
1506              p.remove();
1507          }
1508      }
# Line 1469 | Line 1512 | public class LinkedBlockingDequeTest ext
1512       */
1513      public void testRemoveAll() {
1514          for (int i = 1; i < SIZE; ++i) {
1515 <            LinkedBlockingDeque q = populatedDeque(SIZE);
1516 <            LinkedBlockingDeque p = populatedDeque(i);
1515 >            LinkedBlockingDeque<Item> q = populatedDeque(SIZE);
1516 >            LinkedBlockingDeque<Item> p = populatedDeque(i);
1517              assertTrue(q.removeAll(p));
1518 <            assertEquals(SIZE - i, q.size());
1518 >            mustEqual(SIZE - i, q.size());
1519              for (int j = 0; j < i; ++j) {
1520 <                Integer x = (Integer)(p.remove());
1478 <                assertFalse(q.contains(x));
1520 >                mustNotContain(q, p.remove());
1521              }
1522          }
1523      }
# Line 1484 | Line 1526 | public class LinkedBlockingDequeTest ext
1526       * toArray contains all elements in FIFO order
1527       */
1528      public void testToArray() throws InterruptedException {
1529 <        LinkedBlockingDeque q = populatedDeque(SIZE);
1530 <        Object[] o = q.toArray();
1531 <        for (int i = 0; i < o.length; i++)
1532 <            assertSame(o[i], q.poll());
1529 >        LinkedBlockingDeque<Item> q = populatedDeque(SIZE);
1530 >        Object[] a = q.toArray();
1531 >        assertSame(Object[].class, a.getClass());
1532 >        for (Object o : a)
1533 >            assertSame(o, q.poll());
1534 >        assertTrue(q.isEmpty());
1535      }
1536  
1537      /**
1538       * toArray(a) contains all elements in FIFO order
1539       */
1540      public void testToArray2() {
1541 <        LinkedBlockingDeque<Integer> q = populatedDeque(SIZE);
1542 <        Integer[] ints = new Integer[SIZE];
1543 <        Integer[] array = q.toArray(ints);
1544 <        assertSame(ints, array);
1545 <        for (int i = 0; i < ints.length; i++)
1546 <            assertSame(ints[i], q.remove());
1541 >        LinkedBlockingDeque<Item> q = populatedDeque(SIZE);
1542 >        Item[] items = new Item[SIZE];
1543 >        Item[] array = q.toArray(items);
1544 >        assertSame(items, array);
1545 >        for (Item o : items)
1546 >            assertSame(o, q.remove());
1547 >        assertTrue(q.isEmpty());
1548      }
1549  
1550      /**
1551       * toArray(incompatible array type) throws ArrayStoreException
1552       */
1553      public void testToArray1_BadArg() {
1554 <        LinkedBlockingDeque q = populatedDeque(SIZE);
1554 >        LinkedBlockingDeque<Item> q = populatedDeque(SIZE);
1555          try {
1556              q.toArray(new String[10]);
1557              shouldThrow();
# Line 1517 | Line 1562 | public class LinkedBlockingDequeTest ext
1562       * iterator iterates through all elements
1563       */
1564      public void testIterator() throws InterruptedException {
1565 <        LinkedBlockingDeque q = populatedDeque(SIZE);
1566 <        Iterator it = q.iterator();
1565 >        LinkedBlockingDeque<Item> q = populatedDeque(SIZE);
1566 >        Iterator<? extends Item> it = q.iterator();
1567          int i;
1568          for (i = 0; it.hasNext(); i++)
1569 <            assertTrue(q.contains(it.next()));
1570 <        assertEquals(i, SIZE);
1569 >            mustContain(q, it.next());
1570 >        mustEqual(i, SIZE);
1571          assertIteratorExhausted(it);
1572  
1573          it = q.iterator();
1574          for (i = 0; it.hasNext(); i++)
1575 <            assertEquals(it.next(), q.take());
1576 <        assertEquals(i, SIZE);
1575 >            mustEqual(it.next(), q.take());
1576 >        mustEqual(i, SIZE);
1577          assertIteratorExhausted(it);
1578      }
1579  
# Line 1536 | Line 1581 | public class LinkedBlockingDequeTest ext
1581       * iterator of empty collection has no elements
1582       */
1583      public void testEmptyIterator() {
1584 <        Deque c = new LinkedBlockingDeque();
1584 >        Deque<Item> c = new LinkedBlockingDeque<>();
1585          assertIteratorExhausted(c.iterator());
1586          assertIteratorExhausted(c.descendingIterator());
1587      }
# Line 1545 | Line 1590 | public class LinkedBlockingDequeTest ext
1590       * iterator.remove removes current element
1591       */
1592      public void testIteratorRemove() {
1593 <        final LinkedBlockingDeque q = new LinkedBlockingDeque(3);
1593 >        final LinkedBlockingDeque<Item> q = new LinkedBlockingDeque<>(3);
1594          q.add(two);
1595          q.add(one);
1596          q.add(three);
1597  
1598 <        Iterator it = q.iterator();
1598 >        Iterator<? extends Item> it = q.iterator();
1599          it.next();
1600          it.remove();
1601  
# Line 1564 | Line 1609 | public class LinkedBlockingDequeTest ext
1609       * iterator ordering is FIFO
1610       */
1611      public void testIteratorOrdering() {
1612 <        final LinkedBlockingDeque q = new LinkedBlockingDeque(3);
1612 >        final LinkedBlockingDeque<Item> q = new LinkedBlockingDeque<>(3);
1613          q.add(one);
1614          q.add(two);
1615          q.add(three);
1616 <        assertEquals(0, q.remainingCapacity());
1616 >        mustEqual(0, q.remainingCapacity());
1617          int k = 0;
1618 <        for (Iterator it = q.iterator(); it.hasNext();) {
1619 <            assertEquals(++k, it.next());
1618 >        for (Iterator<? extends Item> it = q.iterator(); it.hasNext();) {
1619 >            mustEqual(++k, it.next());
1620          }
1621 <        assertEquals(3, k);
1621 >        mustEqual(3, k);
1622      }
1623  
1624      /**
1625       * Modifications do not cause iterators to fail
1626       */
1627      public void testWeaklyConsistentIteration() {
1628 <        final LinkedBlockingDeque q = new LinkedBlockingDeque(3);
1628 >        final LinkedBlockingDeque<Item> q = new LinkedBlockingDeque<>(3);
1629          q.add(one);
1630          q.add(two);
1631          q.add(three);
1632 <        for (Iterator it = q.iterator(); it.hasNext();) {
1632 >        for (Iterator<? extends Item> it = q.iterator(); it.hasNext();) {
1633              q.remove();
1634              it.next();
1635          }
1636 <        assertEquals(0, q.size());
1636 >        mustEqual(0, q.size());
1637      }
1638  
1639      /**
1640       * Descending iterator iterates through all elements
1641       */
1642      public void testDescendingIterator() {
1643 <        LinkedBlockingDeque q = populatedDeque(SIZE);
1643 >        LinkedBlockingDeque<Item> q = populatedDeque(SIZE);
1644          int i = 0;
1645 <        Iterator it = q.descendingIterator();
1645 >        Iterator<? extends Item> it = q.descendingIterator();
1646          while (it.hasNext()) {
1647 <            assertTrue(q.contains(it.next()));
1647 >            mustContain(q, it.next());
1648              ++i;
1649          }
1650 <        assertEquals(i, SIZE);
1650 >        mustEqual(i, SIZE);
1651          assertFalse(it.hasNext());
1652          try {
1653              it.next();
# Line 1614 | Line 1659 | public class LinkedBlockingDequeTest ext
1659       * Descending iterator ordering is reverse FIFO
1660       */
1661      public void testDescendingIteratorOrdering() {
1662 <        final LinkedBlockingDeque q = new LinkedBlockingDeque();
1662 >        final LinkedBlockingDeque<Item> q = new LinkedBlockingDeque<>();
1663          for (int iters = 0; iters < 100; ++iters) {
1664 <            q.add(new Integer(3));
1665 <            q.add(new Integer(2));
1666 <            q.add(new Integer(1));
1664 >            mustAdd(q, three);
1665 >            mustAdd(q, two);
1666 >            mustAdd(q, one);
1667 >
1668              int k = 0;
1669 <            for (Iterator it = q.descendingIterator(); it.hasNext();) {
1670 <                assertEquals(++k, it.next());
1669 >            for (Iterator<? extends Item> it = q.descendingIterator(); it.hasNext();) {
1670 >                mustEqual(++k, it.next());
1671              }
1672  
1673 <            assertEquals(3, k);
1673 >            mustEqual(3, k);
1674              q.remove();
1675              q.remove();
1676              q.remove();
# Line 1635 | Line 1681 | public class LinkedBlockingDequeTest ext
1681       * descendingIterator.remove removes current element
1682       */
1683      public void testDescendingIteratorRemove() {
1684 <        final LinkedBlockingDeque q = new LinkedBlockingDeque();
1684 >        final LinkedBlockingDeque<Item> q = new LinkedBlockingDeque<>();
1685          for (int iters = 0; iters < 100; ++iters) {
1686 <            q.add(new Integer(3));
1687 <            q.add(new Integer(2));
1688 <            q.add(new Integer(1));
1689 <            Iterator it = q.descendingIterator();
1690 <            assertEquals(it.next(), new Integer(1));
1686 >            mustAdd(q, three);
1687 >            mustAdd(q, two);
1688 >            mustAdd(q, one);
1689 >            Iterator<? extends Item> it = q.descendingIterator();
1690 >            mustEqual(it.next(), one);
1691              it.remove();
1692 <            assertEquals(it.next(), new Integer(2));
1692 >            mustEqual(it.next(), two);
1693              it = q.descendingIterator();
1694 <            assertEquals(it.next(), new Integer(2));
1695 <            assertEquals(it.next(), new Integer(3));
1694 >            mustEqual(it.next(), two);
1695 >            mustEqual(it.next(), three);
1696              it.remove();
1697              assertFalse(it.hasNext());
1698              q.remove();
# Line 1657 | Line 1703 | public class LinkedBlockingDequeTest ext
1703       * toString contains toStrings of elements
1704       */
1705      public void testToString() {
1706 <        LinkedBlockingDeque q = populatedDeque(SIZE);
1706 >        LinkedBlockingDeque<Item> q = populatedDeque(SIZE);
1707          String s = q.toString();
1708          for (int i = 0; i < SIZE; ++i) {
1709              assertTrue(s.contains(String.valueOf(i)));
# Line 1668 | Line 1714 | public class LinkedBlockingDequeTest ext
1714       * offer transfers elements across Executor tasks
1715       */
1716      public void testOfferInExecutor() {
1717 <        final LinkedBlockingDeque q = new LinkedBlockingDeque(2);
1717 >        final LinkedBlockingDeque<Item> q = new LinkedBlockingDeque<>(2);
1718          q.add(one);
1719          q.add(two);
1720          final CheckedBarrier threadsStarted = new CheckedBarrier(2);
# Line 1679 | Line 1725 | public class LinkedBlockingDequeTest ext
1725                      assertFalse(q.offer(three));
1726                      threadsStarted.await();
1727                      assertTrue(q.offer(three, LONG_DELAY_MS, MILLISECONDS));
1728 <                    assertEquals(0, q.remainingCapacity());
1728 >                    mustEqual(0, q.remainingCapacity());
1729                  }});
1730  
1731              executor.execute(new CheckedRunnable() {
# Line 1694 | Line 1740 | public class LinkedBlockingDequeTest ext
1740       * timed poll retrieves elements across Executor threads
1741       */
1742      public void testPollInExecutor() {
1743 <        final LinkedBlockingDeque q = new LinkedBlockingDeque(2);
1743 >        final LinkedBlockingDeque<Item> q = new LinkedBlockingDeque<>(2);
1744          final CheckedBarrier threadsStarted = new CheckedBarrier(2);
1745          final ExecutorService executor = Executors.newFixedThreadPool(2);
1746          try (PoolCleaner cleaner = cleaner(executor)) {
# Line 1715 | Line 1761 | public class LinkedBlockingDequeTest ext
1761      }
1762  
1763      /**
1764 <     * A deserialized serialized deque has same elements in same order
1764 >     * A deserialized/reserialized deque has same elements in same order
1765       */
1766      public void testSerialization() throws Exception {
1767 <        Queue x = populatedDeque(SIZE);
1768 <        Queue y = serialClone(x);
1767 >        Queue<Item> x = populatedDeque(SIZE);
1768 >        Queue<Item> y = serialClone(x);
1769  
1770          assertNotSame(y, x);
1771 <        assertEquals(x.size(), y.size());
1772 <        assertEquals(x.toString(), y.toString());
1771 >        mustEqual(x.size(), y.size());
1772 >        mustEqual(x.toString(), y.toString());
1773          assertTrue(Arrays.equals(x.toArray(), y.toArray()));
1774          while (!x.isEmpty()) {
1775              assertFalse(y.isEmpty());
1776 <            assertEquals(x.remove(), y.remove());
1776 >            mustEqual(x.remove(), y.remove());
1777          }
1778          assertTrue(y.isEmpty());
1779      }
# Line 1736 | Line 1782 | public class LinkedBlockingDequeTest ext
1782       * drainTo(c) empties deque into another collection c
1783       */
1784      public void testDrainTo() {
1785 <        LinkedBlockingDeque q = populatedDeque(SIZE);
1786 <        ArrayList l = new ArrayList();
1785 >        LinkedBlockingDeque<Item> q = populatedDeque(SIZE);
1786 >        ArrayList<Item> l = new ArrayList<>();
1787          q.drainTo(l);
1788 <        assertEquals(0, q.size());
1789 <        assertEquals(SIZE, l.size());
1788 >        mustEqual(0, q.size());
1789 >        mustEqual(SIZE, l.size());
1790          for (int i = 0; i < SIZE; ++i)
1791 <            assertEquals(l.get(i), new Integer(i));
1791 >            mustEqual(l.get(i), i);
1792          q.add(zero);
1793          q.add(one);
1794          assertFalse(q.isEmpty());
1795 <        assertTrue(q.contains(zero));
1796 <        assertTrue(q.contains(one));
1795 >        mustContain(q, zero);
1796 >        mustContain(q, one);
1797          l.clear();
1798          q.drainTo(l);
1799 <        assertEquals(0, q.size());
1800 <        assertEquals(2, l.size());
1799 >        mustEqual(0, q.size());
1800 >        mustEqual(2, l.size());
1801          for (int i = 0; i < 2; ++i)
1802 <            assertEquals(l.get(i), new Integer(i));
1802 >            mustEqual(l.get(i), i);
1803      }
1804  
1805      /**
1806       * drainTo empties full deque, unblocking a waiting put.
1807       */
1808      public void testDrainToWithActivePut() throws InterruptedException {
1809 <        final LinkedBlockingDeque q = populatedDeque(SIZE);
1809 >        final LinkedBlockingDeque<Item> q = populatedDeque(SIZE);
1810          Thread t = new Thread(new CheckedRunnable() {
1811              public void realRun() throws InterruptedException {
1812 <                q.put(new Integer(SIZE + 1));
1812 >                q.put(new Item(SIZE + 1));
1813              }});
1814  
1815          t.start();
1816 <        ArrayList l = new ArrayList();
1816 >        ArrayList<Item> l = new ArrayList<>();
1817          q.drainTo(l);
1818          assertTrue(l.size() >= SIZE);
1819          for (int i = 0; i < SIZE; ++i)
1820 <            assertEquals(l.get(i), new Integer(i));
1820 >            mustEqual(l.get(i), i);
1821          t.join();
1822          assertTrue(q.size() + l.size() >= SIZE);
1823      }
# Line 1780 | Line 1826 | public class LinkedBlockingDequeTest ext
1826       * drainTo(c, n) empties first min(n, size) elements of queue into c
1827       */
1828      public void testDrainToN() {
1829 <        LinkedBlockingDeque q = new LinkedBlockingDeque();
1829 >        LinkedBlockingDeque<Item> q = new LinkedBlockingDeque<>();
1830          for (int i = 0; i < SIZE + 2; ++i) {
1831              for (int j = 0; j < SIZE; j++)
1832 <                assertTrue(q.offer(new Integer(j)));
1833 <            ArrayList l = new ArrayList();
1832 >                mustOffer(q, j);
1833 >            ArrayList<Item> l = new ArrayList<>();
1834              q.drainTo(l, i);
1835              int k = (i < SIZE) ? i : SIZE;
1836 <            assertEquals(k, l.size());
1837 <            assertEquals(SIZE - k, q.size());
1836 >            mustEqual(k, l.size());
1837 >            mustEqual(SIZE - k, q.size());
1838              for (int j = 0; j < k; ++j)
1839 <                assertEquals(l.get(j), new Integer(j));
1839 >                mustEqual(l.get(j), j);
1840              do {} while (q.poll() != null);
1841          }
1842      }
# Line 1800 | Line 1846 | public class LinkedBlockingDequeTest ext
1846       */
1847      public void testNeverContainsNull() {
1848          Deque<?>[] qs = {
1849 <            new LinkedBlockingDeque<Object>(),
1849 >            new LinkedBlockingDeque<>(),
1850              populatedDeque(2),
1851          };
1852  

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines