Claudenw commented on code in PR #258:
URL: 
https://github.com/apache/commons-collections/pull/258#discussion_r897746992


##########
src/test/java/org/apache/commons/collections4/bloomfilter/SetOperationsTest.java:
##########
@@ -17,338 +17,265 @@
 package org.apache.commons.collections4.bloomfilter;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.fail;
-
-import java.util.List;
-import java.util.Arrays;
-import org.apache.commons.collections4.bloomfilter.hasher.HashFunctionIdentity;
-import org.apache.commons.collections4.bloomfilter.hasher.Hasher;
-import org.apache.commons.collections4.bloomfilter.hasher.Shape;
-import org.apache.commons.collections4.bloomfilter.hasher.StaticHasher;
+
 import org.junit.jupiter.api.Test;
 
 /**
  * Test {@link SetOperations}.
  */
 public class SetOperationsTest {
 
-    private final HashFunctionIdentity testFunction = new 
HashFunctionIdentity() {
-
-        @Override
-        public String getName() {
-            return "Test Function";
-        }
-
-        @Override
-        public ProcessType getProcessType() {
-            return ProcessType.CYCLIC;
-        }
-
-        @Override
-        public String getProvider() {
-            return "Apache Commons Collection Tests";
-        }
-
-        @Override
-        public long getSignature() {
-            return 0;
-        }
-
-        @Override
-        public Signedness getSignedness() {
-            return Signedness.SIGNED;
-        }
-    };
-
-    private final Shape shape = new Shape(testFunction, 3, 72, 17);
-
-    @Test
-    public void testDifferentShapesThrows() {
-        final List<Integer> lst = Arrays.asList(1, 2);
-        final Hasher hasher = new StaticHasher(lst.iterator(), shape);
-        final BloomFilter filter1 = new HasherBloomFilter(hasher, shape);
-
-        final Shape shape2 = new Shape(testFunction, 3, 72, 18);
-        final List<Integer> lst2 = Arrays.asList(2, 3);
-        final Hasher hasher2 = new StaticHasher(lst2.iterator(), shape2);
-        final BloomFilter filter2 = new HasherBloomFilter(hasher2, shape2);
-
-        try {
-            SetOperations.cosineDistance(filter1, filter2);
-            fail("Expected an IllegalArgumentException");
-        } catch (final IllegalArgumentException expected) {
-            // Ignore
-        }
-    }
+    protected final SimpleHasher from1 = new SimpleHasher(1, 1);
+    protected final long from1Value = 0x3FFFEL;
+    protected final SimpleHasher from11 = new SimpleHasher(11, 1);
+    protected final long from11Value = 0xFFFF800L;
+    protected final HasherCollection bigHasher = new HasherCollection(from1, 
from11);
+    protected final long bigHashValue = 0xFFFFFFEL;
+    private final Shape shape = Shape.fromKM(17, 72);
 
     /**
      * Tests that the Cosine similarity is correctly calculated.
      */
     @Test
-    public final void cosineDistanceTest() {
-        List<Integer> lst = Arrays.asList(1, 2);
-        Hasher hasher = new StaticHasher(lst.iterator(), shape);
-        BloomFilter filter1 = new HasherBloomFilter(hasher, shape);
-
-        List<Integer> lst2 = Arrays.asList(2, 3);
-        Hasher hasher2 = new StaticHasher(lst2.iterator(), shape);
-        BloomFilter filter2 = new HasherBloomFilter(hasher2, shape);
-
-        assertEquals(0.5, SetOperations.cosineDistance(filter1, filter2), 
0.0001);
-        assertEquals(0.5, SetOperations.cosineDistance(filter2, filter1), 
0.0001);
-
-        lst = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 
16, 17);
-        hasher = new StaticHasher(lst.iterator(), shape);
-        filter1 = new HasherBloomFilter(hasher, shape);
-
-        lst2 = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 
15, 16, 17);
-        hasher2 = new StaticHasher(lst2.iterator(), shape);
-        filter2 = new HasherBloomFilter(hasher2, shape);
-
-        assertEquals(0.0, SetOperations.cosineDistance(filter1, filter2), 
0.0001);
-        assertEquals(0.0, SetOperations.cosineDistance(filter2, filter1), 
0.0001);
-
-        lst2 = Arrays.asList(10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 
22, 23, 24, 25);
-        hasher2 = new StaticHasher(lst2.iterator(), shape);
-        filter2 = new HasherBloomFilter(hasher2, shape);
-
-        assertEquals(0.514928749927334, SetOperations.cosineDistance(filter1, 
filter2), 0.000000000000001);
-        assertEquals(0.514928749927334, SetOperations.cosineDistance(filter2, 
filter1), 0.000000000000001);
-    }
-
-    /**
-     * Tests that the Cosine distance is correctly calculated when one or
-     * both filters are empty
-     */
-    @Test
-    public final void cosineDistanceTest_NoValues() {
-        final BloomFilter filter1 = new HasherBloomFilter(shape);
-        final BloomFilter filter2 = new HasherBloomFilter(shape);
-        // build a filter
-        final List<Integer> lst = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 
11, 12, 13, 14, 15, 16, 17);
-        final Hasher hasher = new StaticHasher(lst.iterator(), shape);
-        final BloomFilter filter3 = new HasherBloomFilter(hasher, shape);
-
-        assertEquals(1.0, SetOperations.cosineDistance(filter1, filter2), 
0.0001);
-        assertEquals(1.0, SetOperations.cosineDistance(filter2, filter1), 
0.0001);
-        assertEquals(1.0, SetOperations.cosineDistance(filter1, filter3), 
0.0001);
-        assertEquals(1.0, SetOperations.cosineDistance(filter3, filter1), 
0.0001);
+    public final void testCosineDistance() {
+
+        BloomFilter filter1 = new SimpleBloomFilter(shape, from1);
+        BloomFilter filter2 = new SimpleBloomFilter(shape, from1);
+
+        int dotProduct = /* [1..17] & [1..17] = [1..17] = */ 17;
+        int cardinalityA = 17;
+        int cardinalityB = 17;
+        double expected = /* 1 - (dotProduct/Sqrt( cardinalityA * cardinalityB 
)) = */ 0;
+        assertEquals(expected, SetOperations.cosineDistance(filter1, filter2));
+        assertEquals(expected, SetOperations.cosineDistance(filter2, filter1));
+
+        Shape shape2 = Shape.fromKM(2, 72);
+        filter1 = new SimpleBloomFilter(shape2, from1);
+        filter2 = new SimpleBloomFilter(shape2, new SimpleHasher(2, 1));
+
+        dotProduct = /* [1,2] & [2,3] = [2] = */ 1;
+        cardinalityA = 2;
+        cardinalityB = 2;
+        expected = 1 - (dotProduct / Math.sqrt(cardinalityA * cardinalityB));
+        assertEquals(expected, SetOperations.cosineDistance(filter1, filter2));
+        assertEquals(expected, SetOperations.cosineDistance(filter2, filter1));
+
+        filter1 = new SimpleBloomFilter(shape, from1);
+        filter2 = new SimpleBloomFilter(shape, from11);
+        dotProduct = /* [1..17] & [11..27] = [] = */ 7;
+        cardinalityA = 17;
+        cardinalityB = 17;
+        expected = 1 - (dotProduct / Math.sqrt(cardinalityA * cardinalityB));
+        assertEquals(expected, SetOperations.cosineDistance(filter1, filter2));
+        assertEquals(expected, SetOperations.cosineDistance(filter2, filter1));
+
+        // test with no values
+        filter1 = new SimpleBloomFilter(shape, from1);
+        filter2 = new SimpleBloomFilter(shape);
+        BloomFilter filter3 = new SimpleBloomFilter(shape);
+
+        dotProduct = /* [1,2] & [] = [] = */ 0;
+        cardinalityA = 2;
+        cardinalityB = 0;
+        expected = /* 1 - (dotProduct/Math.sqrt( cardinalityA * cardinalityB 
)) = */ 1.0;
+        assertEquals(expected, SetOperations.cosineDistance(filter1, filter2));
+        assertEquals(expected, SetOperations.cosineDistance(filter2, filter1));
+
+        dotProduct = /* [] & [] = [] = */ 0;
+        cardinalityA = 0;
+        cardinalityB = 0;
+        expected = /* 1 - (dotProduct/Math.sqrt( cardinalityA * cardinalityB 
)) = */ 1.0;
+        assertEquals(1.0, SetOperations.cosineDistance(filter2, filter3));
+        assertEquals(1.0, SetOperations.cosineDistance(filter3, filter2));
     }
 
     /**
      * Tests that the Cosine similarity is correctly calculated.
      */
     @Test
