
smallcheck.generators.ArrayGen Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of java-smallcheck Show documentation
Show all versions of java-smallcheck Show documentation
An implementation of SmallCheck for Java as a JUnit extension.
The newest version!
package smallcheck.generators;
import java.lang.reflect.Array;
import java.util.Arrays;
import java.util.stream.Stream;
/**
*
*/
public class ArrayGen extends SeriesGen {
private Class clazz;
private final SeriesGen elementGen;
public ArrayGen(Class clazz, SeriesGen elementGen) {
this.clazz = clazz;
this.elementGen = elementGen;
}
@Override
public Stream generate(int depth) {
if (depth == 0) {
@SuppressWarnings("unchecked")
T[] ar = (T[]) Array.newInstance(clazz, 0);
return Stream.of(ar);
}
return generate(depth - 1).flatMap(ar -> {
return Stream.concat(
Stream.of(ar),
elementGen.generate(depth - 1).map(e -> {
@SuppressWarnings("unchecked")
T[] res = (T[]) Array.newInstance(clazz, ar.length + 1);
System.arraycopy(ar, 0, res, 1, ar.length);
res[0] = e;
return res;
})
);
});
}
@Override
public T[] copy(T[] obj) {
T[] res = Arrays.copyOf(obj, obj.length);
for (int i = 0; i < res.length; i++) {
res[i] = elementGen.copy(res[i]);
}
return res;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy