package org.limewire.collection;
import java.util.Arrays;
import java.util.List;
import java.util.Set;
import junit.framework.Test;
import org.limewire.collection.FixedSizeLIFOSet.EjectionPolicy;
import org.limewire.util.BaseTestCase;
public class FixedSizeLIFOSetTest extends BaseTestCase {
public FixedSizeLIFOSetTest(String name) {
super(name);
}
public static Test suite() {
return buildTestSuite(FixedSizeLIFOSetTest.class);
}
public static void main(String[] args) {
junit.textui.TestRunner.run(suite());
}
public void testFixedSizeLIFOSetLifo(){
String test = "test";
String test2 = "test2";
String test3 = "test3";
String test4 = "test4";
String test5 = "test5";
String test6 = "test6";
//try a 0 size
Set<String> lifo = new FixedSizeLIFOSet<String>(0, EjectionPolicy.LIFO);
lifo.add(test);
assertFalse(lifo.contains(test));
//try going over capacity
lifo = new FixedSizeLIFOSet<String>(3, EjectionPolicy.LIFO);
lifo.add(test);
assertTrue(lifo.contains(test));
lifo.add(test2);
assertTrue(lifo.contains(test2));
lifo.add(test3);
assertTrue(lifo.contains(test3));
lifo.add(test4);
assertTrue(lifo.contains(test4));
//contains 4, 2, 1
//should have kicked out the last one
assertTrue(lifo.contains(test));
assertFalse(lifo.contains(test3));
assertTrue(lifo.contains(test));
assertEquals(test4, lifo.iterator().next());
lifo.add(test5);
//contains 5, 2, 1
assertTrue(lifo.contains(test5));
assertTrue(lifo.contains(test2));
assertTrue(lifo.contains(test));
assertFalse(lifo.contains(test4));
lifo.add(test6); //
//contains 6,2,1
assertTrue(lifo.contains(test6));
assertFalse(lifo.contains(test3));
assertTrue(lifo.contains(test2));
assertTrue(lifo.contains(test));
//try re-adding
lifo = new FixedSizeLIFOSet<String>(3, EjectionPolicy.LIFO);
lifo.add(test);
lifo.add(test2);
lifo.add(test);
//contains 1, 2
assertEquals(2, lifo.size());
//contains 3, 2, 1
lifo.add(test3);
lifo.add(test);
assertTrue(lifo.contains(test));
assertTrue(lifo.contains(test2));
assertTrue(lifo.contains(test3));
//try add-remove
lifo = new FixedSizeLIFOSet<String>(3, EjectionPolicy.LIFO);
lifo.add(test);
lifo.add(test2);
lifo.add(test3);
lifo.remove(test2);
lifo.add(test4);
//contains 4,3,1
assertTrue(lifo.contains(test));
assertFalse(lifo.contains(test2));
assertTrue(lifo.contains(test3));
assertTrue(lifo.contains(test4));
//try adding multiple
lifo = new FixedSizeLIFOSet<String>(3, EjectionPolicy.LIFO);
lifo.add(test);
lifo.add(test2);
lifo.add(test3);
List<String> l = Arrays.asList(test,test2,test3,test4);
lifo.addAll(l);
//contains 4,2,1
assertTrue(lifo.contains(test));
assertTrue(lifo.contains(test2));
assertFalse(lifo.contains(test3));
assertTrue(lifo.contains(test4));
}
public void testFixedSizeLIFOSet() {
String test = "test";
String test2 = "test2";
String test3 = "test3";
String test4 = "test4";
String test5 = "test5";
String test6 = "test6";
//try a 0 size
Set<String> lifo = new FixedSizeLIFOSet<String>(0, EjectionPolicy.FIFO);
lifo.add(test);
assertFalse(lifo.contains(test));
//try going over capacity
lifo = new FixedSizeLIFOSet<String>(3, EjectionPolicy.FIFO);
lifo.add(test);
assertTrue(lifo.contains(test));
lifo.add(test2);
assertTrue(lifo.contains(test2));
lifo.add(test3);
assertTrue(lifo.contains(test3));
lifo.add(test4);
assertTrue(lifo.contains(test4));
//should have kicked out the first one
assertFalse(lifo.contains(test));
assertEquals(test4, lifo.iterator().next());
lifo.add(test5);
assertTrue(lifo.contains(test5));
lifo.add(test6);
assertTrue(lifo.contains(test6));
assertFalse(lifo.contains(test3));
assertFalse(lifo.contains(test2));
//try re-adding
lifo = new FixedSizeLIFOSet<String>(3, EjectionPolicy.FIFO);
lifo.add(test);
lifo.add(test2);
lifo.add(test);
assertEquals(2, lifo.size());
lifo.add(test3);
lifo.add(test);
assertTrue(lifo.contains(test));
assertTrue(lifo.contains(test2));
assertTrue(lifo.contains(test3));
//try add-remove
lifo = new FixedSizeLIFOSet<String>(3, EjectionPolicy.FIFO);
lifo.add(test);
lifo.add(test2);
lifo.add(test3);
lifo.remove(test2);
lifo.add(test4);
assertTrue(lifo.contains(test));
assertFalse(lifo.contains(test2));
assertTrue(lifo.contains(test3));
assertTrue(lifo.contains(test4));
//try adding multiple
lifo = new FixedSizeLIFOSet<String>(3, EjectionPolicy.FIFO);
lifo.add(test);
lifo.add(test2);
lifo.add(test3);
List<String> l = Arrays.asList(test,test2,test3,test4);
lifo.addAll(l);
assertFalse(lifo.contains(test));
assertTrue(lifo.contains(test2));
assertTrue(lifo.contains(test3));
assertTrue(lifo.contains(test4));
}
}