-    public final void cosineSimilarityTest() {
-        final List<Integer> lst = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 
11, 12, 13, 14, 15, 16, 17);
-        final Hasher hasher = new StaticHasher(lst.iterator(), shape);
-        final BloomFilter filter1 = new HasherBloomFilter(hasher, shape);
-
-        List<Integer> lst2 = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 
12, 13, 14, 15, 16, 17);
-        Hasher hasher2 = new StaticHasher(lst2.iterator(), shape);
-        BloomFilter filter2 = new HasherBloomFilter(hasher2, shape);
-
-        assertEquals(1.0, SetOperations.cosineSimilarity(filter1, filter2), 
0.0001);
-        assertEquals(1.0, SetOperations.cosineSimilarity(filter2, filter1), 
0.0001);
-
-        lst2 = Arrays.asList(10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 
22, 23, 24, 25);
-        hasher2 = new StaticHasher(lst2.iterator(), shape);
-        filter2 = new HasherBloomFilter(hasher2, shape);
-
-        assertEquals(0.485071250072666, 
SetOperations.cosineSimilarity(filter1, filter2), 0.000000000000001);
-        assertEquals(0.485071250072666, 
SetOperations.cosineSimilarity(filter2, filter1), 0.000000000000001);
-    }
-
-    /**
-     * Tests that the Cosine similarity is correctly calculated when one or
-     * both filters are empty
-     */
-    @Test
-    public final void cosineSimilarityTest_NoValues() {
-        final BloomFilter filter1 = new HasherBloomFilter(shape);
-        final BloomFilter filter2 = new HasherBloomFilter(shape);
+    public final void testCosineSimilarity() {
+        BloomFilter filter1 = new SimpleBloomFilter(shape, from1);
+        BloomFilter filter2 = new SimpleBloomFilter(shape, from1);
+
+        int dotProduct = /* [1..17] & [1..17] = [1..17] = */ 17;
+        int cardinalityA = 17;
+        int cardinalityB = 17;
+        double expected = /* dotProduct/Sqrt( cardinalityA * cardinalityB ) = 
*/ 1.0;
+        assertEquals(expected, SetOperations.cosineSimilarity(filter1, 
filter2));
+        assertEquals(expected, SetOperations.cosineSimilarity(filter2, 
filter1));
+
+        dotProduct = /* [1..17] & [11..27] = [11..17] = */ 7;
+        cardinalityA = 17;
+        cardinalityB = 17;
+        expected = dotProduct / Math.sqrt(cardinalityA * cardinalityB);
+        filter2 = new SimpleBloomFilter(shape, from11);
+        assertEquals(expected, SetOperations.cosineSimilarity(filter1, 
filter2));
+        assertEquals(expected, SetOperations.cosineSimilarity(filter2, 
filter1));
+
+        // test no values
+        filter1 = new SimpleBloomFilter(shape);
+        filter2 = new SimpleBloomFilter(shape);
         // build a filter
-        final List<Integer> lst = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 
11, 12, 13, 14, 15, 16, 17);
-        final Hasher hasher = new StaticHasher(lst.iterator(), shape);
-        final BloomFilter filter3 = new HasherBloomFilter(hasher, shape);
-
-        assertEquals(0.0, SetOperations.cosineSimilarity(filter1, filter2), 
0.0001);
-        assertEquals(0.0, SetOperations.cosineSimilarity(filter2, filter1), 
0.0001);
-        assertEquals(0.0, SetOperations.cosineSimilarity(filter1, filter3), 
0.0001);
-        assertEquals(0.0, SetOperations.cosineSimilarity(filter3, filter1), 
0.0001);
-    }
+        BloomFilter filter3 = new SimpleBloomFilter(shape, from1);
 
