package org.limewire.collection; import java.util.HashSet; import java.util.Iterator; import java.util.Set; import junit.framework.Test; import org.limewire.util.BaseTestCase; /** * Unit tests for FixedsizeForgetfulHashSetTest. */ @SuppressWarnings("unchecked") public class FixedsizeForgetfulHashSetTest extends BaseTestCase { public FixedsizeForgetfulHashSetTest(String name) { super(name); } public static Test suite() { return buildTestSuite(FixedsizeForgetfulHashSetTest.class); } public static void main(String[] args) { junit.textui.TestRunner.run(suite()); } public void testLegacy() throws Exception { FixedsizeForgetfulHashSet rt=null; String g1="key1"; String g2="key2"; String g3="key3"; String g4="key4"; String g5="key5"; //1. FIFO put/get tests rt=new FixedsizeForgetfulHashSet(3); rt.add(g1); rt.add(g2); rt.add(g3); assertTrue(rt.contains(g1)); assertTrue(rt.contains(g2)); assertTrue(rt.contains(g3)); rt.add(g4); assertFalse(rt.contains(g1)); assertTrue(rt.contains(g2)); assertTrue(rt.contains(g3)); assertTrue(rt.contains(g4)); rt.add(g1); assertTrue(rt.contains(g1)); assertFalse(rt.contains(g2)); assertTrue(rt.contains(g3)); assertTrue(rt.contains(g4)); rt=new FixedsizeForgetfulHashSet(1); rt.add(g1); assertTrue(rt.contains(g1)); rt.add(g2); assertFalse(rt.contains(g1)); assertTrue(rt.contains(g2)); rt.add(g3); assertFalse(rt.contains(g1)); assertFalse(rt.contains(g2)); assertTrue(rt.contains(g3)); rt=new FixedsizeForgetfulHashSet(2); rt.add(g1); rt.remove(g1); assertFalse(rt.contains(g1)); //1a. Stronger put/get tests with renaming keys rt=new FixedsizeForgetfulHashSet(3); assertTrue(rt.add(g1)); assertTrue(rt.contains(g1)); assertTrue(rt.add(g2)); assertTrue(rt.contains(g2)); assertTrue(rt.contains(g1)); assertTrue(rt.add(g3)); assertTrue(rt.contains(g1)); assertFalse(rt.add(g1)); // remapping takes no space assertTrue(rt.contains(g1)); assertTrue(rt.contains(g2)); assertTrue(rt.contains(g3)); assertTrue(rt.add(g5)); assertTrue(rt.contains(g5)); assertTrue(rt.contains(g1)); // .. and it renewed the key. assertTrue(rt.contains(g3)); assertFalse(rt.contains(g2)); assertTrue(rt.add(g4)); assertTrue(rt.contains(g4)); assertTrue(rt.contains(g5)); assertTrue(rt.contains(g1)); assertFalse(rt.contains(g3)); assertFalse(rt.contains(g2)); //2. Remove tests rt=new FixedsizeForgetfulHashSet(2); rt.add(g1); rt.remove(g1); assertFalse(rt.contains(g1)); rt.add(g1); assertTrue(rt.contains(g1)); //3. putAll tests. rt=new FixedsizeForgetfulHashSet(3); Set m=new HashSet(); m.add(g1); m.add(g2); rt.addAll(m); assertTrue(rt.contains(g1)); assertTrue(rt.contains(g2)); //4. keySet().iterator() methods. (Other methods are incomplete.) Iterator iter=null; rt=new FixedsizeForgetfulHashSet(4); rt.add(g1); rt.add(g2); rt.add(g2); //remap c2 rt.add(g3); rt.add(g4); iter=rt.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.iterator(); assertTrue(rt.contains(a1)); assertTrue(! rt.contains(a2)); assertTrue(! rt.contains(a3)); assertTrue(rt.contains(a4)); Object b1=iter.next(); assertSame(b1, a1); Object b2=iter.next(); assertSame(b2, a4); assertNotSame(b1, b2); assertTrue(! iter.hasNext()); rt = new FixedsizeForgetfulHashSet(4); rt.add(g1); rt.add(g2); assertEquals("should be equals", rt, rt); assertEquals("hashcodes should be equal", rt.hashCode(), rt.hashCode()); FixedsizeForgetfulHashSet rt2 = new FixedsizeForgetfulHashSet(3); rt2.add(g1); assertNotEquals("should not be equal", rt, rt2); assertNotEquals("hashes shouldn't be equal", rt.hashCode(), rt2.hashCode()); rt2.add(g2); 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()); } }