blob: c30026bf693c547f948eea27e07e97610377ff90 [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.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import org.eclipse.jpt.common.utility.deque.Deque;
import org.eclipse.jpt.common.utility.internal.ClassTools;
import org.eclipse.jpt.common.utility.internal.ObjectTools;
import org.eclipse.jpt.common.utility.internal.StringTools;
import org.eclipse.jpt.common.utility.internal.comparator.ComparatorTools;
import org.eclipse.jpt.common.utility.internal.deque.ArrayDeque;
import org.eclipse.jpt.common.utility.internal.deque.DequeTools;
import org.eclipse.jpt.common.utility.internal.deque.LinkedDeque;
import org.eclipse.jpt.common.utility.internal.deque.PriorityDeque;
import org.eclipse.jpt.common.utility.internal.deque.SynchronizedDeque;
import org.eclipse.jpt.common.utility.internal.queue.ArrayQueue;
import org.eclipse.jpt.common.utility.internal.queue.QueueTools;
import org.eclipse.jpt.common.utility.internal.stack.ArrayStack;
import org.eclipse.jpt.common.utility.internal.stack.StackTools;
import org.eclipse.jpt.common.utility.transformer.Transformer;
import junit.framework.TestCase;
@SuppressWarnings("nls")
public class DequeToolsTests
extends TestCase
{
public DequeToolsTests(String name) {
super(name);
}
// ********** enqueue all **********
public void testEnqueueTailAllIterable() {
ArrayList<String> iterable = new ArrayList<String>();
iterable.add("one");
iterable.add("two");
iterable.add("three");
Deque<String> deque = DequeTools.arrayDeque();
assertTrue(DequeTools.enqueueTailAll(deque, iterable));
assertEquals("one", deque.dequeueHead());
assertEquals("two", deque.dequeueHead());
assertEquals("three", deque.dequeueHead());
}
public void testEnqueueTailAllIterable_empty() {
ArrayList<String> iterable = new ArrayList<String>();
Deque<String> deque = DequeTools.arrayDeque();
assertFalse(DequeTools.enqueueTailAll(deque, iterable));
assertTrue(deque.isEmpty());
}
public void testEnqueueHeadAllIterable() {
ArrayList<String> iterable = new ArrayList<String>();
iterable.add("one");
iterable.add("two");
iterable.add("three");
Deque<String> deque = DequeTools.arrayDeque();
assertTrue(DequeTools.enqueueHeadAll(deque, iterable));
assertEquals("one", deque.dequeueTail());
assertEquals("two", deque.dequeueTail());
assertEquals("three", deque.dequeueTail());
}
public void testEnqueueHeadAllIterable_empty() {
ArrayList<String> iterable = new ArrayList<String>();
Deque<String> deque = DequeTools.arrayDeque();
assertFalse(DequeTools.enqueueHeadAll(deque, iterable));
assertTrue(deque.isEmpty());
}
public void testEnqueueTailAllIterator() {
ArrayList<String> iterable = new ArrayList<String>();
iterable.add("one");
iterable.add("two");
iterable.add("three");
Deque<String> deque = DequeTools.arrayDeque();
assertTrue(DequeTools.enqueueTailAll(deque, iterable.iterator()));
assertEquals("one", deque.dequeueHead());
assertEquals("two", deque.dequeueHead());
assertEquals("three", deque.dequeueHead());
}
public void testEnqueueHeadAllIterator() {
ArrayList<String> iterable = new ArrayList<String>();
iterable.add("one");
iterable.add("two");
iterable.add("three");
Deque<String> deque = DequeTools.arrayDeque();
assertTrue(DequeTools.enqueueHeadAll(deque, iterable.iterator()));
assertEquals("one", deque.dequeueTail());
assertEquals("two", deque.dequeueTail());
assertEquals("three", deque.dequeueTail());
}
public void testEnqueueTailAllArray() {
ArrayList<String> iterable = new ArrayList<String>();
iterable.add("one");
iterable.add("two");
iterable.add("three");
Deque<String> deque = DequeTools.arrayDeque();
assertTrue(DequeTools.enqueueTailAll(deque, iterable.toArray(StringTools.EMPTY_STRING_ARRAY)));
assertEquals("one", deque.dequeueHead());
assertEquals("two", deque.dequeueHead());
assertEquals("three", deque.dequeueHead());
}
public void testEnqueueTailAllArray_empty() {
ArrayList<String> iterable = new ArrayList<String>();
Deque<String> deque = DequeTools.arrayDeque();
assertFalse(DequeTools.enqueueTailAll(deque, iterable.toArray(StringTools.EMPTY_STRING_ARRAY)));
assertTrue(deque.isEmpty());
}
public void testEnqueueHeadAllArray() {
ArrayList<String> iterable = new ArrayList<String>();
iterable.add("one");
iterable.add("two");
iterable.add("three");
Deque<String> deque = DequeTools.arrayDeque();
assertTrue(DequeTools.enqueueHeadAll(deque, iterable.toArray(StringTools.EMPTY_STRING_ARRAY)));
assertEquals("one", deque.dequeueTail());
assertEquals("two", deque.dequeueTail());
assertEquals("three", deque.dequeueTail());
}
public void testEnqueueHeadAllArray_empty() {
ArrayList<String> iterable = new ArrayList<String>();
Deque<String> deque = DequeTools.arrayDeque();
assertFalse(DequeTools.enqueueHeadAll(deque, iterable.toArray(StringTools.EMPTY_STRING_ARRAY)));
assertTrue(deque.isEmpty());
}
// ********** drain **********
public void testDrainHead() {
ArrayDeque<String> d = DequeTools.arrayDeque();
d.enqueueTail("one");
d.enqueueTail("two");
d.enqueueTail("three");
ArrayList<String> list = DequeTools.drainHead(d);
assertEquals("one", list.get(0));
assertEquals("two", list.get(1));
assertEquals("three", list.get(2));
}
public void testDrainTail() {
ArrayDeque<String> d = DequeTools.arrayDeque();
d.enqueueTail("one");
d.enqueueTail("two");
d.enqueueTail("three");
ArrayList<String> list = DequeTools.drainTail(d);
assertEquals("one", list.get(2));
assertEquals("two", list.get(1));
assertEquals("three", list.get(0));
}
public void testDrainHeadToCollection() {
ArrayDeque<String> d = DequeTools.arrayDeque();
d.enqueueTail("one");
d.enqueueTail("two");
d.enqueueTail("three");
ArrayList<String> list = new ArrayList<String>();
assertTrue(DequeTools.drainHeadTo(d, list));
assertEquals("one", list.get(0));
assertEquals("two", list.get(1));
assertEquals("three", list.get(2));
}
public void testDrainHeadToCollection_empty() {
ArrayDeque<String> d = DequeTools.arrayDeque();
ArrayList<String> list = new ArrayList<String>();
assertFalse(DequeTools.drainHeadTo(d, list));
assertTrue(list.isEmpty());
}
public void testDrainTailToCollection() {
ArrayDeque<String> d = DequeTools.arrayDeque();
d.enqueueTail("one");
d.enqueueTail("two");
d.enqueueTail("three");
ArrayList<String> list = new ArrayList<String>();
assertTrue(DequeTools.drainTailTo(d, list));
assertEquals("one", list.get(2));
assertEquals("two", list.get(1));
assertEquals("three", list.get(0));
}
public void testDrainTailToCollection_empty() {
ArrayDeque<String> d = DequeTools.arrayDeque();
ArrayList<String> list = new ArrayList<String>();
assertFalse(DequeTools.drainTailTo(d, list));
assertTrue(list.isEmpty());
}
public void testDrainHeadToListIndex() {
ArrayList<String> list = new ArrayList<String>();
list.add("one");
list.add("two");
list.add("three");
Deque<String> deque = DequeTools.arrayDeque();
deque.enqueueTail("aaa");
deque.enqueueTail("bbb");
deque.enqueueTail("ccc");
assertTrue(DequeTools.drainHeadTo(deque, list, 2));
assertEquals("one", list.get(0));
assertEquals("two", list.get(1));
assertEquals("aaa", list.get(2));
assertEquals("bbb", list.get(3));
assertEquals("ccc", list.get(4));
assertEquals("three", list.get(5));
}
public void testDrainHeadToListIndex_end() {
ArrayList<String> list = new ArrayList<String>();
list.add("one");
list.add("two");
list.add("three");
Deque<String> deque = DequeTools.arrayDeque();
deque.enqueueTail("aaa");
deque.enqueueTail("bbb");
deque.enqueueTail("ccc");
assertTrue(DequeTools.drainHeadTo(deque, list, 3));
assertEquals("one", list.get(0));
assertEquals("two", list.get(1));
assertEquals("three", list.get(2));
assertEquals("aaa", list.get(3));
assertEquals("bbb", list.get(4));
assertEquals("ccc", list.get(5));
}
public void testDrainHeadToListIndex_empty() {
ArrayList<String> list = new ArrayList<String>();
list.add("one");
list.add("two");
list.add("three");
Deque<String> deque = DequeTools.arrayDeque();
assertFalse(DequeTools.drainHeadTo(deque, list, 3));
assertEquals("one", list.get(0));
assertEquals("two", list.get(1));
assertEquals("three", list.get(2));
}
public void testDrainTailToListIndex() {
ArrayList<String> list = new ArrayList<String>();
list.add("one");
list.add("two");
list.add("three");
Deque<String> deque = DequeTools.arrayDeque();
deque.enqueueTail("aaa");
deque.enqueueTail("bbb");
deque.enqueueTail("ccc");
assertTrue(DequeTools.drainTailTo(deque, list, 2));
assertEquals("one", list.get(0));
assertEquals("two", list.get(1));
assertEquals("ccc", list.get(2));
assertEquals("bbb", list.get(3));
assertEquals("aaa", list.get(4));
assertEquals("three", list.get(5));
}
public void testDrainTailToListIndex_end() {
ArrayList<String> list = new ArrayList<String>();
list.add("one");
list.add("two");
list.add("three");
Deque<String> deque = DequeTools.arrayDeque();
deque.enqueueTail("aaa");
deque.enqueueTail("bbb");
deque.enqueueTail("ccc");
assertTrue(DequeTools.drainTailTo(deque, list, 3));
assertEquals("one", list.get(0));
assertEquals("two", list.get(1));
assertEquals("three", list.get(2));
assertEquals("ccc", list.get(3));
assertEquals("bbb", list.get(4));
assertEquals("aaa", list.get(5));
}
public void testDrainTailToListIndex_empty() {
ArrayList<String> list = new ArrayList<String>();
list.add("one");
list.add("two");
list.add("three");
Deque<String> deque = DequeTools.arrayDeque();
assertFalse(DequeTools.drainTailTo(deque, list, 3));
assertEquals("one", list.get(0));
assertEquals("two", list.get(1));
assertEquals("three", list.get(2));
}
public void testDrainHeadToStack() {
ArrayDeque<String> d = DequeTools.arrayDeque();
d.enqueueTail("one");
d.enqueueTail("two");
d.enqueueTail("three");
ArrayStack<String> stack = StackTools.arrayStack();
assertTrue(DequeTools.drainHeadTo(d, stack));
assertEquals("three", stack.pop());
assertEquals("two", stack.pop());
assertEquals("one", stack.pop());
}
public void testDrainHeadToStack_empty() {
ArrayDeque<String> d = DequeTools.arrayDeque();
ArrayStack<String> stack = StackTools.arrayStack();
assertFalse(DequeTools.drainHeadTo(d, stack));
assertTrue(stack.isEmpty());
}
public void testDrainTailToStack() {
ArrayDeque<String> d = DequeTools.arrayDeque();
d.enqueueTail("one");
d.enqueueTail("two");
d.enqueueTail("three");
ArrayStack<String> stack = StackTools.arrayStack();
assertTrue(DequeTools.drainTailTo(d, stack));
assertEquals("one", stack.pop());
assertEquals("two", stack.pop());
assertEquals("three", stack.pop());
}
public void testDrainTailToStack_empty() {
ArrayDeque<String> d = DequeTools.arrayDeque();
ArrayStack<String> stack = StackTools.arrayStack();
assertFalse(DequeTools.drainTailTo(d, stack));
assertTrue(stack.isEmpty());
}
public void testDrainHeadToQueue() {
ArrayDeque<String> d = DequeTools.arrayDeque();
d.enqueueTail("one");
d.enqueueTail("two");
d.enqueueTail("three");
ArrayQueue<String> queue = QueueTools.arrayQueue();
assertTrue(DequeTools.drainHeadTo(d, queue));
assertEquals("one", queue.dequeue());
assertEquals("two", queue.dequeue());
assertEquals("three", queue.dequeue());
}
public void testDrainHeadToQueue_empty() {
ArrayDeque<String> d = DequeTools.arrayDeque();
ArrayQueue<String> queue = QueueTools.arrayQueue();
assertFalse(DequeTools.drainHeadTo(d, queue));
assertTrue(queue.isEmpty());
}
public void testDrainTailToQueue() {
ArrayDeque<String> d = DequeTools.arrayDeque();
d.enqueueTail("one");
d.enqueueTail("two");
d.enqueueTail("three");
ArrayQueue<String> queue = QueueTools.arrayQueue();
assertTrue(DequeTools.drainTailTo(d, queue));
assertEquals("three", queue.dequeue());
assertEquals("two", queue.dequeue());
assertEquals("one", queue.dequeue());
}
public void testDrainTailToQueue_empty() {
ArrayDeque<String> d = DequeTools.arrayDeque();
ArrayQueue<String> queue = QueueTools.arrayQueue();
assertFalse(DequeTools.drainTailTo(d, queue));
assertTrue(queue.isEmpty());
}
public void testDrainHeadToDeque() {
ArrayDeque<String> d = DequeTools.arrayDeque();
d.enqueueTail("one");
d.enqueueTail("two");
d.enqueueTail("three");
ArrayDeque<String> d2 = DequeTools.arrayDeque();
assertTrue(DequeTools.drainHeadTo(d, d2));
assertEquals("one", d2.dequeueHead());
assertEquals("two", d2.dequeueHead());
assertEquals("three", d2.dequeueHead());
}
public void testDrainHeadToDeque_empty() {
ArrayDeque<String> d = DequeTools.arrayDeque();
ArrayDeque<String> d2 = DequeTools.arrayDeque();
assertFalse(DequeTools.drainHeadTo(d, d2));
assertTrue(d2.isEmpty());
}
public void testDrainTailToDeque() {
ArrayDeque<String> d = DequeTools.arrayDeque();
d.enqueueTail("one");
d.enqueueTail("two");
d.enqueueTail("three");
ArrayDeque<String> d2 = DequeTools.arrayDeque();
assertTrue(DequeTools.drainTailTo(d, d2));
assertEquals("one", d2.dequeueHead());
assertEquals("two", d2.dequeueHead());
assertEquals("three", d2.dequeueHead());
}
public void testDrainTailToDeque_empty() {
ArrayDeque<String> d = DequeTools.arrayDeque();
ArrayDeque<String> d2 = DequeTools.arrayDeque();
assertFalse(DequeTools.drainTailTo(d, d2));
assertTrue(d2.isEmpty());
}
public void testDrainHeadToMapTransformer() {
ArrayDeque<String> d = DequeTools.arrayDeque();
d.enqueueTail("zero");
d.enqueueTail("one");
d.enqueueTail("two");
Map<String, String>map = new HashMap<String, String>();
assertTrue(DequeTools.drainHeadTo(d, map, FIRST_LETTER_TRANSFORMER));
assertEquals("one", map.get("o"));
assertEquals("two", map.get("t"));
assertEquals("zero", map.get("z"));
}
public void testDrainHeadToMapTransformer_empty() {
ArrayDeque<String> d = DequeTools.arrayDeque();
Map<String, String>map = new HashMap<String, String>();
assertFalse(DequeTools.drainHeadTo(d, map, FIRST_LETTER_TRANSFORMER));
assertTrue(map.isEmpty());
}
public void testDrainTailToMapTransformer() {
ArrayDeque<String> d = DequeTools.arrayDeque();
d.enqueueTail("zero");
d.enqueueTail("one");
d.enqueueTail("two");
Map<String, String>map = new HashMap<String, String>();
assertTrue(DequeTools.drainTailTo(d, map, FIRST_LETTER_TRANSFORMER));
assertEquals("one", map.get("o"));
assertEquals("two", map.get("t"));
assertEquals("zero", map.get("z"));
}
public void testDrainTailToMapTransformer_empty() {
ArrayDeque<String> d = DequeTools.arrayDeque();
Map<String, String>map = new HashMap<String, String>();
assertFalse(DequeTools.drainTailTo(d, map, FIRST_LETTER_TRANSFORMER));
assertTrue(map.isEmpty());
}
public void testDrainHeadToMapTransformerTransformer() {
ArrayDeque<String> d = DequeTools.arrayDeque();
d.enqueueTail("zero");
d.enqueueTail("one");
d.enqueueTail("two");
Map<String, String>map = new HashMap<String, String>();
assertTrue(DequeTools.drainHeadTo(d, map, FIRST_LETTER_TRANSFORMER, EMPHASIZER));
assertEquals("*one*", map.get("o"));
assertEquals("*two*", map.get("t"));
assertEquals("*zero*", map.get("z"));
}
public void testDrainHeadToMapTransformerTransformer_empty() {
ArrayDeque<String> d = DequeTools.arrayDeque();
Map<String, String>map = new HashMap<String, String>();
assertFalse(DequeTools.drainHeadTo(d, map, FIRST_LETTER_TRANSFORMER, EMPHASIZER));
assertTrue(map.isEmpty());
}
public void testDrainTailToMapTransformerTransformer() {
ArrayDeque<String> d = DequeTools.arrayDeque();
d.enqueueTail("zero");
d.enqueueTail("one");
d.enqueueTail("two");
Map<String, String>map = new HashMap<String, String>();
assertTrue(DequeTools.drainTailTo(d, map, FIRST_LETTER_TRANSFORMER, EMPHASIZER));
assertEquals("*one*", map.get("o"));
assertEquals("*two*", map.get("t"));
assertEquals("*zero*", map.get("z"));
}
public void testDrainTailToMapTransformerTransformer_empty() {
ArrayDeque<String> d = DequeTools.arrayDeque();
Map<String, String>map = new HashMap<String, String>();
assertFalse(DequeTools.drainTailTo(d, map, FIRST_LETTER_TRANSFORMER, EMPHASIZER));
assertTrue(map.isEmpty());
}
public static final Transformer<String, String> FIRST_LETTER_TRANSFORMER = new FirstLetterTransformer();
/* CU private */ static class FirstLetterTransformer
implements Transformer<String, String>
{
public String transform(String string) {
return string.substring(0, 1);
}
@Override
public String toString() {
return this.getClass().getSimpleName();
}
}
public static final Transformer<String, String> EMPHASIZER = new StringTools.CharDelimiter('*');
// ********** array deque **********
public void testArrayDeque() {
ArrayDeque<String> d = DequeTools.arrayDeque();
assertTrue(d.isEmpty());
}
public void testArrayDequeInt() {
ArrayDeque<String> d = DequeTools.arrayDeque(20);
assertTrue(d.isEmpty());
assertEquals(20, ((Object[]) ObjectTools.get(d, "elements")).length);
}
public void testArrayDequeIterable() {
ArrayList<String> iterable = new ArrayList<String>();
iterable.add("one");
iterable.add("two");
iterable.add("three");
Deque<String> deque = DequeTools.arrayDeque(iterable);
assertEquals("one", deque.dequeueHead());
assertEquals("two", deque.dequeueHead());
assertEquals("three", deque.dequeueHead());
}
public void testArrayDequeIterableInt() {
ArrayList<String> iterable = new ArrayList<String>();
iterable.add("one");
iterable.add("two");
iterable.add("three");
Deque<String> deque = DequeTools.arrayDeque(iterable, 5);
assertEquals("one", deque.dequeueHead());
assertEquals("two", deque.dequeueHead());
assertEquals("three", deque.dequeueHead());
}
public void testReverseArrayDequeIterable() {
ArrayList<String> iterable = new ArrayList<String>();
iterable.add("one");
iterable.add("two");
iterable.add("three");
Deque<String> deque = DequeTools.reverseArrayDeque(iterable);
assertEquals("one", deque.dequeueTail());
assertEquals("two", deque.dequeueTail());
assertEquals("three", deque.dequeueTail());
}
public void testReverseArrayDequeIterableInt() {
ArrayList<String> iterable = new ArrayList<String>();
iterable.add("one");
iterable.add("two");
iterable.add("three");
Deque<String> deque = DequeTools.reverseArrayDeque(iterable, 77);
assertEquals("one", deque.dequeueTail());
assertEquals("two", deque.dequeueTail());
assertEquals("three", deque.dequeueTail());
}
public void testArrayDequeIterator() {
ArrayList<String> iterable = new ArrayList<String>();
iterable.add("one");
iterable.add("two");
iterable.add("three");
Deque<String> deque = DequeTools.arrayDeque(iterable.iterator());
assertEquals("one", deque.dequeueHead());
assertEquals("two", deque.dequeueHead());
assertEquals("three", deque.dequeueHead());
}
public void testArrayDequeIteratorInt() {
ArrayList<String> iterable = new ArrayList<String>();
iterable.add("one");
iterable.add("two");
iterable.add("three");
Deque<String> deque = DequeTools.arrayDeque(iterable.iterator(), 5);
assertEquals("one", deque.dequeueHead());
assertEquals("two", deque.dequeueHead());
assertEquals("three", deque.dequeueHead());
}
public void testReverseArrayDequeIterator() {
ArrayList<String> iterable = new ArrayList<String>();
iterable.add("one");
iterable.add("two");
iterable.add("three");
Deque<String> deque = DequeTools.reverseArrayDeque(iterable.iterator());
assertEquals("one", deque.dequeueTail());
assertEquals("two", deque.dequeueTail());
assertEquals("three", deque.dequeueTail());
}
public void testReverseArrayDequeIteratorInt() {
ArrayList<String> iterable = new ArrayList<String>();
iterable.add("one");
iterable.add("two");
iterable.add("three");
Deque<String> deque = DequeTools.reverseArrayDeque(iterable.iterator(), 42);
assertEquals("one", deque.dequeueTail());
assertEquals("two", deque.dequeueTail());
assertEquals("three", deque.dequeueTail());
}
public void testArrayDequeArray() {
ArrayList<String> iterable = new ArrayList<String>();
iterable.add("one");
iterable.add("two");
iterable.add("three");
Deque<String> deque = DequeTools.arrayDeque(iterable.toArray(StringTools.EMPTY_STRING_ARRAY));
assertEquals("one", deque.dequeueHead());
assertEquals("two", deque.dequeueHead());
assertEquals("three", deque.dequeueHead());
}
public void testReverseArrayDequeArray() {
ArrayList<String> iterable = new ArrayList<String>();
iterable.add("one");
iterable.add("two");
iterable.add("three");
Deque<String> deque = DequeTools.reverseArrayDeque(iterable.toArray(StringTools.EMPTY_STRING_ARRAY));
assertEquals("one", deque.dequeueTail());
assertEquals("two", deque.dequeueTail());
assertEquals("three", deque.dequeueTail());
}
// ********** linked deque **********
public void testLinkedDeque() {
LinkedDeque<String> d = DequeTools.linkedDeque();
assertTrue(d.isEmpty());
}
public void testLinkedDequeInt() {
LinkedDeque<String> d = DequeTools.linkedDeque(20);
assertTrue(d.isEmpty());
}
public void testLinkedDequeIterable() {
ArrayList<String> iterable = new ArrayList<String>();
iterable.add("one");
iterable.add("two");
iterable.add("three");
Deque<String> deque = DequeTools.linkedDeque(iterable);
assertEquals("one", deque.dequeueHead());
assertEquals("two", deque.dequeueHead());
assertEquals("three", deque.dequeueHead());
}
public void testLinkedDequeIterableInt() {
ArrayList<String> iterable = new ArrayList<String>();
iterable.add("one");
iterable.add("two");
iterable.add("three");
Deque<String> deque = DequeTools.linkedDeque(iterable, 5);
assertEquals("one", deque.dequeueHead());
assertEquals("two", deque.dequeueHead());
assertEquals("three", deque.dequeueHead());
}
public void testReverseLinkedDequeIterable() {
ArrayList<String> iterable = new ArrayList<String>();
iterable.add("one");
iterable.add("two");
iterable.add("three");
Deque<String> deque = DequeTools.reverseLinkedDeque(iterable);
assertEquals("one", deque.dequeueTail());
assertEquals("two", deque.dequeueTail());
assertEquals("three", deque.dequeueTail());
}
public void testReverseLinkedDequeIterableInt() {
ArrayList<String> iterable = new ArrayList<String>();
iterable.add("one");
iterable.add("two");
iterable.add("three");
Deque<String> deque = DequeTools.reverseLinkedDeque(iterable, 77);
assertEquals("one", deque.dequeueTail());
assertEquals("two", deque.dequeueTail());
assertEquals("three", deque.dequeueTail());
}
public void testLinkedDequeIterator() {
ArrayList<String> iterable = new ArrayList<String>();
iterable.add("one");
iterable.add("two");
iterable.add("three");
Deque<String> deque = DequeTools.linkedDeque(iterable.iterator());
assertEquals("one", deque.dequeueHead());
assertEquals("two", deque.dequeueHead());
assertEquals("three", deque.dequeueHead());
}
public void testLinkedDequeIteratorInt() {
ArrayList<String> iterable = new ArrayList<String>();
iterable.add("one");
iterable.add("two");
iterable.add("three");
Deque<String> deque = DequeTools.linkedDeque(iterable.iterator(), 5);
assertEquals("one", deque.dequeueHead());
assertEquals("two", deque.dequeueHead());
assertEquals("three", deque.dequeueHead());
}
public void testReverseLinkedDequeIterator() {
ArrayList<String> iterable = new ArrayList<String>();
iterable.add("one");
iterable.add("two");
iterable.add("three");
Deque<String> deque = DequeTools.reverseLinkedDeque(iterable.iterator());
assertEquals("one", deque.dequeueTail());
assertEquals("two", deque.dequeueTail());
assertEquals("three", deque.dequeueTail());
}
public void testReverseLinkedDequeIteratorInt() {
ArrayList<String> iterable = new ArrayList<String>();
iterable.add("one");
iterable.add("two");
iterable.add("three");
Deque<String> deque = DequeTools.reverseLinkedDeque(iterable.iterator(), 42);
assertEquals("one", deque.dequeueTail());
assertEquals("two", deque.dequeueTail());
assertEquals("three", deque.dequeueTail());
}
public void testLinkedDequeArray() {
ArrayList<String> iterable = new ArrayList<String>();
iterable.add("one");
iterable.add("two");
iterable.add("three");
Deque<String> deque = DequeTools.linkedDeque(iterable.toArray(StringTools.EMPTY_STRING_ARRAY));
assertEquals("one", deque.dequeueHead());
assertEquals("two", deque.dequeueHead());
assertEquals("three", deque.dequeueHead());
}
public void testReverseLinkedDequeArray() {
ArrayList<String> iterable = new ArrayList<String>();
iterable.add("one");
iterable.add("two");
iterable.add("three");
Deque<String> deque = DequeTools.reverseLinkedDeque(iterable.toArray(StringTools.EMPTY_STRING_ARRAY));
assertEquals("one", deque.dequeueTail());
assertEquals("two", deque.dequeueTail());
assertEquals("three", deque.dequeueTail());
}
// ********** fixed-capacity array deque **********
public void testFixedCapacityArrayDequeCollection() {
ArrayList<String> iterable = new ArrayList<String>();
iterable.add("one");
iterable.add("two");
iterable.add("three");
Deque<String> deque = DequeTools.fixedCapacityArrayDeque(iterable);
assertEquals("one", deque.dequeueHead());
assertEquals("two", deque.dequeueHead());
assertEquals("three", deque.dequeueHead());
}
public void testReverseFixedCapacityArrayDequeCollection() {
ArrayList<String> iterable = new ArrayList<String>();
iterable.add("one");
iterable.add("two");
iterable.add("three");
Deque<String> deque = DequeTools.reverseFixedCapacityArrayDeque(iterable);
assertEquals("three", deque.dequeueHead());
assertEquals("two", deque.dequeueHead());
assertEquals("one", deque.dequeueHead());
}
// ********** misc **********
public void testPriorityDequeComparator() {
PriorityDeque<String> deque = DequeTools.priorityDeque(ComparatorTools.<String>reverseComparator());
String first = "first";
String second = "second";
deque.enqueue(first);
deque.enqueueTail(second);
assertEquals(second, deque.dequeueHead());
assertEquals(first, deque.dequeueHead());
}
public void testSynchronizedDequeObject() {
Object lock = new Object();
SynchronizedDeque<String> deque = DequeTools.synchronizedDeque(lock);
String first = "first";
String second = "second";
deque.enqueueTail(first);
deque.enqueueTail(second);
assertEquals(first, deque.dequeueHead());
assertEquals(second, deque.dequeueHead());
assertEquals(lock, deque.getMutex());
}
public void testSynchronizedDequeDequeObject() {
Object lock = new Object();
Deque<String> innerDeque = DequeTools.arrayDeque();
String first = "first";
String second = "second";
innerDeque.enqueueTail(first);
innerDeque.enqueueTail(second);
SynchronizedDeque<String> deque = DequeTools.synchronizedDeque(innerDeque, lock);
assertEquals(first, deque.dequeueHead());
assertEquals(second, deque.dequeueHead());
assertEquals(lock, deque.getMutex());
}
public void testConstructor() {
boolean exCaught = false;
try {
Object at = ClassTools.newInstance(DequeTools.class);
fail("bogus: " + at);
} catch (RuntimeException ex) {
if (ex.getCause() instanceof InvocationTargetException) {
if (ex.getCause().getCause() instanceof UnsupportedOperationException) {
exCaught = true;
}
}
}
assertTrue(exCaught);
}
}