blob: 24b318bf43a6431f15969e6995461ce640a72d19 [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.ArrayList;
import org.eclipse.jpt.common.utility.deque.Deque;
import org.eclipse.jpt.common.utility.internal.ObjectTools;
import org.eclipse.jpt.common.utility.internal.deque.ArrayDeque;
import org.eclipse.jpt.common.utility.internal.deque.DequeTools;
import org.eclipse.jpt.common.utility.tests.internal.TestTools;
@SuppressWarnings("nls")
public class ArrayDequeTests
extends DequeTests
{
public ArrayDequeTests(String name) {
super(name);
}
@Override
Deque<String> buildDeque() {
return DequeTools.arrayDeque();
}
public void testConstructor_IAE() {
boolean exCaught = false;
try {
Deque<String> queue = DequeTools.arrayDeque(-1);
fail("bogus deque: " + queue);
} catch (IllegalArgumentException ex) {
exCaught = true;
}
assertTrue(exCaught);
}
public void testEnsureCapacity() {
ArrayDeque<String> queue = DequeTools.arrayDeque(0);
queue.ensureCapacity(7);
assertEquals(7, ((Object[]) ObjectTools.get(queue, "elements")).length);
}
public void testTrimToSize() {
ArrayDeque<String> queue = DequeTools.arrayDeque(10);
queue.enqueueTail("foo");
queue.enqueueTail("bar");
queue.trimToSize();
assertEquals(2, ((Object[]) ObjectTools.get(queue, "elements")).length);
}
public void testTrimToSize_noChange() {
ArrayDeque<String> queue = DequeTools.arrayDeque(2);
queue.enqueueTail("foo");
queue.enqueueTail("bar");
queue.trimToSize();
assertEquals(2, ((Object[]) ObjectTools.get(queue, "elements")).length);
}
public void testCollectionConstructor() {
ArrayList<String> c = new ArrayList<String>();
c.add("first");
c.add("second");
c.add("third");
c.add("fourth");
c.add("fifth");
c.add("sixth");
c.add("seventh");
c.add("eighth");
c.add("ninth");
c.add("tenth"); // force some free space
Deque<String> queue = DequeTools.arrayDeque(c);
assertFalse(queue.isEmpty());
assertEquals("first", queue.peekHead());
queue.enqueueTail("eleventh");
queue.enqueueTail("twelfth");
assertEquals("first", queue.peekHead());
assertEquals("first", queue.dequeueHead());
assertEquals("second", queue.dequeueHead());
assertFalse(queue.isEmpty());
assertEquals("third", queue.peekHead());
assertEquals("third", queue.dequeueHead());
assertEquals("fourth", queue.dequeueHead());
assertEquals("fifth", queue.dequeueHead());
assertEquals("sixth", queue.dequeueHead());
assertEquals("seventh", queue.dequeueHead());
assertEquals("eighth", queue.dequeueHead());
assertEquals("ninth", queue.dequeueHead());
assertEquals("tenth", queue.dequeueHead());
assertEquals("eleventh", queue.dequeueHead());
assertEquals("twelfth", queue.dequeueHead());
assertTrue(queue.isEmpty());
}
public void testWrappedElementsTail() {
Deque<String> queue = this.buildDeque();
assertTrue(queue.isEmpty());
queue.enqueueTail("first");
assertFalse(queue.isEmpty());
queue.enqueueTail("second");
assertFalse(queue.isEmpty());
queue.enqueueTail("third");
queue.enqueueTail("fourth");
queue.enqueueTail("fifth");
queue.enqueueTail("sixth");
// make room for 11 and 12
assertEquals("first", queue.dequeueHead());
assertFalse(queue.isEmpty());
assertEquals("second", queue.dequeueHead());
assertFalse(queue.isEmpty());
assertEquals("third", queue.dequeueHead());
queue.enqueueTail("seventh");
queue.enqueueTail("eighth");
queue.enqueueTail("ninth");
queue.enqueueTail("tenth");
queue.enqueueTail("eleventh");
queue.enqueueTail("twelfth");
assertEquals("fourth", queue.dequeueHead());
assertEquals("fifth", queue.dequeueHead());
assertEquals("sixth", queue.dequeueHead());
assertEquals("seventh", queue.dequeueHead());
assertEquals("eighth", queue.dequeueHead());
assertEquals("ninth", queue.dequeueHead());
assertEquals("tenth", queue.dequeueHead());
assertEquals("eleventh", queue.dequeueHead());
assertEquals("twelfth", queue.dequeueHead());
assertTrue(queue.isEmpty());
}
public void testWrappedElementsHead() {
Deque<String> queue = this.buildDeque();
assertTrue(queue.isEmpty());
queue.enqueueHead("first");
assertFalse(queue.isEmpty());
queue.enqueueHead("second");
assertFalse(queue.isEmpty());
queue.enqueueHead("third");
queue.enqueueHead("fourth");
queue.enqueueHead("fifth");
queue.enqueueHead("sixth");
// make room for 11 and 12
assertEquals("first", queue.dequeueTail());
assertFalse(queue.isEmpty());
assertEquals("second", queue.dequeueTail());
assertFalse(queue.isEmpty());
assertEquals("third", queue.dequeueTail());
queue.enqueueHead("seventh");
queue.enqueueHead("eighth");
queue.enqueueHead("ninth");
queue.enqueueHead("tenth");
queue.enqueueHead("eleventh");
queue.enqueueHead("twelfth");
assertEquals("fourth", queue.dequeueTail());
assertEquals("fifth", queue.dequeueTail());
assertEquals("sixth", queue.dequeueTail());
assertEquals("seventh", queue.dequeueTail());
assertEquals("eighth", queue.dequeueTail());
assertEquals("ninth", queue.dequeueTail());
assertEquals("tenth", queue.dequeueTail());
assertEquals("eleventh", queue.dequeueTail());
assertEquals("twelfth", queue.dequeueTail());
assertTrue(queue.isEmpty());
}
public void testArrayCapacityExceededTail() {
Deque<String> queue = this.buildDeque();
assertTrue(queue.isEmpty());
queue.enqueueTail("first");
assertFalse(queue.isEmpty());
queue.enqueueTail("second");
assertFalse(queue.isEmpty());
queue.enqueueTail("third");
queue.enqueueTail("fourth");
queue.enqueueTail("fifth");
queue.enqueueTail("sixth");
queue.enqueueTail("seventh");
queue.enqueueTail("eighth");
queue.enqueueTail("ninth");
queue.enqueueTail("tenth");
queue.enqueueTail("eleventh");
queue.enqueueTail("twelfth");
assertEquals("first", queue.dequeueHead());
assertFalse(queue.isEmpty());
assertEquals("second", queue.dequeueHead());
assertFalse(queue.isEmpty());
assertEquals("third", queue.dequeueHead());
assertEquals("fourth", queue.dequeueHead());
assertEquals("fifth", queue.dequeueHead());
assertEquals("sixth", queue.dequeueHead());
assertEquals("seventh", queue.dequeueHead());
assertEquals("eighth", queue.dequeueHead());
assertEquals("ninth", queue.dequeueHead());
assertEquals("tenth", queue.dequeueHead());
assertEquals("eleventh", queue.dequeueHead());
assertEquals("twelfth", queue.dequeueHead());
assertTrue(queue.isEmpty());
}
public void testArrayCapacityExceededHead() {
Deque<String> queue = this.buildDeque();
assertTrue(queue.isEmpty());
queue.enqueueHead("first");
assertFalse(queue.isEmpty());
queue.enqueueHead("second");
assertFalse(queue.isEmpty());
queue.enqueueHead("third");
queue.enqueueHead("fourth");
queue.enqueueHead("fifth");
queue.enqueueHead("sixth");
queue.enqueueHead("seventh");
queue.enqueueHead("eighth");
queue.enqueueHead("ninth");
queue.enqueueHead("tenth");
queue.enqueueHead("eleventh");
queue.enqueueHead("twelfth");
assertEquals("first", queue.dequeueTail());
assertFalse(queue.isEmpty());
assertEquals("second", queue.dequeueTail());
assertFalse(queue.isEmpty());
assertEquals("third", queue.dequeueTail());
assertEquals("fourth", queue.dequeueTail());
assertEquals("fifth", queue.dequeueTail());
assertEquals("sixth", queue.dequeueTail());
assertEquals("seventh", queue.dequeueTail());
assertEquals("eighth", queue.dequeueTail());
assertEquals("ninth", queue.dequeueTail());
assertEquals("tenth", queue.dequeueTail());
assertEquals("eleventh", queue.dequeueTail());
assertEquals("twelfth", queue.dequeueTail());
assertTrue(queue.isEmpty());
}
public void testArrayCapacityExceededWithWrappedElementsTail() {
Deque<String> queue = this.buildDeque();
assertTrue(queue.isEmpty());
queue.enqueueTail("first");
assertFalse(queue.isEmpty());
queue.enqueueTail("second");
assertFalse(queue.isEmpty());
queue.enqueueTail("third");
queue.enqueueTail("fourth");
queue.enqueueTail("fifth");
queue.enqueueTail("sixth");
assertEquals("first", queue.dequeueHead());
assertFalse(queue.isEmpty());
assertEquals("second", queue.dequeueHead());
assertFalse(queue.isEmpty());
assertEquals("third", queue.dequeueHead());
queue.enqueueTail("seventh");
queue.enqueueTail("eighth");
queue.enqueueTail("ninth");
queue.enqueueTail("tenth");
queue.enqueueTail("eleventh");
queue.enqueueTail("twelfth");
queue.enqueueTail("thirteenth");
queue.enqueueTail("fourteenth");
queue.enqueueTail("fifteenth");
assertEquals("fourth", queue.dequeueHead());
assertEquals("fifth", queue.dequeueHead());
assertEquals("sixth", queue.dequeueHead());
assertEquals("seventh", queue.dequeueHead());
assertEquals("eighth", queue.dequeueHead());
assertEquals("ninth", queue.dequeueHead());
assertEquals("tenth", queue.dequeueHead());
assertEquals("eleventh", queue.dequeueHead());
assertEquals("twelfth", queue.dequeueHead());
assertEquals("thirteenth", queue.dequeueHead());
assertEquals("fourteenth", queue.dequeueHead());
assertEquals("fifteenth", queue.dequeueHead());
assertTrue(queue.isEmpty());
}
public void testArrayCapacityExceededWithWrappedElementsHead() {
Deque<String> queue = this.buildDeque();
assertTrue(queue.isEmpty());
queue.enqueueHead("first");
assertFalse(queue.isEmpty());
queue.enqueueHead("second");
assertFalse(queue.isEmpty());
queue.enqueueHead("third");
queue.enqueueHead("fourth");
queue.enqueueHead("fifth");
queue.enqueueHead("sixth");
assertEquals("first", queue.dequeueTail());
assertFalse(queue.isEmpty());
assertEquals("second", queue.dequeueTail());
assertFalse(queue.isEmpty());
assertEquals("third", queue.dequeueTail());
queue.enqueueHead("seventh");
queue.enqueueHead("eighth");
queue.enqueueHead("ninth");
queue.enqueueHead("tenth");
queue.enqueueHead("eleventh");
queue.enqueueHead("twelfth");
queue.enqueueHead("thirteenth");
queue.enqueueHead("fourteenth");
queue.enqueueHead("fifteenth");
assertEquals("fourth", queue.dequeueTail());
assertEquals("fifth", queue.dequeueTail());
assertEquals("sixth", queue.dequeueTail());
assertEquals("seventh", queue.dequeueTail());
assertEquals("eighth", queue.dequeueTail());
assertEquals("ninth", queue.dequeueTail());
assertEquals("tenth", queue.dequeueTail());
assertEquals("eleventh", queue.dequeueTail());
assertEquals("twelfth", queue.dequeueTail());
assertEquals("thirteenth", queue.dequeueTail());
assertEquals("fourteenth", queue.dequeueTail());
assertEquals("fifteenth", queue.dequeueTail());
assertTrue(queue.isEmpty());
}
public void testSerialization_empty() throws Exception {
Deque<String> original = new ArrayDeque<String>(3);
Deque<String> clone = TestTools.serialize(original);
assertNotSame(original, clone);
assertTrue(original.isEmpty());
assertEquals(original.isEmpty(), clone.isEmpty());
original.enqueueTail("fourth");
assertFalse(original.isEmpty());
// clone should still be empty
assertTrue(clone.isEmpty());
}
public void testSerialization_fullArray() throws Exception {
Deque<String> queue = new ArrayDeque<String>(3);
queue.enqueueTail("first");
queue.enqueueTail("second");
queue.enqueueTail("third");
this.verifyClone(queue, TestTools.serialize(queue));
}
public void testSerialization_wrappedArray() throws Exception {
Deque<String> queue = new ArrayDeque<String>(3);
queue.enqueueTail("first");
queue.enqueueTail("second");
queue.enqueueTail("third");
queue.dequeueHead();
queue.enqueueTail("fourth");
this.verifyClone(queue, TestTools.serialize(queue));
}
}