blob: d020ab2db82a2d1456f8768e42c3462f8bf17ffc [file] [log] [blame]
/*
* Copyright (c) 2010-2012 Eike Stepper (Berlin, Germany) and others.
* 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:
* Eike Stepper - initial API and implementation
* Caspar De Groot - maintenance
*/
package org.eclipse.net4j.util.tests;
import org.eclipse.net4j.util.collection.ConcurrentArray;
/**
* @author Eike Stepper
* @since 3.1
*/
public class FastListTest extends AbstractOMTest
{
public static void testAddFirst() throws Exception
{
TestList list = new TestList();
list.add(5);
Integer[] result = list.get();
assertEquals(true, result != null);
assertEquals(true, result.length == 1);
assertEquals(true, list.getElements().length == 1);
assertEquals(true, !list.isEmpty());
assertEquals(true, list.added == 1);
assertEquals(true, list.removed == 0);
}
public static void testAddSecond() throws Exception
{
TestList list = new TestList();
list.add(5);
list.add(7);
Integer[] result = list.get();
assertEquals(true, result != null);
assertEquals(true, result.length == 2);
assertEquals(true, list.getElements().length == 2);
assertEquals(true, !list.isEmpty());
assertEquals(true, list.added == 1);
assertEquals(true, list.removed == 0);
}
public static void testRemoveHead() throws Exception
{
TestList list = new TestList();
list.add(5);
list.add(7);
list.add(2);
list.add(9);
list.add(1);
list.add(4);
list.add(8);
Integer[] old = list.reset();
boolean removed = list.remove(5);
Integer[] result = list.get();
assertEquals(true, removed);
assertEquals(true, result != null);
assertEquals(true, result != old);
assertEquals(true, result.length == 6);
assertEquals(true, list.getElements().length == 6);
assertEquals(true, !list.isEmpty());
assertEquals(true, list.added == 0);
assertEquals(true, list.removed == 0);
assertEquals(true, result[0] == 7);
assertEquals(true, result[1] == 2);
assertEquals(true, result[2] == 9);
assertEquals(true, result[3] == 1);
assertEquals(true, result[4] == 4);
assertEquals(true, result[5] == 8);
}
public static void testRemoveMiddle() throws Exception
{
TestList list = new TestList();
list.add(5);
list.add(7);
list.add(2);
list.add(9);
list.add(1);
list.add(4);
list.add(8);
Integer[] old = list.reset();
boolean removed = list.remove(9);
Integer[] result = list.get();
assertEquals(true, removed);
assertEquals(true, result != null);
assertEquals(true, result != old);
assertEquals(true, result.length == 6);
assertEquals(true, list.getElements().length == 6);
assertEquals(true, !list.isEmpty());
assertEquals(true, list.added == 0);
assertEquals(true, list.removed == 0);
assertEquals(true, result[0] == 5);
assertEquals(true, result[1] == 7);
assertEquals(true, result[2] == 2);
assertEquals(true, result[3] == 1);
assertEquals(true, result[4] == 4);
assertEquals(true, result[5] == 8);
}
public void testRemoveMiddleOfThree()
{
TestList list = new TestList();
Integer one = new Integer(1);
Integer two = new Integer(2);
Integer three = new Integer(3);
list.add(one);
list.add(two);
list.add(three);
list.remove(two);
Integer[] elements = list.get();
assertSame(one, elements[0]);
assertSame(three, elements[1]);
}
public static void testRemoveTail() throws Exception
{
TestList list = new TestList();
list.add(5);
list.add(7);
list.add(2);
list.add(9);
list.add(1);
list.add(4);
list.add(8);
Integer[] old = list.reset();
boolean removed = list.remove(8);
Integer[] result = list.get();
assertEquals(true, removed);
assertEquals(true, result != old);
assertEquals(true, result != null);
assertEquals(true, result.length == 6);
assertEquals(true, list.getElements().length == 6);
assertEquals(true, !list.isEmpty());
assertEquals(true, list.added == 0);
assertEquals(true, list.removed == 0);
assertEquals(true, result[0] == 5);
assertEquals(true, result[1] == 7);
assertEquals(true, result[2] == 2);
assertEquals(true, result[3] == 9);
assertEquals(true, result[4] == 1);
assertEquals(true, result[5] == 4);
}
public static void testRemoveLast() throws Exception
{
TestList list = new TestList();
list.add(5);
list.add(7);
Integer[] old = list.reset();
boolean removed1 = list.remove(7);
boolean removed2 = list.remove(5);
Integer[] result = list.get();
assertEquals(true, removed1);
assertEquals(true, removed2);
assertEquals(true, result != old);
assertEquals(true, result == null);
assertEquals(true, list.getElements() == null);
assertEquals(true, list.isEmpty());
assertEquals(true, list.added == 0);
assertEquals(true, list.removed == 1);
}
public static void testNotFoundInMany() throws Exception
{
TestList list = new TestList();
list.add(5);
list.add(7);
list.add(2);
list.add(9);
list.add(1);
list.add(4);
list.add(8);
Integer[] old = list.reset();
boolean removed = list.remove(10);
Integer[] result = list.get();
assertEquals(true, !removed);
assertEquals(true, result != null);
assertEquals(true, result == old);
assertEquals(true, result.length == 7);
assertEquals(true, list.getElements().length == 7);
assertEquals(true, !list.isEmpty());
assertEquals(true, list.added == 0);
assertEquals(true, list.removed == 0);
assertEquals(true, result[0] == 5);
assertEquals(true, result[1] == 7);
assertEquals(true, result[2] == 2);
assertEquals(true, result[3] == 9);
assertEquals(true, result[4] == 1);
assertEquals(true, result[5] == 4);
assertEquals(true, result[6] == 8);
}
public static void testNotFoundInOne() throws Exception
{
TestList list = new TestList();
list.add(5);
Integer[] old = list.reset();
boolean removed = list.remove(10);
Integer[] result = list.get();
assertEquals(true, !removed);
assertEquals(true, result != null);
assertEquals(true, result == old);
assertEquals(true, result.length == 1);
assertEquals(true, list.getElements().length == 1);
assertEquals(true, !list.isEmpty());
assertEquals(true, list.added == 0);
assertEquals(true, list.removed == 0);
assertEquals(true, result[0] == 5);
}
public static void testNotFoundInEmpty() throws Exception
{
TestList list = new TestList();
Integer[] old = list.reset();
boolean removed = list.remove(10);
Integer[] result = list.get();
assertEquals(true, !removed);
assertEquals(true, result == null);
assertEquals(true, result == old);
assertEquals(true, list.isEmpty());
assertEquals(true, list.added == 0);
assertEquals(true, list.removed == 0);
}
/**
* @author Eike Stepper
*/
public static class TestList extends ConcurrentArray<Integer>
{
public int added;
public int removed;
public TestList()
{
}
public Integer[] getElements()
{
return elements;
}
public Integer[] reset()
{
added = 0;
removed = 0;
return elements;
}
@Override
protected Integer[] newArray(int length)
{
return new Integer[length];
}
@Override
protected void firstElementAdded()
{
++added;
}
@Override
protected void lastElementRemoved()
{
++removed;
}
}
}