This is an automated email from the ASF dual-hosted git repository. aherbert pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/commons-rng.git
commit e309e825f7de290928ef321915c7d083977f73de Author: aherbert <[email protected]> AuthorDate: Tue Sep 27 10:47:36 2022 +0100 Use randomly chosen high-quality RNG for the sampling tests RNGs are chosen from those that pass TestU01 BigCrush and PractRand to 4 TiB of output. --- .../rng/sampling/CollectionSamplerTest.java | 2 +- .../rng/sampling/CombinationSamplerTest.java | 2 +- .../DiscreteProbabilityCollectionSamplerTest.java | 2 +- .../commons/rng/sampling/ObjectSamplerTest.java | 2 +- .../rng/sampling/PermutationSamplerTest.java | 2 +- .../apache/commons/rng/sampling/RandomAssert.java | 56 ++++++++++- .../AliasMethodDiscreteSamplerTest.java | 4 +- .../distribution/ContinuousSamplerTest.java | 3 +- .../distribution/ContinuousSamplersList.java | 108 ++++++++++----------- .../distribution/ContinuousUniformSamplerTest.java | 2 +- .../distribution/DirichletSamplerTest.java | 2 +- .../sampling/distribution/DiscreteSamplerTest.java | 3 +- .../distribution/DiscreteSamplersList.java | 66 ++++++------- .../distribution/DiscreteUniformSamplerTest.java | 2 +- .../FastLoadedDiceRollerDiscreteSamplerTest.java | 6 +- .../GuideTableDiscreteSamplerTest.java | 4 +- .../rng/sampling/distribution/LongSamplerTest.java | 3 +- .../MarsagliaTsangWangDiscreteSamplerTest.java | 2 +- .../sampling/distribution/StableSamplerTest.java | 4 +- .../distribution/UniformLongSamplerTest.java | 2 +- .../rng/sampling/shape/TriangleSamplerTest.java | 2 +- 21 files changed, 168 insertions(+), 111 deletions(-) diff --git a/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/CollectionSamplerTest.java b/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/CollectionSamplerTest.java index 3853cccf..1dbd7ca9 100644 --- a/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/CollectionSamplerTest.java +++ b/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/CollectionSamplerTest.java @@ -39,7 +39,7 @@ class CollectionSamplerTest { list.add("RNG"); final CollectionSampler<String> sampler = - new CollectionSampler<>(RandomSource.MWC_256.create(), list); + new CollectionSampler<>(RandomAssert.createRNG(), list); final String word = sampler.sample(); for (final String w : list) { if (word.equals(w)) { diff --git a/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/CombinationSamplerTest.java b/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/CombinationSamplerTest.java index 237cdc9d..58826319 100644 --- a/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/CombinationSamplerTest.java +++ b/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/CombinationSamplerTest.java @@ -30,7 +30,7 @@ import org.apache.commons.rng.simple.RandomSource; * Tests for {@link CombinationSampler}. */ class CombinationSamplerTest { - private final UniformRandomProvider rng = RandomSource.XO_RO_SHI_RO_128_PP.create(); + private final UniformRandomProvider rng = RandomAssert.createRNG(); @Test void testSampleIsInDomain() { diff --git a/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/DiscreteProbabilityCollectionSamplerTest.java b/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/DiscreteProbabilityCollectionSamplerTest.java index f41d7b32..c1b2c578 100644 --- a/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/DiscreteProbabilityCollectionSamplerTest.java +++ b/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/DiscreteProbabilityCollectionSamplerTest.java @@ -33,7 +33,7 @@ import org.apache.commons.rng.simple.RandomSource; */ class DiscreteProbabilityCollectionSamplerTest { /** RNG. */ - private final UniformRandomProvider rng = RandomSource.XO_SHI_RO_128_PP.create(); + private final UniformRandomProvider rng = RandomAssert.createRNG(); @Test void testPrecondition1() { diff --git a/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/ObjectSamplerTest.java b/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/ObjectSamplerTest.java index 7fc14662..9c50a324 100644 --- a/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/ObjectSamplerTest.java +++ b/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/ObjectSamplerTest.java @@ -30,7 +30,7 @@ import org.junit.jupiter.params.provider.ValueSource; class ObjectSamplerTest { @Test void testSamplesUnlimitedSize() { - final ObjectSampler<Double> s = RandomSource.SPLIT_MIX_64.create()::nextDouble; + final ObjectSampler<Double> s = RandomAssert.createRNG()::nextDouble; Assertions.assertEquals(Long.MAX_VALUE, s.samples().spliterator().estimateSize()); } diff --git a/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/PermutationSamplerTest.java b/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/PermutationSamplerTest.java index e632974b..0987ab90 100644 --- a/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/PermutationSamplerTest.java +++ b/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/PermutationSamplerTest.java @@ -37,7 +37,7 @@ class PermutationSamplerTest { void testSampleTrivial() { final int n = 6; final int k = 3; - final PermutationSampler sampler = new PermutationSampler(RandomSource.KISS.create(), + final PermutationSampler sampler = new PermutationSampler(RandomAssert.createRNG(), n, k); final int[] random = sampler.sample(); SAMPLE: for (final int s : random) { diff --git a/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/RandomAssert.java b/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/RandomAssert.java index 0ea4a6de..c63ea9c8 100644 --- a/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/RandomAssert.java +++ b/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/RandomAssert.java @@ -18,10 +18,13 @@ package org.apache.commons.rng.sampling; import org.junit.jupiter.api.Assertions; - +import java.util.EnumSet; +import java.util.concurrent.ThreadLocalRandom; +import org.apache.commons.rng.UniformRandomProvider; import org.apache.commons.rng.sampling.distribution.ContinuousSampler; import org.apache.commons.rng.sampling.distribution.DiscreteSampler; import org.apache.commons.rng.sampling.distribution.LongSampler; +import org.apache.commons.rng.simple.RandomSource; /** * Utility class for testing random samplers. @@ -30,6 +33,37 @@ public final class RandomAssert { /** Number of samples to generate to test for equal sequences. */ private static final int SAMPLES = 10; + /** The sources for a new random generator instance. */ + private static final RandomSource[] SOURCES; + + static { + final EnumSet<RandomSource> set = EnumSet.allOf(RandomSource.class); + // Remove all generators that do not pass Test U01 BigCrush or + // fail PractRand before 4 TiB of output. + // See: https://commons.apache.org/proper/commons-rng/userguide/rng.html#a5._Quality + set.remove(RandomSource.JDK); + set.remove(RandomSource.WELL_512_A); + set.remove(RandomSource.WELL_1024_A); + set.remove(RandomSource.WELL_19937_A); + set.remove(RandomSource.WELL_19937_C); + set.remove(RandomSource.WELL_44497_A); + set.remove(RandomSource.WELL_44497_B); + set.remove(RandomSource.MT); + set.remove(RandomSource.XOR_SHIFT_1024_S); + set.remove(RandomSource.TWO_CMRES); + set.remove(RandomSource.TWO_CMRES_SELECT); + set.remove(RandomSource.MT_64); + set.remove(RandomSource.XOR_SHIFT_1024_S_PHI); + set.remove(RandomSource.XO_RO_SHI_RO_64_S); + set.remove(RandomSource.XO_SHI_RO_128_PLUS); + set.remove(RandomSource.XO_RO_SHI_RO_128_PLUS); + set.remove(RandomSource.XO_SHI_RO_256_PLUS); + set.remove(RandomSource.XO_SHI_RO_512_PLUS); + set.remove(RandomSource.PCG_MCG_XSH_RS_32); + set.remove(RandomSource.XO_RO_SHI_RO_1024_S); + SOURCES = set.toArray(new RandomSource[0]); + } + /** * Class contains only static methods. */ @@ -115,4 +149,24 @@ public final class RandomAssert { private static boolean isArray(Object object) { return object != null && object.getClass().isArray(); } + + /** + * Create a new random generator instance. The implementation will be randomly chosen + * from a selection of high-quality generators. + * + * <p>This is a helper method to return a generator for use in testing where the + * underlying source should not impact the test. This ensures the test is robust upon + * repeat invocation across different JVM instances where the generator will most + * likely be different. + * + * <p>Note that use of this method is preferable to use of a fixed seed generator. Any + * test that is flaky when using this method may require an update to the test + * assumptions and assertions. + * + * @return the uniform random provider + * @see RandomSource#create() + */ + public static UniformRandomProvider createRNG() { + return SOURCES[ThreadLocalRandom.current().nextInt(SOURCES.length)].create(); + } } diff --git a/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/AliasMethodDiscreteSamplerTest.java b/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/AliasMethodDiscreteSamplerTest.java index efc127b2..86f8553a 100644 --- a/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/AliasMethodDiscreteSamplerTest.java +++ b/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/AliasMethodDiscreteSamplerTest.java @@ -83,7 +83,7 @@ class AliasMethodDiscreteSamplerTest { * @return the alias method discrete sampler */ private static SharedStateDiscreteSampler createSampler(double[] probabilities) { - final UniformRandomProvider rng = RandomSource.SPLIT_MIX_64.create(); + final UniformRandomProvider rng = RandomAssert.createRNG(); return AliasMethodDiscreteSampler.of(rng, probabilities, -1); } @@ -134,7 +134,7 @@ class AliasMethodDiscreteSamplerTest { @Test void testNonUniformSamplesWithProbabilitiesWithDefaultFactoryConstructor() { final double[] expected = {0.1, 0.2, 0.3, 0.1, 0.3}; - checkSamples(AliasMethodDiscreteSampler.of(RandomSource.SPLIT_MIX_64.create(), expected), expected); + checkSamples(AliasMethodDiscreteSampler.of(RandomAssert.createRNG(), expected), expected); } /** diff --git a/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/ContinuousSamplerTest.java b/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/ContinuousSamplerTest.java index 0222abfb..16e6d964 100644 --- a/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/ContinuousSamplerTest.java +++ b/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/ContinuousSamplerTest.java @@ -17,6 +17,7 @@ package org.apache.commons.rng.sampling.distribution; import java.util.concurrent.ThreadLocalRandom; +import org.apache.commons.rng.sampling.RandomAssert; import org.apache.commons.rng.simple.RandomSource; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.RepeatedTest; @@ -30,7 +31,7 @@ import org.junit.jupiter.params.provider.ValueSource; class ContinuousSamplerTest { @Test void testSamplesUnlimitedSize() { - final ContinuousSampler s = RandomSource.SPLIT_MIX_64.create()::nextDouble; + final ContinuousSampler s = RandomAssert.createRNG()::nextDouble; Assertions.assertEquals(Long.MAX_VALUE, s.samples().spliterator().estimateSize()); } diff --git a/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/ContinuousSamplersList.java b/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/ContinuousSamplersList.java index b93cbcce..ac363592 100644 --- a/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/ContinuousSamplersList.java +++ b/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/ContinuousSamplersList.java @@ -21,7 +21,7 @@ import java.util.ArrayList; import java.util.Collections; import org.apache.commons.rng.UniformRandomProvider; -import org.apache.commons.rng.simple.RandomSource; +import org.apache.commons.rng.sampling.RandomAssert; /** * List of samplers. @@ -45,179 +45,179 @@ public final class ContinuousSamplersList { final double meanNormal = -123.45; final double sigmaNormal = 6.789; add(LIST, new org.apache.commons.math3.distribution.NormalDistribution(unusedRng, meanNormal, sigmaNormal), - RandomSource.KISS.create()); + RandomAssert.createRNG()); // Gaussian (DEPRECATED "Box-Muller"). add(LIST, new org.apache.commons.math3.distribution.NormalDistribution(unusedRng, meanNormal, sigmaNormal), - new BoxMullerGaussianSampler(RandomSource.MT.create(), meanNormal, sigmaNormal)); + new BoxMullerGaussianSampler(RandomAssert.createRNG(), meanNormal, sigmaNormal)); // Gaussian ("Box-Muller"). add(LIST, new org.apache.commons.math3.distribution.NormalDistribution(unusedRng, meanNormal, sigmaNormal), - GaussianSampler.of(new BoxMullerNormalizedGaussianSampler(RandomSource.MT.create()), + GaussianSampler.of(new BoxMullerNormalizedGaussianSampler(RandomAssert.createRNG()), meanNormal, sigmaNormal)); // Gaussian ("Marsaglia"). add(LIST, new org.apache.commons.math3.distribution.NormalDistribution(unusedRng, meanNormal, sigmaNormal), - GaussianSampler.of(new MarsagliaNormalizedGaussianSampler(RandomSource.MT.create()), + GaussianSampler.of(new MarsagliaNormalizedGaussianSampler(RandomAssert.createRNG()), meanNormal, sigmaNormal)); // Gaussian ("Ziggurat"). add(LIST, new org.apache.commons.math3.distribution.NormalDistribution(unusedRng, meanNormal, sigmaNormal), - GaussianSampler.of(new ZigguratNormalizedGaussianSampler(RandomSource.MT.create()), + GaussianSampler.of(new ZigguratNormalizedGaussianSampler(RandomAssert.createRNG()), meanNormal, sigmaNormal)); // Gaussian ("Modified ziggurat"). add(LIST, new org.apache.commons.math3.distribution.NormalDistribution(unusedRng, meanNormal, sigmaNormal), - GaussianSampler.of(ZigguratSampler.NormalizedGaussian.of(RandomSource.MT.create()), + GaussianSampler.of(ZigguratSampler.NormalizedGaussian.of(RandomAssert.createRNG()), meanNormal, sigmaNormal)); // Beta ("inverse method"). final double alphaBeta = 4.3; final double betaBeta = 2.1; add(LIST, new org.apache.commons.math3.distribution.BetaDistribution(unusedRng, alphaBeta, betaBeta), - RandomSource.ISAAC.create()); + RandomAssert.createRNG()); // Beta ("Cheng"). add(LIST, new org.apache.commons.math3.distribution.BetaDistribution(unusedRng, alphaBeta, betaBeta), - ChengBetaSampler.of(RandomSource.MWC_256.create(), alphaBeta, betaBeta)); + ChengBetaSampler.of(RandomAssert.createRNG(), alphaBeta, betaBeta)); add(LIST, new org.apache.commons.math3.distribution.BetaDistribution(unusedRng, betaBeta, alphaBeta), - ChengBetaSampler.of(RandomSource.WELL_19937_A.create(), betaBeta, alphaBeta)); + ChengBetaSampler.of(RandomAssert.createRNG(), betaBeta, alphaBeta)); // Beta ("Cheng", alternate algorithm). final double alphaBetaAlt = 0.5678; final double betaBetaAlt = 0.1234; add(LIST, new org.apache.commons.math3.distribution.BetaDistribution(unusedRng, alphaBetaAlt, betaBetaAlt), - ChengBetaSampler.of(RandomSource.WELL_512_A.create(), alphaBetaAlt, betaBetaAlt)); + ChengBetaSampler.of(RandomAssert.createRNG(), alphaBetaAlt, betaBetaAlt)); add(LIST, new org.apache.commons.math3.distribution.BetaDistribution(unusedRng, betaBetaAlt, alphaBetaAlt), - ChengBetaSampler.of(RandomSource.WELL_19937_C.create(), betaBetaAlt, alphaBetaAlt)); + ChengBetaSampler.of(RandomAssert.createRNG(), betaBetaAlt, alphaBetaAlt)); // Cauchy ("inverse method"). final double medianCauchy = 0.123; final double scaleCauchy = 4.5; add(LIST, new org.apache.commons.math3.distribution.CauchyDistribution(unusedRng, medianCauchy, scaleCauchy), - RandomSource.WELL_19937_C.create()); + RandomAssert.createRNG()); // Chi-square ("inverse method"). final int dofChi2 = 12; add(LIST, new org.apache.commons.math3.distribution.ChiSquaredDistribution(unusedRng, dofChi2), - RandomSource.WELL_19937_A.create()); + RandomAssert.createRNG()); // Exponential ("inverse method"). final double meanExp = 3.45; add(LIST, new org.apache.commons.math3.distribution.ExponentialDistribution(unusedRng, meanExp), - RandomSource.WELL_44497_A.create()); + RandomAssert.createRNG()); // Exponential. add(LIST, new org.apache.commons.math3.distribution.ExponentialDistribution(unusedRng, meanExp), - AhrensDieterExponentialSampler.of(RandomSource.MT.create(), meanExp)); + AhrensDieterExponentialSampler.of(RandomAssert.createRNG(), meanExp)); // Exponential ("Modified ziggurat"). add(LIST, new org.apache.commons.math3.distribution.ExponentialDistribution(unusedRng, meanExp), - ZigguratSampler.Exponential.of(RandomSource.XO_RO_SHI_RO_128_SS.create(), meanExp)); + ZigguratSampler.Exponential.of(RandomAssert.createRNG(), meanExp)); // F ("inverse method"). final int numDofF = 4; final int denomDofF = 7; add(LIST, new org.apache.commons.math3.distribution.FDistribution(unusedRng, numDofF, denomDofF), - RandomSource.MT_64.create()); + RandomAssert.createRNG()); // Gamma ("inverse method"). final double alphaGammaSmallerThanOne = 0.1234; final double alphaGammaLargerThanOne = 2.345; final double thetaGamma = 3.456; add(LIST, new org.apache.commons.math3.distribution.GammaDistribution(unusedRng, alphaGammaLargerThanOne, thetaGamma), - RandomSource.SPLIT_MIX_64.create()); + RandomAssert.createRNG()); // Gamma (alpha < 1). add(LIST, new org.apache.commons.math3.distribution.GammaDistribution(unusedRng, alphaGammaSmallerThanOne, thetaGamma), - AhrensDieterMarsagliaTsangGammaSampler.of(RandomSource.XOR_SHIFT_1024_S_PHI.create(), + AhrensDieterMarsagliaTsangGammaSampler.of(RandomAssert.createRNG(), alphaGammaSmallerThanOne, thetaGamma)); // Gamma (alpha > 1). add(LIST, new org.apache.commons.math3.distribution.GammaDistribution(unusedRng, alphaGammaLargerThanOne, thetaGamma), - AhrensDieterMarsagliaTsangGammaSampler.of(RandomSource.WELL_44497_B.create(), + AhrensDieterMarsagliaTsangGammaSampler.of(RandomAssert.createRNG(), alphaGammaLargerThanOne, thetaGamma)); // Gumbel ("inverse method"). final double muGumbel = -4.56; final double betaGumbel = 0.123; add(LIST, new org.apache.commons.math3.distribution.GumbelDistribution(unusedRng, muGumbel, betaGumbel), - RandomSource.WELL_1024_A.create()); + RandomAssert.createRNG()); // Laplace ("inverse method"). final double muLaplace = 12.3; final double betaLaplace = 5.6; add(LIST, new org.apache.commons.math3.distribution.LaplaceDistribution(unusedRng, muLaplace, betaLaplace), - RandomSource.MWC_256.create()); + RandomAssert.createRNG()); // Levy ("inverse method"). final double muLevy = -1.098; final double cLevy = 0.76; add(LIST, new org.apache.commons.math3.distribution.LevyDistribution(unusedRng, muLevy, cLevy), - RandomSource.TWO_CMRES.create()); + RandomAssert.createRNG()); // Levy sampler add(LIST, new org.apache.commons.math3.distribution.LevyDistribution(unusedRng, muLevy, cLevy), - LevySampler.of(RandomSource.JSF_64.create(), muLevy, cLevy)); + LevySampler.of(RandomAssert.createRNG(), muLevy, cLevy)); add(LIST, new org.apache.commons.math3.distribution.LevyDistribution(unusedRng, 0.0, 1.0), - LevySampler.of(RandomSource.JSF_64.create(), 0.0, 1.0)); + LevySampler.of(RandomAssert.createRNG(), 0.0, 1.0)); // Log normal ("inverse method"). final double muLogNormal = 2.345; final double sigmaLogNormal = 0.1234; add(LIST, new org.apache.commons.math3.distribution.LogNormalDistribution(unusedRng, muLogNormal, sigmaLogNormal), - RandomSource.KISS.create()); + RandomAssert.createRNG()); // Log-normal (DEPRECATED "Box-Muller"). add(LIST, new org.apache.commons.math3.distribution.LogNormalDistribution(unusedRng, muLogNormal, sigmaLogNormal), - new BoxMullerLogNormalSampler(RandomSource.XOR_SHIFT_1024_S_PHI.create(), muLogNormal, sigmaLogNormal)); + new BoxMullerLogNormalSampler(RandomAssert.createRNG(), muLogNormal, sigmaLogNormal)); // Log-normal ("Box-Muller"). add(LIST, new org.apache.commons.math3.distribution.LogNormalDistribution(unusedRng, muLogNormal, sigmaLogNormal), - LogNormalSampler.of(new BoxMullerNormalizedGaussianSampler(RandomSource.XOR_SHIFT_1024_S_PHI.create()), + LogNormalSampler.of(new BoxMullerNormalizedGaussianSampler(RandomAssert.createRNG()), muLogNormal, sigmaLogNormal)); // Log-normal ("Marsaglia"). add(LIST, new org.apache.commons.math3.distribution.LogNormalDistribution(unusedRng, muLogNormal, sigmaLogNormal), - LogNormalSampler.of(new MarsagliaNormalizedGaussianSampler(RandomSource.MT_64.create()), + LogNormalSampler.of(new MarsagliaNormalizedGaussianSampler(RandomAssert.createRNG()), muLogNormal, sigmaLogNormal)); // Log-normal ("Ziggurat"). add(LIST, new org.apache.commons.math3.distribution.LogNormalDistribution(unusedRng, muLogNormal, sigmaLogNormal), - LogNormalSampler.of(new ZigguratNormalizedGaussianSampler(RandomSource.MWC_256.create()), + LogNormalSampler.of(new ZigguratNormalizedGaussianSampler(RandomAssert.createRNG()), muLogNormal, sigmaLogNormal)); // Log-normal negative mean final double muLogNormal2 = -1.1; final double sigmaLogNormal2 = 2.3; add(LIST, new org.apache.commons.math3.distribution.LogNormalDistribution(unusedRng, muLogNormal2, sigmaLogNormal2), - LogNormalSampler.of(new ZigguratNormalizedGaussianSampler(RandomSource.MWC_256.create()), + LogNormalSampler.of(new ZigguratNormalizedGaussianSampler(RandomAssert.createRNG()), muLogNormal2, sigmaLogNormal2)); // Logistic ("inverse method"). final double muLogistic = -123.456; final double sLogistic = 7.89; add(LIST, new org.apache.commons.math3.distribution.LogisticDistribution(unusedRng, muLogistic, sLogistic), - RandomSource.TWO_CMRES_SELECT.create((Object) null, 2, 6)); + RandomAssert.createRNG()); // Nakagami ("inverse method"). final double muNakagami = 78.9; final double omegaNakagami = 23.4; final double inverseAbsoluteAccuracyNakagami = org.apache.commons.math3.distribution.NakagamiDistribution.DEFAULT_INVERSE_ABSOLUTE_ACCURACY; add(LIST, new org.apache.commons.math3.distribution.NakagamiDistribution(unusedRng, muNakagami, omegaNakagami, inverseAbsoluteAccuracyNakagami), - RandomSource.TWO_CMRES_SELECT.create((Object) null, 5, 3)); + RandomAssert.createRNG()); // Pareto ("inverse method"). final double scalePareto = 23.45; final double shapePareto = 0.1234; add(LIST, new org.apache.commons.math3.distribution.ParetoDistribution(unusedRng, scalePareto, shapePareto), - RandomSource.TWO_CMRES_SELECT.create((Object) null, 9, 11)); + RandomAssert.createRNG()); // Pareto. add(LIST, new org.apache.commons.math3.distribution.ParetoDistribution(unusedRng, scalePareto, shapePareto), - InverseTransformParetoSampler.of(RandomSource.XOR_SHIFT_1024_S_PHI.create(), scalePareto, shapePareto)); + InverseTransformParetoSampler.of(RandomAssert.createRNG(), scalePareto, shapePareto)); // Stable distributions. // Gaussian case: alpha=2 add(LIST, new org.apache.commons.math3.distribution.NormalDistribution(unusedRng, 0, Math.sqrt(2)), - StableSampler.of(RandomSource.MSWS.create(), 2, 0)); + StableSampler.of(RandomAssert.createRNG(), 2, 0)); add(LIST, new org.apache.commons.math3.distribution.NormalDistribution(unusedRng, 3.4, 0.75 * Math.sqrt(2)), - StableSampler.of(RandomSource.MSWS.create(), 2, 0, 0.75, 3.4)); + StableSampler.of(RandomAssert.createRNG(), 2, 0, 0.75, 3.4)); // Cauchy case: alpha=1, beta=0, gamma=2.73, delta=0.87 add(LIST, new org.apache.commons.math3.distribution.CauchyDistribution(unusedRng, 0.87, 2.73), - StableSampler.of(RandomSource.KISS.create(), 1, 0, 2.73, 0.87)); + StableSampler.of(RandomAssert.createRNG(), 1, 0, 2.73, 0.87)); // Levy case: alpha=0.5, beta=0, gamma=5.7, delta=-1.23 // The 0-parameterization requires the reference distribution (1-parameterization) is shifted: // S0(Z) = S1(Z) + gamma * beta * tan(pi * alpha / 2); gamma = 5.7, beta = -1, alpha = 0.5 // = gamma * -1 * tan(pi/4) = -gamma add(LIST, new org.apache.commons.math3.distribution.LevyDistribution(unusedRng, -1.23 - 5.7, 5.7), - StableSampler.of(RandomSource.JSF_64.create(), 0.5, 1.0, 5.7, -1.23)); + StableSampler.of(RandomAssert.createRNG(), 0.5, 1.0, 5.7, -1.23)); // Levy case: alpha=0.5, beta=0. // The 0-parameterization requires the reference distribution is shifted by -tan(pi/4) = -1 add(LIST, new org.apache.commons.math3.distribution.LevyDistribution(unusedRng, -1.0, 1.0), - StableSampler.of(RandomSource.JSF_64.create(), 0.5, 1.0, 1.0, 0.0)); + StableSampler.of(RandomAssert.createRNG(), 0.5, 1.0, 1.0, 0.0)); // No Stable distribution in Commons Math: Deciles computed using Nolan's STABLE program: // https://edspace.american.edu/jpnolan/stable/ @@ -226,41 +226,41 @@ public final class ContinuousSamplersList { add(LIST, new double[] {-8.95069776039550, -7.89186827865320, -7.25070352695719, -6.71497820795024, -6.19542020516881, -5.63245847779003, -4.94643432673952, -3.95462242999135, -1.90020994991840, Double.POSITIVE_INFINITY}, - StableSampler.of(RandomSource.JSF_64.create(), 1.3, 0.4, 1.5, -6.4)); + StableSampler.of(RandomAssert.createRNG(), 1.3, 0.4, 1.5, -6.4)); // General case (alpha < 1): alpha=0.8, beta=-0.3, gamma=0.75, delta=3.25 add(LIST, new double[] {-1.60557902637291, 1.45715153372767, 2.39577970333297, 2.86274746879986, 3.15907259287483, 3.38633464572309, 3.60858199662215, 3.96001854555454, 5.16261950198042, Double.POSITIVE_INFINITY}, - StableSampler.of(RandomSource.XO_SHI_RO_512_PP.create(), 0.8, -0.3, 0.75, 3.25)); + StableSampler.of(RandomAssert.createRNG(), 0.8, -0.3, 0.75, 3.25)); // Alpha 1 case: alpha=1.0, beta=0.3 add(LIST, new double[] {-2.08189340389400, -0.990511737972781, -0.539025554211755, -0.204710171216492, 0.120388569770401, 0.497197960523146, 1.01228394387185, 1.89061920660563, 4.20559140293206, Double.POSITIVE_INFINITY}, - StableSampler.of(RandomSource.XO_SHI_RO_512_SS.create(), 1.0, 0.3)); + StableSampler.of(RandomAssert.createRNG(), 1.0, 0.3)); // Symmetric case (beta=0): alpha=1.3, beta=0.0 add(LIST, new double[] {-2.29713832179280, -1.26781259700375, -0.739212223404616, -0.346771353386198, 0.00000000000000, 0.346771353386198, 0.739212223404616, 1.26781259700376, 2.29713832179280, Double.POSITIVE_INFINITY}, - StableSampler.of(RandomSource.XO_SHI_RO_512_PLUS.create(), 1.3, 0.0)); + StableSampler.of(RandomAssert.createRNG(), 1.3, 0.0)); // This is the smallest alpha where the CDF can be reliably computed. // Small alpha case: alpha=0.1, beta=-0.2 add(LIST, new double[] {-14345498.0855558, -4841.68845914421, -22.6430159400915, -0.194461655962062, 0.299822962206354E-1, 0.316768853375197E-1, 0.519382255860847E-1, 21.8595769961580, 147637.033822552, Double.POSITIVE_INFINITY}, - StableSampler.of(RandomSource.XO_SHI_RO_512_PLUS.create(), 0.1, -0.2)); + StableSampler.of(RandomAssert.createRNG(), 0.1, -0.2)); // T ("inverse method"). final double dofT = 0.76543; add(LIST, new org.apache.commons.math3.distribution.TDistribution(unusedRng, dofT), - RandomSource.ISAAC.create()); + RandomAssert.createRNG()); // T. add(LIST, new org.apache.commons.math3.distribution.TDistribution(unusedRng, dofT), - TSampler.of(RandomSource.SFC_64.create(), dofT)); + TSampler.of(RandomAssert.createRNG(), dofT)); // T with 'large' degrees of freedom. final double dofTlarge = 30; add(LIST, new org.apache.commons.math3.distribution.TDistribution(unusedRng, dofTlarge), - TSampler.of(RandomSource.XO_SHI_RO_256_PP.create(), dofTlarge)); + TSampler.of(RandomAssert.createRNG(), dofTlarge)); // T with 'huge' degrees of freedom (approaches a normal distribution). // Deciles are computed incorrectly using Commons Math; values computed using Matlab. // Note: DF is below the switch to using a normal distribution. @@ -268,29 +268,29 @@ public final class ContinuousSamplersList { add(LIST, new double[] {-1.2815515655446015, -0.84162123357291463, -0.52440051270804089, -0.25334710313579983, 0, 0.25334710313579983, 0.52440051270804089, 0.84162123357291474, 1.2815515655446015, Double.POSITIVE_INFINITY}, - TSampler.of(RandomSource.XO_SHI_RO_256_SS.create(), dofTHuge)); + TSampler.of(RandomAssert.createRNG(), dofTHuge)); // Triangular ("inverse method"). final double aTriangle = -0.76543; final double cTriangle = -0.65432; final double bTriangle = -0.54321; add(LIST, new org.apache.commons.math3.distribution.TriangularDistribution(unusedRng, aTriangle, cTriangle, bTriangle), - RandomSource.MT.create()); + RandomAssert.createRNG()); // Uniform ("inverse method"). final double loUniform = -1.098; final double hiUniform = 0.76; add(LIST, new org.apache.commons.math3.distribution.UniformRealDistribution(unusedRng, loUniform, hiUniform), - RandomSource.TWO_CMRES.create()); + RandomAssert.createRNG()); // Uniform. add(LIST, new org.apache.commons.math3.distribution.UniformRealDistribution(unusedRng, loUniform, hiUniform), - ContinuousUniformSampler.of(RandomSource.MT_64.create(), loUniform, hiUniform)); + ContinuousUniformSampler.of(RandomAssert.createRNG(), loUniform, hiUniform)); // Weibull ("inverse method"). final double alphaWeibull = 678.9; final double betaWeibull = 98.76; add(LIST, new org.apache.commons.math3.distribution.WeibullDistribution(unusedRng, alphaWeibull, betaWeibull), - RandomSource.WELL_44497_B.create()); + RandomAssert.createRNG()); } catch (Exception e) { // CHECKSTYLE: stop Regexp System.err.println("Unexpected exception while creating the list of samplers: " + e); diff --git a/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/ContinuousUniformSamplerTest.java b/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/ContinuousUniformSamplerTest.java index 688ada0d..5f9f7e3e 100644 --- a/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/ContinuousUniformSamplerTest.java +++ b/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/ContinuousUniformSamplerTest.java @@ -34,7 +34,7 @@ class ContinuousUniformSamplerTest { void testNoRestrictionOnOrderOfLowAndHighParameters() { final double low = 3.18; final double high = 5.23; - final UniformRandomProvider rng = RandomSource.SPLIT_MIX_64.create(); + final UniformRandomProvider rng = RandomAssert.createRNG(); testSampleInRange(rng, low, high); testSampleInRange(rng, high, low); } diff --git a/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/DirichletSamplerTest.java b/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/DirichletSamplerTest.java index 9c75a7ef..db6ca875 100644 --- a/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/DirichletSamplerTest.java +++ b/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/DirichletSamplerTest.java @@ -193,7 +193,7 @@ class DirichletSamplerTest { */ private static void assertSamples(double... alpha) { // No fixed seed. Failed tests will be repeated by the JUnit test runner. - final UniformRandomProvider rng = RandomSource.XO_RO_SHI_RO_128_PP.create(); + final UniformRandomProvider rng = RandomAssert.createRNG(); final DirichletSampler sampler = DirichletSampler.of(rng, alpha); final int k = alpha.length; final double[][] samples = new double[100000][]; diff --git a/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/DiscreteSamplerTest.java b/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/DiscreteSamplerTest.java index 029d1a4e..3e52f931 100644 --- a/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/DiscreteSamplerTest.java +++ b/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/DiscreteSamplerTest.java @@ -17,6 +17,7 @@ package org.apache.commons.rng.sampling.distribution; import java.util.concurrent.ThreadLocalRandom; +import org.apache.commons.rng.sampling.RandomAssert; import org.apache.commons.rng.simple.RandomSource; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.RepeatedTest; @@ -30,7 +31,7 @@ import org.junit.jupiter.params.provider.ValueSource; class DiscreteSamplerTest { @Test void testSamplesUnlimitedSize() { - final DiscreteSampler s = RandomSource.SPLIT_MIX_64.create()::nextInt; + final DiscreteSampler s = RandomAssert.createRNG()::nextInt; Assertions.assertEquals(Long.MAX_VALUE, s.samples().spliterator().estimateSize()); } diff --git a/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/DiscreteSamplersList.java b/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/DiscreteSamplersList.java index 1a33921d..fe36b65c 100644 --- a/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/DiscreteSamplersList.java +++ b/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/DiscreteSamplersList.java @@ -23,7 +23,7 @@ import java.util.Collections; import org.apache.commons.math3.util.MathArrays; import org.apache.commons.rng.UniformRandomProvider; -import org.apache.commons.rng.simple.RandomSource; +import org.apache.commons.rng.sampling.RandomAssert; /** * List of samplers. @@ -48,26 +48,26 @@ public final class DiscreteSamplersList { final double probSuccessBinomial = 0.67; add(LIST, new org.apache.commons.math3.distribution.BinomialDistribution(unusedRng, trialsBinomial, probSuccessBinomial), MathArrays.sequence(8, 9, 1), - RandomSource.KISS.create()); + RandomAssert.createRNG()); add(LIST, new org.apache.commons.math3.distribution.BinomialDistribution(unusedRng, trialsBinomial, probSuccessBinomial), // range [9,16] MathArrays.sequence(8, 9, 1), - MarsagliaTsangWangDiscreteSampler.Binomial.of(RandomSource.WELL_19937_A.create(), trialsBinomial, probSuccessBinomial)); + MarsagliaTsangWangDiscreteSampler.Binomial.of(RandomAssert.createRNG(), trialsBinomial, probSuccessBinomial)); // Inverted add(LIST, new org.apache.commons.math3.distribution.BinomialDistribution(unusedRng, trialsBinomial, 1 - probSuccessBinomial), // range [4,11] = [20-16, 20-9] MathArrays.sequence(8, 4, 1), - MarsagliaTsangWangDiscreteSampler.Binomial.of(RandomSource.WELL_19937_C.create(), trialsBinomial, 1 - probSuccessBinomial)); + MarsagliaTsangWangDiscreteSampler.Binomial.of(RandomAssert.createRNG(), trialsBinomial, 1 - probSuccessBinomial)); // Geometric ("inverse method"). final double probSuccessGeometric = 0.21; add(LIST, new org.apache.commons.math3.distribution.GeometricDistribution(unusedRng, probSuccessGeometric), MathArrays.sequence(10, 0, 1), - RandomSource.ISAAC.create()); + RandomAssert.createRNG()); // Geometric. add(LIST, new org.apache.commons.math3.distribution.GeometricDistribution(unusedRng, probSuccessGeometric), MathArrays.sequence(10, 0, 1), - GeometricSampler.of(RandomSource.XOR_SHIFT_1024_S_PHI.create(), probSuccessGeometric)); + GeometricSampler.of(RandomAssert.createRNG(), probSuccessGeometric)); // Hypergeometric ("inverse method"). final int popSizeHyper = 34; @@ -75,57 +75,57 @@ public final class DiscreteSamplersList { final int sampleSizeHyper = 12; add(LIST, new org.apache.commons.math3.distribution.HypergeometricDistribution(unusedRng, popSizeHyper, numSuccessesHyper, sampleSizeHyper), MathArrays.sequence(10, 0, 1), - RandomSource.MT.create()); + RandomAssert.createRNG()); // Pascal ("inverse method"). final int numSuccessesPascal = 6; final double probSuccessPascal = 0.2; add(LIST, new org.apache.commons.math3.distribution.PascalDistribution(unusedRng, numSuccessesPascal, probSuccessPascal), MathArrays.sequence(18, 1, 1), - RandomSource.TWO_CMRES.create()); + RandomAssert.createRNG()); // Uniform ("inverse method"). final int loUniform = -3; final int hiUniform = 4; add(LIST, new org.apache.commons.math3.distribution.UniformIntegerDistribution(unusedRng, loUniform, hiUniform), MathArrays.sequence(8, -3, 1), - RandomSource.SPLIT_MIX_64.create()); + RandomAssert.createRNG()); // Uniform (power of 2 range). add(LIST, new org.apache.commons.math3.distribution.UniformIntegerDistribution(unusedRng, loUniform, hiUniform), MathArrays.sequence(8, -3, 1), - DiscreteUniformSampler.of(RandomSource.MT_64.create(), loUniform, hiUniform)); + DiscreteUniformSampler.of(RandomAssert.createRNG(), loUniform, hiUniform)); // Uniform (large range). final int halfMax = Integer.MAX_VALUE / 2; final int hiLargeUniform = halfMax + 10; final int loLargeUniform = -hiLargeUniform; add(LIST, new org.apache.commons.math3.distribution.UniformIntegerDistribution(unusedRng, loLargeUniform, hiLargeUniform), MathArrays.sequence(20, -halfMax, halfMax / 10), - DiscreteUniformSampler.of(RandomSource.WELL_1024_A.create(), loLargeUniform, hiLargeUniform)); + DiscreteUniformSampler.of(RandomAssert.createRNG(), loLargeUniform, hiLargeUniform)); // Uniform (non-power of 2 range). final int rangeNonPowerOf2Uniform = 11; final int hiNonPowerOf2Uniform = loUniform + rangeNonPowerOf2Uniform; add(LIST, new org.apache.commons.math3.distribution.UniformIntegerDistribution(unusedRng, loUniform, hiNonPowerOf2Uniform), MathArrays.sequence(rangeNonPowerOf2Uniform, -3, 1), - DiscreteUniformSampler.of(RandomSource.XO_SHI_RO_256_SS.create(), loUniform, hiNonPowerOf2Uniform)); + DiscreteUniformSampler.of(RandomAssert.createRNG(), loUniform, hiNonPowerOf2Uniform)); // Zipf ("inverse method"). final int numElementsZipf = 5; final double exponentZipf = 2.345; add(LIST, new org.apache.commons.math3.distribution.ZipfDistribution(unusedRng, numElementsZipf, exponentZipf), MathArrays.sequence(5, 1, 1), - RandomSource.XOR_SHIFT_1024_S_PHI.create()); + RandomAssert.createRNG()); // Zipf. add(LIST, new org.apache.commons.math3.distribution.ZipfDistribution(unusedRng, numElementsZipf, exponentZipf), MathArrays.sequence(5, 1, 1), - RejectionInversionZipfSampler.of(RandomSource.WELL_19937_C.create(), numElementsZipf, exponentZipf)); + RejectionInversionZipfSampler.of(RandomAssert.createRNG(), numElementsZipf, exponentZipf)); // Zipf (exponent close to 1). final double exponentCloseToOneZipf = 1 - 1e-10; add(LIST, new org.apache.commons.math3.distribution.ZipfDistribution(unusedRng, numElementsZipf, exponentCloseToOneZipf), MathArrays.sequence(5, 1, 1), - RejectionInversionZipfSampler.of(RandomSource.WELL_19937_C.create(), numElementsZipf, exponentCloseToOneZipf)); + RejectionInversionZipfSampler.of(RandomAssert.createRNG(), numElementsZipf, exponentCloseToOneZipf)); // Zipf (exponent = 0). add(LIST, MathArrays.sequence(5, 1, 1), new double[] {0.2, 0.2, 0.2, 0.2, 0.2}, - RejectionInversionZipfSampler.of(RandomSource.XO_RO_SHI_RO_128_PP.create(), numElementsZipf, 0.0)); + RejectionInversionZipfSampler.of(RandomAssert.createRNG(), numElementsZipf, 0.0)); // Poisson ("inverse method"). final double epsilonPoisson = org.apache.commons.math3.distribution.PoissonDistribution.DEFAULT_EPSILON; @@ -133,65 +133,65 @@ public final class DiscreteSamplersList { final double meanPoisson = 3.21; add(LIST, new org.apache.commons.math3.distribution.PoissonDistribution(unusedRng, meanPoisson, epsilonPoisson, maxIterationsPoisson), MathArrays.sequence(10, 0, 1), - RandomSource.MWC_256.create()); + RandomAssert.createRNG()); // Poisson. add(LIST, new org.apache.commons.math3.distribution.PoissonDistribution(unusedRng, meanPoisson, epsilonPoisson, maxIterationsPoisson), MathArrays.sequence(10, 0, 1), - PoissonSampler.of(RandomSource.KISS.create(), meanPoisson)); + PoissonSampler.of(RandomAssert.createRNG(), meanPoisson)); // Dedicated small mean poisson samplers add(LIST, new org.apache.commons.math3.distribution.PoissonDistribution(unusedRng, meanPoisson, epsilonPoisson, maxIterationsPoisson), MathArrays.sequence(10, 0, 1), - SmallMeanPoissonSampler.of(RandomSource.XO_SHI_RO_256_PLUS.create(), meanPoisson)); + SmallMeanPoissonSampler.of(RandomAssert.createRNG(), meanPoisson)); add(LIST, new org.apache.commons.math3.distribution.PoissonDistribution(unusedRng, meanPoisson, epsilonPoisson, maxIterationsPoisson), MathArrays.sequence(10, 0, 1), - KempSmallMeanPoissonSampler.of(RandomSource.XO_SHI_RO_128_PLUS.create(), meanPoisson)); + KempSmallMeanPoissonSampler.of(RandomAssert.createRNG(), meanPoisson)); add(LIST, new org.apache.commons.math3.distribution.PoissonDistribution(unusedRng, meanPoisson, epsilonPoisson, maxIterationsPoisson), MathArrays.sequence(10, 0, 1), - MarsagliaTsangWangDiscreteSampler.Poisson.of(RandomSource.XO_SHI_RO_128_PLUS.create(), meanPoisson)); + MarsagliaTsangWangDiscreteSampler.Poisson.of(RandomAssert.createRNG(), meanPoisson)); // LargeMeanPoissonSampler should work at small mean. // Note: This hits a code path where the sample from the normal distribution is rejected. add(LIST, new org.apache.commons.math3.distribution.PoissonDistribution(unusedRng, meanPoisson, epsilonPoisson, maxIterationsPoisson), MathArrays.sequence(10, 0, 1), - LargeMeanPoissonSampler.of(RandomSource.PCG_MCG_XSH_RR_32.create(), meanPoisson)); + LargeMeanPoissonSampler.of(RandomAssert.createRNG(), meanPoisson)); // Poisson (40 < mean < 80). final double largeMeanPoisson = 67.89; add(LIST, new org.apache.commons.math3.distribution.PoissonDistribution(unusedRng, largeMeanPoisson, epsilonPoisson, maxIterationsPoisson), MathArrays.sequence(50, (int) (largeMeanPoisson - 25), 1), - PoissonSampler.of(RandomSource.SPLIT_MIX_64.create(), largeMeanPoisson)); + PoissonSampler.of(RandomAssert.createRNG(), largeMeanPoisson)); // Dedicated large mean poisson sampler add(LIST, new org.apache.commons.math3.distribution.PoissonDistribution(unusedRng, largeMeanPoisson, epsilonPoisson, maxIterationsPoisson), MathArrays.sequence(50, (int) (largeMeanPoisson - 25), 1), - LargeMeanPoissonSampler.of(RandomSource.SPLIT_MIX_64.create(), largeMeanPoisson)); + LargeMeanPoissonSampler.of(RandomAssert.createRNG(), largeMeanPoisson)); add(LIST, new org.apache.commons.math3.distribution.PoissonDistribution(unusedRng, largeMeanPoisson, epsilonPoisson, maxIterationsPoisson), MathArrays.sequence(50, (int) (largeMeanPoisson - 25), 1), - MarsagliaTsangWangDiscreteSampler.Poisson.of(RandomSource.XO_RO_SHI_RO_128_PLUS.create(), largeMeanPoisson)); + MarsagliaTsangWangDiscreteSampler.Poisson.of(RandomAssert.createRNG(), largeMeanPoisson)); // Poisson (mean >> 40). final double veryLargeMeanPoisson = 543.21; add(LIST, new org.apache.commons.math3.distribution.PoissonDistribution(unusedRng, veryLargeMeanPoisson, epsilonPoisson, maxIterationsPoisson), MathArrays.sequence(100, (int) (veryLargeMeanPoisson - 50), 1), - PoissonSampler.of(RandomSource.SPLIT_MIX_64.create(), veryLargeMeanPoisson)); + PoissonSampler.of(RandomAssert.createRNG(), veryLargeMeanPoisson)); // Dedicated large mean poisson sampler add(LIST, new org.apache.commons.math3.distribution.PoissonDistribution(unusedRng, veryLargeMeanPoisson, epsilonPoisson, maxIterationsPoisson), MathArrays.sequence(100, (int) (veryLargeMeanPoisson - 50), 1), - LargeMeanPoissonSampler.of(RandomSource.SPLIT_MIX_64.create(), veryLargeMeanPoisson)); + LargeMeanPoissonSampler.of(RandomAssert.createRNG(), veryLargeMeanPoisson)); add(LIST, new org.apache.commons.math3.distribution.PoissonDistribution(unusedRng, veryLargeMeanPoisson, epsilonPoisson, maxIterationsPoisson), MathArrays.sequence(100, (int) (veryLargeMeanPoisson - 50), 1), - MarsagliaTsangWangDiscreteSampler.Poisson.of(RandomSource.XO_RO_SHI_RO_64_SS.create(), veryLargeMeanPoisson)); + MarsagliaTsangWangDiscreteSampler.Poisson.of(RandomAssert.createRNG(), veryLargeMeanPoisson)); // Any discrete distribution final int[] discretePoints = {0, 1, 2, 3, 4}; final double[] discreteProbabilities = {0.1, 0.2, 0.3, 0.4, 0.5}; final long[] discreteFrequencies = {1, 2, 3, 4, 5}; add(LIST, discretePoints, discreteProbabilities, - MarsagliaTsangWangDiscreteSampler.Enumerated.of(RandomSource.XO_SHI_RO_512_PLUS.create(), discreteProbabilities)); + MarsagliaTsangWangDiscreteSampler.Enumerated.of(RandomAssert.createRNG(), discreteProbabilities)); add(LIST, discretePoints, discreteProbabilities, - GuideTableDiscreteSampler.of(RandomSource.XO_SHI_RO_512_SS.create(), discreteProbabilities)); + GuideTableDiscreteSampler.of(RandomAssert.createRNG(), discreteProbabilities)); add(LIST, discretePoints, discreteProbabilities, - AliasMethodDiscreteSampler.of(RandomSource.KISS.create(), discreteProbabilities)); + AliasMethodDiscreteSampler.of(RandomAssert.createRNG(), discreteProbabilities)); add(LIST, discretePoints, discreteProbabilities, - FastLoadedDiceRollerDiscreteSampler.of(RandomSource.L64_X128_MIX.create(), discreteFrequencies)); + FastLoadedDiceRollerDiscreteSampler.of(RandomAssert.createRNG(), discreteFrequencies)); add(LIST, discretePoints, discreteProbabilities, - FastLoadedDiceRollerDiscreteSampler.of(RandomSource.L64_X128_SS.create(), discreteProbabilities)); + FastLoadedDiceRollerDiscreteSampler.of(RandomAssert.createRNG(), discreteProbabilities)); } catch (Exception e) { // CHECKSTYLE: stop Regexp System.err.println("Unexpected exception while creating the list of samplers: " + e); diff --git a/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/DiscreteUniformSamplerTest.java b/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/DiscreteUniformSamplerTest.java index 0665f4da..69eefccf 100644 --- a/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/DiscreteUniformSamplerTest.java +++ b/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/DiscreteUniformSamplerTest.java @@ -46,7 +46,7 @@ class DiscreteUniformSamplerTest { void testSamplesWithRangeOf1() { final int upper = 99; final int lower = upper; - final UniformRandomProvider rng = RandomSource.SPLIT_MIX_64.create(); + final UniformRandomProvider rng = RandomAssert.createRNG(); final SharedStateDiscreteSampler sampler = DiscreteUniformSampler.of(rng, lower, upper); for (int i = 0; i < 5; i++) { Assertions.assertEquals(lower, sampler.sample()); diff --git a/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/FastLoadedDiceRollerDiscreteSamplerTest.java b/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/FastLoadedDiceRollerDiscreteSamplerTest.java index 2ccf43c4..b130f565 100644 --- a/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/FastLoadedDiceRollerDiscreteSamplerTest.java +++ b/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/FastLoadedDiceRollerDiscreteSamplerTest.java @@ -42,7 +42,7 @@ class FastLoadedDiceRollerDiscreteSamplerTest { * @return the FLDR sampler */ private static SharedStateDiscreteSampler createSampler(long... frequencies) { - final UniformRandomProvider rng = RandomSource.SPLIT_MIX_64.create(); + final UniformRandomProvider rng = RandomAssert.createRNG(); return FastLoadedDiceRollerDiscreteSampler.of(rng, frequencies); } @@ -53,7 +53,7 @@ class FastLoadedDiceRollerDiscreteSamplerTest { * @return the FLDR sampler */ private static SharedStateDiscreteSampler createSampler(double... weights) { - final UniformRandomProvider rng = RandomSource.SPLIT_MIX_64.create(); + final UniformRandomProvider rng = RandomAssert.createRNG(); return FastLoadedDiceRollerDiscreteSampler.of(rng, weights); } @@ -403,7 +403,7 @@ class FastLoadedDiceRollerDiscreteSamplerTest { @ValueSource(ints = {1023, 67, 1, -59, -1020, -1021}) void testScaledWeights(int scaleFactor) { // Weights in [0, 1) - final double[] w1 = RandomSource.KISS.create().doubles(10).toArray(); + final double[] w1 = RandomAssert.createRNG().doubles(10).toArray(); final double scale = Math.scalb(1.0, scaleFactor); final double[] w2 = Arrays.stream(w1).map(x -> x * scale).toArray(); final long seed = RandomSource.createLong(); diff --git a/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/GuideTableDiscreteSamplerTest.java b/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/GuideTableDiscreteSamplerTest.java index 0f518367..0b97d710 100644 --- a/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/GuideTableDiscreteSamplerTest.java +++ b/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/GuideTableDiscreteSamplerTest.java @@ -90,7 +90,7 @@ class GuideTableDiscreteSamplerTest { @Test void testToString() { - final UniformRandomProvider rng = RandomSource.SPLIT_MIX_64.create(); + final UniformRandomProvider rng = RandomAssert.createRNG(); final SharedStateDiscreteSampler sampler = GuideTableDiscreteSampler.of(rng, new double[] {0.5, 0.5}, 1.0); Assertions.assertTrue(sampler.toString().toLowerCase().contains("guide table")); } @@ -187,7 +187,7 @@ class GuideTableDiscreteSamplerTest { * @param alpha the alpha */ private static void checkSamples(double[] probabilies, double alpha) { - final UniformRandomProvider rng = RandomSource.JSF_64.create(); + final UniformRandomProvider rng = RandomAssert.createRNG(); final SharedStateDiscreteSampler sampler = GuideTableDiscreteSampler.of(rng, probabilies, alpha); final int numberOfSamples = 10000; diff --git a/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/LongSamplerTest.java b/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/LongSamplerTest.java index 26ca85e5..34792d56 100644 --- a/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/LongSamplerTest.java +++ b/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/LongSamplerTest.java @@ -17,6 +17,7 @@ package org.apache.commons.rng.sampling.distribution; import java.util.concurrent.ThreadLocalRandom; +import org.apache.commons.rng.sampling.RandomAssert; import org.apache.commons.rng.simple.RandomSource; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.RepeatedTest; @@ -30,7 +31,7 @@ import org.junit.jupiter.params.provider.ValueSource; class LongSamplerTest { @Test void testSamplesUnlimitedSize() { - final LongSampler s = RandomSource.SPLIT_MIX_64.create()::nextLong; + final LongSampler s = RandomAssert.createRNG()::nextLong; Assertions.assertEquals(Long.MAX_VALUE, s.samples().spliterator().estimateSize()); } diff --git a/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/MarsagliaTsangWangDiscreteSamplerTest.java b/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/MarsagliaTsangWangDiscreteSamplerTest.java index e839fb14..79eda8bf 100644 --- a/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/MarsagliaTsangWangDiscreteSamplerTest.java +++ b/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/MarsagliaTsangWangDiscreteSamplerTest.java @@ -183,7 +183,7 @@ class MarsagliaTsangWangDiscreteSamplerTest { void testRealProbabilityDistributionSamples() { // These do not have to sum to 1 final double[] probabilities = new double[11]; - final UniformRandomProvider rng = RandomSource.SPLIT_MIX_64.create(); + final UniformRandomProvider rng = RandomAssert.createRNG(); for (int i = 0; i < probabilities.length; i++) { probabilities[i] = rng.nextDouble(); } diff --git a/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/StableSamplerTest.java b/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/StableSamplerTest.java index 4f4f06d0..df4f584f 100644 --- a/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/StableSamplerTest.java +++ b/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/StableSamplerTest.java @@ -538,7 +538,7 @@ class StableSamplerTest { // As pi is an approximation then the cos value is not exactly 0 Assertions.assertTrue(cosPi2 > 0); - final UniformRandomProvider rng = RandomSource.XO_SHI_RO_256_SS.create(); + final UniformRandomProvider rng = RandomAssert.createRNG(); // The term is mirrored around 1 so use extremes between 1 and 0 final double[] alphas = {1, Math.nextDown(1), 0.99, 0.5, 0.1, 0.05, 0.01, DU}; @@ -690,7 +690,7 @@ class StableSamplerTest { //@Test void expm1ULPReport() { // Create random doubles with a given exponent. Compute the mean and max ULP difference. - final UniformRandomProvider rng = RandomSource.XO_RO_SHI_RO_128_PP.create(); + final UniformRandomProvider rng = RandomAssert.createRNG(); // For a quicker report set to <= 2^20. final int size = 1 << 30; // Create random doubles using random bits in the 52-bit mantissa. diff --git a/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/UniformLongSamplerTest.java b/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/UniformLongSamplerTest.java index 802a018e..2b46fa0d 100644 --- a/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/UniformLongSamplerTest.java +++ b/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/UniformLongSamplerTest.java @@ -56,7 +56,7 @@ class UniformLongSamplerTest { void testSamplesWithRangeOf1() { final long upper = 99; final long lower = upper; - final UniformRandomProvider rng = RandomSource.SPLIT_MIX_64.create(); + final UniformRandomProvider rng = RandomAssert.createRNG(); final UniformLongSampler sampler = UniformLongSampler.of(rng, lower, upper); for (int i = 0; i < 5; i++) { Assertions.assertEquals(lower, sampler.sample()); diff --git a/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/shape/TriangleSamplerTest.java b/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/shape/TriangleSamplerTest.java index 9f22507d..d60b5092 100644 --- a/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/shape/TriangleSamplerTest.java +++ b/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/shape/TriangleSamplerTest.java @@ -82,7 +82,7 @@ class TriangleSamplerTest { // Test that a(1 - s - t) + sb + tc does not overflow is s+t = 1 final double max = Double.MAX_VALUE; s -= delta; - final UniformRandomProvider rng = RandomSource.XO_RO_SHI_RO_128_PP.create(); + final UniformRandomProvider rng = RandomAssert.createRNG(); for (int n = 0; n < 100; n++) { Assertions.assertNotEquals(Double.POSITIVE_INFINITY, (1 - s - t) * max + s * max + t * max); s = rng.nextDouble();
