/* * 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; } } }