package be.bagofwords.main.tests.bloomfilter;
import be.bagofwords.db.bloomfilter.LongBloomFilter;
import be.bagofwords.db.data.LongCountsBloomFilter;
import be.bagofwords.ui.UI;
import com.google.common.hash.BloomFilter;
public class TestBloomFiltersSpeed {
private static final int NUM_OF_VALUES = 1000000;
public static void main(String[] args) {
LongBloomFilter bloomFilter1 = new LongBloomFilter(NUM_OF_VALUES, 0.001);
BloomFilter<Long> bloomFilter2 = BloomFilter.create((from, into) -> into.putLong(from), NUM_OF_VALUES, 0.001);
LongCountsBloomFilter bloomFilter3 = new LongCountsBloomFilter(NUM_OF_VALUES, 0.001);
UI.write("Writing values for filter 1 took " + putValues(bloomFilter1));
UI.write("Writing values for filter 2 took " + putValues(bloomFilter2));
UI.write("Writing values for filter 3 took " + putValues(bloomFilter3));
UI.write("Reading values for filter 1 took " + readValues(bloomFilter1));
UI.write("Reading values for filter 2 took " + readValues(bloomFilter2));
UI.write("Reading values for filter 3 took " + readValues(bloomFilter3));
}
private static long readValues(LongBloomFilter bloomFilter1) {
long start = System.currentTimeMillis();
for (int i = 0; i < NUM_OF_VALUES; i++) {
if (i % 3 == 0) {
bloomFilter1.mightContain(i);
}
}
return System.currentTimeMillis() - start;
}
private static long readValues(BloomFilter<Long> bloomFilter2) {
long start = System.currentTimeMillis();
for (int i = 0; i < NUM_OF_VALUES; i++) {
if (i % 3 == 0) {
bloomFilter2.mightContain((long) i);
}
}
return System.currentTimeMillis() - start;
}
private static long readValues(LongCountsBloomFilter bloomFilter3) {
long start = System.currentTimeMillis();
for (int i = 0; i < NUM_OF_VALUES; i++) {
if (i % 3 == 0) {
bloomFilter3.getMaxCount(i);
}
}
return System.currentTimeMillis() - start;
}
private static long putValues(LongCountsBloomFilter bloomFilter3) {
long start = System.currentTimeMillis();
for (int i = 0; i < NUM_OF_VALUES; i++) {
if (i % 3 == 0) {
bloomFilter3.addCount((long) i, 12);
}
}
return System.currentTimeMillis() - start;
}
private static long putValues(BloomFilter<Long> bloomFilter2) {
long start = System.currentTimeMillis();
for (int i = 0; i < NUM_OF_VALUES; i++) {
if (i % 3 == 0) {
bloomFilter2.put((long) i);
}
}
return System.currentTimeMillis() - start;
}
private static long putValues(LongBloomFilter bloomFilter1) {
long start = System.currentTimeMillis();
for (int i = 0; i < NUM_OF_VALUES; i++) {
if (i % 3 == 0) {
bloomFilter1.put(i);
}
}
return System.currentTimeMillis() - start;
}
}