-    /**
-     * Tests that the intersection size estimate is correctly calculated.
-     */
-    @Test
-    public final void estimateIntersectionSizeTest() {
-        // build a filter
-        List<Integer> lst = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 
12, 13, 14, 15, 16, 17);
-        final Hasher hasher = new StaticHasher(lst.iterator(), shape);
-        final BloomFilter filter1 = new HasherBloomFilter(hasher, shape);
-
-        lst = Arrays.asList(8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 
21, 22, 23, 24, 25, 26, 27, 28, 29, 30,
-            31, 32, 33, 34, 35, 36, 37, 38, 39, 40);
-        final Hasher hasher2 = new StaticHasher(lst.iterator(), shape);
-        final BloomFilter filter2 = new HasherBloomFilter(hasher2, shape);
-
-        final long estimate = SetOperations.estimateIntersectionSize(filter1, 
filter2);
-        assertEquals(1, estimate);
+        assertEquals(0.0, SetOperations.cosineSimilarity(filter1, filter2));
+        assertEquals(0.0, SetOperations.cosineSimilarity(filter2, filter1));
+        assertEquals(0.0, SetOperations.cosineSimilarity(filter1, filter3));
+        assertEquals(0.0, SetOperations.cosineSimilarity(filter3, filter1));
     }
 
     /**
-     * Tests that the size estimate is correctly calculated.
+     * Tests that the Hamming distance is correctly calculated.
      */
     @Test
