package com.limegroup.gnutella.util; import java.util.ArrayList; import java.util.Comparator; import java.util.Iterator; import java.util.List; import junit.framework.Test; public class FixedSizeSortedSetTest extends BaseTestCase { private FixedSizeSortedSet _set; public void setUp() { Comparator intComp = new Comparator() { public int compare(Object oa, Object ob) { Integer a = (Integer) oa; Integer b = (Integer) ob; return a.compareTo(b); } public boolean equals(Object o) { return o.equals(this); } }; _set = new FixedSizeSortedSet(intComp, 9); } public void tearDown() { _set = null; } public FixedSizeSortedSetTest(String name) { super(name); } public static Test suite() { return buildTestSuite(FixedSizeSortedSetTest.class); } public static void main(String[] args) { junit.textui.TestRunner.run(suite()); } public void testHighestElementThrownWhenFull() throws Exception { for(int i=0; i<11; i++) { Integer I = new Integer(i); try { _set.add(I); } catch(Exception e) { System.out.println("mistake while adding:"+i); } } // make sure 8 was knocked off assertFalse("set removed wrong element",_set.contains(new Integer(8))); assertEquals("wrong highest",new Integer(10),_set.last()); assertEquals("wrong lowest", new Integer(0),_set.first()); //remove 10, make sure second highest was 7 _set.remove(new Integer(10)); assertEquals("wrong new highest",new Integer(7),_set.last()); //does size work? assertEquals("Wrong size",8,_set.size()); } public void testOrdering() throws Exception { for(int i=0; i<11; i++) { //add 0-10 knock off 8,9 Integer I = new Integer(i); _set.add(I); } _set.add(new Integer(8));//get rid of 10 Iterator iter = _set.iterator(); int j=0; while(iter.hasNext()) { assertEquals("problem in ordering",iter.next(),new Integer(j)); j++; }//end of while _set.clear(); assertTrue("either clear is broken or isEmpty is",_set.isEmpty()); List list = new ArrayList(); for(int i=0; i<10;i++) list.add(new Integer(i)); _set.addAll(list); assertEquals("addAll broken", 9, _set.size()); } public void testRepeatElementsNotReadded() { for(int i=0; i< 10; i++) { boolean added = _set.add(new Integer(i)); //8 will be knocked off //knocking off 8 should still return true assertTrue("added method returned unexpected",added); } boolean add = _set.add(new Integer(9)); assertFalse("re-added element added",add); add = _set.add(new Integer(10)); assertTrue("new element not added properly",add); } }