diff --git a/src/main/java/com/sangupta/bloomfilter/AbstractBloomFilter.java b/src/main/java/com/sangupta/bloomfilter/AbstractBloomFilter.java index c6c6e2b..d437856 100644 --- a/src/main/java/com/sangupta/bloomfilter/AbstractBloomFilter.java +++ b/src/main/java/com/sangupta/bloomfilter/AbstractBloomFilter.java @@ -24,6 +24,8 @@ import java.io.Closeable; import java.io.IOException; import java.nio.charset.Charset; +import java.nio.charset.IllegalCharsetNameException; +import java.nio.charset.UnsupportedCharsetException; import java.util.Collection; import com.sangupta.bloomfilter.core.BitArray; @@ -391,8 +393,8 @@ public boolean contains(T value) { if(value == null) { return false; } - - return contains(value.toString().getBytes(this.currentCharset)); + + return contains(decomposedValue(value)); } /** diff --git a/src/test/java/com/sangupta/bloomfilter/TestBloomFilter.java b/src/test/java/com/sangupta/bloomfilter/TestBloomFilter.java index 2488e84..4192da1 100644 --- a/src/test/java/com/sangupta/bloomfilter/TestBloomFilter.java +++ b/src/test/java/com/sangupta/bloomfilter/TestBloomFilter.java @@ -21,10 +21,15 @@ package com.sangupta.bloomfilter; +import java.nio.charset.Charset; import java.util.ArrayList; import java.util.List; import java.util.UUID; +import com.sangupta.bloomfilter.core.BitArray; +import com.sangupta.bloomfilter.core.JavaBitSetArray; +import com.sangupta.bloomfilter.decompose.ByteSink; +import com.sangupta.bloomfilter.decompose.Decomposer; import junit.framework.Assert; import org.junit.Test; @@ -99,4 +104,23 @@ public void testDefaultFilter() { System.out.println("False positives found in two millions: " + fpp); } + @Test + public void testDelegatesFilter() { + String input = "hello"; + + BloomFilter filter = new AbstractBloomFilter(10 * MAX, FPP, new Decomposer() { + @Override + public void decompose(String object, ByteSink sink) { + sink.putBytes(new StringBuilder(object).reverse().toString().getBytes(Charset.defaultCharset())); + } + }) { + + @Override + protected BitArray createBitArray(int numBits) { + return new JavaBitSetArray(numBits); + } + }; + filter.add(input); + Assert.assertTrue(filter.contains(input)); + } } \ No newline at end of file