Simplify random indices tests
Use streams to generate arrays. Use BitSet to create a unique set of indices.
This commit is contained in:
parent
5920f32cd8
commit
2a6ec0fca0
|
@ -24,8 +24,8 @@ import static org.junit.jupiter.api.Assertions.assertThrows;
|
|||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.BitSet;
|
||||
import java.util.List;
|
||||
import java.util.SortedSet;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
|
@ -121,7 +121,7 @@ public abstract class AbstractBloomFilterTest<T extends BloomFilter> {
|
|||
|
||||
@Test
|
||||
public void testMergeWithHasher() {
|
||||
for (int i=0; i<5000; i++) {
|
||||
for (int i = 0; i < 5; i++) {
|
||||
final BloomFilter f = createEmptyFilter(getTestShape());
|
||||
int[] expected = DefaultIndexProducerTest.generateIntArray(getTestShape().getNumberOfHashFunctions(), getTestShape().getNumberOfBits());
|
||||
Hasher hasher = new ArrayHasher(expected);
|
||||
|
@ -133,7 +133,7 @@ public abstract class AbstractBloomFilterTest<T extends BloomFilter> {
|
|||
|
||||
@Test
|
||||
public void testMergeWithBitMapProducer() {
|
||||
for (int i=0; i<5000; i++) {
|
||||
for (int i = 0; i < 5; i++) {
|
||||
long[] values = new long[2];
|
||||
for (int idx : DefaultIndexProducerTest.generateIntArray(getTestShape().getNumberOfHashFunctions(), getTestShape().getNumberOfBits())) {
|
||||
BitMap.set(values, idx);
|
||||
|
@ -161,12 +161,14 @@ public abstract class AbstractBloomFilterTest<T extends BloomFilter> {
|
|||
|
||||
@Test
|
||||
public void testMergeWithIndexProducer() {
|
||||
for (int i=0; i<5000; i++) {
|
||||
for (int i = 0; i < 5; i++) {
|
||||
int[] values = DefaultIndexProducerTest.generateIntArray(getTestShape().getNumberOfHashFunctions(), getTestShape().getNumberOfBits());
|
||||
BloomFilter f = createFilter(getTestShape(), IndexProducer.fromIndexArray(values));
|
||||
SortedSet<Integer> uniqueValues = DefaultIndexProducerTest.uniqueSet(values);
|
||||
BitSet uniqueValues = DefaultIndexProducerTest.uniqueSet(values);
|
||||
assertTrue(f.forEachIndex(idx -> {
|
||||
return uniqueValues.remove(Integer.valueOf(idx));
|
||||
final boolean result = uniqueValues.get(idx);
|
||||
uniqueValues.clear(idx);
|
||||
return result;
|
||||
}));
|
||||
assertTrue(uniqueValues.isEmpty());
|
||||
}
|
||||
|
|
|
@ -19,7 +19,7 @@ package org.apache.commons.collections4.bloomfilter;
|
|||
import static org.junit.jupiter.api.Assertions.assertArrayEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
|
||||
import java.util.Random;
|
||||
import java.util.concurrent.ThreadLocalRandom;
|
||||
import java.util.function.LongPredicate;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
@ -66,13 +66,8 @@ public class DefaultBitMapProducerTest extends AbstractBitMapProducerTest {
|
|||
* @param size the number of values to generate
|
||||
* @return the array of random values.
|
||||
*/
|
||||
public static long[] generateLongArray( int size ) {
|
||||
Random rnd = new Random();
|
||||
long[] expected = new long[size];
|
||||
for (int i=0; i<size; i++) {
|
||||
expected[i] = rnd.nextLong();
|
||||
}
|
||||
return expected;
|
||||
public static long[] generateLongArray(int size) {
|
||||
return ThreadLocalRandom.current().longs(size).toArray();
|
||||
}
|
||||
|
||||
@Test
|
||||
|
|
|
@ -18,21 +18,20 @@ package org.apache.commons.collections4.bloomfilter;
|
|||
|
||||
import static org.junit.jupiter.api.Assertions.assertArrayEquals;
|
||||
|
||||
import java.util.Random;
|
||||
import java.util.Set;
|
||||
import java.util.SortedSet;
|
||||
import java.util.TreeSet;
|
||||
import java.util.Arrays;
|
||||
import java.util.BitSet;
|
||||
import java.util.concurrent.ThreadLocalRandom;
|
||||
import java.util.function.IntPredicate;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
public class DefaultIndexProducerTest extends AbstractIndexProducerTest {
|
||||
|
||||
private int[] values = generateIntArray( 10, 512 );
|
||||
private int[] values = generateIntArray(10, 512);
|
||||
|
||||
@Override
|
||||
protected IndexProducer createProducer() {
|
||||
return IndexProducer.fromIndexArray( values );
|
||||
return IndexProducer.fromIndexArray(values);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -52,26 +51,19 @@ public class DefaultIndexProducerTest extends AbstractIndexProducerTest {
|
|||
* @param bound the upper bound (exclusive) of the values in the array.
|
||||
* @return an array of int.
|
||||
*/
|
||||
public static int[] generateIntArray( int size, int bound ) {
|
||||
Random rnd = new Random();
|
||||
int[] expected = new int[size];
|
||||
for (int i=0; i<size; i++) {
|
||||
expected[i] = rnd.nextInt(bound);
|
||||
}
|
||||
return expected;
|
||||
public static int[] generateIntArray(int size, int bound) {
|
||||
return ThreadLocalRandom.current().ints(size, 0, bound).toArray();
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a sorted set of Integers.
|
||||
* @param ary the array to sort and make unique
|
||||
* @return the sorted Set.
|
||||
* Creates a BitSet of indices.
|
||||
* @param ary the array
|
||||
* @return the set.
|
||||
*/
|
||||
public static SortedSet<Integer> uniqueSet(int[] ary) {
|
||||
SortedSet<Integer> uniq = new TreeSet<Integer>();
|
||||
for (int idx : ary) {
|
||||
uniq.add(idx);
|
||||
}
|
||||
return uniq;
|
||||
public static BitSet uniqueSet(int[] ary) {
|
||||
final BitSet bs = new BitSet();
|
||||
Arrays.stream(ary).forEach(bs::set);
|
||||
return bs;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -80,19 +72,13 @@ public class DefaultIndexProducerTest extends AbstractIndexProducerTest {
|
|||
* @return the sorted unique array.
|
||||
*/
|
||||
public static int[] unique(int[] ary) {
|
||||
Set<Integer> uniq = uniqueSet(ary);
|
||||
int[] result = new int[uniq.size()];
|
||||
int i=0;
|
||||
for (int idx : uniq) {
|
||||
result[i++] = idx;
|
||||
}
|
||||
return result;
|
||||
return Arrays.stream(ary).distinct().sorted().toArray();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testFromBitMapProducer() {
|
||||
for (int i=0; i<5000; i++) {
|
||||
int[] expected = generateIntArray( 7, 256 );
|
||||
for (int i = 0; i < 5; i++) {
|
||||
int[] expected = generateIntArray(7, 256);
|
||||
long[] bits = new long[BitMap.numberOfBitMaps(256)];
|
||||
for (int bitIndex : expected) {
|
||||
BitMap.set(bits, bitIndex);
|
||||
|
@ -104,7 +90,7 @@ public class DefaultIndexProducerTest extends AbstractIndexProducerTest {
|
|||
|
||||
@Test
|
||||
public void testFromIndexArray() {
|
||||
for (int i=0; i<5000; i++) {
|
||||
for (int i = 0; i < 5; i++) {
|
||||
int[] expected = generateIntArray(10, 256);
|
||||
IndexProducer ip = IndexProducer.fromIndexArray(expected);
|
||||
assertArrayEquals(unique(expected), ip.asIndexArray());
|
||||
|
|
Loading…
Reference in New Issue