diff --git a/src/changes/changes.xml b/src/changes/changes.xml index 45f5e800db..766d6ebbd2 100644 --- a/src/changes/changes.xml +++ b/src/changes/changes.xml @@ -36,6 +36,7 @@ Increase test coverage for ListUtils #517. Use the Junit (Jupiter) API #518. + LayerManager.Builder implements Supplier. Update bloom filter documentation #508. Bump commons-codec:commons-codec from 1.17.0 to 1.17.1 #514. diff --git a/src/main/java/org/apache/commons/collections4/bloomfilter/LayerManager.java b/src/main/java/org/apache/commons/collections4/bloomfilter/LayerManager.java index 353c1f139e..110a514d1a 100644 --- a/src/main/java/org/apache/commons/collections4/bloomfilter/LayerManager.java +++ b/src/main/java/org/apache/commons/collections4/bloomfilter/LayerManager.java @@ -56,11 +56,12 @@ public class LayerManager implements BloomFilterExtractor { /** - * Builder to create Layer Manager. + * Builds new instances of {@link LayerManager}. * * @param the {@link BloomFilter} type. */ - public static class Builder { + public static class Builder implements Supplier> { + private Predicate> extendCheck; private Supplier supplier; private Consumer> cleanup; @@ -75,7 +76,8 @@ private Builder() { * * @return a new LayerManager. */ - public LayerManager build() { + @Override + public LayerManager get() { return new LayerManager<>(supplier, extendCheck, cleanup, true); } @@ -97,7 +99,7 @@ public Builder setCleanup(final Consumer> cleanup) { * * @param extendCheck The predicate to determine if a new target should be * created. - * @return this for chaining. + * @return {@code this} instance. */ public Builder setExtendCheck(final Predicate> extendCheck) { this.extendCheck = extendCheck; @@ -109,7 +111,7 @@ public Builder setExtendCheck(final Predicate> extendCheck) { * the supplier provides the instance of the Bloom filter. * * @param supplier The supplier of new Bloom filter instances. - * @return this for chaining. + * @return {@code this} instance. */ public Builder setSupplier(final Supplier supplier) { this.supplier = supplier; diff --git a/src/test/java/org/apache/commons/collections4/bloomfilter/BloomFilteExtractorFromLayeredBloomFilterTest.java b/src/test/java/org/apache/commons/collections4/bloomfilter/BloomFilteExtractorFromLayeredBloomFilterTest.java index f66522d29d..8f4abaa4be 100644 --- a/src/test/java/org/apache/commons/collections4/bloomfilter/BloomFilteExtractorFromLayeredBloomFilterTest.java +++ b/src/test/java/org/apache/commons/collections4/bloomfilter/BloomFilteExtractorFromLayeredBloomFilterTest.java @@ -22,7 +22,7 @@ public class BloomFilteExtractorFromLayeredBloomFilterTest extends AbstractBloom protected BloomFilterExtractor createUnderTest(final BloomFilter... filters) { final Shape shape = filters[0].getShape(); final LayerManager layerManager = LayerManager.builder().setSupplier(() -> new SimpleBloomFilter(shape)) - .setExtendCheck(LayerManager.ExtendCheck.advanceOnPopulated()).setCleanup(LayerManager.Cleanup.noCleanup()).build(); + .setExtendCheck(LayerManager.ExtendCheck.advanceOnPopulated()).setCleanup(LayerManager.Cleanup.noCleanup()).get(); final LayeredBloomFilter underTest = new LayeredBloomFilter(shape, layerManager); for (final BloomFilter bf : filters) { underTest.merge(bf); diff --git a/src/test/java/org/apache/commons/collections4/bloomfilter/LayerManagerTest.java b/src/test/java/org/apache/commons/collections4/bloomfilter/LayerManagerTest.java index 5f03770c62..9aa60ae1c0 100644 --- a/src/test/java/org/apache/commons/collections4/bloomfilter/LayerManagerTest.java +++ b/src/test/java/org/apache/commons/collections4/bloomfilter/LayerManagerTest.java @@ -46,7 +46,7 @@ public class LayerManagerTest { @ValueSource(ints = {4, 10, 2, 1}) public void testAdvanceOnCount(final int breakAt) { final Predicate> underTest = LayerManager.ExtendCheck.advanceOnCount(breakAt); - final LayerManager layerManager = testingBuilder().build(); + final LayerManager layerManager = testingBuilder().get(); for (int i = 0; i < breakAt - 1; i++) { assertFalse(underTest.test(layerManager), "at " + i); layerManager.getTarget().merge(TestingHashers.FROM1); @@ -63,7 +63,7 @@ public void testAdvanceOnCountInvalidArguments() { @Test public void testAdvanceOnPopulated() { final Predicate> underTest = LayerManager.ExtendCheck.advanceOnPopulated(); - final LayerManager layerManager = testingBuilder().build(); + final LayerManager layerManager = testingBuilder().get(); assertFalse(underTest.test(layerManager)); layerManager.getTarget().merge(TestingHashers.FROM1); assertTrue(underTest.test(layerManager)); @@ -74,7 +74,7 @@ public void testAdvanceOnSaturation() { final double maxN = shape.estimateMaxN(); int hashStart = 0; final Predicate> underTest = LayerManager.ExtendCheck.advanceOnSaturation(maxN); - final LayerManager layerManager = testingBuilder().build(); + final LayerManager layerManager = testingBuilder().get(); while (layerManager.getTarget().getShape().estimateN(layerManager.getTarget().cardinality()) < maxN) { assertFalse(underTest.test(layerManager)); layerManager.getTarget().merge(new IncrementingHasher(hashStart, shape.getNumberOfHashFunctions())); @@ -88,24 +88,24 @@ public void testAdvanceOnSaturation() { @Test public void testBuilder() { final LayerManager.Builder underTest = LayerManager.builder(); - NullPointerException npe = assertThrows(NullPointerException.class, underTest::build); + NullPointerException npe = assertThrows(NullPointerException.class, underTest::get); assertTrue(npe.getMessage().contains("filterSupplier")); underTest.setSupplier(() -> null).setCleanup(null); - npe = assertThrows(NullPointerException.class, underTest::build); + npe = assertThrows(NullPointerException.class, underTest::get); assertTrue(npe.getMessage().contains("filterCleanup")); underTest.setCleanup(x -> { }).setExtendCheck(null); - npe = assertThrows(NullPointerException.class, underTest::build); + npe = assertThrows(NullPointerException.class, underTest::get); assertTrue(npe.getMessage().contains("extendCheck")); - npe = assertThrows(NullPointerException.class, () -> LayerManager.builder().setSupplier(() -> null).build()); + npe = assertThrows(NullPointerException.class, () -> LayerManager.builder().setSupplier(() -> null).get()); assertTrue(npe.getMessage().contains("filterSupplier.get() returned null.")); } @Test public void testClear() { - final LayerManager underTest = LayerManager.builder().setSupplier(() -> new SimpleBloomFilter(shape)).build(); + final LayerManager underTest = LayerManager.builder().setSupplier(() -> new SimpleBloomFilter(shape)).get(); underTest.getTarget().merge(TestingHashers.randomHasher()); underTest.next(); underTest.getTarget().merge(TestingHashers.randomHasher()); @@ -119,7 +119,7 @@ public void testClear() { @Test public void testCopy() { - final LayerManager underTest = LayerManager.builder().setSupplier(() -> new SimpleBloomFilter(shape)).build(); + final LayerManager underTest = LayerManager.builder().setSupplier(() -> new SimpleBloomFilter(shape)).get(); underTest.getTarget().merge(TestingHashers.randomHasher()); underTest.next(); underTest.getTarget().merge(TestingHashers.randomHasher()); @@ -140,7 +140,7 @@ public void testCopy() { @Test public void testForEachBloomFilter() { final LayerManager underTest = LayerManager.builder().setSupplier(() -> new SimpleBloomFilter(shape)) - .setExtendCheck(LayerManager.ExtendCheck.advanceOnPopulated()).build(); + .setExtendCheck(LayerManager.ExtendCheck.advanceOnPopulated()).get(); final List lst = new ArrayList<>(); for (int i = 0; i < 10; i++) { @@ -161,7 +161,7 @@ public void testForEachBloomFilter() { @Test public void testGet() { final SimpleBloomFilter f = new SimpleBloomFilter(shape); - final LayerManager underTest = LayerManager.builder().setSupplier(() -> f).build(); + final LayerManager underTest = LayerManager.builder().setSupplier(() -> f).get(); assertEquals(1, underTest.getDepth()); assertSame(f, underTest.get(0)); assertThrows(NoSuchElementException.class, () -> underTest.get(-1)); @@ -175,7 +175,7 @@ private LayerManager.Builder testingBuilder() { @Test public void testNeverAdvance() { final Predicate> underTest = LayerManager.ExtendCheck.neverAdvance(); - final LayerManager layerManager = testingBuilder().build(); + final LayerManager layerManager = testingBuilder().get(); assertFalse(underTest.test(layerManager)); for (int i = 0; i < 10; i++) { layerManager.getTarget().merge(TestingHashers.randomHasher()); @@ -185,7 +185,7 @@ public void testNeverAdvance() { @Test public void testNextAndGetDepth() { - final LayerManager underTest = LayerManager.builder().setSupplier(() -> new SimpleBloomFilter(shape)).build(); + final LayerManager underTest = LayerManager.builder().setSupplier(() -> new SimpleBloomFilter(shape)).get(); assertEquals(1, underTest.getDepth()); underTest.getTarget().merge(TestingHashers.randomHasher()); assertEquals(1, underTest.getDepth()); @@ -281,7 +281,7 @@ public void testTarget() { return true; }).setCleanup(ll -> { cleanupCalled[0] = true; - }).build(); + }).get(); assertFalse(extendCheckCalled[0]); assertFalse(cleanupCalled[0]); assertEquals(1, supplierCount[0]); diff --git a/src/test/java/org/apache/commons/collections4/bloomfilter/LayeredBloomFilterTest.java b/src/test/java/org/apache/commons/collections4/bloomfilter/LayeredBloomFilterTest.java index ac698bba0d..3610a4317a 100644 --- a/src/test/java/org/apache/commons/collections4/bloomfilter/LayeredBloomFilterTest.java +++ b/src/test/java/org/apache/commons/collections4/bloomfilter/LayeredBloomFilterTest.java @@ -143,7 +143,7 @@ static LayeredBloomFilter createTimedLayeredFilter(final .setCleanup(cleanup) .setExtendCheck(new AdvanceOnTimeQuanta(quanta) .or(LayerManager.ExtendCheck.advanceOnSaturation(shape.estimateMaxN()))) - .build(); + .get(); return new LayeredBloomFilter<>(shape, layerManager); } @@ -174,7 +174,7 @@ public static LayeredBloomFilter fixed(final Shape sh final LayerManager.Builder builder = LayerManager.builder(); builder.setExtendCheck(LayerManager.ExtendCheck.advanceOnPopulated()) .setCleanup(LayerManager.Cleanup.onMaxSize(maxDepth)).setSupplier(supplier); - return new LayeredBloomFilter<>(shape, builder.build()); + return new LayeredBloomFilter<>(shape, builder.get()); } // instrumentation to record timestamps in dbgInstrument list @@ -221,7 +221,7 @@ private LayeredBloomFilter setupFindTest() { @Test public void testCardinalityAndIsEmpty() { final LayerManager layerManager = LayerManager.builder().setExtendCheck(ExtendCheck.neverAdvance()) - .setSupplier(() -> new SimpleBloomFilter(getTestShape())).build(); + .setSupplier(() -> new SimpleBloomFilter(getTestShape())).get(); testCardinalityAndIsEmpty(new LayeredBloomFilter<>(getTestShape(), layerManager)); } @@ -233,7 +233,7 @@ public void testCleanup() { final LayerManager layerManager = LayerManager.builder() .setSupplier(() -> new NumberedBloomFilter(getTestShape(), 3, sequence[0]++)) .setExtendCheck(ExtendCheck.neverAdvance()) - .setCleanup(ll -> ll.removeIf( f -> (((NumberedBloomFilter) f).value-- == 0))).build(); + .setCleanup(ll -> ll.removeIf( f -> (((NumberedBloomFilter) f).value-- == 0))).get(); final LayeredBloomFilter underTest = new LayeredBloomFilter(getTestShape(), layerManager ); assertEquals(1, underTest.getDepth()); underTest.merge(TestingHashers.randomHasher()); @@ -385,7 +385,7 @@ public void testMultipleFilters() { @Test public final void testNext() { final LayerManager layerManager = LayerManager.builder().setSupplier(() -> new SimpleBloomFilter(getTestShape())) - .build(); + .get(); final LayeredBloomFilter filter = new LayeredBloomFilter<>(getTestShape(), layerManager); filter.merge(TestingHashers.FROM1);