blob: cf9833552cc39361bf43e9cc9ddb300a55df6681 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2015 Oracle. All rights reserved.
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v1.0, which accompanies this distribution
* and is available at http://www.eclipse.org/legal/epl-v10.html.
*
* Contributors:
* Oracle - initial API and implementation
******************************************************************************/
package org.eclipse.jpt.common.utility.tests.internal.deque;
import java.util.Comparator;
import org.eclipse.jpt.common.utility.internal.ObjectTools;
import org.eclipse.jpt.common.utility.internal.deque.AbstractPriorityDeque;
import org.eclipse.jpt.common.utility.internal.deque.DequeTools;
import org.eclipse.jpt.common.utility.internal.deque.PriorityDeque;
@SuppressWarnings("nls")
public class PriorityDequeTests
extends AbstractPriorityDequeTests
{
public PriorityDequeTests(String name) {
super(name);
}
@Override
<E extends Comparable<E>> PriorityDeque<E> buildDeque() {
return DequeTools.<E>priorityDeque();
}
@Override
<E extends Comparable<E>> PriorityDeque<E> buildDeque(int capacity) {
return DequeTools.priorityDeque(capacity);
}
@Override
<E extends Comparable<E>> PriorityDeque<E> buildDeque(Comparator<E> comparator, int capacity) {
return DequeTools.priorityDeque(comparator, capacity);
}
public void testArrayCapacityExceeded() {
AbstractPriorityDeque<Integer> deque = this.buildDeque();
assertTrue(deque.isEmpty());
deque.enqueue(Integer.valueOf(1));
assertFalse(deque.isEmpty());
deque.enqueue(Integer.valueOf(2));
assertFalse(deque.isEmpty());
deque.enqueue(Integer.valueOf(3));
deque.enqueue(Integer.valueOf(10));
deque.enqueue(Integer.valueOf(11));
deque.enqueue(Integer.valueOf(12));
deque.enqueue(Integer.valueOf(4));
deque.enqueue(Integer.valueOf(4));
deque.enqueue(Integer.valueOf(7));
deque.enqueue(Integer.valueOf(8));
deque.enqueue(Integer.valueOf(9));
deque.enqueue(Integer.valueOf(5));
deque.enqueue(Integer.valueOf(6));
deque.enqueue(Integer.valueOf(9));
assertEquals(Integer.valueOf(1), deque.dequeueHead());
assertFalse(deque.isEmpty());
assertEquals(Integer.valueOf(2), deque.dequeueHead());
assertFalse(deque.isEmpty());
assertEquals(Integer.valueOf(3), deque.dequeueHead());
assertEquals(Integer.valueOf(4), deque.dequeueHead());
assertEquals(Integer.valueOf(12), deque.dequeueTail());
assertEquals(Integer.valueOf(4), deque.dequeueHead());
assertEquals(Integer.valueOf(5), deque.dequeueHead());
assertEquals(Integer.valueOf(6), deque.dequeueHead());
assertEquals(Integer.valueOf(7), deque.dequeueHead());
assertEquals(Integer.valueOf(11), deque.dequeueTail());
assertEquals(Integer.valueOf(8), deque.dequeueHead());
assertEquals(Integer.valueOf(10), deque.dequeueTail());
assertEquals(Integer.valueOf(9), deque.dequeueHead());
assertEquals(Integer.valueOf(9), deque.dequeueHead());
assertTrue(deque.isEmpty());
}
public void testEnsureCapacity() throws Exception {
PriorityDeque<String> deque = this.buildDeque();
deque.enqueue("b");
deque.enqueue("c");
deque.enqueue("a");
assertEquals(11, ((Object[]) ObjectTools.get(deque, "elements")).length);
deque.ensureCapacity(420);
assertEquals(421, ((Object[]) ObjectTools.get(deque, "elements")).length);
assertEquals("a", deque.dequeueHead());
assertEquals("c", deque.dequeueTail());
assertEquals("b", deque.dequeueHead());
assertTrue(deque.isEmpty());
}
public void testTrimToSize() throws Exception {
PriorityDeque<String> deque = this.buildDeque();
deque.enqueue("b");
deque.enqueue("c");
deque.enqueue("a");
assertEquals(11, ((Object[]) ObjectTools.get(deque, "elements")).length);
deque.trimToSize();
assertEquals(4, ((Object[]) ObjectTools.get(deque, "elements")).length);
assertEquals("a", deque.dequeueHead());
assertEquals("c", deque.dequeueTail());
assertEquals("b", deque.dequeueHead());
assertTrue(deque.isEmpty());
}
public void testTrimToSize_nop() throws Exception {
PriorityDeque<String> deque = this.buildDeque(3);
deque.enqueue("b");
deque.enqueue("c");
deque.enqueue("a");
assertEquals(4, ((Object[]) ObjectTools.get(deque, "elements")).length);
deque.trimToSize();
assertEquals(4, ((Object[]) ObjectTools.get(deque, "elements")).length);
assertEquals("a", deque.dequeueHead());
assertEquals("c", deque.dequeueTail());
assertEquals("b", deque.dequeueHead());
assertTrue(deque.isEmpty());
}
}