package freenet.support;
import junit.framework.TestCase;
public class TimeSortedHashtableTest extends TestCase {
public void testAddRemove() {
TimeSortedHashtable<String> tsh = new TimeSortedHashtable<String>();
assertFalse(tsh.containsValue("KEY1"));
assertEquals(0, tsh.countValuesAfter(0));
assertEquals(0, tsh.size());
tsh.push("KEY1", 100);
assertEquals(1, tsh.countValuesAfter(0));
assertEquals(1, tsh.size());
assertEquals(1, tsh.countValuesAfter(99));
assertEquals(0, tsh.countValuesAfter(100));
assertEquals(0, tsh.countValuesAfter(101));
assertTrue(tsh.containsValue("KEY1"));
tsh.push("KEY2", 100);
assertEquals(2, tsh.countValuesAfter(0));
assertEquals(2, tsh.size());
assertEquals(0, tsh.countValuesAfter(100));
assertEquals(0, tsh.countValuesAfter(101));
assertTrue(tsh.containsValue("KEY1"));
assertTrue(tsh.containsValue("KEY2"));
tsh.push("KEY3", 300);
assertEquals(3, tsh.countValuesAfter(0));
assertEquals(3, tsh.size());
assertEquals(1, tsh.countValuesAfter(100));
assertEquals(1, tsh.countValuesAfter(101));
assertTrue(tsh.containsValue("KEY1"));
assertTrue(tsh.containsValue("KEY2"));
assertTrue(tsh.containsValue("KEY3"));
tsh.push("KEY1", 200);
assertEquals(3, tsh.countValuesAfter(0));
assertEquals(3, tsh.size());
assertEquals(2, tsh.countValuesAfter(100));
assertEquals(2, tsh.countValuesAfter(101));
assertTrue(tsh.containsValue("KEY1"));
assertTrue(tsh.containsValue("KEY2"));
assertTrue(tsh.containsValue("KEY3"));
assertTrue(tsh.removeValue("KEY1"));
assertEquals(2, tsh.countValuesAfter(0));
assertEquals(2, tsh.size());
assertEquals(1, tsh.countValuesAfter(100));
assertEquals(1, tsh.countValuesAfter(101));
assertFalse(tsh.containsValue("KEY1"));
assertTrue(tsh.containsValue("KEY2"));
assertTrue(tsh.containsValue("KEY3"));
tsh.removeBefore(105);
assertEquals(1, tsh.countValuesAfter(0));
assertEquals(1, tsh.size());
assertEquals(1, tsh.countValuesAfter(100));
assertEquals(1, tsh.countValuesAfter(101));
assertFalse(tsh.containsValue("KEY1"));
assertFalse(tsh.containsValue("KEY2"));
assertTrue(tsh.containsValue("KEY3"));
}
public void testAddRemoveTS() {
TimeSortedHashtable<String> tsh = new TimeSortedHashtable<String>();
tsh.push("KEY1", 100); // 100=KEY1
tsh.push("KEY2", 100); // 100=KEY1, 100=KEY2
tsh.push("KEY3", 300); // 100=KEY1, 100=KEY2, 300=KEY3
tsh.push("KEY1", 200); // 100=KEY2, 200=KEY1, 300=KEY3
tsh.removeBefore(105); // 200=KEY1, 300=KEY3
assertEquals(2, tsh.size());
assertEquals(2, tsh.countValuesAfter(0));
assertEquals(2, tsh.countValuesAfter(100));
assertEquals(1, tsh.countValuesAfter(201));
assertEquals(0, tsh.countValuesAfter(301));
assertTrue(tsh.containsValue("KEY1"));
assertFalse(tsh.containsValue("KEY2"));
assertTrue(tsh.containsValue("KEY3"));
assertEquals(200, tsh.getTime("KEY1"));
assertEquals(-1, tsh.getTime("KEY2"));
assertEquals(300, tsh.getTime("KEY3"));
}
public void testBeforeInclusive() {
TimeSortedHashtable<String> tsh = new TimeSortedHashtable<String>();
tsh.push("KEY1", 100); // 100=KEY1
tsh.push("KEY2", 100); // 100=KEY1, 100=KEY2
tsh.push("KEY3", 300); // 100=KEY1, 100=KEY2, 300=KEY3
tsh.removeBefore(100);
assertEquals(1, tsh.size());
}
public void testPairs() {
TimeSortedHashtable<String> tsh = new TimeSortedHashtable<String>();
tsh.push("KEY1", 100); // 100=KEY1
tsh.push("KEY2", 100); // 100=KEY1, 100=KEY2
tsh.push("KEY3", 300); // 100=KEY1, 100=KEY2, 300=KEY3
Object[] p = tsh.pairsAfter(-1, new String[3]);
assertEquals(100, (long) ((Long[]) p[1])[0]);
assertEquals("KEY1", ((String[]) p[0])[0]);
assertEquals(100, (long) ((Long[]) p[1])[1]);
assertEquals("KEY2", ((String[]) p[0])[1]);
assertEquals(300, (long) ((Long[]) p[1])[2]);
assertEquals("KEY3", ((String[]) p[0])[2]);
tsh.push("KEY1", 200); // 100=KEY2, 200=KEY1, 300=KEY3
p = tsh.pairsAfter(-1, new String[3]);
assertEquals(100, (long) ((Long[]) p[1])[0]);
assertEquals("KEY2", ((String[]) p[0])[0]);
assertEquals(200, (long) ((Long[]) p[1])[1]);
assertEquals("KEY1", ((String[]) p[0])[1]);
assertEquals(300, (long) ((Long[]) p[1])[2]);
assertEquals("KEY3", ((String[]) p[0])[2]);
tsh.removeBefore(105); // 200=KEY1, 300=KEY3
p = tsh.pairsAfter(-1, new String[2]);
assertEquals(200, (long) ((Long[]) p[1])[0]);
assertEquals("KEY1", ((String[]) p[0])[0]);
assertEquals(300, (long) ((Long[]) p[1])[1]);
assertEquals("KEY3", ((String[]) p[0])[1]);
}
}