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 * Other contributors include Andrew Wright, Jeffrey Hayes,
68f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * Pat Fisher, Mike Judd.
78f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */
88f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
98f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravlepackage jsr166;
108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravleimport java.util.Arrays;
128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravleimport java.util.Collection;
138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravleimport java.util.Iterator;
148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravleimport java.util.NoSuchElementException;
158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravleimport java.util.Queue;
168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravleimport java.util.concurrent.ConcurrentLinkedQueue;
178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
188e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamathimport junit.framework.Test;
198e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamathimport junit.framework.TestSuite;
208e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath
218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravlepublic class ConcurrentLinkedQueueTest extends JSR166TestCase {
228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
238e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath    // android-note: Removed because the CTS runner does a bad job of
248e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath    // retrying tests that have suite() declarations.
258e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath    //
268e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath    // public static void main(String[] args) {
278e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath    //     main(suite(), args);
288e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath    // }
298e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath    // public static Test suite() {
30b8b75116273ecfdb8ffdd1869b1c0dd04570a95ePrzemyslaw Szczepaniak    //     return new TestSuite(ConcurrentLinkedQueueTest.class);
318e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath    // }
328e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath
338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * Returns a new queue of given size containing consecutive
358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * Integers 0 ... n.
368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    private ConcurrentLinkedQueue<Integer> populatedQueue(int n) {
388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentLinkedQueue<Integer> q = new ConcurrentLinkedQueue<Integer>();
398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(q.isEmpty());
408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = 0; i < n; ++i)
418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertTrue(q.offer(new Integer(i)));
428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(q.isEmpty());
438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(n, q.size());
448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        return q;
458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * new queue is empty
498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testConstructor1() {
518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(0, new ConcurrentLinkedQueue().size());
528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * Initializing from null Collection throws NPE
568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testConstructor3() {
588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        try {
598e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath            new ConcurrentLinkedQueue((Collection)null);
608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            shouldThrow();
618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        } catch (NullPointerException success) {}
628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * Initializing from Collection of null elements throws NPE
668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testConstructor4() {
688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        try {
69b8b75116273ecfdb8ffdd1869b1c0dd04570a95ePrzemyslaw Szczepaniak            new ConcurrentLinkedQueue(Arrays.asList(new Integer[SIZE]));
708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            shouldThrow();
718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        } catch (NullPointerException success) {}
728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * Initializing from Collection with some null elements throws NPE
768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testConstructor5() {
78b8b75116273ecfdb8ffdd1869b1c0dd04570a95ePrzemyslaw Szczepaniak        Integer[] ints = new Integer[SIZE];
79b8b75116273ecfdb8ffdd1869b1c0dd04570a95ePrzemyslaw Szczepaniak        for (int i = 0; i < SIZE - 1; ++i)
80b8b75116273ecfdb8ffdd1869b1c0dd04570a95ePrzemyslaw Szczepaniak            ints[i] = new Integer(i);
818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        try {
828e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath            new ConcurrentLinkedQueue(Arrays.asList(ints));
838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            shouldThrow();
848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        } catch (NullPointerException success) {}
858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * Queue contains all elements of collection used to initialize
898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testConstructor6() {
918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Integer[] ints = new Integer[SIZE];
928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = 0; i < SIZE; ++i)
938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            ints[i] = new Integer(i);
948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentLinkedQueue q = new ConcurrentLinkedQueue(Arrays.asList(ints));
958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = 0; i < SIZE; ++i)
968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertEquals(ints[i], q.poll());
978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
1008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * isEmpty is true before add, false after
1018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
1028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testEmpty() {
1038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentLinkedQueue q = new ConcurrentLinkedQueue();
1048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(q.isEmpty());
1058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        q.add(one);
1068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(q.isEmpty());
1078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        q.add(two);
1088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        q.remove();
1098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        q.remove();
1108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(q.isEmpty());
1118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
1128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
1138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
1148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * size changes when elements added and removed
1158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
1168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testSize() {
1178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentLinkedQueue q = populatedQueue(SIZE);
1188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = 0; i < SIZE; ++i) {
119b8b75116273ecfdb8ffdd1869b1c0dd04570a95ePrzemyslaw Szczepaniak            assertEquals(SIZE - i, q.size());
1208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            q.remove();
1218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
1228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = 0; i < SIZE; ++i) {
1238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertEquals(i, q.size());
1248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            q.add(new Integer(i));
1258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
1268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
1278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
1288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
1298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * offer(null) throws NPE
1308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
1318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testOfferNull() {
132b8b75116273ecfdb8ffdd1869b1c0dd04570a95ePrzemyslaw Szczepaniak        ConcurrentLinkedQueue q = new ConcurrentLinkedQueue();
1338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        try {
1348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            q.offer(null);
1358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            shouldThrow();
1368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        } catch (NullPointerException success) {}
1378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
1388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
1398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
1408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * add(null) throws NPE
1418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
1428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testAddNull() {
143b8b75116273ecfdb8ffdd1869b1c0dd04570a95ePrzemyslaw Szczepaniak        ConcurrentLinkedQueue q = new ConcurrentLinkedQueue();
1448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        try {
1458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            q.add(null);
1468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            shouldThrow();
1478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        } catch (NullPointerException success) {}
1488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
1498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
1508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
1518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * Offer returns true
1528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
1538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testOffer() {
1548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentLinkedQueue q = new ConcurrentLinkedQueue();
1558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(q.offer(zero));
1568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(q.offer(one));
1578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
1588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
1598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
1608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * add returns true
1618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
1628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testAdd() {
1638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentLinkedQueue q = new ConcurrentLinkedQueue();
1648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = 0; i < SIZE; ++i) {
1658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertEquals(i, q.size());
1668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertTrue(q.add(new Integer(i)));
1678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
1688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
1698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
1708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
1718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * addAll(null) throws NPE
1728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
1738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testAddAll1() {
174b8b75116273ecfdb8ffdd1869b1c0dd04570a95ePrzemyslaw Szczepaniak        ConcurrentLinkedQueue q = new ConcurrentLinkedQueue();
1758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        try {
1768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            q.addAll(null);
1778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            shouldThrow();
1788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        } catch (NullPointerException success) {}
1798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
1808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
1818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
1828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * addAll(this) throws IAE
1838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
1848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testAddAllSelf() {
185b8b75116273ecfdb8ffdd1869b1c0dd04570a95ePrzemyslaw Szczepaniak        ConcurrentLinkedQueue q = populatedQueue(SIZE);
1868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        try {
1878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            q.addAll(q);
1888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            shouldThrow();
1898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        } catch (IllegalArgumentException success) {}
1908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
1918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
1928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
1938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * addAll of a collection with null elements throws NPE
1948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
1958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testAddAll2() {
196b8b75116273ecfdb8ffdd1869b1c0dd04570a95ePrzemyslaw Szczepaniak        ConcurrentLinkedQueue q = new ConcurrentLinkedQueue();
1978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        try {
198b8b75116273ecfdb8ffdd1869b1c0dd04570a95ePrzemyslaw Szczepaniak            q.addAll(Arrays.asList(new Integer[SIZE]));
1998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            shouldThrow();
2008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        } catch (NullPointerException success) {}
2018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
2028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
2038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
2048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * addAll of a collection with any null elements throws NPE after
2058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * possibly adding some elements
2068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
2078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testAddAll3() {
208b8b75116273ecfdb8ffdd1869b1c0dd04570a95ePrzemyslaw Szczepaniak        ConcurrentLinkedQueue q = new ConcurrentLinkedQueue();
209b8b75116273ecfdb8ffdd1869b1c0dd04570a95ePrzemyslaw Szczepaniak        Integer[] ints = new Integer[SIZE];
210b8b75116273ecfdb8ffdd1869b1c0dd04570a95ePrzemyslaw Szczepaniak        for (int i = 0; i < SIZE - 1; ++i)
211b8b75116273ecfdb8ffdd1869b1c0dd04570a95ePrzemyslaw Szczepaniak            ints[i] = new Integer(i);
2128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        try {
2138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            q.addAll(Arrays.asList(ints));
2148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            shouldThrow();
2158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        } catch (NullPointerException success) {}
2168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
2178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
2188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
2198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * Queue contains all elements, in traversal order, of successful addAll
2208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
2218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testAddAll5() {
2228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Integer[] empty = new Integer[0];
2238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Integer[] ints = new Integer[SIZE];
2248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = 0; i < SIZE; ++i)
2258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            ints[i] = new Integer(i);
2268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentLinkedQueue q = new ConcurrentLinkedQueue();
2278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(q.addAll(Arrays.asList(empty)));
2288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(q.addAll(Arrays.asList(ints)));
2298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = 0; i < SIZE; ++i)
2308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertEquals(ints[i], q.poll());
2318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
2328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
2338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
2348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * poll succeeds unless empty
2358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
2368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testPoll() {
2378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentLinkedQueue q = populatedQueue(SIZE);
2388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = 0; i < SIZE; ++i) {
2398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertEquals(i, q.poll());
2408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
2418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertNull(q.poll());
2428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
2438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
2448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
2458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * peek returns next element, or null if empty
2468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
2478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testPeek() {
2488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentLinkedQueue q = populatedQueue(SIZE);
2498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = 0; i < SIZE; ++i) {
2508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertEquals(i, q.peek());
2518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertEquals(i, q.poll());
2528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertTrue(q.peek() == null ||
2538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle                       !q.peek().equals(i));
2548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
2558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertNull(q.peek());
2568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
2578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
2588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
2598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * element returns next element, or throws NSEE if empty
2608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
2618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testElement() {
2628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentLinkedQueue q = populatedQueue(SIZE);
2638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = 0; i < SIZE; ++i) {
2648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertEquals(i, q.element());
2658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertEquals(i, q.poll());
2668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
2678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        try {
2688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            q.element();
2698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            shouldThrow();
2708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        } catch (NoSuchElementException success) {}
2718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
2728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
2738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
2748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * remove removes next element, or throws NSEE if empty
2758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
2768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testRemove() {
2778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentLinkedQueue q = populatedQueue(SIZE);
2788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = 0; i < SIZE; ++i) {
2798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertEquals(i, q.remove());
2808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
2818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        try {
2828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            q.remove();
2838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            shouldThrow();
2848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        } catch (NoSuchElementException success) {}
2858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
2868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
2878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
2888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * remove(x) removes x and returns true if present
2898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
2908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testRemoveElement() {
2918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentLinkedQueue q = populatedQueue(SIZE);
2928e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath        for (int i = 1; i < SIZE; i += 2) {
2938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertTrue(q.contains(i));
2948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertTrue(q.remove(i));
2958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertFalse(q.contains(i));
296b8b75116273ecfdb8ffdd1869b1c0dd04570a95ePrzemyslaw Szczepaniak            assertTrue(q.contains(i - 1));
2978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
2988e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath        for (int i = 0; i < SIZE; i += 2) {
2998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertTrue(q.contains(i));
3008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertTrue(q.remove(i));
3018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertFalse(q.contains(i));
302b8b75116273ecfdb8ffdd1869b1c0dd04570a95ePrzemyslaw Szczepaniak            assertFalse(q.remove(i + 1));
303b8b75116273ecfdb8ffdd1869b1c0dd04570a95ePrzemyslaw Szczepaniak            assertFalse(q.contains(i + 1));
3048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
3058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(q.isEmpty());
3068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
3078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
3088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
3098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * contains(x) reports true when elements added but not yet removed
3108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
3118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testContains() {
3128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentLinkedQueue q = populatedQueue(SIZE);
3138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = 0; i < SIZE; ++i) {
3148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertTrue(q.contains(new Integer(i)));
3158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            q.poll();
3168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertFalse(q.contains(new Integer(i)));
3178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
3188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
3198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
3208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
3218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * clear removes all elements
3228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
3238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testClear() {
3248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentLinkedQueue q = populatedQueue(SIZE);
3258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        q.clear();
3268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(q.isEmpty());
3278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(0, q.size());
3288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        q.add(one);
3298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(q.isEmpty());
3308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        q.clear();
3318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(q.isEmpty());
3328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
3338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
3348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
3358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * containsAll(c) is true when c contains a subset of elements
3368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
3378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testContainsAll() {
3388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentLinkedQueue q = populatedQueue(SIZE);
3398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentLinkedQueue p = new ConcurrentLinkedQueue();
3408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = 0; i < SIZE; ++i) {
3418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertTrue(q.containsAll(p));
3428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertFalse(p.containsAll(q));
3438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            p.add(new Integer(i));
3448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
3458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(p.containsAll(q));
3468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
3478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
3488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
3498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * retainAll(c) retains only those elements of c and reports true if change
3508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
3518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testRetainAll() {
3528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentLinkedQueue q = populatedQueue(SIZE);
3538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentLinkedQueue p = populatedQueue(SIZE);
3548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = 0; i < SIZE; ++i) {
3558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            boolean changed = q.retainAll(p);
3568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            if (i == 0)
3578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle                assertFalse(changed);
3588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            else
3598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle                assertTrue(changed);
3608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
3618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertTrue(q.containsAll(p));
362b8b75116273ecfdb8ffdd1869b1c0dd04570a95ePrzemyslaw Szczepaniak            assertEquals(SIZE - i, q.size());
3638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            p.remove();
3648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
3658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
3668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
3678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
3688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * removeAll(c) removes only those elements of c and reports true if changed
3698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
3708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testRemoveAll() {
3718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = 1; i < SIZE; ++i) {
3728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            ConcurrentLinkedQueue q = populatedQueue(SIZE);
3738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            ConcurrentLinkedQueue p = populatedQueue(i);
3748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertTrue(q.removeAll(p));
375b8b75116273ecfdb8ffdd1869b1c0dd04570a95ePrzemyslaw Szczepaniak            assertEquals(SIZE - i, q.size());
3768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            for (int j = 0; j < i; ++j) {
3778e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath                Integer x = (Integer)(p.remove());
3788e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath                assertFalse(q.contains(x));
3798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            }
3808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
3818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
3828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
3838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
3848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * toArray contains all elements in FIFO order
3858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
3868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testToArray() {
3878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentLinkedQueue q = populatedQueue(SIZE);
3888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Object[] o = q.toArray();
3898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = 0; i < o.length; i++)
3908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertSame(o[i], q.poll());
3918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
3928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
3938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
3948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * toArray(a) contains all elements in FIFO order
3958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
3968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testToArray2() {
3978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentLinkedQueue<Integer> q = populatedQueue(SIZE);
3988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Integer[] ints = new Integer[SIZE];
3998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Integer[] array = q.toArray(ints);
4008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertSame(ints, array);
4018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = 0; i < ints.length; i++)
4028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertSame(ints[i], q.poll());
4038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
4048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
4058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
4068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * toArray(null) throws NullPointerException
4078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
4088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testToArray_NullArg() {
4098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentLinkedQueue q = populatedQueue(SIZE);
4108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        try {
4118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            q.toArray(null);
4128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            shouldThrow();
4138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        } catch (NullPointerException success) {}
4148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
4158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
4168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
4178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * toArray(incompatible array type) throws ArrayStoreException
4188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
4198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testToArray1_BadArg() {
4208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentLinkedQueue q = populatedQueue(SIZE);
4218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        try {
4228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            q.toArray(new String[10]);
4238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            shouldThrow();
4248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        } catch (ArrayStoreException success) {}
4258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
4268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
4278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
4288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * iterator iterates through all elements
4298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
4308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testIterator() {
4318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentLinkedQueue q = populatedQueue(SIZE);
4328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Iterator it = q.iterator();
4338e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath        int i;
4348e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath        for (i = 0; it.hasNext(); i++)
4358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertTrue(q.contains(it.next()));
4368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(i, SIZE);
4378e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath        assertIteratorExhausted(it);
4388e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath    }
4398e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath
4408e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath    /**
4418e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath     * iterator of empty collection has no elements
4428e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath     */
4438e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath    public void testEmptyIterator() {
4448e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath        assertIteratorExhausted(new ConcurrentLinkedQueue().iterator());
4458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
4468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
4478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
4488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * iterator ordering is FIFO
4498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
4508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testIteratorOrdering() {
4518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        final ConcurrentLinkedQueue q = new ConcurrentLinkedQueue();
4528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        q.add(one);
4538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        q.add(two);
4548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        q.add(three);
4558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
4568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        int k = 0;
4578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (Iterator it = q.iterator(); it.hasNext();) {
4588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertEquals(++k, it.next());
4598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
4608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
4618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(3, k);
4628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
4638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
4648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
4658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * Modifications do not cause iterators to fail
4668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
4678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testWeaklyConsistentIteration() {
4688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        final ConcurrentLinkedQueue q = new ConcurrentLinkedQueue();
4698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        q.add(one);
4708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        q.add(two);
4718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        q.add(three);
4728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
4738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (Iterator it = q.iterator(); it.hasNext();) {
4748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            q.remove();
4758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            it.next();
4768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
4778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
4788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals("queue should be empty again", 0, q.size());
4798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
4808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
4818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
4828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * iterator.remove removes current element
4838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
4848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testIteratorRemove() {
4858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        final ConcurrentLinkedQueue q = new ConcurrentLinkedQueue();
4868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        q.add(one);
4878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        q.add(two);
4888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        q.add(three);
4898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Iterator it = q.iterator();
4908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        it.next();
4918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        it.remove();
4928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        it = q.iterator();
4938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertSame(it.next(), two);
4948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertSame(it.next(), three);
4958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(it.hasNext());
4968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
4978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
4988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
4998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * toString contains toStrings of elements
5008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
5018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testToString() {
5028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        ConcurrentLinkedQueue q = populatedQueue(SIZE);
5038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        String s = q.toString();
5048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = 0; i < SIZE; ++i) {
5058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertTrue(s.contains(String.valueOf(i)));
5068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
5078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
5088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
5098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
5108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * A deserialized serialized queue has same elements in same order
5118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
5128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testSerialization() throws Exception {
5138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Queue x = populatedQueue(SIZE);
5148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Queue y = serialClone(x);
5158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
5168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertNotSame(x, y);
5178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(x.size(), y.size());
5188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(x.toString(), y.toString());
5198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(Arrays.equals(x.toArray(), y.toArray()));
5208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        while (!x.isEmpty()) {
5218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertFalse(y.isEmpty());
5228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertEquals(x.remove(), y.remove());
5238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
5248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(y.isEmpty());
5258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
5268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
5278e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath    /**
5288e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath     * remove(null), contains(null) always return false
5298e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath     */
5308e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath    public void testNeverContainsNull() {
5318e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath        Collection<?>[] qs = {
5328e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath            new ConcurrentLinkedQueue<Object>(),
5338e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath            populatedQueue(2),
5348e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath        };
5358e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath
5368e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath        for (Collection<?> q : qs) {
5378e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath            assertFalse(q.contains(null));
5388e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath            assertFalse(q.remove(null));
5398e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath        }
5408e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath    }
5418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle}
542