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

smallcheck.generators.MapGen Maven / Gradle / Ivy

The newest version!
package smallcheck.generators;

import java.util.*;
import java.util.stream.Stream;

/**
 *
 */
public class MapGen extends SeriesGen> {

    private final SeriesGen keyGen;
    private final SeriesGen valueGen;

    public MapGen(SeriesGen keyGen, SeriesGen valueGen) {
        super();
        this.keyGen = keyGen;
        this.valueGen = valueGen;
    }

    @Override
    public Stream> generate(int depth) {
        if (depth == 0) {
            return Stream.of(Collections.emptyMap());
        }
        return generate(depth - 1).flatMap(m -> {
            return Stream.concat(
                    Stream.of(m),
                    keyGen.generate(depth - 1).flatMap(k -> {
                        return valueGen.generate(depth - 1).map(v -> {
                            Map res = new HashMap<>();
                            res.put(keyGen.copy(k), v);
                            for (Map.Entry e : m.entrySet()) {
                                res.put(keyGen.copy(e.getKey()), valueGen.copy(e.getValue()));
                            }
                            return res;
                        });
                    })
            );
        });
    }

    @Override
    public Map copy(Map obj) {
        Map res = new HashMap<>();
        for (Map.Entry e : obj.entrySet()) {
            res.put(keyGen.copy(e.getKey()), valueGen.copy(e.getValue()));
        }
        return res;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy