/** * */ package vroom.common.utilities; import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import java.util.ArrayList; import java.util.Collections; import java.util.Iterator; import java.util.List; import java.util.ListIterator; import java.util.Random; import org.junit.Before; import org.junit.Test; import vroom.common.utilities.DoublyLinkedIntSet; import vroom.common.utilities.DoublyLinkedIntSet.DoublyLinkedIterator; /** * <code>DoublyLinkedIntegerListTest</code> * <p> * Creation date: Oct 5, 2011 - 10:31:24 AM * * @author Victor Pillac, <a href="http://uniandes.edu.co">Universidad de Los Andes</a>-<a * href="http://copa.uniandes.edu.co">Copa</a> <a href="http://www.emn.fr">Ecole des Mines de Nantes</a>-<a * href="http://www.irccyn.ec-nantes.fr/irccyn/d/en/equipes/Slp">SLP</a> * @version 1.0 */ public class DoublyLinkedIntegerListTest { private static final int TEST_SIZE = 1000; private DoublyLinkedIntSet mList; private ArrayList<Integer> mReference; private int mCurrentIdx; /** * JAVADOC * * @throws java.lang.Exception */ @Before public void setUp() throws Exception { // List<Integer> values = new ArrayList<Integer>(MAX_VALUE); // for (int i = 0; i < values.size() + 1; i++) { // values.add(i); // } Random rnd = new Random(0); mReference = new ArrayList<Integer>(TEST_SIZE); for (int i = 0; i < TEST_SIZE; i++) mReference.add(i % TEST_SIZE); Collections.shuffle(mReference, rnd); mCurrentIdx = 0; mList = new DoublyLinkedIntSet(TEST_SIZE); } /** * Test method for {@link vroom.common.utilities.DoublyLinkedIntSet#listIterator()}. */ @Test public void testListIterator() { mList.addAll(mReference); DoublyLinkedIterator it = mList.listIterator(); ListIterator<Integer> refIt = mReference.listIterator(); while (it.hasNext() || refIt.hasNext()) { assertEquals("The iterator hasNext should return " + refIt.hasNext(), refIt.hasNext(), it.hasNext()); Integer e = it.next(); Integer refE = refIt.next(); assertEquals(String.format("The iterator next should return %s but returned %s instead", refE, e), refE, e); } } /** * Test method for {@link vroom.common.utilities.DoublyLinkedIntSet#listIterator(int)}. */ @Test public void testListIteratorInt() { mList.addAll(mReference); for (int i = 0; i < TEST_SIZE; i++) { ListIterator<Integer> refIt = mReference.listIterator(i); DoublyLinkedIterator it = mList.listIterator(i); while (it.hasNext() || refIt.hasNext()) { assertEquals("The iterator hasNext method did not returned the expected value", refIt.hasNext(), it.hasNext()); Integer e = it.next(); Integer refE = refIt.next(); assertEquals(String.format( "The iterator (started at pos:%s e:%s) next did not returned the expected element", i, mReference.get(i)), refE, e); } } } /** * Test method for {@link vroom.common.utilities.DoublyLinkedIntSet#insert(java.lang.Integer, java.lang.Integer)} . */ @Test public void testInsert() { ArrayList<Integer> ref = new ArrayList<Integer>(mReference.size()); Random rnd = new Random(0); Iterator<Integer> it = mReference.iterator(); Integer e = it.next(); ref.add(e); mList.add(e); while (it.hasNext()) { e = it.next(); int insIdx = rnd.nextInt(ref.size()); Integer succ = ref.get(insIdx); ref.add(insIdx, e); mList.insert(e, succ); assertArrayEquals(ref.toArray(new Integer[ref.size()]), mList.toArray()); } } /** * Test method for {@link vroom.common.utilities.DoublyLinkedIntSet#add(java.lang.Integer)}. */ @Test public void testAddInteger() { for (int i = 0; i < mReference.size(); i++) { mList.add(mReference.get(i)); assertArrayEquals(toArray(mReference, i + 1), toArray(mList, mList.size())); } } /** * Test method for {@link vroom.common.utilities.DoublyLinkedIntSet#remove(java.lang.Object)}. */ @Test public void testRemoveObject() { mList.addAll(mReference); Random rnd = new Random(0); while (!mReference.isEmpty()) { // Remove elements in a random order int idx = rnd.nextInt(mReference.size()); Integer e = mReference.remove(idx); mList.remove(e); assertArrayEquals(mReference.toArray(new Integer[mReference.size()]), mList.toArray()); } } /** * Test method for {@link vroom.common.utilities.DoublyLinkedIntSet#contains(java.lang.Object)}. */ @Test public void testContainsObject() { mList.addAll(mReference); for (Integer e : mReference) { assertTrue("List should contain element " + e, mList.contains(e)); } } public static Integer[] toArray(List<Integer> list, int newSize) { Integer[] array = new Integer[newSize]; Iterator<Integer> it = list.iterator(); int idx = 0; while (it.hasNext() && idx < newSize) { array[idx++] = it.next(); } return array; } }