The WrappedBloomFilterTest currently says [0][1] that a copy of a WrappedBloomFilter is not a WrappedBloomFilter, which does not make sense to me as non-SME.
Should the test be adjusted? It looks like the test is written in a contrived way due to WrappedBloomFilter being abstract. I would make more sense to me to have private static WrappedBloomFilter in the test and use it, like this: private static class Fixture extends WrappedBloomFilter { public Fixture(BloomFilter wrapped) { super(wrapped); } @Override public WrappedBloomFilter copy() { return new Fixture(getWrapped()); } } @Override protected WrappedBloomFilter createEmptyFilter(final Shape shape) { return new Fixture(new DefaultBloomFilterTest.SparseDefaultBloomFilter(shape)); } @ParameterizedTest @ValueSource(ints = {0, 1, 34}) public void testCharacteristics(final int characteristics) { final Shape shape = getTestShape(); final BloomFilter inner = new DefaultBloomFilterTest.SparseDefaultBloomFilter(shape) { @Override public int characteristics() { return characteristics; } }; final WrappedBloomFilter underTest = new Fixture(inner); assertEquals(characteristics, underTest.characteristics()); } WDYT? Let's skip discussing the signature of the copy() method, I'll write a separate email later about that. TY, Gary [0] https://github.com/apache/commons-collections/blob/730d972cdebb13dd3a896eb5b90ebc9e1f594d5b/src/test/java/org/apache/commons/collections4/bloomfilter/WrappedBloomFilterTest.java#L26-L56 [1] The above link in WrappedBloomFilterTest is: @Override protected WrappedBloomFilter createEmptyFilter(final Shape shape) { return new WrappedBloomFilter(new DefaultBloomFilterTest.SparseDefaultBloomFilter(shape)) { @Override public BloomFilter copy() { final BloomFilter result = new DefaultBloomFilterTest.SparseDefaultBloomFilter(shape); result.merge(getWrapped()); return result; } }; } @ParameterizedTest @ValueSource(ints = {0, 1, 34}) public void testCharacteristics(final int characteristics) { final Shape shape = getTestShape(); final BloomFilter inner = new DefaultBloomFilterTest.SparseDefaultBloomFilter(shape) { @Override public int characteristics() { return characteristics; } }; final WrappedBloomFilter underTest = new WrappedBloomFilter(inner) { @Override public BloomFilter copy() { final BloomFilter result = new DefaultBloomFilterTest.SparseDefaultBloomFilter(shape); result.merge(getWrapped()); return result; } }; assertEquals(characteristics, underTest.characteristics()); }