-    public final void estimateSizeTest() {
-        // build a filter
-        List<Integer> lst = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 
12, 13, 14, 15, 16, 17);
-        Hasher hasher = new StaticHasher(lst.iterator(), shape);
-        BloomFilter filter1 = new HasherBloomFilter(hasher, shape);
-        assertEquals(1, SetOperations.estimateSize(filter1));
-
-        // the data provided above do not generate an estimate that is 
equivalent to the
-        // actual.
-        lst = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 
16, 17, 18, 19, 20);
-        hasher = new StaticHasher(lst.iterator(), shape);
-        filter1 = new HasherBloomFilter(hasher, shape);
-        assertEquals(1, SetOperations.estimateSize(filter1));
-
-        lst = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 
16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
-            26, 27, 28, 29, 30, 31, 32, 33);
-        final Hasher hasher2 = new StaticHasher(lst.iterator(), shape);
-        final BloomFilter filter2 = new HasherBloomFilter(hasher2, shape);
-
-        assertEquals(3, SetOperations.estimateSize(filter2));
+    public final void testHammingDistance() {
+        final BloomFilter filter1 = new SimpleBloomFilter(shape, from1);
+        BloomFilter filter2 = new SimpleBloomFilter(shape, from1);
+
+        int hammingDistance = /* [1..17] ^ [1..17] = [] = */ 0;
+        assertEquals(hammingDistance, SetOperations.hammingDistance(filter1, 
filter2));
+        assertEquals(hammingDistance, SetOperations.hammingDistance(filter2, 
filter1));
+
+        filter2 = new SimpleBloomFilter(shape, from11);
+        hammingDistance = /* [1..17] ^ [11..27] = [1..10][17-27] = */ 20;
+        assertEquals(hammingDistance, SetOperations.hammingDistance(filter1, 
filter2));
+        assertEquals(hammingDistance, SetOperations.hammingDistance(filter2, 
filter1));
     }
 
     /**
-     * Tests that the union size estimate is correctly calculated.
+     * Tests that the Jaccard distance is correctly calculated.
      */
     @Test
