001/*
002 * Copyright © 2025 CUI-OpenSource-Software (info@cuioss.de)
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 *     http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016package de.cuioss.test.generator.internal.net.java.quickcheck.generator.support;
017
018import de.cuioss.test.generator.internal.net.java.quickcheck.Generator;
019import de.cuioss.test.generator.internal.net.java.quickcheck.generator.distribution.Distribution;
020
021import java.util.Objects;
022
023
024public class DoubleGenerator implements Generator<Double> {
025
026    private final double min;
027    private final double max;
028    private final Distribution distribution;
029
030    public DoubleGenerator() {
031        this(Double.MIN_VALUE, Double.MAX_VALUE);
032    }
033
034    public DoubleGenerator(double min, double max) {
035        this(min, max, Distribution.UNIFORM);
036    }
037
038    public DoubleGenerator(double min, double max, Distribution dist) {
039        if (max < min) {
040            throw new IllegalArgumentException("min");
041        }
042        Objects.requireNonNull(dist, "dist");
043
044        this.min = min;
045        this.max = max;
046        this.distribution = dist;
047    }
048
049    @Override
050    public Double next() {
051        return nextDouble();
052    }
053
054    public double nextDouble() {
055        return this.distribution.nextRandomNumber() * (this.max - this.min) + this.min;
056    }
057
058    @Override
059    public String toString() {
060        return "%s[min=%s, max=%s, distribution=%s".formatted(getClass().getSimpleName(), min, max, distribution);
061    }
062}