package com.jidesoft.utils; import junit.framework.TestCase; import java.util.ArrayList; public class TestCachedArrayList extends TestCase { CachedArrayList cachedList; ActiveCachedArrayList activeCachedList; ArrayList list; public static final int SIZE = 1000; @Override protected void setUp() throws Exception { super.setUp(); long before, after; list = new ArrayList(); before = System.nanoTime(); for (int i = 0; i < SIZE; i++) { list.add(0, String.valueOf(i)); } after = System.nanoTime(); System.out.println("Creating ArrayList of length " + SIZE + " took " + String.valueOf((after - before) / SIZE) + "ms"); cachedList = new CachedArrayList(); // cachedList.setLazyCaching(true); before = System.nanoTime(); for (int i = 0; i < SIZE; i++) { cachedList.add(0, String.valueOf(i)); } after = System.nanoTime(); System.out.println("Creating CachedArrayList of length " + SIZE + " took " + String.valueOf((after - before) / SIZE) + "ms"); activeCachedList = new ActiveCachedArrayList(); // activeCachedList.setLazy(true); before = System.nanoTime(); for (int i = 0; i < SIZE; i++) { activeCachedList.add(0, String.valueOf(i)); } after = System.nanoTime(); System.out.println("Creating ActiveCachedArrayList of length " + SIZE + " took " + String.valueOf((after - before) / SIZE) + "ms"); System.out.println(); } public void testIndexOf() { assertEquals(cachedList.indexOf(cachedList.get(SIZE - 1)), list.indexOf(list.get(SIZE - 1))); assertEquals(cachedList.indexOf(cachedList.get(1)), list.indexOf(list.get(1))); cachedList.invalidateCache(); } public void testIndexOfPerformance() { long before, after; // before = System.nanoTime(); for (int i = 0; i < SIZE; i++) { list.indexOf("" + i); } after = System.nanoTime(); System.out.println("1st Normal: indexof of length " + SIZE + " took " + String.valueOf((after - before) / 1000000) + "ms"); before = System.nanoTime(); // cachedList.cacheAll(); for (int i = 0; i < SIZE; i++) { cachedList.indexOf("" + i); } after = System.nanoTime(); System.out.println("1st Cached: indexof of length " + SIZE + " took " + String.valueOf((after - before) / 1000000) + "ms"); before = System.nanoTime(); // activeCachedList.recache(); for (int i = 0; i < SIZE; i++) { activeCachedList.indexOf("" + i); } after = System.nanoTime(); System.out.println("1st Active: indexof of length " + SIZE + " took " + String.valueOf((after - before) / 1000000) + "ms"); // System.out.println(); before = System.nanoTime(); for (int i = 0; i < SIZE; i++) { list.indexOf("" + i); } after = System.nanoTime(); System.out.println("2nd Normal: indexOf ArrayList of length " + SIZE + " took " + String.valueOf((after - before) / 1000000) + "ms"); before = System.nanoTime(); for (int i = 0; i < SIZE; i++) { cachedList.indexOf("" + i); } after = System.nanoTime(); System.out.println("2nd Cached: indexOf ArrayList of length " + SIZE + " took " + String.valueOf((after - before) / 1000000) + "ms"); cachedList.invalidateCache(); before = System.nanoTime(); for (int i = 0; i < SIZE; i++) { activeCachedList.indexOf("" + i); } after = System.nanoTime(); System.out.println("2nd Active: indexOf ArrayList of length " + SIZE + " took " + String.valueOf((after - before) / 1000000) + "ms"); System.out.println(); } public void testAddRemove() { CachedArrayList<String> list = new CachedArrayList(); list.setLazyCaching(false); list.add("1"); list.add("2"); list.add("3"); assertEquals(3, list.size()); list.add("3"); assertEquals(4, list.size()); assertEquals(2, list.indexOf("3")); list.add(1, "3"); assertEquals(5, list.size()); assertEquals(1, list.indexOf("3")); list.clear(); assertEquals(0, list.size()); list.setLazyCaching(true); list.add("1"); list.add("2"); list.add("3"); assertEquals(3, list.size()); list.add("3"); assertEquals(4, list.size()); assertEquals(2, list.indexOf("3")); list.add(1, "3"); assertEquals(5, list.size()); assertEquals(1, list.indexOf("3")); list.clear(); assertEquals(0, list.size()); } }