This is an automated email from the ASF dual-hosted git repository.
asf-gitbox-commits pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-statistics.git
The following commit(s) were added to refs/heads/master by this push:
new 9ee1a60a STATISTICS-96: Validate distribution parameters
9ee1a60a is described below
commit 9ee1a60ab16176c75876ba671b7bcd1de96431a9
Author: Alex Herbert <[email protected]>
AuthorDate: Thu Aug 27 10:20:04 2026 +0100
STATISTICS-96: Validate distribution parameters
Add checks for NaN values that invalidate the distribution.
---
.../commons/statistics/distribution/BetaDistribution.java | 9 ++++++---
.../statistics/distribution/CauchyDistribution.java | 9 +++++++--
.../statistics/distribution/DistributionException.java | 2 ++
.../statistics/distribution/ExponentialDistribution.java | 5 +++--
.../commons/statistics/distribution/FDistribution.java | 8 +++++---
.../statistics/distribution/FoldedNormalDistribution.java | 6 +++++-
.../commons/statistics/distribution/GammaDistribution.java | 9 ++++++---
.../statistics/distribution/GeometricDistribution.java | 6 ++++--
.../statistics/distribution/GumbelDistribution.java | 9 +++++++--
.../statistics/distribution/LaplaceDistribution.java | 9 +++++++--
.../commons/statistics/distribution/LevyDistribution.java | 9 +++++++--
.../statistics/distribution/LogNormalDistribution.java | 9 +++++++--
.../statistics/distribution/LogisticDistribution.java | 9 +++++++--
.../statistics/distribution/NakagamiDistribution.java | 10 ++++++----
.../statistics/distribution/NormalDistribution.java | 6 +++++-
.../statistics/distribution/ParetoDistribution.java | 8 +++++---
.../statistics/distribution/PascalDistribution.java | 8 ++++----
.../statistics/distribution/PoissonDistribution.java | 5 +++--
.../commons/statistics/distribution/TDistribution.java | 5 +++--
.../statistics/distribution/TrapezoidalDistribution.java | 14 +++++++++-----
.../statistics/distribution/TriangularDistribution.java | 11 +++++++----
.../distribution/TruncatedNormalDistribution.java | 14 +++++++++-----
.../statistics/distribution/WeibullDistribution.java | 9 ++++++---
.../commons/statistics/distribution/ZipfDistribution.java | 7 ++++---
.../statistics/distribution/BetaDistributionTest.java | 4 +++-
.../statistics/distribution/CauchyDistributionTest.java | 4 +++-
.../distribution/ChiSquaredDistributionTest.java | 3 ++-
.../distribution/ExponentialDistributionTest.java | 3 ++-
.../commons/statistics/distribution/FDistributionTest.java | 2 ++
.../distribution/FoldedNormalDistributionTest.java | 4 +++-
.../statistics/distribution/GammaDistributionTest.java | 2 ++
.../statistics/distribution/GeometricDistributionTest.java | 1 +
.../statistics/distribution/GumbelDistributionTest.java | 4 +++-
.../statistics/distribution/LaplaceDistributionTest.java | 4 +++-
.../statistics/distribution/LevyDistributionTest.java | 4 +++-
.../statistics/distribution/LogNormalDistributionTest.java | 4 +++-
.../statistics/distribution/LogisticDistributionTest.java | 4 +++-
.../statistics/distribution/NakagamiDistributionTest.java | 4 +++-
.../statistics/distribution/NormalDistributionTest.java | 4 +++-
.../statistics/distribution/ParetoDistributionTest.java | 2 ++
.../statistics/distribution/PascalDistributionTest.java | 1 +
.../statistics/distribution/PoissonDistributionTest.java | 1 +
.../commons/statistics/distribution/TDistributionTest.java | 3 ++-
.../distribution/TrapezoidalDistributionTest.java | 4 ++++
.../distribution/TriangularDistributionTest.java | 3 +++
.../distribution/TruncatedNormalDistributionTest.java | 9 +++++++++
.../statistics/distribution/WeibullDistributionTest.java | 2 ++
.../statistics/distribution/ZipfDistributionTest.java | 1 +
src/changes/changes.xml | 4 ++++
src/conf/pmd/pmd-ruleset.xml | 2 +-
50 files changed, 203 insertions(+), 76 deletions(-)
diff --git
a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/BetaDistribution.java
b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/BetaDistribution.java
index 95b27969..d6b39f04 100644
---
a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/BetaDistribution.java
+++
b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/BetaDistribution.java
@@ -73,14 +73,17 @@ public final class BetaDistribution extends
AbstractContinuousDistribution {
* @param alpha First shape parameter (must be positive).
* @param beta Second shape parameter (must be positive).
* @return the distribution
- * @throws IllegalArgumentException if {@code alpha <= 0} or {@code beta
<= 0}.
+ * @throws IllegalArgumentException if {@code alpha <= 0} or {@code beta
<= 0};
+ * or a parameter is {@code NaN}.
*/
public static BetaDistribution of(double alpha,
double beta) {
- if (alpha <= 0) {
+ if (!(alpha > 0)) {
+ // zero, negative or nan
throw new
DistributionException(DistributionException.NOT_STRICTLY_POSITIVE, alpha);
}
- if (beta <= 0) {
+ if (!(beta > 0)) {
+ // zero, negative or nan
throw new
DistributionException(DistributionException.NOT_STRICTLY_POSITIVE, beta);
}
return new BetaDistribution(alpha, beta);
diff --git
a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/CauchyDistribution.java
b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/CauchyDistribution.java
index 00bebadb..b412db41 100644
---
a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/CauchyDistribution.java
+++
b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/CauchyDistribution.java
@@ -61,13 +61,18 @@ public final class CauchyDistribution extends
AbstractContinuousDistribution {
* @param location Location parameter.
* @param scale Scale parameter.
* @return the distribution
- * @throws IllegalArgumentException if {@code scale <= 0}.
+ * @throws IllegalArgumentException if {@code scale <= 0} or is {@code
NaN};
+ * or {@code location} is NaN.
*/
public static CauchyDistribution of(double location,
double scale) {
- if (scale <= 0) {
+ if (!(scale > 0)) {
+ // zero, negative or nan
throw new
DistributionException(DistributionException.NOT_STRICTLY_POSITIVE, scale);
}
+ if (Double.isNaN(location)) {
+ throw new DistributionException(DistributionException.NAN,
"Location");
+ }
return new CauchyDistribution(location, scale);
}
diff --git
a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/DistributionException.java
b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/DistributionException.java
index 143ab187..430f77ba 100644
---
a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/DistributionException.java
+++
b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/DistributionException.java
@@ -42,6 +42,8 @@ class DistributionException extends IllegalArgumentException {
static final String NOT_STRICTLY_POSITIVE = "Number %s is not greater than
0";
/** Error message for "not strictly positive finite" condition when {@code
x <= 0 || x == inf}. */
static final String NOT_STRICTLY_POSITIVE_FINITE = "Number %s is not
greater than 0 and finite";
+ /** Error message for a NaN parameter, formatted with the parameter name.
*/
+ static final String NAN = "%s is NaN";
/** Serializable version identifier. */
private static final long serialVersionUID = 20180119L;
diff --git
a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/ExponentialDistribution.java
b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/ExponentialDistribution.java
index 924dedf8..0969ba87 100644
---
a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/ExponentialDistribution.java
+++
b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/ExponentialDistribution.java
@@ -59,10 +59,11 @@ public final class ExponentialDistribution extends
AbstractContinuousDistributio
*
* @param mean Mean of this distribution. This is a scale parameter.
* @return the distribution
- * @throws IllegalArgumentException if {@code mean <= 0}.
+ * @throws IllegalArgumentException if {@code mean <= 0} or is {@code NaN}.
*/
public static ExponentialDistribution of(double mean) {
- if (mean <= 0) {
+ if (!(mean > 0)) {
+ // zero, negative or nan
throw new
DistributionException(DistributionException.NOT_STRICTLY_POSITIVE, mean);
}
return new ExponentialDistribution(mean);
diff --git
a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/FDistribution.java
b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/FDistribution.java
index fb78a961..ff33e658 100644
---
a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/FDistribution.java
+++
b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/FDistribution.java
@@ -95,15 +95,17 @@ public final class FDistribution extends
AbstractContinuousDistribution {
* @param denominatorDegreesOfFreedom Denominator degrees of freedom.
* @return the distribution
* @throws IllegalArgumentException if {@code numeratorDegreesOfFreedom <=
0} or
- * {@code denominatorDegreesOfFreedom <= 0}.
+ * {@code denominatorDegreesOfFreedom <= 0}; or a parameter is {@code NaN}.
*/
public static FDistribution of(double numeratorDegreesOfFreedom,
double denominatorDegreesOfFreedom) {
- if (numeratorDegreesOfFreedom <= 0) {
+ if (!(numeratorDegreesOfFreedom > 0)) {
+ // zero, negative or nan
throw new
DistributionException(DistributionException.NOT_STRICTLY_POSITIVE,
numeratorDegreesOfFreedom);
}
- if (denominatorDegreesOfFreedom <= 0) {
+ if (!(denominatorDegreesOfFreedom > 0)) {
+ // zero, negative or nan
throw new
DistributionException(DistributionException.NOT_STRICTLY_POSITIVE,
denominatorDegreesOfFreedom);
}
diff --git
a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/FoldedNormalDistribution.java
b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/FoldedNormalDistribution.java
index a8f11026..16ae2b44 100644
---
a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/FoldedNormalDistribution.java
+++
b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/FoldedNormalDistribution.java
@@ -285,11 +285,15 @@ public abstract class FoldedNormalDistribution extends
AbstractContinuousDistrib
* @param mu Location parameter.
* @param sigma Scale parameter.
* @return the distribution
- * @throws IllegalArgumentException if {@code sigma <= 0}.
+ * @throws IllegalArgumentException if {@code sigma <= 0} or is {@code
NaN};
+ * or {@code mu} is {@code NaN}.
*/
public static FoldedNormalDistribution of(double mu,
double sigma) {
if (sigma > 0) {
+ if (Double.isNaN(mu)) {
+ throw new DistributionException(DistributionException.NAN,
"Mu");
+ }
if (mu == 0) {
return new HalfNormalDistribution(sigma);
}
diff --git
a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/GammaDistribution.java
b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/GammaDistribution.java
index bcc7ae4d..9c645ed1 100644
---
a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/GammaDistribution.java
+++
b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/GammaDistribution.java
@@ -70,14 +70,17 @@ public final class GammaDistribution extends
AbstractContinuousDistribution {
* @param shape Shape parameter.
* @param scale Scale parameter.
* @return the distribution
- * @throws IllegalArgumentException if {@code shape <= 0} or {@code scale
<= 0}.
+ * @throws IllegalArgumentException if {@code shape <= 0} or {@code scale
<= 0};
+ * or a parameter is {@code NaN}.
*/
public static GammaDistribution of(double shape,
double scale) {
- if (shape <= 0) {
+ if (!(shape > 0)) {
+ // zero, negative or nan
throw new
DistributionException(DistributionException.NOT_STRICTLY_POSITIVE, shape);
}
- if (scale <= 0) {
+ if (!(scale > 0)) {
+ // zero, negative or nan
throw new
DistributionException(DistributionException.NOT_STRICTLY_POSITIVE, scale);
}
return new GammaDistribution(shape, scale);
diff --git
a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/GeometricDistribution.java
b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/GeometricDistribution.java
index 46bb3eb4..487f9110 100644
---
a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/GeometricDistribution.java
+++
b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/GeometricDistribution.java
@@ -79,10 +79,12 @@ public final class GeometricDistribution extends
AbstractDiscreteDistribution {
*
* @param p Probability of success.
* @return the geometric distribution
- * @throws IllegalArgumentException if {@code p <= 0} or {@code p > 1}.
+ * @throws IllegalArgumentException if {@code p <= 0} or {@code p > 1};
+ * or {@code p} is {@code NaN}.
*/
public static GeometricDistribution of(double p) {
- if (p <= 0 || p > 1) {
+ if (!(p > 0 && p <= 1)) {
+ // out of range (0, 1] or nan
throw new
DistributionException(DistributionException.INVALID_NON_ZERO_PROBABILITY, p);
}
return new GeometricDistribution(p);
diff --git
a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/GumbelDistribution.java
b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/GumbelDistribution.java
index 6c54da4a..db0c78b2 100644
---
a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/GumbelDistribution.java
+++
b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/GumbelDistribution.java
@@ -68,13 +68,18 @@ public final class GumbelDistribution extends
AbstractContinuousDistribution {
* @param mu Location parameter.
* @param beta Scale parameter (must be positive).
* @return the distribution
- * @throws IllegalArgumentException if {@code beta <= 0}
+ * @throws IllegalArgumentException if {@code beta <= 0} or is {@code NaN};
+ * or {@code mu} is NaN
*/
public static GumbelDistribution of(double mu,
double beta) {
- if (beta <= 0) {
+ if (!(beta > 0)) {
+ // zero, negative or nan
throw new
DistributionException(DistributionException.NOT_STRICTLY_POSITIVE, beta);
}
+ if (Double.isNaN(mu)) {
+ throw new DistributionException(DistributionException.NAN,
"Location");
+ }
return new GumbelDistribution(mu, beta);
}
diff --git
a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/LaplaceDistribution.java
b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/LaplaceDistribution.java
index bfc98c09..04f89851 100644
---
a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/LaplaceDistribution.java
+++
b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/LaplaceDistribution.java
@@ -55,13 +55,18 @@ public final class LaplaceDistribution extends
AbstractContinuousDistribution {
* @param mu Location parameter.
* @param beta Scale parameter (must be positive).
* @return the distribution
- * @throws IllegalArgumentException if {@code beta <= 0}
+ * @throws IllegalArgumentException if {@code beta <= 0} or is {@code NaN};
+ * or {@code mu} is NaN
*/
public static LaplaceDistribution of(double mu,
double beta) {
- if (beta <= 0) {
+ if (!(beta > 0)) {
+ // zero, negative or nan
throw new
DistributionException(DistributionException.NOT_STRICTLY_POSITIVE, beta);
}
+ if (Double.isNaN(mu)) {
+ throw new DistributionException(DistributionException.NAN,
"Location");
+ }
return new LaplaceDistribution(mu, beta);
}
diff --git
a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/LevyDistribution.java
b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/LevyDistribution.java
index 11be800a..309a2bf6 100644
---
a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/LevyDistribution.java
+++
b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/LevyDistribution.java
@@ -64,14 +64,19 @@ public final class LevyDistribution extends
AbstractContinuousDistribution {
* @param mu Location parameter.
* @param c Scale parameter.
* @return the distribution
- * @throws IllegalArgumentException if {@code c <= 0}.
+ * @throws IllegalArgumentException if {@code c <= 0} or is {@code NaN};
+ * or {@code mu} is NaN.
*/
public static LevyDistribution of(double mu,
double c) {
- if (c <= 0) {
+ if (!(c > 0)) {
+ // zero, negative or nan
throw new
DistributionException(DistributionException.NOT_STRICTLY_POSITIVE,
c);
}
+ if (Double.isNaN(mu)) {
+ throw new DistributionException(DistributionException.NAN,
"Location");
+ }
return new LevyDistribution(mu, c);
}
diff --git
a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/LogNormalDistribution.java
b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/LogNormalDistribution.java
index ca41b4d2..bb4cc4a2 100644
---
a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/LogNormalDistribution.java
+++
b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/LogNormalDistribution.java
@@ -73,13 +73,18 @@ public final class LogNormalDistribution extends
AbstractContinuousDistribution
* @param mu Mean of the natural logarithm of the distribution values.
* @param sigma Standard deviation of the natural logarithm of the
distribution values.
* @return the distribution
- * @throws IllegalArgumentException if {@code sigma <= 0}.
+ * @throws IllegalArgumentException if {@code sigma <= 0} or is {@code
NaN};
+ * or {@code mu} is NaN.
*/
public static LogNormalDistribution of(double mu,
double sigma) {
- if (sigma <= 0) {
+ if (!(sigma > 0)) {
+ // zero, negative or nan
throw new
DistributionException(DistributionException.NOT_STRICTLY_POSITIVE, sigma);
}
+ if (Double.isNaN(mu)) {
+ throw new DistributionException(DistributionException.NAN, "Mu");
+ }
return new LogNormalDistribution(mu, sigma);
}
diff --git
a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/LogisticDistribution.java
b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/LogisticDistribution.java
index 1cbafbf9..664a111e 100644
---
a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/LogisticDistribution.java
+++
b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/LogisticDistribution.java
@@ -61,14 +61,19 @@ public final class LogisticDistribution extends
AbstractContinuousDistribution {
* @param mu Location parameter.
* @param scale Scale parameter (must be positive).
* @return the distribution
- * @throws IllegalArgumentException if {@code scale <= 0}.
+ * @throws IllegalArgumentException if {@code scale <= 0} or is {@code
NaN};
+ * or {@code mu} is NaN.
*/
public static LogisticDistribution of(double mu,
double scale) {
- if (scale <= 0) {
+ if (!(scale > 0)) {
+ // zero, negative or nan
throw new
DistributionException(DistributionException.NOT_STRICTLY_POSITIVE,
scale);
}
+ if (Double.isNaN(mu)) {
+ throw new DistributionException(DistributionException.NAN,
"Location");
+ }
return new LogisticDistribution(mu, scale);
}
diff --git
a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/NakagamiDistribution.java
b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/NakagamiDistribution.java
index 08a2af5e..7de38cd1 100644
---
a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/NakagamiDistribution.java
+++
b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/NakagamiDistribution.java
@@ -77,15 +77,17 @@ public final class NakagamiDistribution extends
AbstractContinuousDistribution {
* @param mu Shape parameter (must be positive).
* @param omega Scale parameter (must be positive). Controls the spread of
the distribution.
* @return the distribution
- * @throws IllegalArgumentException if {@code mu <= 0} or if
- * {@code omega <= 0}.
+ * @throws IllegalArgumentException if {@code mu <= 0} or if
+ * {@code omega <= 0}; or a parameter is {@code NaN}.
*/
public static NakagamiDistribution of(double mu,
double omega) {
- if (mu <= 0) {
+ if (!(mu > 0)) {
+ // zero, negative or nan
throw new
DistributionException(DistributionException.NOT_STRICTLY_POSITIVE, mu);
}
- if (omega <= 0) {
+ if (!(omega > 0)) {
+ // zero, negative or nan
throw new
DistributionException(DistributionException.NOT_STRICTLY_POSITIVE, omega);
}
return new NakagamiDistribution(mu, omega);
diff --git
a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/NormalDistribution.java
b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/NormalDistribution.java
index 9deccee9..ee96323a 100644
---
a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/NormalDistribution.java
+++
b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/NormalDistribution.java
@@ -84,11 +84,15 @@ public final class NormalDistribution extends
AbstractContinuousDistribution {
* @param mean Mean for this distribution.
* @param sd Standard deviation for this distribution.
* @return the distribution
- * @throws IllegalArgumentException if {@code sd <= 0}.
+ * @throws IllegalArgumentException if {@code sd <= 0} or is {@code NaN};
+ * or {@code mean} is NaN.
*/
public static NormalDistribution of(double mean,
double sd) {
if (sd > 0) {
+ if (Double.isNaN(mean)) {
+ throw new DistributionException(DistributionException.NAN,
"Mean");
+ }
return new NormalDistribution(mean, sd);
}
// zero, negative or nan
diff --git
a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/ParetoDistribution.java
b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/ParetoDistribution.java
index a61bf9fb..227eac00 100644
---
a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/ParetoDistribution.java
+++
b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/ParetoDistribution.java
@@ -96,14 +96,16 @@ public final class ParetoDistribution extends
AbstractContinuousDistribution {
* @param shape Shape parameter (Pareto index).
* @return the distribution
* @throws IllegalArgumentException if {@code scale <= 0}, {@code scale} is
- * infinite, or {@code shape <= 0}.
+ * infinite, or {@code shape <= 0}; or a parameter is {@code NaN}.
*/
public static ParetoDistribution of(double scale,
double shape) {
- if (scale <= 0 || scale == Double.POSITIVE_INFINITY) {
+ if (!(scale > 0 && scale < Double.POSITIVE_INFINITY)) {
+ // zero, negative, infinite or nan
throw new
DistributionException(DistributionException.NOT_STRICTLY_POSITIVE_FINITE,
scale);
}
- if (shape <= 0) {
+ if (!(shape > 0)) {
+ // zero, negative or nan
throw new
DistributionException(DistributionException.NOT_STRICTLY_POSITIVE, shape);
}
return new ParetoDistribution(scale, shape);
diff --git
a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/PascalDistribution.java
b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/PascalDistribution.java
index 1dffce21..073ad3b9 100644
---
a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/PascalDistribution.java
+++
b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/PascalDistribution.java
@@ -89,16 +89,16 @@ public final class PascalDistribution extends
AbstractDiscreteDistribution {
* @param r Number of successes.
* @param p Probability of success.
* @return the distribution
- * @throws IllegalArgumentException if {@code r <= 0} or {@code p <= 0} or
- * {@code p > 1}.
+ * @throws IllegalArgumentException if {@code r <= 0}; or {@code p <= 0},
+ * {@code p > 1} or {@code p} is {@code NaN}.
*/
public static PascalDistribution of(int r,
double p) {
if (r <= 0) {
throw new
DistributionException(DistributionException.NOT_STRICTLY_POSITIVE, r);
}
- if (p <= 0 ||
- p > 1) {
+ if (!(p > 0 && p <= 1)) {
+ // out of range (0, 1] or nan
throw new
DistributionException(DistributionException.INVALID_NON_ZERO_PROBABILITY, p);
}
return new PascalDistribution(r, p);
diff --git
a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/PoissonDistribution.java
b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/PoissonDistribution.java
index fb09600d..5bf07648 100644
---
a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/PoissonDistribution.java
+++
b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/PoissonDistribution.java
@@ -55,10 +55,11 @@ public final class PoissonDistribution extends
AbstractDiscreteDistribution {
*
* @param mean Poisson mean.
* @return the distribution
- * @throws IllegalArgumentException if {@code mean <= 0}.
+ * @throws IllegalArgumentException if {@code mean <= 0} or is {@code NaN}.
*/
public static PoissonDistribution of(double mean) {
- if (mean <= 0) {
+ if (!(mean > 0)) {
+ // zero, negative or nan
throw new
DistributionException(DistributionException.NOT_STRICTLY_POSITIVE, mean);
}
return new PoissonDistribution(mean);
diff --git
a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/TDistribution.java
b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/TDistribution.java
index 109de5b3..806de6f0 100644
---
a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/TDistribution.java
+++
b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/TDistribution.java
@@ -237,10 +237,11 @@ public abstract class TDistribution extends
AbstractContinuousDistribution {
*
* @param degreesOfFreedom Degrees of freedom.
* @return the distribution
- * @throws IllegalArgumentException if {@code degreesOfFreedom <= 0}
+ * @throws IllegalArgumentException if {@code degreesOfFreedom <= 0} or is
{@code NaN}.
*/
public static TDistribution of(double degreesOfFreedom) {
- if (degreesOfFreedom <= 0) {
+ if (!(degreesOfFreedom > 0)) {
+ // zero, negative or nan
throw new
DistributionException(DistributionException.NOT_STRICTLY_POSITIVE,
degreesOfFreedom);
}
diff --git
a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/TrapezoidalDistribution.java
b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/TrapezoidalDistribution.java
index b8a02989..400c3235 100644
---
a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/TrapezoidalDistribution.java
+++
b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/TrapezoidalDistribution.java
@@ -373,22 +373,26 @@ public abstract class TrapezoidalDistribution extends
AbstractContinuousDistribu
* @param d Upper limit of this distribution (inclusive).
* @return the distribution
* @throws IllegalArgumentException if {@code a >= d}, if {@code b < a}, if
- * {@code c < b} or if {@code c > d}.
+ * {@code c < b} or if {@code c > d}; or a parameter is {@code NaN}.
*/
public static TrapezoidalDistribution of(double a, double b, double c,
double d) {
- if (a >= d) {
+ if (!(a < d)) {
+ // a >= d or nan
throw new
DistributionException(DistributionException.INVALID_RANGE_LOW_GTE_HIGH,
a, d);
}
- if (b < a) {
+ if (!(b >= a)) {
+ // b < a or nan
throw new DistributionException(DistributionException.TOO_SMALL,
b, a);
}
- if (c < b) {
+ if (!(c >= b)) {
+ // c < b or nan
throw new DistributionException(DistributionException.TOO_SMALL,
c, b);
}
- if (c > d) {
+ if (!(c <= d)) {
+ // c > d or nan
throw new DistributionException(DistributionException.TOO_LARGE,
c, d);
}
diff --git
a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/TriangularDistribution.java
b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/TriangularDistribution.java
index 77386cdb..f0ef0d6b 100644
---
a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/TriangularDistribution.java
+++
b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/TriangularDistribution.java
@@ -75,20 +75,23 @@ public final class TriangularDistribution extends
AbstractContinuousDistribution
* @param b Upper limit of this distribution (inclusive).
* @return the distribution
* @throws IllegalArgumentException if {@code a >= b}, if {@code c > b} or
if
- * {@code c < a}.
+ * {@code c < a}; or a parameter is {@code NaN}.
*/
public static TriangularDistribution of(double a,
double c,
double b) {
- if (a >= b) {
+ if (!(a < b)) {
+ // a >= b or nan
throw new
DistributionException(DistributionException.INVALID_RANGE_LOW_GTE_HIGH,
a, b);
}
- if (c < a) {
+ if (!(c >= a)) {
+ // c < a or nan
throw new DistributionException(DistributionException.TOO_SMALL,
c, a);
}
- if (c > b) {
+ if (!(c <= b)) {
+ // c > b or nan
throw new DistributionException(DistributionException.TOO_LARGE,
c, b);
}
diff --git
a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/TruncatedNormalDistribution.java
b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/TruncatedNormalDistribution.java
index 492a0724..245ea7ee 100644
---
a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/TruncatedNormalDistribution.java
+++
b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/TruncatedNormalDistribution.java
@@ -120,14 +120,17 @@ public final class TruncatedNormalDistribution extends
AbstractContinuousDistrib
* @param lower Lower bound (inclusive) of the distribution, can be {@link
Double#NEGATIVE_INFINITY}.
* @param upper Upper bound (inclusive) of the distribution, can be {@link
Double#POSITIVE_INFINITY}.
* @return the distribution
- * @throws IllegalArgumentException if {@code sd <= 0}; if {@code lower >=
upper}; or if
- * the truncation covers no probability range in the parent distribution.
+ * @throws IllegalArgumentException if {@code sd <= 0}; if {@code lower >=
upper}; if
+ * the truncation covers no probability range in the parent distribution;
+ * or a parameter is {@code NaN}.
*/
public static TruncatedNormalDistribution of(double mean, double sd,
double lower, double upper) {
- if (sd <= 0) {
+ if (!(sd > 0)) {
+ // zero, negative or nan
throw new
DistributionException(DistributionException.NOT_STRICTLY_POSITIVE, sd);
}
- if (lower >= upper) {
+ if (!(lower < upper)) {
+ // lower >= upper, or nan bounds
throw new
DistributionException(DistributionException.INVALID_RANGE_LOW_GTE_HIGH, lower,
upper);
}
@@ -137,7 +140,8 @@ public final class TruncatedNormalDistribution extends
AbstractContinuousDistrib
// If there is no computable range then raise an exception.
final double z = parent.probability(lower, upper);
- if (z <= MIN_P) {
+ if (!(z > MIN_P)) {
+ // z <= MIN_P, or z is nan
// Map the bounds to a standard normal distribution for the message
final double a = (lower - mean) / sd;
final double b = (upper - mean) / sd;
diff --git
a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/WeibullDistribution.java
b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/WeibullDistribution.java
index 07b8d068..f5a1dc08 100644
---
a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/WeibullDistribution.java
+++
b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/WeibullDistribution.java
@@ -73,15 +73,18 @@ public final class WeibullDistribution extends
AbstractContinuousDistribution {
* @param shape Shape parameter.
* @param scale Scale parameter.
* @return the distribution
- * @throws IllegalArgumentException if {@code shape <= 0} or {@code scale
<= 0}.
+ * @throws IllegalArgumentException if {@code shape <= 0} or {@code scale
<= 0};
+ * or a parameter is {@code NaN}.
*/
public static WeibullDistribution of(double shape,
double scale) {
- if (shape <= 0) {
+ if (!(shape > 0)) {
+ // zero, negative or nan
throw new
DistributionException(DistributionException.NOT_STRICTLY_POSITIVE,
shape);
}
- if (scale <= 0) {
+ if (!(scale > 0)) {
+ // zero, negative or nan
throw new
DistributionException(DistributionException.NOT_STRICTLY_POSITIVE,
scale);
}
diff --git
a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/ZipfDistribution.java
b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/ZipfDistribution.java
index 2d670935..0e92d16e 100644
---
a/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/ZipfDistribution.java
+++
b/commons-statistics-distribution/src/main/java/org/apache/commons/statistics/distribution/ZipfDistribution.java
@@ -64,8 +64,8 @@ public final class ZipfDistribution extends
AbstractDiscreteDistribution {
* @param numberOfElements Number of elements.
* @param exponent Exponent.
* @return the distribution
- * @exception IllegalArgumentException if {@code numberOfElements <= 0}
- * or {@code exponent <= 0}.
+ * @exception IllegalArgumentException if {@code numberOfElements <= 0};
+ * or {@code exponent <= 0} or is {@code NaN}.
*/
public static ZipfDistribution of(int numberOfElements,
double exponent) {
@@ -73,7 +73,8 @@ public final class ZipfDistribution extends
AbstractDiscreteDistribution {
throw new
DistributionException(DistributionException.NOT_STRICTLY_POSITIVE,
numberOfElements);
}
- if (exponent < 0) {
+ if (!(exponent >= 0)) {
+ // negative or nan
throw new DistributionException(DistributionException.NEGATIVE,
exponent);
}
diff --git
a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/BetaDistributionTest.java
b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/BetaDistributionTest.java
index 6046744e..f2b59b32 100644
---
a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/BetaDistributionTest.java
+++
b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/BetaDistributionTest.java
@@ -52,7 +52,9 @@ class BetaDistributionTest extends
BaseContinuousDistributionTest {
{0.0, 1.0},
{-0.1, 1.0},
{0.5, 0.0},
- {0.5, -0.1}
+ {0.5, -0.1},
+ {Double.NaN, 1.0},
+ {0.5, Double.NaN}
};
}
diff --git
a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/CauchyDistributionTest.java
b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/CauchyDistributionTest.java
index 12306f9e..f2a894e6 100644
---
a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/CauchyDistributionTest.java
+++
b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/CauchyDistributionTest.java
@@ -33,7 +33,9 @@ class CauchyDistributionTest extends
BaseContinuousDistributionTest {
Object[][] makeInvalidParameters() {
return new Object[][] {
{0.0, 0.0},
- {0.0, -0.1}
+ {0.0, -0.1},
+ {Double.NaN, 1.0},
+ {0.0, Double.NaN}
};
}
diff --git
a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/ChiSquaredDistributionTest.java
b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/ChiSquaredDistributionTest.java
index 93da16ef..0a809d99 100644
---
a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/ChiSquaredDistributionTest.java
+++
b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/ChiSquaredDistributionTest.java
@@ -37,7 +37,8 @@ class ChiSquaredDistributionTest extends
BaseContinuousDistributionTest {
Object[][] makeInvalidParameters() {
return new Object[][] {
{0.0},
- {-0.1}
+ {-0.1},
+ {Double.NaN}
};
}
diff --git
a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/ExponentialDistributionTest.java
b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/ExponentialDistributionTest.java
index aba57195..5f60a19b 100644
---
a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/ExponentialDistributionTest.java
+++
b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/ExponentialDistributionTest.java
@@ -37,7 +37,8 @@ class ExponentialDistributionTest extends
BaseContinuousDistributionTest {
Object[][] makeInvalidParameters() {
return new Object[][] {
{0.0},
- {-0.1}
+ {-0.1},
+ {Double.NaN}
};
}
diff --git
a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/FDistributionTest.java
b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/FDistributionTest.java
index b8aca866..0bf47b40 100644
---
a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/FDistributionTest.java
+++
b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/FDistributionTest.java
@@ -42,6 +42,8 @@ class FDistributionTest extends
BaseContinuousDistributionTest {
{-0.1, 1.0},
{1.0, 0.0},
{1.0, -0.1},
+ {Double.NaN, 1.0},
+ {1.0, Double.NaN},
};
}
diff --git
a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/FoldedNormalDistributionTest.java
b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/FoldedNormalDistributionTest.java
index f1007d16..fd27849d 100644
---
a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/FoldedNormalDistributionTest.java
+++
b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/FoldedNormalDistributionTest.java
@@ -39,7 +39,9 @@ class FoldedNormalDistributionTest extends
BaseContinuousDistributionTest {
Object[][] makeInvalidParameters() {
return new Object[][] {
{0.0, 0.0},
- {0.0, -0.1}
+ {0.0, -0.1},
+ {Double.NaN, 1.0},
+ {0.0, Double.NaN}
};
}
diff --git
a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/GammaDistributionTest.java
b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/GammaDistributionTest.java
index 3d9b8209..c902bf66 100644
---
a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/GammaDistributionTest.java
+++
b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/GammaDistributionTest.java
@@ -51,6 +51,8 @@ class GammaDistributionTest extends
BaseContinuousDistributionTest {
{-0.1, 1.0},
{1.0, 0.0},
{1.0, -0.1},
+ {Double.NaN, 1.0},
+ {1.0, Double.NaN},
};
}
diff --git
a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/GeometricDistributionTest.java
b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/GeometricDistributionTest.java
index 3dfde948..fbe960a3 100644
---
a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/GeometricDistributionTest.java
+++
b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/GeometricDistributionTest.java
@@ -42,6 +42,7 @@ class GeometricDistributionTest extends
BaseDiscreteDistributionTest {
{-0.1},
{0.0},
{1.1},
+ {Double.NaN},
};
}
diff --git
a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/GumbelDistributionTest.java
b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/GumbelDistributionTest.java
index 15758d6d..75474a60 100644
---
a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/GumbelDistributionTest.java
+++
b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/GumbelDistributionTest.java
@@ -32,7 +32,9 @@ class GumbelDistributionTest extends
BaseContinuousDistributionTest {
Object[][] makeInvalidParameters() {
return new Object[][] {
{10.0, 0.0},
- {10.0, -0.1}
+ {10.0, -0.1},
+ {Double.NaN, 1.0},
+ {10.0, Double.NaN}
};
}
diff --git
a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/LaplaceDistributionTest.java
b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/LaplaceDistributionTest.java
index 2585cae3..7dab961f 100644
---
a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/LaplaceDistributionTest.java
+++
b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/LaplaceDistributionTest.java
@@ -33,7 +33,9 @@ class LaplaceDistributionTest extends
BaseContinuousDistributionTest {
Object[][] makeInvalidParameters() {
return new Object[][] {
{0.0, 0.0},
- {0.0, -0.1}
+ {0.0, -0.1},
+ {Double.NaN, 1.0},
+ {0.0, Double.NaN}
};
}
diff --git
a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/LevyDistributionTest.java
b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/LevyDistributionTest.java
index 8d58292c..f41454ef 100644
---
a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/LevyDistributionTest.java
+++
b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/LevyDistributionTest.java
@@ -32,7 +32,9 @@ class LevyDistributionTest extends
BaseContinuousDistributionTest {
Object[][] makeInvalidParameters() {
return new Object[][] {
{0.0, 0.0},
- {0.0, -0.1}
+ {0.0, -0.1},
+ {Double.NaN, 1.0},
+ {0.0, Double.NaN}
};
}
diff --git
a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/LogNormalDistributionTest.java
b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/LogNormalDistributionTest.java
index 72a0ed9e..2d0cdd51 100644
---
a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/LogNormalDistributionTest.java
+++
b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/LogNormalDistributionTest.java
@@ -36,7 +36,9 @@ class LogNormalDistributionTest extends
BaseContinuousDistributionTest {
Object[][] makeInvalidParameters() {
return new Object[][] {
{0.0, 0.0},
- {0.0, -0.1}
+ {0.0, -0.1},
+ {Double.NaN, 1.0},
+ {0.0, Double.NaN}
};
}
diff --git
a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/LogisticDistributionTest.java
b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/LogisticDistributionTest.java
index dc95475e..0bb6374f 100644
---
a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/LogisticDistributionTest.java
+++
b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/LogisticDistributionTest.java
@@ -35,7 +35,9 @@ class LogisticDistributionTest extends
BaseContinuousDistributionTest {
Object[][] makeInvalidParameters() {
return new Object[][] {
{0.0, 0.0},
- {0.0, -0.1}
+ {0.0, -0.1},
+ {Double.NaN, 1.0},
+ {0.0, Double.NaN}
};
}
diff --git
a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/NakagamiDistributionTest.java
b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/NakagamiDistributionTest.java
index 9229fefe..83e1133d 100644
---
a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/NakagamiDistributionTest.java
+++
b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/NakagamiDistributionTest.java
@@ -40,7 +40,9 @@ class NakagamiDistributionTest extends
BaseContinuousDistributionTest {
{0.0, 1.0},
{-0.1, 1.0},
{0.5, 0.0},
- {0.5, -0.1}
+ {0.5, -0.1},
+ {Double.NaN, 1.0},
+ {0.5, Double.NaN}
};
}
diff --git
a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/NormalDistributionTest.java
b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/NormalDistributionTest.java
index 50c25456..96ef56ba 100644
---
a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/NormalDistributionTest.java
+++
b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/NormalDistributionTest.java
@@ -43,7 +43,9 @@ class NormalDistributionTest extends
BaseContinuousDistributionTest {
Object[][] makeInvalidParameters() {
return new Object[][] {
{0.0, 0.0},
- {0.0, -0.1}
+ {0.0, -0.1},
+ {Double.NaN, 1.0},
+ {0.0, Double.NaN}
};
}
diff --git
a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/ParetoDistributionTest.java
b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/ParetoDistributionTest.java
index e07bc100..3da053b0 100644
---
a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/ParetoDistributionTest.java
+++
b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/ParetoDistributionTest.java
@@ -51,6 +51,8 @@ class ParetoDistributionTest extends
BaseContinuousDistributionTest {
{1.0, 0.0},
{1.0, -0.1},
{Double.POSITIVE_INFINITY, 1.0},
+ {Double.NaN, 1.0},
+ {1.0, Double.NaN},
};
}
diff --git
a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/PascalDistributionTest.java
b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/PascalDistributionTest.java
index 4b1ad996..4398987c 100644
---
a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/PascalDistributionTest.java
+++
b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/PascalDistributionTest.java
@@ -42,6 +42,7 @@ class PascalDistributionTest extends
BaseDiscreteDistributionTest {
{3, -0.1},
{3, 0.0},
{3, 1.1},
+ {3, Double.NaN},
};
}
diff --git
a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/PoissonDistributionTest.java
b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/PoissonDistributionTest.java
index 2f6e8597..f38a9d51 100644
---
a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/PoissonDistributionTest.java
+++
b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/PoissonDistributionTest.java
@@ -40,6 +40,7 @@ class PoissonDistributionTest extends
BaseDiscreteDistributionTest {
return new Object[][] {
{0.0},
{-0.1},
+ {Double.NaN},
};
}
diff --git
a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/TDistributionTest.java
b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/TDistributionTest.java
index 35872409..6b46606a 100644
---
a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/TDistributionTest.java
+++
b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/TDistributionTest.java
@@ -40,7 +40,8 @@ class TDistributionTest extends
BaseContinuousDistributionTest {
Object[][] makeInvalidParameters() {
return new Object[][] {
{0.0},
- {-0.1}
+ {-0.1},
+ {Double.NaN}
};
}
diff --git
a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/TrapezoidalDistributionTest.java
b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/TrapezoidalDistributionTest.java
index 2607319c..3b301980 100644
---
a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/TrapezoidalDistributionTest.java
+++
b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/TrapezoidalDistributionTest.java
@@ -57,6 +57,10 @@ class TrapezoidalDistributionTest extends
BaseContinuousDistributionTest {
{1.0, 2.0, 3.0, 1.5}, // d < b
{1.0, 2.0, 1.5, 4.0}, // c < b
{1.0, 2.0, 3.0, 2.5}, // d < c
+ {Double.NaN, 2.0, 3.0, 4.0}, // a = nan
+ {1.0, Double.NaN, 3.0, 4.0}, // b = nan
+ {1.0, 2.0, Double.NaN, 4.0}, // c = nan
+ {1.0, 2.0, 3.0, Double.NaN}, // d = nan
};
}
diff --git
a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/TriangularDistributionTest.java
b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/TriangularDistributionTest.java
index eb56b3f1..c37d6339 100644
---
a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/TriangularDistributionTest.java
+++
b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/TriangularDistributionTest.java
@@ -50,6 +50,9 @@ class TriangularDistributionTest extends
BaseContinuousDistributionTest {
{1.0, 4.0, 3.0},
{1.0, 2.0, -1.0},
{1.0, 2.0, 1.5},
+ {Double.NaN, 2.0, 3.0},
+ {1.0, Double.NaN, 3.0},
+ {1.0, 2.0, Double.NaN},
};
}
diff --git
a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/TruncatedNormalDistributionTest.java
b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/TruncatedNormalDistributionTest.java
index 7cb36e04..0de98e5d 100644
---
a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/TruncatedNormalDistributionTest.java
+++
b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/TruncatedNormalDistributionTest.java
@@ -49,6 +49,15 @@ class TruncatedNormalDistributionTest extends
BaseContinuousDistributionTest {
{0.0, 1.0, 1.0, -1.0},
// No usable probability range
{0.0, 1.0, 100.0, 101.0},
+ // NaN parameters
+ {Double.NaN, 1.0, -1.0, 1.0},
+ {0.0, Double.NaN, -1.0, 1.0},
+ {0.0, 1.0, Double.NaN, 1.0},
+ {0.0, 1.0, -1.0, Double.NaN},
+ // Infinite parameters
+ {Double.NEGATIVE_INFINITY, 1.0, -1.0, 1.0},
+ {Double.POSITIVE_INFINITY, 1.0, -1.0, 1.0},
+ {0.0, Double.POSITIVE_INFINITY, -1.0, 1.0},
};
}
diff --git
a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/WeibullDistributionTest.java
b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/WeibullDistributionTest.java
index bc7689bc..ae1b8514 100644
---
a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/WeibullDistributionTest.java
+++
b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/WeibullDistributionTest.java
@@ -46,6 +46,8 @@ class WeibullDistributionTest extends
BaseContinuousDistributionTest {
{-0.1, 2.0},
{1.0, 0.0},
{1.0, -0.1},
+ {Double.NaN, 2.0},
+ {1.0, Double.NaN},
};
}
diff --git
a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/ZipfDistributionTest.java
b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/ZipfDistributionTest.java
index efed1b77..403f165e 100644
---
a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/ZipfDistributionTest.java
+++
b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/ZipfDistributionTest.java
@@ -45,6 +45,7 @@ class ZipfDistributionTest extends
BaseDiscreteDistributionTest {
{0, 1.0},
{-1, 1.0},
{1, -0.1},
+ {1, Double.NaN},
};
}
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index c393e874..737ed284 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -53,6 +53,10 @@ If the output is not quite correct, check for invisible
trailing spaces!
</properties>
<body>
<release version="1.4" date="TBD" description="Adds new features (requires
Java 8).">
+ <action dev="aherbert" type="fix" due-to="Security scan, Aex Herbert"
issue="STATISTICS-96">
+ "commons-statistics-distribution": Checks added to distribution factory
+ functions for NaN parameters that invalidate the distribution.
+ </action>
<action dev="aherbert" type="fix" due-to="Security scan, Aex Herbert"
issue="STATISTICS-95">
"NormalConfidenceInterval": Validate mean is finite and variance is
positive finite.
</action>
diff --git a/src/conf/pmd/pmd-ruleset.xml b/src/conf/pmd/pmd-ruleset.xml
index 140b212c..1dfcc76a 100644
--- a/src/conf/pmd/pmd-ruleset.xml
+++ b/src/conf/pmd/pmd-ruleset.xml
@@ -195,7 +195,7 @@
<!-- Logic inversion allows detection of NaN for parameters that are
expected in a range -->
<property name="violationSuppressXPath"
value="./ancestor-or-self::ClassDeclaration[@SimpleName='Arguments'
- or @Name='Quantile']"/>
+ or @Name='Quantile' or matches(@SimpleName, '^.*Distribution$')]"/>
</properties>
</rule>
<rule ref="category/java/design.xml/UselessOverridingMethod">