@Test
public void bloomTest ()
{
int n = 500;
double falsepositiveTarget = 0.01;
BloomFilter filter = BloomFilter.createOptimalFilter (n, falsepositiveTarget, UpdateMode.all);
assertTrue (filter.getFalsePositiveProbability (n) < 0.02);
List<byte[]> mustHave = new ArrayList<byte[]> ();
SecureRandom rnd = new SecureRandom ();
for ( int i = 0; i < n; ++i )
{
byte[] data = new byte[32];
rnd.nextBytes (data);
mustHave.add (data);
filter.add (data);
}
for ( byte[] data : mustHave )
{
assertTrue (filter.contains (data));
}
int falsePositive = 0;
for ( int i = 0; i < n * 100; ++i )
{
byte[] data = new byte[32];
rnd.nextBytes (data);
if ( filter.contains (data) )
{
++falsePositive;
}
}
assertTrue (falsePositive < 2 * n * 100 * filter.getFalsePositiveProbability (n));
}