package org.limewire.collection; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import junit.framework.Test; import org.limewire.util.BaseTestCase; /** * Unit tests for <code>FixedsizeForgetfulHashMap</code>. */ @SuppressWarnings("unchecked") public class FixedsizeForgetfulHashMapTest extends BaseTestCase { public FixedsizeForgetfulHashMapTest(String name) { super(name); } public static Test suite() { return buildTestSuite(FixedsizeForgetfulHashMapTest.class); } public static void main(String[] args) { junit.textui.TestRunner.run(suite()); } public void testLegacy() throws Exception { //The cryptic variable names are um..."legacy variables" =) FixedsizeForgetfulHashMap rt=null; String g1="key1"; String g2="key2"; String g3="key3"; String g4="key4"; String g5="key5"; String c1="value1"; String c2="value2"; String c3="value3"; String c4="value4"; String c5="value5"; //1. FIFO put/get tests rt=new FixedsizeForgetfulHashMap(3); rt.put(g1, c1); rt.put(g2, c2); rt.put(g3, c3); assertSame(c1, rt.get(g1)); assertSame(c2, rt.get(g2)); assertSame(c3, rt.get(g3)); rt.put(g4, c4); assertNull(rt.get(g1)); assertSame(c2, rt.get(g2)); assertSame(c3, rt.get(g3)); assertSame(c4, rt.get(g4)); rt.put(g1, c1); assertSame(c1, rt.get(g1)); assertNull(rt.get(g2)); assertSame(c3, rt.get(g3)); assertSame(c4, rt.get(g4)); rt=new FixedsizeForgetfulHashMap(1); rt.put(g1, c1); assertSame(c1, rt.get(g1)); rt.put(g2, c2); assertNull(rt.get(g1)); assertSame(c2, rt.get(g2)); rt.put(g3, c3); assertNull(rt.get(g1)); assertNull(rt.get(g2)); assertSame(c3, rt.get(g3)); rt=new FixedsizeForgetfulHashMap(2); rt.put(g1,c1); rt.remove(g1); assertNull(rt.get(g1)); //1a. Stronger put/get tests with renaming keys rt=new FixedsizeForgetfulHashMap(3); assertNull(rt.put(g1, c1)); assertSame(c1, rt.get(g1)); assertNull(rt.put(g2, c2)); assertSame(c1, rt.get(g1)); assertNull(rt.put(g3, c3)); assertSame(c1, rt.get(g1)); assertSame(c1, rt.put(g1, c4)); assertSame(c4, rt.get(g1)); //remapping takes no space... assertSame(c2, rt.get(g2)); assertSame(c3, rt.get(g3)); assertNull(rt.put(g5, c5)); assertSame(c5, rt.get(g5)); //...and it renews the key assertSame(c4, rt.get(g1)); assertSame(c3, rt.get(g3)); assertNull(rt.get(g2)); assertNull(rt.put(g4, c4)); assertSame(c4, rt.get(g4)); assertSame(c5, rt.get(g5)); assertSame(c4, rt.get(g1)); assertNull(rt.get(g3)); assertNull(rt.get(g2)); //2. Remove tests rt=new FixedsizeForgetfulHashMap(2); rt.put(g1,c1); rt.remove(g1); assertNull(rt.get(g1)); rt.put(g1,c2); assertSame(c2, rt.get(g1)); //3. putAll tests. rt=new FixedsizeForgetfulHashMap(3); Map m=new HashMap(); m.put(g1,c1); m.put(g2,c2); rt.putAll(m); assertSame(c1, rt.get(g1)); assertSame(c2, rt.get(g2)); //4. keySet().iterator() methods. (Other methods are incomplete.) Iterator iter=null; rt=new FixedsizeForgetfulHashMap(4); rt.put(g1, c1); rt.put(g2, c5); rt.put(g2, c2); //remap c2 rt.put(g3, c3); rt.put(g4, c4); iter=rt.keySet().iterator(); assertTrue(iter.hasNext()); Object a1=iter.next(); assertSame(a1, g1); assertTrue(iter.hasNext()); Object a2=iter.next(); assertTrue(rt.size()==4); iter.remove(); //remove a2 assertTrue(rt.size()==3); assertSame(a2, g2); assertNotSame(a1, a2); assertTrue(iter.hasNext()); Object a3=iter.next(); assertEquals(3, rt.size()); iter.remove(); //remove a3 assertEquals(2, rt.size()); assertSame(a3, g3); assertNotSame(a3, a2); assertNotSame(a3, a1); Object a4=iter.next(); assertSame(a4, g4); assertNotSame(a4, a3); assertNotSame(a4, a2); assertNotSame(a4, a1); assertTrue(! iter.hasNext()); iter=rt.keySet().iterator(); assertTrue(rt.containsKey(a1)); assertTrue(! rt.containsKey(a2)); assertTrue(! rt.containsKey(a3)); assertTrue(rt.containsKey(a4)); Object b1=iter.next(); assertSame(b1, a1); Object b2=iter.next(); assertSame(b2, a4); assertNotSame(b1, b2); assertTrue(! iter.hasNext()); rt = new FixedsizeForgetfulHashMap(4); rt.put(g1, c1); rt.put(g2, c2); assertEquals("should be equals", rt, rt); assertEquals("hashcodes should be equal", rt.hashCode(), rt.hashCode()); FixedsizeForgetfulHashMap rt2 = new FixedsizeForgetfulHashMap(3); rt2.put(g1, c1); assertNotEquals("should not be equal", rt, rt2); assertNotEquals("hashes shouldn't be equal", rt.hashCode(), rt2.hashCode()); rt2.put(g2, c2); assertEquals("should be equals", rt, rt2); assertEquals("hashes should be equal", rt.hashCode(), rt2.hashCode()); rt2.remove(g1); assertNotEquals("should not be equal", rt, rt2); assertNotEquals("hashes shouldn't be equal", rt.hashCode(), rt2.hashCode()); } public void testFixedIsNotSurpassed() { FixedsizeForgetfulHashMap<Integer, Integer> map = new FixedsizeForgetfulHashMap<Integer, Integer>(1); map.put(1, 1); map.put(2, 2); assertEquals(1, map.size()); assertNull(map.get(1)); assertEquals(Integer.valueOf(2), map.get(2)); } public void testZeroConstructor() { try { new FixedsizeForgetfulHashMap<Integer, Integer>(0); fail("expected illegal argument exception for size 0"); } catch (IllegalArgumentException iae) { } } }