package org.apache.commons.collections;

import java.util.*;

public abstract class InsertionTester
{
	public static int numLoops = 100;
	public static String[] keys = new String[]
		{ "a", "c", "b", "f", "e", "l", "n", "m", "z", "g", "i", "h", "k", "j"};
	public static String[] values = new String[]
		{"1", "3", "2", "6", "5", "12", "14", "13", "26", "7", "9", "8", "11", "10"};
	
	public static void main(String[] args)
	{
		OrderedHashMap ordered = null;
		FIFOMap fifo = null;
		
		/* test Michael Smith's OrderedHashMap */
		System.out.println("OrderedHashMap");
		Date start = new Date();
		ordered = new OrderedHashMap();
		for (int x=0; x<numLoops; x++)
		{
			for (int i=0; i<keys.length; i++)
			{
				ordered.put(keys[i]+String.valueOf(x), values[i]);
			}
		}
		System.out.println("ordered put:" + elapsed(start, new Date()));
		Iterator iterator = ordered.keySet().iterator();
		Object next = null;
		while (iterator.hasNext())
		{
			next = iterator.next();
			System.out.print("["+next+",");
			System.out.print(ordered.get(next) + "],");
		}
		System.out.println("");
		System.out.println("ordered print all:" + elapsed(start, new Date()));
		System.out.println("ordered size:" + ordered.size());
		for (int x=0; x<numLoops; x++)
		{
			for (int i=0; i<keys.length; i++)
			{
				ordered.remove(keys[i]+String.valueOf(x));
			}
		}
		System.out.println("ordered remove:" + elapsed(start, new Date()));
		System.out.println("");

		/* test Lance's FIFOMap */
		System.out.println("FIFOMap");
		start = new Date();
		fifo = new FIFOMap();
		for (int x=0; x<numLoops; x++)
		{
			for (int i=0; i<keys.length; i++)
			{
				fifo.put(keys[i]+String.valueOf(x), values[i]);
			}
		}
		System.out.println("fifo put:" + elapsed(start, new Date()));
		iterator = fifo.keySet().iterator();
		next = null;
		while (iterator.hasNext())
		{
			next = iterator.next();
			System.out.print("["+next+",");
			System.out.print(fifo.get(next) + "],");
		}
		System.out.println("");
		System.out.println("fifo print all:" + elapsed(start, new Date()));
		System.out.println("fifo size:" + fifo.size());
		for (int x=0; x<numLoops; x++)
		{
			for (int i=0; i<keys.length; i++)
			{
				fifo.remove(keys[i]+String.valueOf(x));
			}
		}
		System.out.println("fifo remove:" + elapsed(start, new Date()));

	}
	
	private static long elapsed(Date start, Date stop)
	{
		return stop.getTime() - start.getTime();
	}
}