/* * Copyright 2008 Google Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. */ package com.google.gwt.emultest.java.util; import com.google.gwt.junit.client.GWTTestCase; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Comparator; import java.util.NoSuchElementException; import java.util.PriorityQueue; import java.util.TreeSet; /** * Test PriorityQueue. */ public class PriorityQueueTest extends GWTTestCase { @Override public String getModuleName() { return "com.google.gwt.emultest.EmulSuite"; } public void testAdd() { PriorityQueue<Integer> queue = new PriorityQueue<Integer>(); try { queue.add(null); } catch (NullPointerException expected) { } queue.add(1); assertTrue(Arrays.asList(1).containsAll(queue)); queue.add(2); assertTrue(Arrays.asList(1, 2).containsAll(queue)); } @SuppressWarnings("ModifyingCollectionWithItself") public void testAddAll() { PriorityQueue<Integer> queue = new PriorityQueue<>(); try { queue.addAll(queue); fail(); } catch (IllegalArgumentException expected) { } queue = new PriorityQueue<>(); try { queue.addAll(Arrays.asList(1, null)); fail(); } catch (NullPointerException expected) { } queue = new PriorityQueue<>(); queue.addAll(Arrays.asList(2, 1, 3)); assertTrue(Arrays.asList(1, 2, 3).containsAll(queue)); } public void testBasic() { PriorityQueue<Integer> pq = new PriorityQueue<Integer>(); assertEquals(0, pq.size()); assertTrue(pq.isEmpty()); assertNull(pq.peek()); try { pq.remove(); fail("Expected exception"); } catch (NoSuchElementException e) { // expected } pq.add(14); assertEquals(1, pq.size()); assertFalse(pq.isEmpty()); assertEquals(14, pq.peek().intValue()); pq.add(5); assertEquals(2, pq.size()); assertFalse(pq.isEmpty()); assertEquals(5, pq.peek().intValue()); pq.add(7); assertEquals(3, pq.size()); assertFalse(pq.isEmpty()); assertEquals(5, pq.peek().intValue()); pq.add(3); assertEquals(4, pq.size()); assertFalse(pq.isEmpty()); assertEquals(3, pq.peek().intValue()); assertEquals(3, pq.remove().intValue()); assertEquals(5, pq.remove().intValue()); assertEquals(7, pq.remove().intValue()); assertEquals(14, pq.remove().intValue()); assertTrue(pq.isEmpty()); } public void testCollectionMethods() { PriorityQueue<Integer> pq = buildPQ(3, 4, 21, 5, 23, 31, 22); ArrayList<Integer> src = new ArrayList<Integer>(); addArray(src, 21, 3, 31, 5); assertTrue(pq.containsAll(src)); assertTrue(pq.contains(4)); assertTrue(pq.contains(21)); assertEquals(3, pq.peek().intValue()); pq.remove(21); assertEquals(6, pq.size()); assertTrue(pq.contains(4)); assertFalse(pq.contains(21)); pq.remove(5); assertFalse(pq.contains(5)); pq.remove(3); assertFalse(pq.contains(3)); assertEquals(4, pq.remove().intValue()); assertEquals(22, pq.remove().intValue()); assertEquals(23, pq.remove().intValue()); assertEquals(31, pq.remove().intValue()); assertTrue(pq.isEmpty()); addArray(pq, 3, 4, 21, 5, 23, 31, 22); src.add(99); assertTrue(pq.retainAll(src)); assertFalse(pq.retainAll(src)); assertEquals(4, pq.size()); assertEquals(3, pq.remove().intValue()); assertEquals(5, pq.remove().intValue()); assertEquals(21, pq.remove().intValue()); assertEquals(31, pq.remove().intValue()); assertTrue(pq.isEmpty()); } public void testComparator() { PriorityQueue<Integer> pq = new PriorityQueue<Integer>(); assertNull(pq.comparator()); pq = new PriorityQueue<Integer>(11); assertNull(pq.comparator()); Comparator<Integer> comparator = new Comparator<Integer>() { @Override public int compare(Integer o1, Integer o2) { return o1 - o2; } }; pq = new PriorityQueue<Integer>(11, comparator); assertEquals(comparator, pq.comparator()); PriorityQueue<Integer> anotherQueue = new PriorityQueue<Integer>(pq); assertEquals(pq.comparator(), anotherQueue.comparator()); TreeSet<Integer> sortedSet = new TreeSet<Integer>(comparator); pq = new PriorityQueue<Integer>(sortedSet); assertEquals(sortedSet.comparator(), pq.comparator()); } public void testFromCollection() { ArrayList<Integer> src = new ArrayList<Integer>(); addArray(src, 13, 3, 7, 5); PriorityQueue<Integer> pq = new PriorityQueue<Integer>(src); assertEquals(4, pq.size()); assertEquals(3, pq.remove().intValue()); assertEquals(5, pq.remove().intValue()); assertEquals(7, pq.remove().intValue()); assertEquals(13, pq.remove().intValue()); assertTrue(pq.isEmpty()); } public void testContains() { PriorityQueue<Integer> queue = new PriorityQueue<>(); assertFalse(queue.contains(null)); queue.add(3); queue.add(1); queue.add(2); assertTrue(queue.contains(1)); assertTrue(queue.contains(2)); assertTrue(queue.contains(3)); assertFalse(queue.contains(4)); } public void testPeekElement() { PriorityQueue<Integer> queue = new PriorityQueue<>(); try { queue.element(); fail(); } catch (NoSuchElementException expected) { } assertNull(queue.peek()); queue.add(3); queue.add(1); queue.add(2); assertEquals(1, (int) queue.element()); assertEquals(1, (int) queue.peek()); assertEquals(3, queue.size()); } public void testPollRemove() { PriorityQueue<Integer> queue = new PriorityQueue<>(); try { queue.remove(); fail(); } catch (NoSuchElementException expected) { } assertNull(queue.poll()); queue.add(3); queue.add(1); queue.add(2); assertEquals(1, (int) queue.remove()); assertEquals(2, queue.size()); assertEquals(2, (int) queue.remove()); assertEquals(1, queue.size()); assertEquals(3, (int) queue.remove()); assertTrue(queue.isEmpty()); queue = new PriorityQueue<>(); queue.add(1); queue.add(2); queue.add(3); assertEquals(1, (int) queue.poll()); assertEquals(2, queue.size()); assertEquals(2, (int) queue.poll()); assertEquals(1, queue.size()); assertEquals(3, (int) queue.poll()); assertTrue(queue.isEmpty()); } private void addArray(Collection<Integer> col, int... values) { for (int val : values) { col.add(val); } } private PriorityQueue<Integer> buildPQ(int... values) { PriorityQueue<Integer> pq = new PriorityQueue<Integer>(); addArray(pq, values); return pq; } }