Increase coverage (unit test).
Project: http://git-wip-us.apache.org/repos/asf/commons-rng/repo Commit: http://git-wip-us.apache.org/repos/asf/commons-rng/commit/e9e45328 Tree: http://git-wip-us.apache.org/repos/asf/commons-rng/tree/e9e45328 Diff: http://git-wip-us.apache.org/repos/asf/commons-rng/diff/e9e45328 Branch: refs/heads/master Commit: e9e453285da5bf02615a2c68f0619b2930efc0ca Parents: 86ed526 Author: Gilles <[email protected]> Authored: Thu Nov 17 19:03:55 2016 +0100 Committer: Gilles <[email protected]> Committed: Thu Nov 17 19:03:55 2016 +0100 ---------------------------------------------------------------------- .../distribution/DiscreteSamplersList.java | 22 +++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/commons-rng/blob/e9e45328/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/DiscreteSamplersList.java ---------------------------------------------------------------------- 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 cf3ae99..7e48ec3 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 @@ -76,6 +76,13 @@ public class DiscreteSamplersList { add(LIST, new org.apache.commons.math3.distribution.UniformIntegerDistribution(loUniform, hiUniform), MathArrays.sequence(8, -3, 1), new DiscreteUniformSampler(RandomSource.create(RandomSource.MT_64), 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(loLargeUniform, hiLargeUniform), + MathArrays.sequence(20, -halfMax, halfMax / 10), + new DiscreteUniformSampler(RandomSource.create(RandomSource.WELL_1024_A), loLargeUniform, hiLargeUniform)); // Zipf ("inverse method"). final int numElementsZipf = 5; @@ -172,8 +179,21 @@ public class DiscreteSamplersList { final int len = points.length; final double[] prob = new double[len]; for (int i = 0; i < len; i++) { - prob[i] = dist.probability(points[i]); + prob[i] = dist instanceof org.apache.commons.math3.distribution.UniformIntegerDistribution ? // XXX Workaround. + getProbability((org.apache.commons.math3.distribution.UniformIntegerDistribution) dist) : + dist.probability(points[i]); + + if (prob[i] < 0) { + throw new IllegalStateException(dist + ": p < 0 (at " + points[i] + ", p=" + prob[i]); + } } return prob; } + + /** + * Workaround bugs in Commons Math's "UniformIntegerDistribution" (cf. MATH-1396). + */ + private static double getProbability(org.apache.commons.math3.distribution.UniformIntegerDistribution dist) { + return 1 / ((double) dist.getSupportUpperBound() - (double) dist.getSupportLowerBound() + 1); + } }
