All Downloads are FREE. Search and download functionalities are using the official Maven repository.

smallcheck.generators.ArrayGen Maven / Gradle / Ivy

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