corda/sgx-jvm/avian/test/ArrayDequeTest.java
Andras Slemmer 9bb3d6b972 Add 'sgx-jvm/avian/' from commit '09e4fe60d01f4f4bfb6b2976973bb4913ef61edc'
git-subtree-dir: sgx-jvm/avian
git-subtree-mainline: f978eab8d1
git-subtree-split: 09e4fe60d0
2017-03-13 12:18:24 +00:00

162 lines
4.4 KiB
Java

import java.util.ArrayDeque;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.NoSuchElementException;
public class ArrayDequeTest {
private static void verify(boolean val) {
if (! val) {
throw new RuntimeException();
}
}
public static void main(String[] args) throws InterruptedException {
QueueHelper.sizeTest(new ArrayDeque<Object>());
QueueHelper.isEmptyTest(new ArrayDeque<Object>());
QueueHelper.addTest(new ArrayDeque<Object>());
QueueHelper.addAllTest(new ArrayDeque<Object>());
QueueHelper.elementTest(new ArrayDeque<Object>());
QueueHelper.elementFail(new ArrayDeque<Object>());
QueueHelper.removeEmptyFail(new ArrayDeque<Object>());
QueueHelper.removeTest(new ArrayDeque<Object>());
QueueHelper.containsTest(new ArrayDeque<Object>());
QueueHelper.containsAllTest(new ArrayDeque<Object>());
QueueHelper.removeObjectTest(new ArrayDeque<Object>());
QueueHelper.removeAllTest(new ArrayDeque<Object>());
QueueHelper.clearTest(new ArrayDeque<Object>());
QueueHelper.toArrayTest(new ArrayDeque<Object>());
DequeHelper.addFirstTest(new ArrayDeque<Object>());
DequeHelper.addLastTest(new ArrayDeque<Object>());
DequeHelper.removeFirstTest(new ArrayDeque<Object>());
DequeHelper.removeLastTest(new ArrayDeque<Object>());
iterateTest(false);
iterateTest(true);
iteratorRemoveTest(false);
iteratorRemoveTest(true);
iteratorNoElementFail(false);
iteratorNoElementFail(true);
}
private static void iterateTest(boolean desc) {
int testQty = 10;
LinkedList<Object> compareList = new LinkedList<Object>();
ArrayDeque<Object> ad = new ArrayDeque<Object>();
for (int i = 0; i < testQty; i++) {
Object o = new Object();
compareList.add(o);
ad.add(o);
}
Iterator<Object> compIt;
Iterator<Object> testIt;
if (desc) {
compIt = compareList.descendingIterator();
testIt = ad.descendingIterator();
} else {
compIt = compareList.iterator();
testIt = ad.iterator();
}
while (testIt.hasNext()) {
verify(testIt.next() == compIt.next());
}
// remove from the front
compareList.removeFirst();
ad.removeFirst();
if (desc) {
compIt = compareList.descendingIterator();
testIt = ad.descendingIterator();
} else {
compIt = compareList.iterator();
testIt = ad.iterator();
}
while (testIt.hasNext()) {
verify(testIt.next() == compIt.next());
}
// remove from the end
compareList.removeLast();
ad.removeLast();
if (desc) {
compIt = compareList.descendingIterator();
testIt = ad.descendingIterator();
} else {
compIt = compareList.iterator();
testIt = ad.iterator();
}
while (testIt.hasNext()) {
verify(testIt.next() == compIt.next());
}
}
private static void iteratorRemoveTest(boolean desc) {
int testQty = 20;
LinkedList<Object> compareList = new LinkedList<Object>();
ArrayDeque<Object> ad = new ArrayDeque<Object>();
for (int i = 0; i < testQty; i++) {
Object o = new Object();
compareList.add(o);
ad.add(o);
}
Iterator<Object> compIt;
Iterator<Object> testIt;
if (desc) {
compIt = compareList.descendingIterator();
testIt = ad.descendingIterator();
} else {
compIt = compareList.iterator();
testIt = ad.iterator();
}
boolean flip = true; // start with true to ensure first is removed
while (testIt.hasNext()) {
// advance iterators
testIt.next();
compIt.next();
if (flip || ! testIt.hasNext()) {
compIt.remove();
testIt.remove();
flip = false;
} else {
flip = true;
}
}
if (desc) {
compIt = compareList.descendingIterator();
testIt = ad.descendingIterator();
} else {
compIt = compareList.iterator();
testIt = ad.iterator();
}
while (testIt.hasNext()) {
verify(testIt.next() == compIt.next());
}
}
private static void iteratorNoElementFail(boolean desc) {
ArrayDeque<Object> ad = new ArrayDeque<Object>();
Iterator<Object> testIt;
if (desc) {
testIt = ad.descendingIterator();
} else {
testIt = ad.iterator();
}
try {
testIt.next();
throw new RuntimeException("Exception should have thrown");
} catch (NoSuchElementException e) {
// expected
}
}
}