package org.krakenapps.bloomfilter;
import static org.junit.Assert.*;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;
import org.junit.Test;
public class BloomFilterTest {
private BloomFilter<String> filter = null;
private Set<String> map = null;
// failed performance : 0 - 4, 5, 6, 7, 8, 2-3
// success : 0-1, 2, 3, 1-2, 3, 2-1, 3-1
@SuppressWarnings("unchecked")
public void init(int num, boolean doMap) {
filter = new BloomFilter<String>(
GeneralHashFunction.stringHashFunctions[2],
GeneralHashFunction.stringHashFunctions[1]);
map = new HashSet<String>(num);
String in;
for (int i = 0; i < num; i++) {
in = VMIDGen.next();
filter.add(in);
if (doMap)
map.add(in);
}
for (int i = 0; i < num; i++) {
in = UIDGen.next();
filter.add(in);
if (doMap)
map.add(in);
}
}
@Test
public void contains() {
System.out.println(new Date());
init(50000, true);
for (String key : map) {
if (map.contains(key) == false)
fail();
}
System.out.println(new Date());
}
@Test
public void doesNotContain() {
System.out.println(new Date());
init(500000, false);
int count = 0;
for (int i = 0; i < 50000; i++) {
if (filter.contains(VMIDGen.next()))
count++;
}
for (int i = 0; i < 50000; i++) {
if (filter.contains(UIDGen.next()))
count++;
}
System.out.printf("false positive count: %d, rate : %f\n", count,
count / 5000D);
assertTrue(count < 1000);
System.out.println(new Date());
}
public abstract static class VMIDGen {
static String next() {
return new java.rmi.dgc.VMID().toString();
}
}
public abstract static class UIDGen {
static String next() {
return new java.rmi.server.UID().toString();
}
}
}