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.Comparator;
148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravleimport java.util.Iterator;
158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravleimport java.util.NoSuchElementException;
168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravleimport java.util.PriorityQueue;
178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravleimport java.util.Queue;
188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
198e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamathimport junit.framework.Test;
208e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamathimport junit.framework.TestSuite;
218e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath
228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravlepublic class PriorityQueueTest extends JSR166TestCase {
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(PriorityQueueTest.class);
318e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath    // }
328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    static class MyReverseComparator implements Comparator {
348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        public int compare(Object x, Object y) {
358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            return ((Comparable)y).compareTo(x);
368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * Returns a new queue of given size containing consecutive
418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * Integers 0 ... n.
428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    private PriorityQueue<Integer> populatedQueue(int n) {
448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        PriorityQueue<Integer> q = new PriorityQueue<Integer>(n);
458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(q.isEmpty());
46b8b75116273ecfdb8ffdd1869b1c0dd04570a95ePrzemyslaw Szczepaniak        for (int i = n - 1; i >= 0; i -= 2)
478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertTrue(q.offer(new Integer(i)));
488e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath        for (int i = (n & 1); i < n; i += 2)
498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertTrue(q.offer(new Integer(i)));
508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(q.isEmpty());
518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(n, q.size());
528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        return q;
538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * A new queue has unbounded capacity
578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testConstructor1() {
598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(0, new PriorityQueue(SIZE).size());
608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * Constructor throws IAE if capacity argument nonpositive
648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testConstructor2() {
668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        try {
678e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath            new PriorityQueue(0);
688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            shouldThrow();
698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        } catch (IllegalArgumentException success) {}
708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * Initializing from null Collection throws NPE
748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testConstructor3() {
768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        try {
778e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath            new PriorityQueue((Collection)null);
788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            shouldThrow();
798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        } catch (NullPointerException success) {}
808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * Initializing from Collection of null elements throws NPE
848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testConstructor4() {
868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        try {
87b8b75116273ecfdb8ffdd1869b1c0dd04570a95ePrzemyslaw Szczepaniak            new PriorityQueue(Arrays.asList(new Integer[SIZE]));
888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            shouldThrow();
898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        } catch (NullPointerException success) {}
908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * Initializing from Collection with some null elements throws NPE
948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testConstructor5() {
96b8b75116273ecfdb8ffdd1869b1c0dd04570a95ePrzemyslaw Szczepaniak        Integer[] ints = new Integer[SIZE];
97b8b75116273ecfdb8ffdd1869b1c0dd04570a95ePrzemyslaw Szczepaniak        for (int i = 0; i < SIZE - 1; ++i)
98b8b75116273ecfdb8ffdd1869b1c0dd04570a95ePrzemyslaw Szczepaniak            ints[i] = new Integer(i);
998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        try {
1008e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath            new PriorityQueue(Arrays.asList(ints));
1018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            shouldThrow();
1028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        } catch (NullPointerException success) {}
1038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
1048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
1058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
1068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * Queue contains all elements of collection used to initialize
1078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
1088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testConstructor6() {
1098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Integer[] ints = new Integer[SIZE];
1108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = 0; i < SIZE; ++i)
1118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            ints[i] = new Integer(i);
1128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        PriorityQueue q = new PriorityQueue(Arrays.asList(ints));
1138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = 0; i < SIZE; ++i)
1148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertEquals(ints[i], q.poll());
1158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
1168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
1178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
1188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * The comparator used in constructor is used
1198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
1208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testConstructor7() {
1218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        MyReverseComparator cmp = new MyReverseComparator();
1228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        PriorityQueue q = new PriorityQueue(SIZE, cmp);
1238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(cmp, q.comparator());
1248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Integer[] ints = new Integer[SIZE];
1258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = 0; i < SIZE; ++i)
1268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            ints[i] = new Integer(i);
1278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        q.addAll(Arrays.asList(ints));
128b8b75116273ecfdb8ffdd1869b1c0dd04570a95ePrzemyslaw Szczepaniak        for (int i = SIZE - 1; i >= 0; --i)
1298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertEquals(ints[i], q.poll());
1308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
1318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
1328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
1338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * isEmpty is true before add, false after
1348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
1358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testEmpty() {
1368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        PriorityQueue q = new PriorityQueue(2);
1378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(q.isEmpty());
1388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        q.add(new Integer(1));
1398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(q.isEmpty());
1408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        q.add(new Integer(2));
1418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        q.remove();
1428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        q.remove();
1438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(q.isEmpty());
1448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
1458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
1468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
1478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * size changes when elements added and removed
1488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
1498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testSize() {
1508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        PriorityQueue q = populatedQueue(SIZE);
1518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = 0; i < SIZE; ++i) {
152b8b75116273ecfdb8ffdd1869b1c0dd04570a95ePrzemyslaw Szczepaniak            assertEquals(SIZE - i, q.size());
1538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            q.remove();
1548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
1558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = 0; i < SIZE; ++i) {
1568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertEquals(i, q.size());
1578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            q.add(new Integer(i));
1588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
1598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
1608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
1618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
1628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * offer(null) throws NPE
1638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
1648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testOfferNull() {
165b8b75116273ecfdb8ffdd1869b1c0dd04570a95ePrzemyslaw Szczepaniak        PriorityQueue q = new PriorityQueue(1);
1668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        try {
1678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            q.offer(null);
1688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            shouldThrow();
1698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        } catch (NullPointerException success) {}
1708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
1718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
1728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
1738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * add(null) throws NPE
1748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
1758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testAddNull() {
176b8b75116273ecfdb8ffdd1869b1c0dd04570a95ePrzemyslaw Szczepaniak        PriorityQueue q = new PriorityQueue(1);
1778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        try {
1788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            q.add(null);
1798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            shouldThrow();
1808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        } catch (NullPointerException success) {}
1818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
1828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
1838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
1848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * Offer of comparable element succeeds
1858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
1868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testOffer() {
1878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        PriorityQueue q = new PriorityQueue(1);
1888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(q.offer(zero));
1898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(q.offer(one));
1908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
1918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
1928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
1938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * Offer of non-Comparable throws CCE
1948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
1958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testOfferNonComparable() {
1968e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath        PriorityQueue q = new PriorityQueue(1);
1978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        try {
1988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            q.offer(new Object());
1998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            q.offer(new Object());
2008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            shouldThrow();
2018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        } catch (ClassCastException success) {}
2028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
2038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
2048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
2058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * add of comparable succeeds
2068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
2078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testAdd() {
2088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        PriorityQueue q = new PriorityQueue(SIZE);
2098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = 0; i < SIZE; ++i) {
2108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertEquals(i, q.size());
2118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertTrue(q.add(new Integer(i)));
2128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
2138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
2148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
2158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
2168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * addAll(null) throws NPE
2178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
2188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testAddAll1() {
219b8b75116273ecfdb8ffdd1869b1c0dd04570a95ePrzemyslaw Szczepaniak        PriorityQueue q = new PriorityQueue(1);
2208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        try {
2218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            q.addAll(null);
2228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            shouldThrow();
2238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        } catch (NullPointerException success) {}
2248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
2258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
2268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
2278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * addAll of a collection with null elements throws NPE
2288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
2298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testAddAll2() {
230b8b75116273ecfdb8ffdd1869b1c0dd04570a95ePrzemyslaw Szczepaniak        PriorityQueue q = new PriorityQueue(SIZE);
2318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        try {
232b8b75116273ecfdb8ffdd1869b1c0dd04570a95ePrzemyslaw Szczepaniak            q.addAll(Arrays.asList(new Integer[SIZE]));
2338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            shouldThrow();
2348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        } catch (NullPointerException success) {}
2358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
2368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
2378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
2388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * addAll of a collection with any null elements throws NPE after
2398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * possibly adding some elements
2408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
2418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testAddAll3() {
242b8b75116273ecfdb8ffdd1869b1c0dd04570a95ePrzemyslaw Szczepaniak        PriorityQueue q = new PriorityQueue(SIZE);
243b8b75116273ecfdb8ffdd1869b1c0dd04570a95ePrzemyslaw Szczepaniak        Integer[] ints = new Integer[SIZE];
244b8b75116273ecfdb8ffdd1869b1c0dd04570a95ePrzemyslaw Szczepaniak        for (int i = 0; i < SIZE - 1; ++i)
245b8b75116273ecfdb8ffdd1869b1c0dd04570a95ePrzemyslaw Szczepaniak            ints[i] = new Integer(i);
2468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        try {
2478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            q.addAll(Arrays.asList(ints));
2488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            shouldThrow();
2498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        } catch (NullPointerException success) {}
2508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
2518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
2528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
2538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * Queue contains all elements of successful addAll
2548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
2558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testAddAll5() {
2568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Integer[] empty = new Integer[0];
2578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Integer[] ints = new Integer[SIZE];
2588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = 0; i < SIZE; ++i)
259b8b75116273ecfdb8ffdd1869b1c0dd04570a95ePrzemyslaw Szczepaniak            ints[i] = new Integer(SIZE - 1 - i);
2608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        PriorityQueue q = new PriorityQueue(SIZE);
2618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(q.addAll(Arrays.asList(empty)));
2628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(q.addAll(Arrays.asList(ints)));
2638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = 0; i < SIZE; ++i)
2648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertEquals(new Integer(i), q.poll());
2658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
2668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
2678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
2688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * poll succeeds unless empty
2698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
2708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testPoll() {
2718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        PriorityQueue q = populatedQueue(SIZE);
2728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = 0; i < SIZE; ++i) {
2738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertEquals(i, q.poll());
2748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
2758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertNull(q.poll());
2768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
2778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
2788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
2798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * peek returns next element, or null if empty
2808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
2818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testPeek() {
2828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        PriorityQueue q = populatedQueue(SIZE);
2838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = 0; i < SIZE; ++i) {
2848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertEquals(i, q.peek());
2858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertEquals(i, q.poll());
2868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertTrue(q.peek() == null ||
2878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle                       !q.peek().equals(i));
2888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
2898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertNull(q.peek());
2908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
2918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
2928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
2938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * element returns next element, or throws NSEE if empty
2948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
2958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testElement() {
2968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        PriorityQueue q = populatedQueue(SIZE);
2978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = 0; i < SIZE; ++i) {
2988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertEquals(i, q.element());
2998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertEquals(i, q.poll());
3008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
3018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        try {
3028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            q.element();
3038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            shouldThrow();
3048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        } catch (NoSuchElementException success) {}
3058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
3068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
3078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
3088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * remove removes next element, or throws NSEE if empty
3098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
3108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testRemove() {
3118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        PriorityQueue q = populatedQueue(SIZE);
3128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = 0; i < SIZE; ++i) {
3138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertEquals(i, q.remove());
3148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
3158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        try {
3168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            q.remove();
3178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            shouldThrow();
3188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        } catch (NoSuchElementException success) {}
3198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
3208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
3218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
3228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * remove(x) removes x and returns true if present
3238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
3248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testRemoveElement() {
3258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        PriorityQueue q = populatedQueue(SIZE);
3268e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath        for (int i = 1; i < SIZE; i += 2) {
3278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertTrue(q.contains(i));
3288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertTrue(q.remove(i));
3298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertFalse(q.contains(i));
330b8b75116273ecfdb8ffdd1869b1c0dd04570a95ePrzemyslaw Szczepaniak            assertTrue(q.contains(i - 1));
3318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
3328e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath        for (int i = 0; i < SIZE; i += 2) {
3338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertTrue(q.contains(i));
3348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertTrue(q.remove(i));
3358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertFalse(q.contains(i));
336b8b75116273ecfdb8ffdd1869b1c0dd04570a95ePrzemyslaw Szczepaniak            assertFalse(q.remove(i + 1));
337b8b75116273ecfdb8ffdd1869b1c0dd04570a95ePrzemyslaw Szczepaniak            assertFalse(q.contains(i + 1));
3388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
3398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(q.isEmpty());
3408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
3418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
3428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
3438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * contains(x) reports true when elements added but not yet removed
3448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
3458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testContains() {
3468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        PriorityQueue q = populatedQueue(SIZE);
3478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = 0; i < SIZE; ++i) {
3488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertTrue(q.contains(new Integer(i)));
3498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            q.poll();
3508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertFalse(q.contains(new Integer(i)));
3518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
3528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
3538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
3548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
3558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * clear removes all elements
3568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
3578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testClear() {
3588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        PriorityQueue q = populatedQueue(SIZE);
3598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        q.clear();
3608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(q.isEmpty());
3618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(0, q.size());
3628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        q.add(new Integer(1));
3638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(q.isEmpty());
3648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        q.clear();
3658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(q.isEmpty());
3668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
3678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
3688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
3698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * containsAll(c) is true when c contains a subset of elements
3708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
3718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testContainsAll() {
3728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        PriorityQueue q = populatedQueue(SIZE);
3738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        PriorityQueue p = new PriorityQueue(SIZE);
3748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = 0; i < SIZE; ++i) {
3758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertTrue(q.containsAll(p));
3768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertFalse(p.containsAll(q));
3778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            p.add(new Integer(i));
3788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
3798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(p.containsAll(q));
3808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
3818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
3828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
3838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * retainAll(c) retains only those elements of c and reports true if changed
3848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
3858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testRetainAll() {
3868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        PriorityQueue q = populatedQueue(SIZE);
3878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        PriorityQueue p = populatedQueue(SIZE);
3888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = 0; i < SIZE; ++i) {
3898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            boolean changed = q.retainAll(p);
3908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            if (i == 0)
3918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle                assertFalse(changed);
3928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            else
3938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle                assertTrue(changed);
3948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
3958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertTrue(q.containsAll(p));
396b8b75116273ecfdb8ffdd1869b1c0dd04570a95ePrzemyslaw Szczepaniak            assertEquals(SIZE - i, q.size());
3978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            p.remove();
3988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
3998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
4008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
4018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
4028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * removeAll(c) removes only those elements of c and reports true if changed
4038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
4048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testRemoveAll() {
4058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = 1; i < SIZE; ++i) {
4068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            PriorityQueue q = populatedQueue(SIZE);
4078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            PriorityQueue p = populatedQueue(i);
4088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertTrue(q.removeAll(p));
409b8b75116273ecfdb8ffdd1869b1c0dd04570a95ePrzemyslaw Szczepaniak            assertEquals(SIZE - i, q.size());
4108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            for (int j = 0; j < i; ++j) {
4118e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath                Integer x = (Integer)(p.remove());
4128e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath                assertFalse(q.contains(x));
4138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            }
4148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
4158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
4168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
4178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
4188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * toArray contains all elements
4198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
4208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testToArray() {
4218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        PriorityQueue q = populatedQueue(SIZE);
4228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Object[] o = q.toArray();
4238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Arrays.sort(o);
4248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = 0; i < o.length; i++)
4258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertSame(o[i], q.poll());
4268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
4278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
4288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
4298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * toArray(a) contains all elements
4308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
4318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testToArray2() {
4328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        PriorityQueue<Integer> q = populatedQueue(SIZE);
4338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Integer[] ints = new Integer[SIZE];
4348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Integer[] array = q.toArray(ints);
4358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertSame(ints, array);
4368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Arrays.sort(ints);
4378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = 0; i < ints.length; i++)
4388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertSame(ints[i], q.poll());
4398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
4408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
4418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
4428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * iterator iterates through all elements
4438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
4448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testIterator() {
4458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        PriorityQueue q = populatedQueue(SIZE);
4468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Iterator it = q.iterator();
4478e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath        int i;
4488e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath        for (i = 0; it.hasNext(); i++)
4498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertTrue(q.contains(it.next()));
4508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(i, SIZE);
4518e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath        assertIteratorExhausted(it);
4528e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath    }
4538e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath
4548e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath    /**
4558e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath     * iterator of empty collection has no elements
4568e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath     */
4578e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath    public void testEmptyIterator() {
4588e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath        assertIteratorExhausted(new PriorityQueue().iterator());
4598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
4608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
4618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
4628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * iterator.remove removes current element
4638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
4648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testIteratorRemove() {
4658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        final PriorityQueue q = new PriorityQueue(3);
4668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        q.add(new Integer(2));
4678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        q.add(new Integer(1));
4688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        q.add(new Integer(3));
4698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
4708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Iterator it = q.iterator();
4718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        it.next();
4728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        it.remove();
4738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
4748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        it = q.iterator();
4758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(it.next(), new Integer(2));
4768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(it.next(), new Integer(3));
4778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(it.hasNext());
4788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
4798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
4808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
4818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * toString contains toStrings of elements
4828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
4838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testToString() {
4848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        PriorityQueue q = populatedQueue(SIZE);
4858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        String s = q.toString();
4868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = 0; i < SIZE; ++i) {
4878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertTrue(s.contains(String.valueOf(i)));
4888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
4898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
4908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
4918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
4928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * A deserialized serialized queue has same elements
4938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
4948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testSerialization() throws Exception {
4958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Queue x = populatedQueue(SIZE);
4968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Queue y = serialClone(x);
4978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
4988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertNotSame(x, y);
4998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(x.size(), y.size());
5008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        while (!x.isEmpty()) {
5018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertFalse(y.isEmpty());
5028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertEquals(x.remove(), y.remove());
5038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
5048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(y.isEmpty());
5058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
5068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle}
507