blob: 26527aa7cdb12f38dfc88b72245fbb9b7b3fd22b [file] [log] [blame]
/* 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 libcore.java.util;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.PriorityQueue;
import junit.framework.TestCase;
import libcore.util.SerializationTester;
public class OldPriorityQueueTest extends TestCase {
public void test_ConstructorI() {
PriorityQueue<Object> queue = new PriorityQueue<Object>(100);
assertNotNull(queue);
assertEquals(0, queue.size());
assertNull(queue.comparator());
try {
new PriorityQueue(0);
fail("IllegalArgumentException expected");
} catch (IllegalArgumentException e) {
//expected
}
}
public void test_remove_Ljava_lang_Object_using_comparator() {
PriorityQueue<String> queue = new PriorityQueue<String>(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"));
// Even though "BB" is equivalent to "AA" using the string length comparator, remove()
// uses equals(), so only "AA" succeeds in removing element "AA".
assertFalse(queue.remove("BB"));
assertTrue(queue.remove("AA"));
}
public void test_remove_Ljava_lang_Object_not_exists() {
Integer[] array = { 2, 45, 7, -12, 9, 23, 17, 1118, 10, 16, 39 };
List<Integer> list = Arrays.asList(array);
PriorityQueue<Integer> integerQueue = new PriorityQueue<Integer>(list);
assertFalse(integerQueue.remove(111));
assertFalse(integerQueue.remove(null));
assertFalse(integerQueue.remove(""));
}
public void test_Serialization() throws Exception {
String s = "aced0005737200176a6176612e7574696c2e5072696f72697479517565756594"
+ "da30b4fb3f82b103000249000473697a654c000a636f6d70617261746f7274001"
+ "64c6a6176612f7574696c2f436f6d70617261746f723b78700000000b70770400"
+ "00000c737200116a6176612e6c616e672e496e746567657212e2a0a4f78187380"
+ "2000149000576616c7565787200106a6176612e6c616e672e4e756d62657286ac"
+ "951d0b94e08b0200007870fffffff47371007e0003000000027371007e0003000"
+ "000077371007e00030000000a7371007e0003000000097371007e000300000017"
+ "7371007e0003000000117371007e00030000045e7371007e00030000002d73710"
+ "07e0003000000107371007e00030000002778";
PriorityQueue<Integer> srcIntegerQueue = new PriorityQueue<Integer>(
Arrays.asList(2, 45, 7, -12, 9, 23, 17, 1118, 10, 16, 39));
new SerializationTester<PriorityQueue<Integer>>(srcIntegerQueue, s) {
@Override protected boolean equals(PriorityQueue<Integer> a, PriorityQueue<Integer> b) {
return Arrays.equals(a.toArray(), b.toArray());
}
}.test();
}
private static class MockComparatorStringByLength implements
Comparator<String> {
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<E> implements Comparator<E> {
public int compare(E object1, E object2) {
return 0;
}
}
/**
* removeAt(.) must sometimes perform siftUp(.).
*/
public void test_removeAt_siftUp() {
PriorityQueue<Integer> q = new PriorityQueue<Integer>();
// Adding a valid heap will keep elements in the same order
for (int i : new int[] { 0, 3, 1, 4, 5, 6, 2 }) {
q.add(i);
}
q.remove(4); // 2 replaces 4 but parent is 3, siftUp(.) is needed
for (int i : new int[] { 0, 1, 2, 3, 5, 6 }) {
assertEquals(i, (int) q.poll());
}
assertNull(q.poll());
}
}