// Path: src/main/java/io/smartcat/ranger/distribution/UniformDistribution.java
// public class UniformDistribution implements Distribution {
// 
//     private Random random = new Random();
// 
//     @Override
//     public int nextInt(int bound) {
//         return random.nextInt(bound);
//     }
// 
//     @Override
//     public int nextInt(int lower, int upper) {
//         return random.ints(1, lower, upper).findFirst().getAsInt();
//     }
// 
//     @Override
//     public long nextLong(long bound) {
//         return random.longs(1, 0, bound).findFirst().getAsLong();
//     }
// 
//     @Override
//     public long nextLong(long lower, long upper) {
//         return random.longs(1, lower, upper).findFirst().getAsLong();
//     }
// 
//     @Override
//     public double nextDouble(double lower, double upper) {
//         return random.doubles(1, lower, upper).findFirst().getAsDouble();
//     }
// 
//     @Override
//     public boolean nextBoolean() {
//         return random.nextBoolean();
//     }
// }


import io.smartcat.ranger.distribution.Distribution;
import io.smartcat.ranger.distribution.UniformDistribution;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
package io.smartcat.ranger.core;



/**
 * Generates random length list out of specified values.
 *
 * @param <T> Type which evaluated list will contain.
 */
public class RandomLengthListValue<T> extends Value<List<T>> {

    private final int minLength;
    private final int maxLength;
    private Value<T> elementGenerator;
    private final Distribution distribution;

    /**
     * Constructs random length list value out of specified values.
     *
     * @param minLength Minimum list length
     * @param maxLength Maximum list length
     * @param elementGenerator Element generator
     */
    public RandomLengthListValue(int minLength, int maxLength, Value<T> elementGenerator) {
// Path: src/main/java/io/smartcat/ranger/distribution/UniformDistribution.java
// public class UniformDistribution implements Distribution {
// 
//     private Random random = new Random();
// 
//     @Override
//     public int nextInt(int bound) {
//         return random.nextInt(bound);
//     }
// 
//     @Override
//     public int nextInt(int lower, int upper) {
//         return random.ints(1, lower, upper).findFirst().getAsInt();
//     }
// 
//     @Override
//     public long nextLong(long bound) {
//         return random.longs(1, 0, bound).findFirst().getAsLong();
//     }
// 
//     @Override
//     public long nextLong(long lower, long upper) {
//         return random.longs(1, lower, upper).findFirst().getAsLong();
//     }
// 
//     @Override
//     public double nextDouble(double lower, double upper) {
//         return random.doubles(1, lower, upper).findFirst().getAsDouble();
//     }
// 
//     @Override
//     public boolean nextBoolean() {
//         return random.nextBoolean();
//     }
// }


// Path: src/main/java/io/smartcat/ranger/core/RandomLengthListValue.java
import io.smartcat.ranger.distribution.Distribution;
import io.smartcat.ranger.distribution.UniformDistribution;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

package io.smartcat.ranger.core;



/**
 * Generates random length list out of specified values.
 *
 * @param <T> Type which evaluated list will contain.
 */
public class RandomLengthListValue<T> extends Value<List<T>> {

    private final int minLength;
    private final int maxLength;
    private Value<T> elementGenerator;
    private final Distribution distribution;

    /**
     * Constructs random length list value out of specified values.
     *
     * @param minLength Minimum list length
     * @param maxLength Maximum list length
     * @param elementGenerator Element generator
     */
    public RandomLengthListValue(int minLength, int maxLength, Value<T> elementGenerator) {
        this(minLength, maxLength, elementGenerator, new UniformDistribution());