-    public final void estimateUnionSizeTest() {
-        // build a filter
-        List<Integer> lst = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 
12, 13, 14, 15, 16, 17);
-        final Hasher hasher = new StaticHasher(lst.iterator(), shape);
-        final BloomFilter filter1 = new HasherBloomFilter(hasher, shape);
-
-        lst = Arrays.asList(17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 
29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39,
-            40);
-        final Hasher hasher2 = new StaticHasher(lst.iterator(), shape);
-        final BloomFilter filter2 = new HasherBloomFilter(hasher2, shape);
-
-        final long estimate = SetOperations.estimateUnionSize(filter1, 
filter2);
-        assertEquals(3, estimate);
+    public final void testJaccardDistance() {
+        BloomFilter filter1 = new SimpleBloomFilter(shape, from1);
+        BloomFilter filter2 = new SimpleBloomFilter(shape, from1);
+
+        // 1 - jaccardSimilarity -- see jaccardSimilarityTest
+
+        assertEquals(0.0, SetOperations.jaccardDistance(filter1, filter2));
+        assertEquals(0.0, SetOperations.jaccardDistance(filter2, filter1));
+
+        filter2 = new SimpleBloomFilter(shape, from11);
+        double intersection = /* [1..17] & [11..27] = [11..17] = */ 7.0;
+        int union = /* [1..17] | [11..27] = [1..27] = */ 27;
+        assertEquals(1 - (intersection / union), 
SetOperations.jaccardDistance(filter1, filter2));
+        assertEquals(1 - (intersection / union), 
SetOperations.jaccardDistance(filter2, filter1));
+
+        // test no values
+        filter1 = new SimpleBloomFilter(shape);
+        filter2 = new SimpleBloomFilter(shape);
+        BloomFilter filter3 = new SimpleBloomFilter(shape, from1);
+
+        // 1 - jaccardSimilarity -- see jaccardSimilarityTest
+        assertEquals(1.0, SetOperations.jaccardDistance(filter1, filter2));
+        assertEquals(1.0, SetOperations.jaccardDistance(filter2, filter1));
+        assertEquals(1.0, SetOperations.jaccardDistance(filter1, filter3));
+        assertEquals(1.0, SetOperations.jaccardDistance(filter3, filter1));
     }
 
     /**
-     * Tests that the Hamming distance is correctly calculated.
+     * Tests that the Jaccard similarity is correctly calculated.
      */
     @Test
-    public final void hammingDistanceTest() {
-        final List<Integer> lst = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 
11, 12, 13, 14, 15, 16, 17);
-        final Hasher hasher = new StaticHasher(lst.iterator(), shape);
-        final BloomFilter filter1 = new HasherBloomFilter(hasher, shape);
-
-        List<Integer> lst2 = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 
12, 13, 14, 15, 16, 17);
-        Hasher hasher2 = new StaticHasher(lst2.iterator(), shape);
-        BloomFilter filter2 = new HasherBloomFilter(hasher2, shape);
-
-        assertEquals(0, SetOperations.hammingDistance(filter1, filter2));
-        assertEquals(0, SetOperations.hammingDistance(filter2, filter1));
-
-        lst2 = Arrays.asList(10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 
22, 23, 24, 25);
-        hasher2 = new StaticHasher(lst2.iterator(), shape);
-        filter2 = new HasherBloomFilter(hasher2, shape);
-
-        assertEquals(17, SetOperations.hammingDistance(filter1, filter2));
-        assertEquals(17, SetOperations.hammingDistance(filter2, filter1));
+    public final void testJaccardSimilarity() {
+        BloomFilter filter1 = new SimpleBloomFilter(shape, from1);
+        BloomFilter filter2 = new SimpleBloomFilter(shape, from1);
+
+        double intersection = /* [1..17] & [1..17] = [1..17] = */ 17.0;
+        int union = /* [1..17] | [1..17] = [1..17] = */ 17;
+
+        assertEquals(intersection / union, 
SetOperations.jaccardSimilarity(filter1, filter2));
+        assertEquals(intersection / union, 
SetOperations.jaccardSimilarity(filter2, filter1));
+
+        filter2 = new SimpleBloomFilter(shape, from11);
+        intersection = /* [1..17] & [11..27] = [11..17] = */ 7.0;
+        union = /* [1..17] | [11..27] = [1..27] = */ 27;
+        assertEquals(intersection / union, 
SetOperations.jaccardSimilarity(filter1, filter2));
+        assertEquals(intersection / union, 
SetOperations.jaccardSimilarity(filter2, filter1));
+
+        // test no values
+        filter1 = new SimpleBloomFilter(shape);
+        filter2 = new SimpleBloomFilter(shape);
+        BloomFilter filter3 = new SimpleBloomFilter(shape, from1);
+
+        assertEquals(0.0, SetOperations.jaccardSimilarity(filter1, filter2));
+        assertEquals(0.0, SetOperations.jaccardSimilarity(filter2, filter1));
+
+        intersection = /* [] & [1..17] = [] = */ 0.0;
+        union = /* [] | [1..17] = [] = */ 17;
+        assertEquals(intersection / union, 
SetOperations.jaccardSimilarity(filter1, filter3));
+        assertEquals(intersection / union, 
SetOperations.jaccardSimilarity(filter3, filter1));
     }
 
-    /**
-     * Tests that the Jaccard distance is correctly calculated.
-     */
     @Test
-    public final void jaccardDistanceTest() {
-        final List<Integer> lst = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 
11, 12, 13, 14, 15, 16, 17);
-        final Hasher hasher = new StaticHasher(lst.iterator(), shape);
-        final BloomFilter filter1 = new HasherBloomFilter(hasher, shape);
-
-        List<Integer> lst2 = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 
12, 13, 14, 15, 16, 17);
-        Hasher hasher2 = new StaticHasher(lst2.iterator(), shape);
-        BloomFilter filter2 = new HasherBloomFilter(hasher2, shape);
-
-        assertEquals(1.0, SetOperations.jaccardDistance(filter1, filter2), 
0.0001);
-        assertEquals(1.0, SetOperations.jaccardDistance(filter2, filter1), 
0.0001);
-
-        lst2 = Arrays.asList(10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 
22, 23, 24, 25);
-        hasher2 = new StaticHasher(lst2.iterator(), shape);
-        filter2 = new HasherBloomFilter(hasher2, shape);
-
-        assertEquals(0.32, SetOperations.jaccardDistance(filter1, filter2), 
0.001);
-        assertEquals(0.32, SetOperations.jaccardDistance(filter2, filter1), 
0.001);
+    public final void testOrCardinality() {
+        Shape shape = Shape.fromKM(3, 128);
+        SparseBloomFilter filter1 = new SparseBloomFilter(shape, 
IndexProducer.fromIndexArray(new int[] { 1, 63, 64 }));
+        SparseBloomFilter filter2 = new SparseBloomFilter(shape, 
IndexProducer.fromIndexArray(new int[] { 5, 64, 69 }));
+        assertEquals(5, SetOperations.orCardinality(filter1, filter2));
+        assertEquals(5, SetOperations.orCardinality(filter2, filter1));
+
+        filter1 = new SparseBloomFilter(shape, 
IndexProducer.fromIndexArray(new int[] { 1, 63 }));
+        filter2 = new SparseBloomFilter(shape, 
IndexProducer.fromIndexArray(new int[] { 5, 64, 69 }));
+        assertEquals(5, SetOperations.orCardinality(filter1, filter2));
+        assertEquals(5, SetOperations.orCardinality(filter2, filter1));
+
+        filter1 = new SparseBloomFilter(shape, 
IndexProducer.fromIndexArray(new int[] { 5, 63 }));
+        filter2 = new SparseBloomFilter(shape, 
IndexProducer.fromIndexArray(new int[] { 5, 64, 69 }));
+        assertEquals(4, SetOperations.orCardinality(filter1, filter2));
+        assertEquals(4, SetOperations.orCardinality(filter2, filter1));

Review Comment:
   created https://issues.apache.org/jira/browse/COLLECTIONS-827 to track.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to