package com.jcwhatever.nucleus.collections.java;
import static org.junit.Assert.assertEquals;
import java.util.Deque;
import java.util.NoSuchElementException;
/**
* Test a {@link Deque} implementation.
*
* <p>Also runs {@link QueueRunnable}, which runs {@link CollectionRunnable} and
* {@link IterableRunnable}.</p>
*
* <p>Not a JUnit test case but throws errors via JUnit. Intended
* to be instantiated with a test and the {@link #run} method invoked.</p>
*/
public class DequeRunnable<E> implements Runnable {
final Deque<E> _queue;
final E _value1;
final E _value2;
final E _value3;
/**
* Constructor.
*
* @param queue The queue to test.
* @param value1 A value to use for testing.
* @param value2 A value to use for testing.
* @param value3 A value to use for testing.
*/
public DequeRunnable(Deque<E> queue, E value1, E value2, E value3) {
this._queue = queue;
this._value1 = value1;
this._value2 = value2;
this._value3 = value3;
}
@Override
public void run() {
QueueRunnable<E> test = new QueueRunnable<>(_queue, _value1, _value2, _value3);
test.run();
_queue.clear();
assertEquals(true, _queue.isEmpty());
// test addFirst
_queue.addFirst(_value1);
assertEquals(1, _queue.size());
assertEquals(false, _queue.isEmpty());
assertEquals(true, _queue.contains(_value1));
// test addFirst (2nd element)
_queue.addFirst(_value2);
assertEquals(2, _queue.size());
assertEquals(true, _queue.contains(_value2));
// test pollFirst
assertEquals(_value2, _queue.pollFirst());
assertEquals(true, _queue.contains(_value1));
assertEquals(false, _queue.contains(_value2));
// test removeFirst
assertEquals(_value1, _queue.removeFirst());
assertEquals(false, _queue.contains(_value1));
assertEquals(false, _queue.contains(_value2));
assertEquals(0, _queue.size());
// test addLast
_queue.addLast(_value1);
assertEquals(1, _queue.size());
assertEquals(true, _queue.contains(_value1));
// test addLast
_queue.addLast(_value2);
assertEquals(2, _queue.size());
assertEquals(true, _queue.contains(_value2));
// test pollLast
assertEquals(_value2, _queue.pollLast());
assertEquals(1, _queue.size());
assertEquals(true, _queue.contains(_value1));
assertEquals(false, _queue.contains(_value2));
// test removeLast
assertEquals(_value1, _queue.removeLast());
assertEquals(0, _queue.size());
assertEquals(false, _queue.contains(_value1));
assertEquals(false, _queue.contains(_value2));
// test pollFirst on empty deque
assertEquals(null, _queue.pollFirst());
// test removeFirst on empty deque
try {
_queue.removeFirst();
throw new AssertionError("NoSuchElementException expected.");
}
catch (NoSuchElementException ignore) {}
// test pollLast on empty deque
assertEquals(null, _queue.pollLast());
// test removeLast on empty deque
try {
_queue.removeLast();
throw new AssertionError("NoSuchElementException expected.");
}
catch (NoSuchElementException ignore) {}
}
}