/* Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You 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 org.apache.harmony.luni.tests.java.util; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Comparator; import java.util.Iterator; import java.util.List; import java.util.NoSuchElementException; import java.util.PriorityQueue; import java.util.SortedSet; import java.util.TreeSet; import junit.framework.TestCase; import tests.util.SerializationTester; public class PriorityQueueTest extends TestCase { private static final String SERIALIZATION_FILE_NAME = "serialization/java/util/PriorityQueue.golden.ser"; //$NON-NLS-1$ /** * @tests java.util.PriorityQueue#iterator() */ public void test_iterator() { PriorityQueue integerQueue = new PriorityQueue(); Integer[] array = { 2, 45, 7, -12, 9 }; for (int i = 0; i < array.length; i++) { integerQueue.offer(array[i]); } Iterator iter = integerQueue.iterator(); assertNotNull(iter); ArrayList iterResult = new ArrayList(); while (iter.hasNext()) { iterResult.add(iter.next()); } Object[] resultArray = iterResult.toArray(); Arrays.sort(array); Arrays.sort(resultArray); assertTrue(Arrays.equals(array, resultArray)); } /** * @tests java.util.PriorityQueue#iterator() */ public void test_iterator_empty() { PriorityQueue integerQueue = new PriorityQueue(); Iterator iter = integerQueue.iterator(); try { iter.next(); fail("should throw NoSuchElementException"); } catch (NoSuchElementException e) { // expected } iter = integerQueue.iterator(); try { iter.remove(); fail("should throw IllegalStateException"); } catch (IllegalStateException e) { // expected } } /** * @tests java.util.PriorityQueue#iterator() */ public void test_iterator_outofbound() { PriorityQueue integerQueue = new PriorityQueue(); integerQueue.offer(0); Iterator iter = integerQueue.iterator(); iter.next(); try { iter.next(); fail("should throw NoSuchElementException"); } catch (NoSuchElementException e) { // expected } iter = integerQueue.iterator(); iter.next(); iter.remove(); try { iter.next(); fail("should throw NoSuchElementException"); } catch (NoSuchElementException e) { // expected } } /** * @tests java.util.PriorityQueue#iterator() */ public void test_iterator_remove() { PriorityQueue integerQueue = new PriorityQueue(); Integer[] array = { 2, 45, 7, -12, 9 }; for (int i = 0; i < array.length; i++) { integerQueue.offer(array[i]); } Iterator iter = integerQueue.iterator(); assertNotNull(iter); for (int i = 0; i < array.length; i++) { iter.next(); if (2 == i) { iter.remove(); } } assertEquals(array.length - 1, integerQueue.size()); iter = integerQueue.iterator(); Integer[] newArray = new Integer[array.length - 1]; for (int i = 0; i < newArray.length; i++) { newArray[i] = iter.next(); } Arrays.sort(newArray); for (int i = 0; i < integerQueue.size(); i++) { assertEquals(newArray[i], integerQueue.poll()); } } public void test_iterator_removeEquals() { PriorityQueue integerQueue = new PriorityQueue(10, new MockComparatorStringByLength()); String[] array = { "ONE", "TWO", "THREE", "FOUR", "FIVE" }; for (int i = 0; i < array.length; i++) { integerQueue.offer(array[i]); } // Try removing an entry that the comparator says is equal assertFalse(integerQueue.remove("123")); assertFalse(integerQueue.remove("one")); assertTrue(integerQueue.remove("THREE")); } /** * @tests java.util.PriorityQueue#iterator() */ public void test_iterator_remove_illegalState() { PriorityQueue integerQueue = new PriorityQueue(); Integer[] array = { 2, 45, 7, -12, 9 }; for (int i = 0; i < array.length; i++) { integerQueue.offer(array[i]); } Iterator iter = integerQueue.iterator(); assertNotNull(iter); try { iter.remove(); fail("should throw IllegalStateException"); } catch (IllegalStateException e) { // expected } iter.next(); iter.remove(); try { iter.remove(); fail("should throw IllegalStateException"); } catch (IllegalStateException e) { // expected } } /** * @tests java.util.PriorityQueue.size() */ public void test_size() { PriorityQueue integerQueue = new PriorityQueue(); assertEquals(0, integerQueue.size()); int[] array = { 2, 45, 7, -12, 9 }; for (int i = 0; i < array.length; i++) { integerQueue.offer(array[i]); } assertEquals(array.length, integerQueue.size()); } /** * @tests java.util.PriorityQueue#PriorityQueue() */ public void test_Constructor() { PriorityQueue queue = new PriorityQueue(); assertNotNull(queue); assertEquals(0, queue.size()); assertNull(queue.comparator()); } /** * @tests java.util.PriorityQueue#PriorityQueue(int) */ public void test_ConstructorI() { PriorityQueue queue = new PriorityQueue(100); assertNotNull(queue); assertEquals(0, queue.size()); assertNull(queue.comparator()); } /** * @tests java.util.PriorityQueue#PriorityQueue(int, Comparator) */ public void test_ConstructorILjava_util_Comparator() { PriorityQueue queue = new PriorityQueue(100, (Comparator) null); assertNotNull(queue); assertEquals(0, queue.size()); assertNull(queue.comparator()); MockComparator comparator = new MockComparator(); queue = new PriorityQueue(100, comparator); assertNotNull(queue); assertEquals(0, queue.size()); assertEquals(comparator, queue.comparator()); } /** * @tests java.util.PriorityQueue#PriorityQueue(int, Comparator) */ public void test_ConstructorILjava_util_Comparator_illegalCapacity() { try { new PriorityQueue(0, new MockComparator()); fail("should throw IllegalArgumentException"); } catch (IllegalArgumentException e) { // expected } try { new PriorityQueue(-1, new MockComparator()); fail("should throw IllegalArgumentException"); } catch (IllegalArgumentException e) { // expected } } /** * @tests java.util.PriorityQueue#PriorityQueue(int, Comparator) */ public void test_ConstructorILjava_util_Comparator_cast() { MockComparatorCast objectComparator = new MockComparatorCast(); PriorityQueue integerQueue = new PriorityQueue(100, objectComparator); assertNotNull(integerQueue); assertEquals(0, integerQueue.size()); assertEquals(objectComparator, integerQueue.comparator()); Integer[] array = { 2, 45, 7, -12, 9 }; List list = Arrays.asList(array); integerQueue.addAll(list); assertEquals(list.size(), integerQueue.size()); // just test here no cast exception raises. } /** * @tests java.util.PriorityQueue#PriorityQueue(Collection) */ public void test_ConstructorLjava_util_Colleciton() { Integer[] array = { 2, 45, 7, -12, 9 }; List list = Arrays.asList(array); PriorityQueue integerQueue = new PriorityQueue(list); assertEquals(array.length, integerQueue.size()); assertNull(integerQueue.comparator()); Arrays.sort(array); for (int i = 0; i < array.length; i++) { assertEquals(array[i], integerQueue.poll()); } } /** * @tests java.util.PriorityQueue#PriorityQueue(Collection) */ public void test_ConstructorLjava_util_Colleciton_null() { ArrayList list = new ArrayList(); list.add(new Float(11)); list.add(null); list.add(new Integer(10)); try { new PriorityQueue(list); fail("should throw NullPointerException"); } catch (NullPointerException e) { // expected } } /** * @tests java.util.PriorityQueue#PriorityQueue(Collection) */ public void test_ConstructorLjava_util_Colleciton_non_comparable() { ArrayList list = new ArrayList(); list.add(new Float(11)); list.add(new Integer(10)); try { new PriorityQueue(list); fail("should throw ClassCastException"); } catch (ClassCastException e) { // expected } } /** * @tests java.util.PriorityQueue#PriorityQueue(Collection) */ public void test_ConstructorLjava_util_Colleciton_from_priorityqueue() { String[] array = { "AAAAA", "AA", "AAAA", "AAAAAAAA" }; PriorityQueue queue = new PriorityQueue(4, new MockComparatorStringByLength()); for (int i = 0; i < array.length; i++) { queue.offer(array[i]); } Collection c = queue; PriorityQueue constructedQueue = new PriorityQueue(c); assertEquals(queue.comparator(), constructedQueue.comparator()); while (queue.size() > 0) { assertEquals(queue.poll(), constructedQueue.poll()); } assertEquals(0, constructedQueue.size()); } /** * @tests java.util.PriorityQueue#PriorityQueue(Collection) */ public void test_ConstructorLjava_util_Colleciton_from_sortedset() { int[] array = { 3, 5, 79, -17, 5 }; TreeSet treeSet = new TreeSet(new MockComparator()); for (int i = 0; i < array.length; i++) { treeSet.add(array[i]); } Collection c = treeSet; PriorityQueue queue = new PriorityQueue(c); assertEquals(treeSet.comparator(), queue.comparator()); Iterator iter = treeSet.iterator(); while (iter.hasNext()) { assertEquals(iter.next(), queue.poll()); } assertEquals(0, queue.size()); } /** * @tests java.util.PriorityQueue#PriorityQueue(PriorityQueue) */ public void test_ConstructorLjava_util_PriorityQueue() { PriorityQueue integerQueue = new PriorityQueue(); int[] array = { 2, 45, 7, -12, 9 }; for (int i = 0; i < array.length; i++) { integerQueue.offer(array[i]); } PriorityQueue objectQueue = new PriorityQueue( integerQueue); assertEquals(integerQueue.size(), objectQueue.size()); assertEquals(integerQueue.comparator(), objectQueue.comparator()); Arrays.sort(array); for (int i = 0; i < array.length; i++) { assertEquals(array[i], objectQueue.poll()); } } /** * @tests java.util.PriorityQueue#PriorityQueue(PriorityQueue) */ public void test_ConstructorLjava_util_PriorityQueue_null() { try { new PriorityQueue((PriorityQueue) null); fail("should throw NullPointerException"); } catch (NullPointerException e) { // expected } } /** * @tests java.util.PriorityQueue#PriorityQueue(SortedSet) */ public void test_ConstructorLjava_util_SortedSet() { int[] array = { 3, 5, 79, -17, 5 }; TreeSet treeSet = new TreeSet(); for (int i = 0; i < array.length; i++) { treeSet.add(array[i]); } PriorityQueue queue = new PriorityQueue(treeSet); Iterator iter = treeSet.iterator(); while (iter.hasNext()) { assertEquals(iter.next(), queue.poll()); } } /** * @tests java.util.PriorityQueue#PriorityQueue(SortedSet) */ public void test_ConstructorLjava_util_SortedSet_null() { try { new PriorityQueue((SortedSet) null); fail("should throw NullPointerException"); } catch (NullPointerException e) { // expected } } /** * @tests java.util.PriorityQueue#offer(Object) */ public void test_offerLjava_lang_Object() { PriorityQueue queue = new PriorityQueue(10, new MockComparatorStringByLength()); String[] array = { "AAAAA", "AA", "AAAA", "AAAAAAAA" }; for (int i = 0; i < array.length; i++) { queue.offer(array[i]); } String[] sortedArray = { "AA", "AAAA", "AAAAA", "AAAAAAAA" }; for (int i = 0; i < sortedArray.length; i++) { assertEquals(sortedArray[i], queue.poll()); } assertEquals(0, queue.size()); assertNull(queue.poll()); } /** * @tests java.util.PriorityQueue#offer(Object) */ public void test_offerLjava_lang_Object_null() { PriorityQueue queue = new PriorityQueue(); try { queue.offer(null); fail("should throw NullPointerException"); } catch (NullPointerException e) { // expected } } /** * @tests java.util.PriorityQueue#offer(Object) */ public void test_offer_Ljava_lang_Object_non_Comparable() { PriorityQueue queue = new PriorityQueue(); queue.offer(new Integer(10)); try { queue.offer(new Float(1.3)); fail("should throw ClassCastException"); } catch (ClassCastException e) { // expected } queue = new PriorityQueue(); queue.offer(new Integer(10)); try { queue.offer(new Object()); fail("should throw ClassCastException"); } catch (ClassCastException e) { // expected } } /** * @tests java.util.PriorityQueue#poll() */ public void test_poll() { PriorityQueue stringQueue = new PriorityQueue(); String[] array = { "MYTESTSTRING", "AAAAA", "BCDEF", "ksTRD", "AAAAA" }; for (int i = 0; i < array.length; i++) { stringQueue.offer(array[i]); } Arrays.sort(array); for (int i = 0; i < array.length; i++) { assertEquals(array[i], stringQueue.poll()); } assertEquals(0, stringQueue.size()); assertNull(stringQueue.poll()); } /** * @tests java.util.PriorityQueue#poll() */ public void test_poll_empty() { PriorityQueue queue = new PriorityQueue(); assertEquals(0, queue.size()); assertNull(queue.poll()); } /** * @tests java.util.PriorityQueue#peek() */ public void test_peek() { PriorityQueue integerQueue = new PriorityQueue(); int[] array = { 2, 45, 7, -12, 9 }; for (int i = 0; i < array.length; i++) { integerQueue.add(array[i]); } Arrays.sort(array); assertEquals(new Integer(array[0]), integerQueue.peek()); assertEquals(new Integer(array[0]), integerQueue.peek()); } /** * @tests java.util.PriorityQueue#peek() */ public void test_peek_empty() { PriorityQueue queue = new PriorityQueue(); assertEquals(0, queue.size()); assertNull(queue.peek()); assertNull(queue.peek()); } /** * @tests java.util.PriorityQueue#Clear() */ public void test_clear() { PriorityQueue integerQueue = new PriorityQueue(); int[] array = { 2, 45, 7, -12, 9 }; for (int i = 0; i < array.length; i++) { integerQueue.offer(array[i]); } integerQueue.clear(); assertTrue(integerQueue.isEmpty()); } /** * @tests java.util.PriorityQueue#add(Object) */ public void test_add_Ljava_lang_Object() { PriorityQueue integerQueue = new PriorityQueue(); Integer[] array = { 2, 45, 7, -12, 9 }; for (int i = 0; i < array.length; i++) { integerQueue.add(array[i]); } Arrays.sort(array); assertEquals(array.length, integerQueue.size()); for (int i = 0; i < array.length; i++) { assertEquals(array[i], integerQueue.poll()); } assertEquals(0, integerQueue.size()); } /** * @tests java.util.PriorityQueue#add(Object) */ public void test_add_Ljava_lang_Object_null() { PriorityQueue queue = new PriorityQueue(); try { queue.add(null); fail("should throw NullPointerException"); } catch (NullPointerException e) { // expected } } /** * @tests java.util.PriorityQueue#add(Object) */ public void test_add_Ljava_lang_Object_non_Comparable() { PriorityQueue queue = new PriorityQueue(); queue.add(new Integer(10)); try { queue.add(new Float(1.3)); fail("should throw ClassCastException"); } catch (ClassCastException e) { // expected } queue = new PriorityQueue(); queue.add(new Integer(10)); try { queue.add(new Object()); fail("should throw ClassCastException"); } catch (ClassCastException e) { // expected } } /** * @tests java.util.PriorityQueue#remove(Object) * */ public void test_remove_Ljava_lang_Object() { Integer[] array = { 2, 45, 7, -12, 9, 23, 17, 1118, 10, 16, 39 }; List list = Arrays.asList(array); PriorityQueue integerQueue = new PriorityQueue(list); assertTrue(integerQueue.remove(16)); Integer[] newArray = { 2, 45, 7, -12, 9, 23, 17, 1118, 10, 39 }; Arrays.sort(newArray); for (int i = 0; i < newArray.length; i++) { assertEquals(newArray[i], integerQueue.poll()); } assertEquals(0, integerQueue.size()); } /** * @tests java.util.PriorityQueue#remove(Object) * */ public void test_remove_Ljava_lang_Object_using_comparator() { PriorityQueue queue = new PriorityQueue(10, new MockComparatorStringByLength()); String[] array = { "AAAAA", "AA", "AAAA", "AAAAAAAA" }; for (int i = 0; i < array.length; i++) { queue.offer(array[i]); } assertFalse(queue.contains("BB")); assertTrue(queue.remove("AA")); } /** * @tests java.util.PriorityQueue#remove(Object) * */ public void test_remove_Ljava_lang_Object_not_exists() { Integer[] array = { 2, 45, 7, -12, 9, 23, 17, 1118, 10, 16, 39 }; List list = Arrays.asList(array); PriorityQueue integerQueue = new PriorityQueue(list); assertFalse(integerQueue.remove(111)); assertFalse(integerQueue.remove(null)); assertFalse(integerQueue.remove("")); } /** * @tests java.util.PriorityQueue#remove(Object) * */ public void test_remove_Ljava_lang_Object_null() { Integer[] array = { 2, 45, 7, -12, 9, 23, 17, 1118, 10, 16, 39 }; List list = Arrays.asList(array); PriorityQueue integerQueue = new PriorityQueue(list); assertFalse(integerQueue.remove(null)); } /** * @tests java.util.PriorityQueue#remove(Object) * */ public void test_remove_Ljava_lang_Object_not_Compatible() { Integer[] array = { 2, 45, 7, -12, 9, 23, 17, 1118, 10, 16, 39 }; List list = Arrays.asList(array); PriorityQueue integerQueue = new PriorityQueue(list); assertFalse(integerQueue.remove(new Float(1.3F))); // although argument element type is not compatible with those in queue, // but comparator supports it. MockComparator comparator = new MockComparator(); PriorityQueue integerQueue1 = new PriorityQueue(100, comparator); integerQueue1.offer(1); assertFalse(integerQueue1.remove(new Float(1.3F))); PriorityQueue queue = new PriorityQueue(); Object o = new Object(); queue.offer(o); assertTrue(queue.remove(o)); } /** * @tests java.util.PriorityQueue#comparator() */ public void test_comparator() { PriorityQueue queue = new PriorityQueue(); assertNull(queue.comparator()); MockComparator comparator = new MockComparator(); queue = new PriorityQueue(100, comparator); assertEquals(comparator, queue.comparator()); } /** * @tests serialization/deserialization. */ public void test_Serialization() throws Exception { Integer[] array = { 2, 45, 7, -12, 9, 23, 17, 1118, 10, 16, 39 }; List list = Arrays.asList(array); PriorityQueue srcIntegerQueue = new PriorityQueue( list); PriorityQueue destIntegerQueue = (PriorityQueue) SerializationTester .getDeserilizedObject(srcIntegerQueue); Arrays.sort(array); for (int i = 0; i < array.length; i++) { assertEquals(array[i], destIntegerQueue.poll()); } assertEquals(0, destIntegerQueue.size()); } /** * @tests serialization/deserialization. */ public void test_Serialization_casting() throws Exception { Integer[] array = { 2, 45, 7, -12, 9, 23, 17, 1118, 10, 16, 39 }; List list = Arrays.asList(array); PriorityQueue srcIntegerQueue = new PriorityQueue( list); PriorityQueue destStringQueue = (PriorityQueue) SerializationTester .getDeserilizedObject(srcIntegerQueue); // will not incur class cast exception. Object o = destStringQueue.peek(); Arrays.sort(array); Integer I = (Integer) o; assertEquals(array[0], I); } /** * @tests serialization/deserialization compatibility with RI. */ public void test_SerializationCompatibility_cast() throws Exception { Integer[] array = { 2, 45, 7, -12, 9, 23, 17, 1118, 10, 16, 39 }; List list = Arrays.asList(array); PriorityQueue srcIntegerQueue = new PriorityQueue( list); PriorityQueue destStringQueue = (PriorityQueue) SerializationTester .readObject(srcIntegerQueue, SERIALIZATION_FILE_NAME); // will not incur class cast exception. Object o = destStringQueue.peek(); Arrays.sort(array); Integer I = (Integer) o; assertEquals(array[0], I); } /** * @tests {@link PriorityQueue#contains(Object)} */ public void test_contains() throws Exception { PriorityQueue integerQueue = new PriorityQueue(); Integer[] array = { 2, 45, 7, -12, 9 }; for (int i = 0; i < array.length; i++) { integerQueue.add(array[i]); } for (int i = 0; i < array.length; i++) { assertTrue(integerQueue.contains(array[i])); } assertFalse(integerQueue.contains(null)); } /** * @tests {@link PriorityQueue#toArray()} */ public void test_toArray() throws Exception { PriorityQueue integerQueue = new PriorityQueue(); Integer[] array = { 2, 45, 7, -12, 9 }; for (int i = 0; i < array.length; i++) { integerQueue.add(array[i]); } Object[] returnArray = integerQueue.toArray(); assertEquals(returnArray.length,integerQueue.size()); for (int i = 0; i < returnArray.length; i++) { assertTrue(integerQueue.contains(returnArray[i])); } } /** * @tests {@link PriorityQueue#toArray(T[])} */ public void test_toArray_$T() throws Exception { PriorityQueue integerQueue = new PriorityQueue(); Integer[] array = { 2, 45, 7, -12, 9 }; for (int i = 0; i < array.length; i++) { integerQueue.add(array[i]); } Object[] returnArray = integerQueue.toArray(new Integer[0]); assertEquals(returnArray.length,integerQueue.size()); for (int i = 0; i < returnArray.length; i++) { assertTrue(integerQueue.contains(returnArray[i])); } returnArray = integerQueue.toArray(new Integer[10]); assertEquals(10,returnArray.length); for (int i = 0; i < array.length; i++) { assertTrue(integerQueue.contains(returnArray[i])); } for (int i = array.length; i < 10; i++) { assertNull(returnArray[i]); } try { integerQueue.toArray(null); fail("should throw NullPointerException"); } catch (NullPointerException e) { // expected } try { integerQueue.toArray(new String[1]); fail("should throw ArrayStoreException"); } catch (ArrayStoreException e) { // expected } } private static class MockComparator implements Comparator { public int compare(E object1, E object2) { int hashcode1 = object1.hashCode(); int hashcode2 = object2.hashCode(); if (hashcode1 > hashcode2) { return 1; } else if (hashcode1 == hashcode2) { return 0; } else { return -1; } } } private static class MockComparatorStringByLength implements Comparator { public int compare(String object1, String object2) { int length1 = object1.length(); int length2 = object2.length(); if (length1 > length2) { return 1; } else if (length1 == length2) { return 0; } else { return -1; } } } private static class MockComparatorCast implements Comparator { public int compare(E object1, E object2) { return 0; } } }