18f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle/*
28f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * Written by Doug Lea with assistance from members of JCP JSR-166
38f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * Expert Group and released to the public domain, as explained at
48f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * http://creativecommons.org/publicdomain/zero/1.0/
58f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */
68f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
78f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravlepackage jsr166;
88f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
98f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravleimport java.util.ArrayDeque;
108e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamathimport java.util.Arrays;
118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravleimport java.util.Collection;
128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravleimport java.util.Deque;
138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravleimport java.util.Iterator;
148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravleimport java.util.NoSuchElementException;
158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravleimport java.util.Queue;
168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravleimport java.util.Random;
178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
188e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamathimport junit.framework.Test;
198e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamathimport junit.framework.TestSuite;
208e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath
218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravlepublic class ArrayDequeTest extends JSR166TestCase {
228e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath    // android-note: Removed because the CTS runner does a bad job of
238e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath    // retrying tests that have suite() declarations.
248e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath    //
258e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath    // public static void main(String[] args) {
268e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath    //     main(suite(), args);
278e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath    // }
288e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath    // public static Test suite() {
29e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak    //     return new TestSuite(ArrayDequeTest.class);
308e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath    // }
318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * Returns a new deque of given size containing consecutive
348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * Integers 0 ... n.
358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    private ArrayDeque<Integer> populatedDeque(int n) {
378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ArrayDeque<Integer> q = new ArrayDeque<Integer>();
388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(q.isEmpty());
398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = 0; i < n; ++i)
408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertTrue(q.offerLast(new Integer(i)));
418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(q.isEmpty());
428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(n, q.size());
438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        return q;
448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * new deque is empty
488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testConstructor1() {
508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(0, new ArrayDeque().size());
518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * Initializing from null Collection throws NPE
558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testConstructor3() {
578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        try {
588e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath            new ArrayDeque((Collection)null);
598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            shouldThrow();
608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        } catch (NullPointerException success) {}
618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * Initializing from Collection of null elements throws NPE
658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testConstructor4() {
678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        try {
68e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak            new ArrayDeque(Arrays.asList(new Integer[SIZE]));
698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            shouldThrow();
708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        } catch (NullPointerException success) {}
718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * Initializing from Collection with some null elements throws NPE
758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testConstructor5() {
77e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak        Integer[] ints = new Integer[SIZE];
78e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak        for (int i = 0; i < SIZE - 1; ++i)
79e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak            ints[i] = new Integer(i);
808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        try {
818e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath            new ArrayDeque(Arrays.asList(ints));
828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            shouldThrow();
838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        } catch (NullPointerException success) {}
848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * Deque contains all elements of collection used to initialize
888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testConstructor6() {
908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Integer[] ints = new Integer[SIZE];
918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = 0; i < SIZE; ++i)
928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            ints[i] = new Integer(i);
938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ArrayDeque q = new ArrayDeque(Arrays.asList(ints));
948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = 0; i < SIZE; ++i)
958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertEquals(ints[i], q.pollFirst());
968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * isEmpty is true before add, false after
1008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
1018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testEmpty() {
1028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ArrayDeque q = new ArrayDeque();
1038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(q.isEmpty());
1048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        q.add(new Integer(1));
1058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(q.isEmpty());
1068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        q.add(new Integer(2));
1078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        q.removeFirst();
1088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        q.removeFirst();
1098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(q.isEmpty());
1108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
1118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
1128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
1138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * size changes when elements added and removed
1148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
1158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testSize() {
1168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ArrayDeque q = populatedDeque(SIZE);
1178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = 0; i < SIZE; ++i) {
118e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak            assertEquals(SIZE - i, q.size());
1198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            q.removeFirst();
1208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
1218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = 0; i < SIZE; ++i) {
1228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertEquals(i, q.size());
1238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            q.add(new Integer(i));
1248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
1258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
1268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
1278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
1288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * push(null) throws NPE
1298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
1308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testPushNull() {
131e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak        ArrayDeque q = new ArrayDeque(1);
1328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        try {
1338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            q.push(null);
1348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            shouldThrow();
1358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        } catch (NullPointerException success) {}
1368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
1378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
1388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
1398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * peekFirst() returns element inserted with push
1408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
1418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testPush() {
1428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ArrayDeque q = populatedDeque(3);
1438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        q.pollLast();
1448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        q.push(four);
1458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertSame(four, q.peekFirst());
1468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
1478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
1488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
1498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * pop() removes next element, or throws NSEE if empty
1508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
1518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testPop() {
1528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ArrayDeque q = populatedDeque(SIZE);
1538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = 0; i < SIZE; ++i) {
1548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertEquals(i, q.pop());
1558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
1568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        try {
1578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            q.pop();
1588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            shouldThrow();
1598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        } catch (NoSuchElementException success) {}
1608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
1618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
1628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
1638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * offer(null) throws NPE
1648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
1658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testOfferNull() {
166e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak        ArrayDeque q = new ArrayDeque();
1678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        try {
1688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            q.offer(null);
1698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            shouldThrow();
1708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        } catch (NullPointerException success) {}
1718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
1728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
1738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
1748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * offerFirst(null) throws NPE
1758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
1768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testOfferFirstNull() {
177e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak        ArrayDeque q = new ArrayDeque();
1788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        try {
1798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            q.offerFirst(null);
1808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            shouldThrow();
1818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        } catch (NullPointerException success) {}
1828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
1838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
1848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
1858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * offerLast(null) throws NPE
1868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
1878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testOfferLastNull() {
188e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak        ArrayDeque q = new ArrayDeque();
1898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        try {
1908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            q.offerLast(null);
1918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            shouldThrow();
1928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        } catch (NullPointerException success) {}
1938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
1948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
1958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
1968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * offer(x) succeeds
1978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
1988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testOffer() {
1998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ArrayDeque q = new ArrayDeque();
2008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(q.offer(zero));
2018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(q.offer(one));
2028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertSame(zero, q.peekFirst());
2038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertSame(one, q.peekLast());
2048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
2058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
2068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
2078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * offerFirst(x) succeeds
2088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
2098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testOfferFirst() {
2108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ArrayDeque q = new ArrayDeque();
2118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(q.offerFirst(zero));
2128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(q.offerFirst(one));
2138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertSame(one, q.peekFirst());
2148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertSame(zero, q.peekLast());
2158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
2168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
2178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
2188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * offerLast(x) succeeds
2198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
2208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testOfferLast() {
2218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ArrayDeque q = new ArrayDeque();
2228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(q.offerLast(zero));
2238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(q.offerLast(one));
2248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertSame(zero, q.peekFirst());
2258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertSame(one, q.peekLast());
2268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
2278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
2288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
2298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * add(null) throws NPE
2308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
2318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testAddNull() {
232e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak        ArrayDeque q = new ArrayDeque();
2338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        try {
2348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            q.add(null);
2358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            shouldThrow();
2368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        } catch (NullPointerException success) {}
2378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
2388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
2398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
2408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * addFirst(null) throws NPE
2418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
2428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testAddFirstNull() {
243e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak        ArrayDeque q = new ArrayDeque();
2448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        try {
2458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            q.addFirst(null);
2468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            shouldThrow();
2478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        } catch (NullPointerException success) {}
2488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
2498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
2508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
2518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * addLast(null) throws NPE
2528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
2538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testAddLastNull() {
254e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak        ArrayDeque q = new ArrayDeque();
2558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        try {
2568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            q.addLast(null);
2578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            shouldThrow();
2588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        } catch (NullPointerException success) {}
2598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
2608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
2618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
2628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * add(x) succeeds
2638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
2648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testAdd() {
2658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ArrayDeque q = new ArrayDeque();
2668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(q.add(zero));
2678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(q.add(one));
2688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertSame(zero, q.peekFirst());
2698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertSame(one, q.peekLast());
2708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
2718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
2728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
2738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * addFirst(x) succeeds
2748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
2758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testAddFirst() {
2768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ArrayDeque q = new ArrayDeque();
2778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        q.addFirst(zero);
2788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        q.addFirst(one);
2798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertSame(one, q.peekFirst());
2808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertSame(zero, q.peekLast());
2818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
2828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
2838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
2848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * addLast(x) succeeds
2858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
2868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testAddLast() {
2878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ArrayDeque q = new ArrayDeque();
2888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        q.addLast(zero);
2898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        q.addLast(one);
2908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertSame(zero, q.peekFirst());
2918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertSame(one, q.peekLast());
2928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
2938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
2948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
2958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * addAll(null) throws NPE
2968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
2978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testAddAll1() {
298e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak        ArrayDeque q = new ArrayDeque();
2998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        try {
3008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            q.addAll(null);
3018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            shouldThrow();
3028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        } catch (NullPointerException success) {}
3038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
3048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
3058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
3068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * addAll of a collection with null elements throws NPE
3078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
3088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testAddAll2() {
309e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak        ArrayDeque q = new ArrayDeque();
3108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        try {
311e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak            q.addAll(Arrays.asList(new Integer[SIZE]));
3128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            shouldThrow();
3138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        } catch (NullPointerException success) {}
3148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
3158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
3168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
3178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * addAll of a collection with any null elements throws NPE after
3188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * possibly adding some elements
3198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
3208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testAddAll3() {
321e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak        ArrayDeque q = new ArrayDeque();
322e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak        Integer[] ints = new Integer[SIZE];
323e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak        for (int i = 0; i < SIZE - 1; ++i)
324e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak            ints[i] = new Integer(i);
3258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        try {
3268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            q.addAll(Arrays.asList(ints));
3278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            shouldThrow();
3288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        } catch (NullPointerException success) {}
3298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
3308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
3318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
3328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * Deque contains all elements, in traversal order, of successful addAll
3338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
3348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testAddAll5() {
3358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Integer[] empty = new Integer[0];
3368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Integer[] ints = new Integer[SIZE];
3378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = 0; i < SIZE; ++i)
3388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            ints[i] = new Integer(i);
3398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ArrayDeque q = new ArrayDeque();
3408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(q.addAll(Arrays.asList(empty)));
3418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(q.addAll(Arrays.asList(ints)));
3428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = 0; i < SIZE; ++i)
3438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertEquals(ints[i], q.pollFirst());
3448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
3458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
3468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
3478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * pollFirst() succeeds unless empty
3488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
3498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testPollFirst() {
3508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ArrayDeque q = populatedDeque(SIZE);
3518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = 0; i < SIZE; ++i) {
3528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertEquals(i, q.pollFirst());
3538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
3548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertNull(q.pollFirst());
3558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
3568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
3578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
3588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * pollLast() succeeds unless empty
3598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
3608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testPollLast() {
3618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ArrayDeque q = populatedDeque(SIZE);
362e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak        for (int i = SIZE - 1; i >= 0; --i) {
3638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertEquals(i, q.pollLast());
3648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
3658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertNull(q.pollLast());
3668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
3678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
3688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
3698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * poll() succeeds unless empty
3708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
3718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testPoll() {
3728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ArrayDeque q = populatedDeque(SIZE);
3738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = 0; i < SIZE; ++i) {
3748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertEquals(i, q.poll());
3758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
3768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertNull(q.poll());
3778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
3788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
3798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
3808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * remove() removes next element, or throws NSEE if empty
3818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
3828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testRemove() {
3838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ArrayDeque q = populatedDeque(SIZE);
3848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = 0; i < SIZE; ++i) {
3858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertEquals(i, q.remove());
3868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
3878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        try {
3888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            q.remove();
3898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            shouldThrow();
3908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        } catch (NoSuchElementException success) {}
3918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
3928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
3938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
3948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * remove(x) removes x and returns true if present
3958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
3968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testRemoveElement() {
3978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ArrayDeque q = populatedDeque(SIZE);
3988e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath        for (int i = 1; i < SIZE; i += 2) {
3998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertTrue(q.contains(i));
4008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertTrue(q.remove(i));
4018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertFalse(q.contains(i));
402e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak            assertTrue(q.contains(i - 1));
4038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
4048e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath        for (int i = 0; i < SIZE; i += 2) {
4058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertTrue(q.contains(i));
4068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertTrue(q.remove(i));
4078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertFalse(q.contains(i));
408e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak            assertFalse(q.remove(i + 1));
409e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak            assertFalse(q.contains(i + 1));
4108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
4118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(q.isEmpty());
4128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
4138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
4148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
4158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * peekFirst() returns next element, or null if empty
4168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
4178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testPeekFirst() {
4188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ArrayDeque q = populatedDeque(SIZE);
4198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = 0; i < SIZE; ++i) {
4208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertEquals(i, q.peekFirst());
4218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertEquals(i, q.pollFirst());
4228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertTrue(q.peekFirst() == null ||
4238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle                       !q.peekFirst().equals(i));
4248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
4258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertNull(q.peekFirst());
4268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
4278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
4288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
4298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * peek() returns next element, or null if empty
4308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
4318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testPeek() {
4328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ArrayDeque q = populatedDeque(SIZE);
4338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = 0; i < SIZE; ++i) {
4348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertEquals(i, q.peek());
4358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertEquals(i, q.poll());
4368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertTrue(q.peek() == null ||
4378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle                       !q.peek().equals(i));
4388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
4398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertNull(q.peek());
4408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
4418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
4428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
4438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * peekLast() returns next element, or null if empty
4448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
4458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testPeekLast() {
4468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ArrayDeque q = populatedDeque(SIZE);
447e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak        for (int i = SIZE - 1; i >= 0; --i) {
4488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertEquals(i, q.peekLast());
4498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertEquals(i, q.pollLast());
4508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertTrue(q.peekLast() == null ||
4518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle                       !q.peekLast().equals(i));
4528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
4538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertNull(q.peekLast());
4548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
4558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
4568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
4578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * element() returns first element, or throws NSEE if empty
4588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
4598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testElement() {
4608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ArrayDeque q = populatedDeque(SIZE);
4618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = 0; i < SIZE; ++i) {
4628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertEquals(i, q.element());
4638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertEquals(i, q.poll());
4648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
4658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        try {
4668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            q.element();
4678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            shouldThrow();
4688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        } catch (NoSuchElementException success) {}
4698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
4708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
4718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
4728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * getFirst() returns first element, or throws NSEE if empty
4738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
4748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testFirstElement() {
4758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ArrayDeque q = populatedDeque(SIZE);
4768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = 0; i < SIZE; ++i) {
4778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertEquals(i, q.getFirst());
4788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertEquals(i, q.pollFirst());
4798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
4808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        try {
4818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            q.getFirst();
4828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            shouldThrow();
4838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        } catch (NoSuchElementException success) {}
4848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
4858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
4868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
4878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * getLast() returns last element, or throws NSEE if empty
4888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
4898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testLastElement() {
4908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ArrayDeque q = populatedDeque(SIZE);
491e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak        for (int i = SIZE - 1; i >= 0; --i) {
4928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertEquals(i, q.getLast());
4938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertEquals(i, q.pollLast());
4948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
4958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        try {
4968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            q.getLast();
4978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            shouldThrow();
4988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        } catch (NoSuchElementException success) {}
4998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertNull(q.peekLast());
5008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
5018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
5028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
5038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * removeFirst() removes first element, or throws NSEE if empty
5048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
5058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testRemoveFirst() {
5068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ArrayDeque q = populatedDeque(SIZE);
5078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = 0; i < SIZE; ++i) {
5088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertEquals(i, q.removeFirst());
5098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
5108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        try {
5118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            q.removeFirst();
5128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            shouldThrow();
5138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        } catch (NoSuchElementException success) {}
5148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertNull(q.peekFirst());
5158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
5168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
5178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
5188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * removeLast() removes last element, or throws NSEE if empty
5198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
5208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testRemoveLast() {
5218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ArrayDeque q = populatedDeque(SIZE);
5228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = SIZE - 1; i >= 0; --i) {
5238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertEquals(i, q.removeLast());
5248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
5258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        try {
5268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            q.removeLast();
5278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            shouldThrow();
5288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        } catch (NoSuchElementException success) {}
5298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertNull(q.peekLast());
5308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
5318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
5328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
5338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * removeFirstOccurrence(x) removes x and returns true if present
5348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
5358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testRemoveFirstOccurrence() {
5368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ArrayDeque q = populatedDeque(SIZE);
5378e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath        for (int i = 1; i < SIZE; i += 2) {
5388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertTrue(q.removeFirstOccurrence(new Integer(i)));
5398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
5408e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath        for (int i = 0; i < SIZE; i += 2) {
5418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertTrue(q.removeFirstOccurrence(new Integer(i)));
542e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak            assertFalse(q.removeFirstOccurrence(new Integer(i + 1)));
5438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
5448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(q.isEmpty());
5458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
5468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
5478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
5488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * removeLastOccurrence(x) removes x and returns true if present
5498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
5508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testRemoveLastOccurrence() {
5518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ArrayDeque q = populatedDeque(SIZE);
5528e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath        for (int i = 1; i < SIZE; i += 2) {
5538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertTrue(q.removeLastOccurrence(new Integer(i)));
5548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
5558e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath        for (int i = 0; i < SIZE; i += 2) {
5568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertTrue(q.removeLastOccurrence(new Integer(i)));
557e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak            assertFalse(q.removeLastOccurrence(new Integer(i + 1)));
5588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
5598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(q.isEmpty());
5608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
5618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
5628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
5638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * contains(x) reports true when elements added but not yet removed
5648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
5658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testContains() {
5668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ArrayDeque q = populatedDeque(SIZE);
5678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = 0; i < SIZE; ++i) {
5688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertTrue(q.contains(new Integer(i)));
5698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertEquals(i, q.pollFirst());
5708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertFalse(q.contains(new Integer(i)));
5718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
5728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
5738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
5748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
5758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * clear removes all elements
5768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
5778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testClear() {
5788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ArrayDeque q = populatedDeque(SIZE);
5798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        q.clear();
5808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(q.isEmpty());
5818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(0, q.size());
5828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(q.add(new Integer(1)));
5838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(q.isEmpty());
5848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        q.clear();
5858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(q.isEmpty());
5868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
5878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
5888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
5898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * containsAll(c) is true when c contains a subset of elements
5908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
5918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testContainsAll() {
5928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ArrayDeque q = populatedDeque(SIZE);
5938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ArrayDeque p = new ArrayDeque();
5948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = 0; i < SIZE; ++i) {
5958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertTrue(q.containsAll(p));
5968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertFalse(p.containsAll(q));
5978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertTrue(p.add(new Integer(i)));
5988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
5998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(p.containsAll(q));
6008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
6018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
6028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
6038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * retainAll(c) retains only those elements of c and reports true if changed
6048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
6058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testRetainAll() {
6068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ArrayDeque q = populatedDeque(SIZE);
6078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ArrayDeque p = populatedDeque(SIZE);
6088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = 0; i < SIZE; ++i) {
6098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            boolean changed = q.retainAll(p);
6108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertEquals(changed, (i > 0));
6118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertTrue(q.containsAll(p));
612e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak            assertEquals(SIZE - i, q.size());
6138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            p.removeFirst();
6148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
6158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
6168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
6178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
6188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * removeAll(c) removes only those elements of c and reports true if changed
6198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
6208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testRemoveAll() {
6218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = 1; i < SIZE; ++i) {
6228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            ArrayDeque q = populatedDeque(SIZE);
6238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            ArrayDeque p = populatedDeque(i);
6248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertTrue(q.removeAll(p));
625e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak            assertEquals(SIZE - i, q.size());
6268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            for (int j = 0; j < i; ++j) {
6278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle                assertFalse(q.contains(p.removeFirst()));
6288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            }
6298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
6308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
6318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
6328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    void checkToArray(ArrayDeque q) {
6338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        int size = q.size();
6348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Object[] o = q.toArray();
6358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(size, o.length);
6368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Iterator it = q.iterator();
6378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = 0; i < size; i++) {
6388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            Integer x = (Integer) it.next();
6398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertEquals((Integer)o[0] + i, (int) x);
6408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertSame(o[i], x);
6418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
6428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
6438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
6448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
6458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * toArray() contains all elements in FIFO order
6468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
6478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testToArray() {
6488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ArrayDeque q = new ArrayDeque();
6498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = 0; i < SIZE; i++) {
6508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            checkToArray(q);
6518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            q.addLast(i);
6528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
6538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        // Provoke wraparound
6548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = 0; i < SIZE; i++) {
6558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            checkToArray(q);
6568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertEquals(i, q.poll());
657e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak            q.addLast(SIZE + i);
6588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
6598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = 0; i < SIZE; i++) {
6608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            checkToArray(q);
661e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak            assertEquals(SIZE + i, q.poll());
6628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
6638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
6648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
6658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    void checkToArray2(ArrayDeque q) {
6668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        int size = q.size();
667e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak        Integer[] a1 = (size == 0) ? null : new Integer[size - 1];
6688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Integer[] a2 = new Integer[size];
669e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak        Integer[] a3 = new Integer[size + 2];
6708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        if (size > 0) Arrays.fill(a1, 42);
6718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Arrays.fill(a2, 42);
6728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Arrays.fill(a3, 42);
673e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak        Integer[] b1 = (size == 0) ? null : (Integer[]) q.toArray(a1);
6748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Integer[] b2 = (Integer[]) q.toArray(a2);
6758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Integer[] b3 = (Integer[]) q.toArray(a3);
6768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertSame(a2, b2);
6778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertSame(a3, b3);
6788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Iterator it = q.iterator();
6798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = 0; i < size; i++) {
6808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            Integer x = (Integer) it.next();
6818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertSame(b1[i], x);
6828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertEquals(b1[0] + i, (int) x);
6838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertSame(b2[i], x);
6848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertSame(b3[i], x);
6858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
6868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertNull(a3[size]);
687e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak        assertEquals(42, (int) a3[size + 1]);
6888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        if (size > 0) {
6898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertNotSame(a1, b1);
6908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertEquals(size, b1.length);
6918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            for (int i = 0; i < a1.length; i++) {
6928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle                assertEquals(42, (int) a1[i]);
6938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            }
6948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
6958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
6968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
6978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
6988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * toArray(a) contains all elements in FIFO order
6998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
7008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testToArray2() {
7018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ArrayDeque q = new ArrayDeque();
7028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = 0; i < SIZE; i++) {
7038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            checkToArray2(q);
7048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            q.addLast(i);
7058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
7068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        // Provoke wraparound
7078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = 0; i < SIZE; i++) {
7088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            checkToArray2(q);
7098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertEquals(i, q.poll());
710e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak            q.addLast(SIZE + i);
7118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
7128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = 0; i < SIZE; i++) {
7138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            checkToArray2(q);
714e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak            assertEquals(SIZE + i, q.poll());
7158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
7168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
7178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
7188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
7198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * toArray(null) throws NullPointerException
7208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
7218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testToArray_NullArg() {
7228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ArrayDeque l = new ArrayDeque();
7238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        l.add(new Object());
7248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        try {
7258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            l.toArray(null);
7268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            shouldThrow();
7278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        } catch (NullPointerException success) {}
7288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
7298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
7308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
7318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * toArray(incompatible array type) throws ArrayStoreException
7328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
7338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testToArray1_BadArg() {
7348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ArrayDeque l = new ArrayDeque();
7358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        l.add(new Integer(5));
7368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        try {
7378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            l.toArray(new String[10]);
7388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            shouldThrow();
7398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        } catch (ArrayStoreException success) {}
7408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
7418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
7428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
7438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * Iterator iterates through all elements
7448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
7458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testIterator() {
7468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ArrayDeque q = populatedDeque(SIZE);
7478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Iterator it = q.iterator();
7488e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath        int i;
7498e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath        for (i = 0; it.hasNext(); i++)
7508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertTrue(q.contains(it.next()));
7518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(i, SIZE);
7528e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath        assertIteratorExhausted(it);
7538e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath    }
7548e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath
7558e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath    /**
7568e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath     * iterator of empty collection has no elements
7578e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath     */
7588e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath    public void testEmptyIterator() {
7598e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath        Deque c = new ArrayDeque();
7608e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath        assertIteratorExhausted(c.iterator());
7618e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath        assertIteratorExhausted(c.descendingIterator());
7628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
7638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
7648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
7658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * Iterator ordering is FIFO
7668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
7678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testIteratorOrdering() {
7688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        final ArrayDeque q = new ArrayDeque();
7698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        q.add(one);
7708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        q.add(two);
7718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        q.add(three);
7728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        int k = 0;
7738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (Iterator it = q.iterator(); it.hasNext();) {
7748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertEquals(++k, it.next());
7758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
7768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
7778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(3, k);
7788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
7798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
7808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
7818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * iterator.remove() removes current element
7828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
7838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testIteratorRemove() {
7848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        final ArrayDeque q = new ArrayDeque();
7858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        final Random rng = new Random();
7868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int iters = 0; iters < 100; ++iters) {
7878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            int max = rng.nextInt(5) + 2;
788e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak            int split = rng.nextInt(max - 1) + 1;
7898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            for (int j = 1; j <= max; ++j)
7908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle                q.add(new Integer(j));
7918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            Iterator it = q.iterator();
7928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            for (int j = 1; j <= split; ++j)
7938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle                assertEquals(it.next(), new Integer(j));
7948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            it.remove();
795e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak            assertEquals(it.next(), new Integer(split + 1));
7968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            for (int j = 1; j <= split; ++j)
7978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle                q.remove(new Integer(j));
7988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            it = q.iterator();
799e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak            for (int j = split + 1; j <= max; ++j) {
8008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle                assertEquals(it.next(), new Integer(j));
8018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle                it.remove();
8028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            }
8038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertFalse(it.hasNext());
8048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertTrue(q.isEmpty());
8058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
8068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
8078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
8088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
8098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * Descending iterator iterates through all elements
8108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
8118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testDescendingIterator() {
8128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ArrayDeque q = populatedDeque(SIZE);
8138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        int i = 0;
8148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Iterator it = q.descendingIterator();
8158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        while (it.hasNext()) {
8168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertTrue(q.contains(it.next()));
8178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            ++i;
8188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
8198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(i, SIZE);
8208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(it.hasNext());
8218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        try {
8228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            it.next();
8238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            shouldThrow();
8248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        } catch (NoSuchElementException success) {}
8258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
8268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
8278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
8288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * Descending iterator ordering is reverse FIFO
8298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
8308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testDescendingIteratorOrdering() {
8318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        final ArrayDeque q = new ArrayDeque();
8328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int iters = 0; iters < 100; ++iters) {
8338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            q.add(new Integer(3));
8348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            q.add(new Integer(2));
8358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            q.add(new Integer(1));
8368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            int k = 0;
8378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            for (Iterator it = q.descendingIterator(); it.hasNext();) {
8388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle                assertEquals(++k, it.next());
8398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            }
8408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
8418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertEquals(3, k);
8428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            q.remove();
8438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            q.remove();
8448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            q.remove();
8458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
8468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
8478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
8488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
8498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * descendingIterator.remove() removes current element
8508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
8518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testDescendingIteratorRemove() {
8528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        final ArrayDeque q = new ArrayDeque();
8538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        final Random rng = new Random();
8548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int iters = 0; iters < 100; ++iters) {
8558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            int max = rng.nextInt(5) + 2;
856e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak            int split = rng.nextInt(max - 1) + 1;
8578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            for (int j = max; j >= 1; --j)
8588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle                q.add(new Integer(j));
8598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            Iterator it = q.descendingIterator();
8608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            for (int j = 1; j <= split; ++j)
8618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle                assertEquals(it.next(), new Integer(j));
8628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            it.remove();
863e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak            assertEquals(it.next(), new Integer(split + 1));
8648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            for (int j = 1; j <= split; ++j)
8658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle                q.remove(new Integer(j));
8668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            it = q.descendingIterator();
867e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak            for (int j = split + 1; j <= max; ++j) {
8688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle                assertEquals(it.next(), new Integer(j));
8698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle                it.remove();
8708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            }
8718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertFalse(it.hasNext());
8728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertTrue(q.isEmpty());
8738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
8748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
8758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
8768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
8778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * toString() contains toStrings of elements
8788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
8798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testToString() {
8808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ArrayDeque q = populatedDeque(SIZE);
8818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        String s = q.toString();
8828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = 0; i < SIZE; ++i) {
8838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertTrue(s.contains(String.valueOf(i)));
8848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
8858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
8868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
8878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
8888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * A deserialized serialized deque has same elements in same order
8898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
8908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testSerialization() throws Exception {
8918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Queue x = populatedDeque(SIZE);
8928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Queue y = serialClone(x);
8938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
8948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertNotSame(y, x);
8958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(x.size(), y.size());
8968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(x.toString(), y.toString());
8978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(Arrays.equals(x.toArray(), y.toArray()));
8988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        while (!x.isEmpty()) {
8998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertFalse(y.isEmpty());
9008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertEquals(x.remove(), y.remove());
9018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
9028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(y.isEmpty());
9038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
9048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
9058e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath    /**
9068e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath     * remove(null), contains(null) always return false
9078e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath     */
9088e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath    public void testNeverContainsNull() {
9098e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath        Deque<?>[] qs = {
9108e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath            new ArrayDeque<Object>(),
9118e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath            populatedDeque(2),
9128e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath        };
9138e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath
9148e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath        for (Deque<?> q : qs) {
9158e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath            assertFalse(q.contains(null));
9168e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath            assertFalse(q.remove(null));
9178e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath            assertFalse(q.removeFirstOccurrence(null));
9188e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath            assertFalse(q.removeLastOccurrence(null));
9198e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath        }
9208e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath    }
9218e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath
9228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle}
923