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

Comparing jsr166/src/test/tck/ArrayDequeTest.java (file contents):
Revision 1.29 by jsr166, Sun Nov 23 22:27:06 2014 UTC vs.
Revision 1.41 by jsr166, Sun Oct 16 20:44:18 2016 UTC

# Line 4 | Line 4
4   * http://creativecommons.org/publicdomain/zero/1.0/
5   */
6  
7 import junit.framework.*;
8 import java.util.Arrays;
7   import java.util.ArrayDeque;
8 + import java.util.Arrays;
9   import java.util.Collection;
10   import java.util.Deque;
11   import java.util.Iterator;
# Line 14 | Line 13 | import java.util.NoSuchElementException;
13   import java.util.Queue;
14   import java.util.Random;
15  
16 + import junit.framework.Test;
17 + import junit.framework.TestSuite;
18 +
19   public class ArrayDequeTest extends JSR166TestCase {
20      public static void main(String[] args) {
21 <        junit.textui.TestRunner.run(suite());
21 >        main(suite(), args);
22      }
23  
24      public static Test suite() {
25 <        return new TestSuite(ArrayDequeTest.class);
25 >        class Implementation implements CollectionImplementation {
26 >            public Class<?> klazz() { return ArrayDeque.class; }
27 >            public Collection emptyCollection() { return new ArrayDeque(); }
28 >            public Object makeElement(int i) { return i; }
29 >            public boolean isConcurrent() { return false; }
30 >            public boolean permitsNulls() { return false; }
31 >        }
32 >        return newTestSuite(ArrayDequeTest.class,
33 >                            CollectionTest.testSuite(new Implementation()));
34      }
35  
36      /**
37       * Returns a new deque of given size containing consecutive
38 <     * Integers 0 ... n.
38 >     * Integers 0 ... n - 1.
39       */
40      private ArrayDeque<Integer> populatedDeque(int n) {
41          ArrayDeque<Integer> q = new ArrayDeque<Integer>();
# Line 34 | Line 44 | public class ArrayDequeTest extends JSR1
44              assertTrue(q.offerLast(new Integer(i)));
45          assertFalse(q.isEmpty());
46          assertEquals(n, q.size());
47 +        assertEquals((Integer) 0, q.peekFirst());
48 +        assertEquals((Integer) (n - 1), q.peekLast());
49          return q;
50      }
51  
# Line 49 | Line 61 | public class ArrayDequeTest extends JSR1
61       */
62      public void testConstructor3() {
63          try {
64 <            ArrayDeque q = new ArrayDeque((Collection)null);
64 >            new ArrayDeque((Collection)null);
65              shouldThrow();
66          } catch (NullPointerException success) {}
67      }
# Line 59 | Line 71 | public class ArrayDequeTest extends JSR1
71       */
72      public void testConstructor4() {
73          try {
74 <            Integer[] ints = new Integer[SIZE];
63 <            ArrayDeque q = new ArrayDeque(Arrays.asList(ints));
74 >            new ArrayDeque(Arrays.asList(new Integer[SIZE]));
75              shouldThrow();
76          } catch (NullPointerException success) {}
77      }
# Line 69 | Line 80 | public class ArrayDequeTest extends JSR1
80       * Initializing from Collection with some null elements throws NPE
81       */
82      public void testConstructor5() {
83 +        Integer[] ints = new Integer[SIZE];
84 +        for (int i = 0; i < SIZE - 1; ++i)
85 +            ints[i] = new Integer(i);
86          try {
87 <            Integer[] ints = new Integer[SIZE];
74 <            for (int i = 0; i < SIZE-1; ++i)
75 <                ints[i] = new Integer(i);
76 <            ArrayDeque q = new ArrayDeque(Arrays.asList(ints));
87 >            new ArrayDeque(Arrays.asList(ints));
88              shouldThrow();
89          } catch (NullPointerException success) {}
90      }
# Line 110 | Line 121 | public class ArrayDequeTest extends JSR1
121      public void testSize() {
122          ArrayDeque q = populatedDeque(SIZE);
123          for (int i = 0; i < SIZE; ++i) {
124 <            assertEquals(SIZE-i, q.size());
124 >            assertEquals(SIZE - i, q.size());
125              q.removeFirst();
126          }
127          for (int i = 0; i < SIZE; ++i) {
# Line 123 | Line 134 | public class ArrayDequeTest extends JSR1
134       * push(null) throws NPE
135       */
136      public void testPushNull() {
137 +        ArrayDeque q = new ArrayDeque(1);
138          try {
127            ArrayDeque q = new ArrayDeque(1);
139              q.push(null);
140              shouldThrow();
141          } catch (NullPointerException success) {}
# Line 158 | Line 169 | public class ArrayDequeTest extends JSR1
169       * offer(null) throws NPE
170       */
171      public void testOfferNull() {
172 +        ArrayDeque q = new ArrayDeque();
173          try {
162            ArrayDeque q = new ArrayDeque();
174              q.offer(null);
175              shouldThrow();
176          } catch (NullPointerException success) {}
# Line 169 | Line 180 | public class ArrayDequeTest extends JSR1
180       * offerFirst(null) throws NPE
181       */
182      public void testOfferFirstNull() {
183 +        ArrayDeque q = new ArrayDeque();
184          try {
173            ArrayDeque q = new ArrayDeque();
185              q.offerFirst(null);
186              shouldThrow();
187          } catch (NullPointerException success) {}
# Line 180 | Line 191 | public class ArrayDequeTest extends JSR1
191       * offerLast(null) throws NPE
192       */
193      public void testOfferLastNull() {
194 +        ArrayDeque q = new ArrayDeque();
195          try {
184            ArrayDeque q = new ArrayDeque();
196              q.offerLast(null);
197              shouldThrow();
198          } catch (NullPointerException success) {}
# Line 224 | Line 235 | public class ArrayDequeTest extends JSR1
235       * add(null) throws NPE
236       */
237      public void testAddNull() {
238 +        ArrayDeque q = new ArrayDeque();
239          try {
228            ArrayDeque q = new ArrayDeque();
240              q.add(null);
241              shouldThrow();
242          } catch (NullPointerException success) {}
# Line 235 | Line 246 | public class ArrayDequeTest extends JSR1
246       * addFirst(null) throws NPE
247       */
248      public void testAddFirstNull() {
249 +        ArrayDeque q = new ArrayDeque();
250          try {
239            ArrayDeque q = new ArrayDeque();
251              q.addFirst(null);
252              shouldThrow();
253          } catch (NullPointerException success) {}
# Line 246 | Line 257 | public class ArrayDequeTest extends JSR1
257       * addLast(null) throws NPE
258       */
259      public void testAddLastNull() {
260 +        ArrayDeque q = new ArrayDeque();
261          try {
250            ArrayDeque q = new ArrayDeque();
262              q.addLast(null);
263              shouldThrow();
264          } catch (NullPointerException success) {}
# Line 290 | Line 301 | public class ArrayDequeTest extends JSR1
301       * addAll(null) throws NPE
302       */
303      public void testAddAll1() {
304 +        ArrayDeque q = new ArrayDeque();
305          try {
294            ArrayDeque q = new ArrayDeque();
306              q.addAll(null);
307              shouldThrow();
308          } catch (NullPointerException success) {}
# Line 301 | Line 312 | public class ArrayDequeTest extends JSR1
312       * addAll of a collection with null elements throws NPE
313       */
314      public void testAddAll2() {
315 +        ArrayDeque q = new ArrayDeque();
316          try {
317 <            ArrayDeque q = new ArrayDeque();
306 <            Integer[] ints = new Integer[SIZE];
307 <            q.addAll(Arrays.asList(ints));
317 >            q.addAll(Arrays.asList(new Integer[SIZE]));
318              shouldThrow();
319          } catch (NullPointerException success) {}
320      }
# Line 314 | Line 324 | public class ArrayDequeTest extends JSR1
324       * possibly adding some elements
325       */
326      public void testAddAll3() {
327 +        ArrayDeque q = new ArrayDeque();
328 +        Integer[] ints = new Integer[SIZE];
329 +        for (int i = 0; i < SIZE - 1; ++i)
330 +            ints[i] = new Integer(i);
331          try {
318            ArrayDeque q = new ArrayDeque();
319            Integer[] ints = new Integer[SIZE];
320            for (int i = 0; i < SIZE-1; ++i)
321                ints[i] = new Integer(i);
332              q.addAll(Arrays.asList(ints));
333              shouldThrow();
334          } catch (NullPointerException success) {}
# Line 355 | Line 365 | public class ArrayDequeTest extends JSR1
365       */
366      public void testPollLast() {
367          ArrayDeque q = populatedDeque(SIZE);
368 <        for (int i = SIZE-1; i >= 0; --i) {
368 >        for (int i = SIZE - 1; i >= 0; --i) {
369              assertEquals(i, q.pollLast());
370          }
371          assertNull(q.pollLast());
# Line 391 | Line 401 | public class ArrayDequeTest extends JSR1
401       */
402      public void testRemoveElement() {
403          ArrayDeque q = populatedDeque(SIZE);
404 <        for (int i = 1; i < SIZE; i+=2) {
404 >        for (int i = 1; i < SIZE; i += 2) {
405              assertTrue(q.contains(i));
406              assertTrue(q.remove(i));
407              assertFalse(q.contains(i));
408 <            assertTrue(q.contains(i-1));
408 >            assertTrue(q.contains(i - 1));
409          }
410 <        for (int i = 0; i < SIZE; i+=2) {
410 >        for (int i = 0; i < SIZE; i += 2) {
411              assertTrue(q.contains(i));
412              assertTrue(q.remove(i));
413              assertFalse(q.contains(i));
414 <            assertFalse(q.remove(i+1));
415 <            assertFalse(q.contains(i+1));
414 >            assertFalse(q.remove(i + 1));
415 >            assertFalse(q.contains(i + 1));
416          }
417          assertTrue(q.isEmpty());
418      }
# Line 440 | Line 450 | public class ArrayDequeTest extends JSR1
450       */
451      public void testPeekLast() {
452          ArrayDeque q = populatedDeque(SIZE);
453 <        for (int i = SIZE-1; i >= 0; --i) {
453 >        for (int i = SIZE - 1; i >= 0; --i) {
454              assertEquals(i, q.peekLast());
455              assertEquals(i, q.pollLast());
456              assertTrue(q.peekLast() == null ||
# Line 484 | Line 494 | public class ArrayDequeTest extends JSR1
494       */
495      public void testLastElement() {
496          ArrayDeque q = populatedDeque(SIZE);
497 <        for (int i = SIZE-1; i >= 0; --i) {
497 >        for (int i = SIZE - 1; i >= 0; --i) {
498              assertEquals(i, q.getLast());
499              assertEquals(i, q.pollLast());
500          }
# Line 530 | Line 540 | public class ArrayDequeTest extends JSR1
540       */
541      public void testRemoveFirstOccurrence() {
542          ArrayDeque q = populatedDeque(SIZE);
543 <        for (int i = 1; i < SIZE; i+=2) {
543 >        assertFalse(q.removeFirstOccurrence(null));
544 >        for (int i = 1; i < SIZE; i += 2) {
545              assertTrue(q.removeFirstOccurrence(new Integer(i)));
546          }
547 <        for (int i = 0; i < SIZE; i+=2) {
547 >        for (int i = 0; i < SIZE; i += 2) {
548              assertTrue(q.removeFirstOccurrence(new Integer(i)));
549 <            assertFalse(q.removeFirstOccurrence(new Integer(i+1)));
549 >            assertFalse(q.removeFirstOccurrence(new Integer(i + 1)));
550          }
551          assertTrue(q.isEmpty());
552 +        assertFalse(q.removeFirstOccurrence(null));
553 +        assertFalse(q.removeFirstOccurrence(42));
554 +        q = new ArrayDeque();
555 +        assertFalse(q.removeFirstOccurrence(null));
556 +        assertFalse(q.removeFirstOccurrence(42));
557      }
558  
559      /**
# Line 545 | Line 561 | public class ArrayDequeTest extends JSR1
561       */
562      public void testRemoveLastOccurrence() {
563          ArrayDeque q = populatedDeque(SIZE);
564 <        for (int i = 1; i < SIZE; i+=2) {
564 >        assertFalse(q.removeLastOccurrence(null));
565 >        for (int i = 1; i < SIZE; i += 2) {
566              assertTrue(q.removeLastOccurrence(new Integer(i)));
567          }
568 <        for (int i = 0; i < SIZE; i+=2) {
568 >        for (int i = 0; i < SIZE; i += 2) {
569              assertTrue(q.removeLastOccurrence(new Integer(i)));
570 <            assertFalse(q.removeLastOccurrence(new Integer(i+1)));
570 >            assertFalse(q.removeLastOccurrence(new Integer(i + 1)));
571          }
572          assertTrue(q.isEmpty());
573 +        assertFalse(q.removeLastOccurrence(null));
574 +        assertFalse(q.removeLastOccurrence(42));
575 +        q = new ArrayDeque();
576 +        assertFalse(q.removeLastOccurrence(null));
577 +        assertFalse(q.removeLastOccurrence(42));
578      }
579  
580      /**
# Line 605 | Line 627 | public class ArrayDequeTest extends JSR1
627              boolean changed = q.retainAll(p);
628              assertEquals(changed, (i > 0));
629              assertTrue(q.containsAll(p));
630 <            assertEquals(SIZE-i, q.size());
630 >            assertEquals(SIZE - i, q.size());
631              p.removeFirst();
632          }
633      }
# Line 618 | Line 640 | public class ArrayDequeTest extends JSR1
640              ArrayDeque q = populatedDeque(SIZE);
641              ArrayDeque p = populatedDeque(i);
642              assertTrue(q.removeAll(p));
643 <            assertEquals(SIZE-i, q.size());
643 >            assertEquals(SIZE - i, q.size());
644              for (int j = 0; j < i; ++j) {
645                  assertFalse(q.contains(p.removeFirst()));
646              }
# Line 650 | Line 672 | public class ArrayDequeTest extends JSR1
672          for (int i = 0; i < SIZE; i++) {
673              checkToArray(q);
674              assertEquals(i, q.poll());
675 <            q.addLast(SIZE+i);
675 >            q.addLast(SIZE + i);
676          }
677          for (int i = 0; i < SIZE; i++) {
678              checkToArray(q);
679 <            assertEquals(SIZE+i, q.poll());
679 >            assertEquals(SIZE + i, q.poll());
680          }
681      }
682  
683      void checkToArray2(ArrayDeque q) {
684          int size = q.size();
685 <        Integer[] a1 = size == 0 ? null : new Integer[size-1];
685 >        Integer[] a1 = (size == 0) ? null : new Integer[size - 1];
686          Integer[] a2 = new Integer[size];
687 <        Integer[] a3 = new Integer[size+2];
687 >        Integer[] a3 = new Integer[size + 2];
688          if (size > 0) Arrays.fill(a1, 42);
689          Arrays.fill(a2, 42);
690          Arrays.fill(a3, 42);
691 <        Integer[] b1 = size == 0 ? null : (Integer[]) q.toArray(a1);
691 >        Integer[] b1 = (size == 0) ? null : (Integer[]) q.toArray(a1);
692          Integer[] b2 = (Integer[]) q.toArray(a2);
693          Integer[] b3 = (Integer[]) q.toArray(a3);
694          assertSame(a2, b2);
# Line 680 | Line 702 | public class ArrayDequeTest extends JSR1
702              assertSame(b3[i], x);
703          }
704          assertNull(a3[size]);
705 <        assertEquals(42, (int) a3[size+1]);
705 >        assertEquals(42, (int) a3[size + 1]);
706          if (size > 0) {
707              assertNotSame(a1, b1);
708              assertEquals(size, b1.length);
# Line 703 | Line 725 | public class ArrayDequeTest extends JSR1
725          for (int i = 0; i < SIZE; i++) {
726              checkToArray2(q);
727              assertEquals(i, q.poll());
728 <            q.addLast(SIZE+i);
728 >            q.addLast(SIZE + i);
729          }
730          for (int i = 0; i < SIZE; i++) {
731              checkToArray2(q);
732 <            assertEquals(SIZE+i, q.poll());
732 >            assertEquals(SIZE + i, q.poll());
733          }
734      }
735  
# Line 740 | Line 762 | public class ArrayDequeTest extends JSR1
762       */
763      public void testIterator() {
764          ArrayDeque q = populatedDeque(SIZE);
743        int i = 0;
765          Iterator it = q.iterator();
766 <        while (it.hasNext()) {
766 >        int i;
767 >        for (i = 0; it.hasNext(); i++)
768              assertTrue(q.contains(it.next()));
747            ++i;
748        }
769          assertEquals(i, SIZE);
770 +        assertIteratorExhausted(it);
771 +    }
772 +
773 +    /**
774 +     * iterator of empty collection has no elements
775 +     */
776 +    public void testEmptyIterator() {
777 +        Deque c = new ArrayDeque();
778 +        assertIteratorExhausted(c.iterator());
779 +        assertIteratorExhausted(c.descendingIterator());
780      }
781  
782      /**
# Line 773 | Line 803 | public class ArrayDequeTest extends JSR1
803          final Random rng = new Random();
804          for (int iters = 0; iters < 100; ++iters) {
805              int max = rng.nextInt(5) + 2;
806 <            int split = rng.nextInt(max-1) + 1;
806 >            int split = rng.nextInt(max - 1) + 1;
807              for (int j = 1; j <= max; ++j)
808                  q.add(new Integer(j));
809              Iterator it = q.iterator();
810              for (int j = 1; j <= split; ++j)
811                  assertEquals(it.next(), new Integer(j));
812              it.remove();
813 <            assertEquals(it.next(), new Integer(split+1));
813 >            assertEquals(it.next(), new Integer(split + 1));
814              for (int j = 1; j <= split; ++j)
815                  q.remove(new Integer(j));
816              it = q.iterator();
817 <            for (int j = split+1; j <= max; ++j) {
817 >            for (int j = split + 1; j <= max; ++j) {
818                  assertEquals(it.next(), new Integer(j));
819                  it.remove();
820              }
# Line 841 | Line 871 | public class ArrayDequeTest extends JSR1
871          final Random rng = new Random();
872          for (int iters = 0; iters < 100; ++iters) {
873              int max = rng.nextInt(5) + 2;
874 <            int split = rng.nextInt(max-1) + 1;
874 >            int split = rng.nextInt(max - 1) + 1;
875              for (int j = max; j >= 1; --j)
876                  q.add(new Integer(j));
877              Iterator it = q.descendingIterator();
878              for (int j = 1; j <= split; ++j)
879                  assertEquals(it.next(), new Integer(j));
880              it.remove();
881 <            assertEquals(it.next(), new Integer(split+1));
881 >            assertEquals(it.next(), new Integer(split + 1));
882              for (int j = 1; j <= split; ++j)
883                  q.remove(new Integer(j));
884              it = q.descendingIterator();
885 <            for (int j = split+1; j <= max; ++j) {
885 >            for (int j = split + 1; j <= max; ++j) {
886                  assertEquals(it.next(), new Integer(j));
887                  it.remove();
888              }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines