@Override public boolean hasSeen(LookupKey key) { return filter.mightContain(key); }
@Override @SuppressWarnings("unchecked") public Object apply(List<Object> args) { if (args.size() == 0) { return false; } BloomFilter<Object> filter = (BloomFilter)args.get(0); if (args.size() > 1) { Object arg = args.get(1); if (arg == null) { return false; } return filter.mightContain(arg); } return false; } }
@Test @SuppressWarnings("unchecked") public void testAdd() { BloomFilter result = (BloomFilter)run("BLOOM_ADD(BLOOM_INIT(), string, double, integer, map)", variables); for(Object val : variables.values()) { Assert.assertTrue(result.mightContain(val)); } Assert.assertTrue(result.mightContain(ImmutableMap.of("key1", "value1", "key2", "value2"))); }
@Test public void testBloomFilter() { final BloomFilter<Object> expected = new BloomFilter<>(new BloomFilter.DefaultSerializer<>(), 10000, 0.01); expected.add("foo"); expected.add("bar"); byte[] raw = SerDeUtils.toBytes(expected); BloomFilter<Object> actual = (BloomFilter) SerDeUtils.fromBytes(raw, Object.class); Assert.assertTrue(actual.mightContain("foo")); Assert.assertFalse(actual.mightContain("timothy")); assertEquals(expected, actual); }
@Test @SuppressWarnings("unchecked") public void testBloomFilter() { final BloomFilter<Object> expected = new BloomFilter<>(new BloomFilter.DefaultSerializer<>(), 10000, 0.01); expected.add("foo"); expected.add("bar"); byte[] raw = SerDeUtils.toBytes(expected); BloomFilter<Object> actual = (BloomFilter) SerDeUtils.fromBytes(raw, Object.class); Assert.assertTrue(actual.mightContain("foo")); Assert.assertFalse(actual.mightContain("timothy")); assertEquals(expected, actual); }
@Test @SuppressWarnings("unchecked") public void testMerge() { BloomFilter bloomString = (BloomFilter)run("BLOOM_ADD(BLOOM_INIT(), string)", variables); BloomFilter bloomDouble = (BloomFilter)run("BLOOM_ADD(BLOOM_INIT(), double)", variables); BloomFilter bloomInteger= (BloomFilter)run("BLOOM_ADD(BLOOM_INIT(), integer)", variables); BloomFilter bloomMap= (BloomFilter)run("BLOOM_ADD(BLOOM_INIT(), map)", variables); BloomFilter merged = (BloomFilter)run("BLOOM_MERGE([stringFilter, doubleFilter, integerFilter, mapFilter])" , ImmutableMap.of("stringFilter", bloomString ,"doubleFilter", bloomDouble ,"integerFilter", bloomInteger ,"mapFilter", bloomMap ) ); Assert.assertNotNull(merged); for(Object val : variables.values()) { Assert.assertTrue(merged.mightContain(val)); } }