/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.commons.collections.list; import java.util.List; import java.util.ListIterator; import junit.framework.Test; import org.apache.commons.collections.BulkTest; /** * JUnit tests * * @since Commons Collections 3.1 * @version $Revision: 646780 $ $Date: 2008-04-10 13:48:07 +0100 (Thu, 10 Apr 2008) $ * * @author Joerg Schmuecker */ public class TestTreeList extends AbstractTestList { public TestTreeList(String name) { super(name); } public static void main(String[] args) { junit.textui.TestRunner.run(suite()); // System.out.println(" add; toArray; iterator; insert; get; indexOf; remove"); // System.out.print(" TreeList = "); // benchmark(new TreeList()); // System.out.print("\n ArrayList = "); // benchmark(new java.util.ArrayList()); // System.out.print("\n LinkedList = "); // benchmark(new java.util.LinkedList()); // benchmark(new NodeCachingLinkedList()); } public static Test suite() { return BulkTest.makeSuite(TestTreeList.class); } public static void benchmark(List l) { long start = System.currentTimeMillis(); for (int i = 0; i < 100000; i++) { l.add(new Integer(i)); } System.out.print(System.currentTimeMillis() - start + ";"); start = System.currentTimeMillis(); for (int i = 0; i < 200; i++) { l.toArray(); } System.out.print(System.currentTimeMillis() - start + ";"); start = System.currentTimeMillis(); for (int i = 0; i < 100; i++) { java.util.Iterator it = l.iterator(); while (it.hasNext()) { it.next(); } } System.out.print(System.currentTimeMillis() - start + ";"); start = System.currentTimeMillis(); for (int i = 0; i < 10000; i++) { int j = (int) (Math.random() * 100000); l.add(j, new Integer(-j)); } System.out.print(System.currentTimeMillis() - start + ";"); start = System.currentTimeMillis(); for (int i = 0; i < 50000; i++) { int j = (int) (Math.random() * 110000); l.get(j); } System.out.print(System.currentTimeMillis() - start + ";"); start = System.currentTimeMillis(); for (int i = 0; i < 200; i++) { int j = (int) (Math.random() * 100000); l.indexOf(new Integer(j)); } System.out.print(System.currentTimeMillis() - start + ";"); start = System.currentTimeMillis(); for (int i = 0; i < 10000; i++) { int j = (int) (Math.random() * 100000); l.remove(j); } System.out.print(System.currentTimeMillis() - start + ";"); } //----------------------------------------------------------------------- public List makeEmptyList() { return new TreeList(); } //----------------------------------------------------------------------- public void testAddMultiple() { List l = makeEmptyList(); l.add("hugo"); l.add("erna"); l.add("daniel"); l.add("andres"); l.add("harald"); l.add(0, null); assertEquals(null, l.get(0)); assertEquals("hugo", l.get(1)); assertEquals("erna", l.get(2)); assertEquals("daniel", l.get(3)); assertEquals("andres", l.get(4)); assertEquals("harald", l.get(5)); } public void testRemove() { List l = makeEmptyList(); l.add("hugo"); l.add("erna"); l.add("daniel"); l.add("andres"); l.add("harald"); l.add(0, null); int i = 0; assertEquals(null, l.get(i++)); assertEquals("hugo", l.get(i++)); assertEquals("erna", l.get(i++)); assertEquals("daniel", l.get(i++)); assertEquals("andres", l.get(i++)); assertEquals("harald", l.get(i++)); l.remove(0); i = 0; assertEquals("hugo", l.get(i++)); assertEquals("erna", l.get(i++)); assertEquals("daniel", l.get(i++)); assertEquals("andres", l.get(i++)); assertEquals("harald", l.get(i++)); i = 0; l.remove(1); assertEquals("hugo", l.get(i++)); assertEquals("daniel", l.get(i++)); assertEquals("andres", l.get(i++)); assertEquals("harald", l.get(i++)); i = 0; l.remove(2); assertEquals("hugo", l.get(i++)); assertEquals("daniel", l.get(i++)); assertEquals("harald", l.get(i++)); } public void testInsertBefore() { List l = makeEmptyList(); l.add("erna"); l.add(0, "hugo"); assertEquals("hugo", l.get(0)); assertEquals("erna", l.get(1)); } public void testIndexOf() { List l = makeEmptyList(); l.add("0"); l.add("1"); l.add("2"); l.add("3"); l.add("4"); l.add("5"); l.add("6"); assertEquals(0, l.indexOf("0")); assertEquals(1, l.indexOf("1")); assertEquals(2, l.indexOf("2")); assertEquals(3, l.indexOf("3")); assertEquals(4, l.indexOf("4")); assertEquals(5, l.indexOf("5")); assertEquals(6, l.indexOf("6")); l.set(1, "0"); assertEquals(0, l.indexOf("0")); l.set(3, "3"); assertEquals(3, l.indexOf("3")); l.set(2, "3"); assertEquals(2, l.indexOf("3")); l.set(1, "3"); assertEquals(1, l.indexOf("3")); l.set(0, "3"); assertEquals(0, l.indexOf("3")); } // public void testCheck() { // List l = makeEmptyList(); // l.add("A1"); // l.add("A2"); // l.add("A3"); // l.add("A4"); // l.add("A5"); // l.add("A6"); // } public void testBug35258() { Object objectToRemove = new Integer(3); List treelist = new TreeList(); treelist.add(new Integer(0)); treelist.add(new Integer(1)); treelist.add(new Integer(2)); treelist.add(new Integer(3)); treelist.add(new Integer(4)); // this cause inconsistence of ListIterator() treelist.remove(objectToRemove); ListIterator li = treelist.listIterator(); assertEquals(new Integer(0), li.next()); assertEquals(new Integer(0), li.previous()); assertEquals(new Integer(0), li.next()); assertEquals(new Integer(1), li.next()); // this caused error in bug 35258 assertEquals(new Integer(1), li.previous()); assertEquals(new Integer(1), li.next()); assertEquals(new Integer(2), li.next()); assertEquals(new Integer(2), li.previous()); assertEquals(new Integer(2), li.next()); assertEquals(new Integer(4), li.next()); assertEquals(new Integer(4), li.previous()); assertEquals(new Integer(4), li.next()); assertEquals(false, li.hasNext()); } }