public static <T extends Filter> BloomFilterCommonTester<T> of(int hashId, int numInsertions) { return new BloomFilterCommonTester<T>(hashId, numInsertions); }
@Test public void testFiltersWithLargeVectorSize() { int hashId = Hash.MURMUR_HASH; Filter filter = new BloomFilter(Integer.MAX_VALUE, hashFunctionNumber, hashId); BloomFilterCommonTester.of(hashId, numInsertions) .withFilterInstance(filter) .withTestCases(ImmutableSet.of( BloomFilterTestStrategy.WRITE_READ_STRATEGY )).test(); }
@SuppressWarnings("unchecked") public void test() { final ImmutableList<T> filtersList = builder.build(); final ImmutableSet<Integer> falsePositives = preAssertionHelper .falsePositives(hashType); for (T filter : filtersList) { for (BloomFilterTestStrategy strategy : filterTestStrateges) { strategy.getStrategy().assertWhat(filter, numInsertions, hashType, falsePositives); // create fresh instance for next test iteration filter = (T) getSymmetricFilter(filter.getClass(), numInsertions, hashType); } } }
private static Filter getSymmetricFilter(Class<?> filterClass, int numInsertions, int hashType) { int bitSetSize = optimalNumOfBits(numInsertions, 0.03); int hashFunctionNumber = 5; if (filterClass == BloomFilter.class) { return new BloomFilter(bitSetSize, hashFunctionNumber, hashType); } else if (filterClass == CountingBloomFilter.class) { return new CountingBloomFilter(bitSetSize, hashFunctionNumber, hashType); } else if (filterClass == RetouchedBloomFilter.class) { return new RetouchedBloomFilter(bitSetSize, hashFunctionNumber, hashType); } else if (filterClass == DynamicBloomFilter.class) { return new DynamicBloomFilter(bitSetSize, hashFunctionNumber, hashType, 3); } else { //fail fast assertFalse("unexpected filterClass", true); return null; } }
@SuppressWarnings("unchecked") public void test() { final ImmutableList<T> filtersList = builder.build(); final ImmutableSet<Integer> falsePositives = preAssertionHelper .falsePositives(hashType); for (T filter : filtersList) { for (BloomFilterTestStrategy strategy : filterTestStrateges) { strategy.getStrategy().assertWhat(filter, numInsertions, hashType, falsePositives); // create fresh instance for next test iteration filter = (T) getSymmetricFilter(filter.getClass(), numInsertions, hashType); } } }
private static Filter getSymmetricFilter(Class<?> filterClass, int numInsertions, int hashType) { int bitSetSize = optimalNumOfBits(numInsertions, 0.03); int hashFunctionNumber = 5; if (filterClass == BloomFilter.class) { return new BloomFilter(bitSetSize, hashFunctionNumber, hashType); } else if (filterClass == CountingBloomFilter.class) { return new CountingBloomFilter(bitSetSize, hashFunctionNumber, hashType); } else if (filterClass == RetouchedBloomFilter.class) { return new RetouchedBloomFilter(bitSetSize, hashFunctionNumber, hashType); } else if (filterClass == DynamicBloomFilter.class) { return new DynamicBloomFilter(bitSetSize, hashFunctionNumber, hashType, 3); } else { //fail fast assertFalse("unexpected filterClass", true); return null; } }
@Test public void testFiltersWithJenkinsHash() { int hashId = Hash.JENKINS_HASH; BloomFilterCommonTester.of(hashId, numInsertions) .withFilterInstance(new BloomFilter(bitSize, hashFunctionNumber, hashId)) .withFilterInstance(new RetouchedBloomFilter(bitSize, hashFunctionNumber, hashId)) .withTestCases(ImmutableSet.of(BloomFilterTestStrategy.KEY_TEST_STRATEGY, BloomFilterTestStrategy.ADD_KEYS_STRATEGY, BloomFilterTestStrategy.EXCEPTIONS_CHECK_STRATEGY, BloomFilterTestStrategy.ODD_EVEN_ABSENT_STRATEGY, BloomFilterTestStrategy.WRITE_READ_STRATEGY, BloomFilterTestStrategy.FILTER_OR_STRATEGY, BloomFilterTestStrategy.FILTER_AND_STRATEGY, BloomFilterTestStrategy.FILTER_XOR_STRATEGY)).test(); }
public static <T extends Filter> BloomFilterCommonTester<T> of(int hashId, int numInsertions) { return new BloomFilterCommonTester<T>(hashId, numInsertions); }
@Test public void testFiltersWithMurmurHash() { int hashId = Hash.MURMUR_HASH; BloomFilterCommonTester.of(hashId, numInsertions) .withFilterInstance(new BloomFilter(bitSize, hashFunctionNumber, hashId)) .withFilterInstance(new RetouchedBloomFilter(bitSize, hashFunctionNumber, hashId)) .withTestCases(ImmutableSet.of(BloomFilterTestStrategy.KEY_TEST_STRATEGY, BloomFilterTestStrategy.ADD_KEYS_STRATEGY, BloomFilterTestStrategy.EXCEPTIONS_CHECK_STRATEGY, BloomFilterTestStrategy.ODD_EVEN_ABSENT_STRATEGY, BloomFilterTestStrategy.WRITE_READ_STRATEGY, BloomFilterTestStrategy.FILTER_OR_STRATEGY, BloomFilterTestStrategy.FILTER_AND_STRATEGY, BloomFilterTestStrategy.FILTER_XOR_STRATEGY)).test(); }
@Test public void testFiltersWithMurmurHash() { int hashId = Hash.MURMUR_HASH; BloomFilterCommonTester.of(hashId, numInsertions) .withFilterInstance(new BloomFilter(bitSize, hashFunctionNumber, hashId)) .withFilterInstance(new RetouchedBloomFilter(bitSize, hashFunctionNumber, hashId)) .withTestCases(ImmutableSet.of(BloomFilterTestStrategy.KEY_TEST_STRATEGY, BloomFilterTestStrategy.ADD_KEYS_STRATEGY, BloomFilterTestStrategy.EXCEPTIONS_CHECK_STRATEGY, BloomFilterTestStrategy.ODD_EVEN_ABSENT_STRATEGY, BloomFilterTestStrategy.WRITE_READ_STRATEGY, BloomFilterTestStrategy.FILTER_OR_STRATEGY, BloomFilterTestStrategy.FILTER_AND_STRATEGY, BloomFilterTestStrategy.FILTER_XOR_STRATEGY)).test(); }
@Test public void testFiltersWithJenkinsHash() { int hashId = Hash.JENKINS_HASH; BloomFilterCommonTester.of(hashId, numInsertions) .withFilterInstance(new BloomFilter(bitSize, hashFunctionNumber, hashId)) .withFilterInstance(new RetouchedBloomFilter(bitSize, hashFunctionNumber, hashId)) .withTestCases(ImmutableSet.of(BloomFilterTestStrategy.KEY_TEST_STRATEGY, BloomFilterTestStrategy.ADD_KEYS_STRATEGY, BloomFilterTestStrategy.EXCEPTIONS_CHECK_STRATEGY, BloomFilterTestStrategy.ODD_EVEN_ABSENT_STRATEGY, BloomFilterTestStrategy.WRITE_READ_STRATEGY, BloomFilterTestStrategy.FILTER_OR_STRATEGY, BloomFilterTestStrategy.FILTER_AND_STRATEGY, BloomFilterTestStrategy.FILTER_XOR_STRATEGY)).test(); }
@Test public void testDynamicBloomFilter() { int hashId = Hash.JENKINS_HASH; Filter filter = new DynamicBloomFilter(bitSize, hashFunctionNumber, Hash.JENKINS_HASH, 3); BloomFilterCommonTester.of(hashId, numInsertions) .withFilterInstance(filter) .withTestCases(ImmutableSet.of(BloomFilterTestStrategy.KEY_TEST_STRATEGY, BloomFilterTestStrategy.ADD_KEYS_STRATEGY, BloomFilterTestStrategy.EXCEPTIONS_CHECK_STRATEGY, BloomFilterTestStrategy.WRITE_READ_STRATEGY, BloomFilterTestStrategy.ODD_EVEN_ABSENT_STRATEGY)) .test(); assertNotNull("testDynamicBloomFilter error ", filter.toString()); }
@Test public void testDynamicBloomFilter() { int hashId = Hash.JENKINS_HASH; Filter filter = new DynamicBloomFilter(bitSize, hashFunctionNumber, Hash.JENKINS_HASH, 3); BloomFilterCommonTester.of(hashId, numInsertions) .withFilterInstance(filter) .withTestCases(ImmutableSet.of(BloomFilterTestStrategy.KEY_TEST_STRATEGY, BloomFilterTestStrategy.ADD_KEYS_STRATEGY, BloomFilterTestStrategy.EXCEPTIONS_CHECK_STRATEGY, BloomFilterTestStrategy.WRITE_READ_STRATEGY, BloomFilterTestStrategy.ODD_EVEN_ABSENT_STRATEGY)) .test(); assertNotNull("testDynamicBloomFilter error ", filter.toString()); }
filter.approximateCount(key) == 0); BloomFilterCommonTester.of(hashId, numInsertions) .withFilterInstance(filter) .withTestCases(ImmutableSet.of(BloomFilterTestStrategy.KEY_TEST_STRATEGY, BloomFilterTestStrategy.ADD_KEYS_STRATEGY, BloomFilterTestStrategy.EXCEPTIONS_CHECK_STRATEGY, BloomFilterTestStrategy.WRITE_READ_STRATEGY, BloomFilterTestStrategy.FILTER_OR_STRATEGY, BloomFilterTestStrategy.FILTER_XOR_STRATEGY)).test();
filter.approximateCount(key) == 0); BloomFilterCommonTester.of(hashId, numInsertions) .withFilterInstance(filter) .withTestCases(ImmutableSet.of(BloomFilterTestStrategy.KEY_TEST_STRATEGY, BloomFilterTestStrategy.ADD_KEYS_STRATEGY, BloomFilterTestStrategy.EXCEPTIONS_CHECK_STRATEGY, BloomFilterTestStrategy.WRITE_READ_STRATEGY, BloomFilterTestStrategy.FILTER_OR_STRATEGY, BloomFilterTestStrategy.FILTER_XOR_STRATEGY)).test();