You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by ah...@apache.org on 2021/09/20 17:07:48 UTC

[commons-statistics] branch master updated (8f68338 -> 3e7d19b)

This is an automated email from the ASF dual-hosted git repository.

aherbert pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/commons-statistics.git.


    from 8f68338  Remove spurious file
     new ceb9763  Use assertThrows in-place of explicit try-catch
     new d9a569a  Append single characters using a char not a string
     new 1020638  Support pdf(x=mu) for the Levy distribution.
     new 814a562  Switch to junit-jupiter aggregator dependency
     new ceea72b  Use ParameterizedTest with MethodSource
     new 2f61888  Rename Cauchy distribution median to location
     new 3809a28  Use ParameterizedTest for addition Cauchy test cases
     new 2bae640  Document exponential as using the mean (scale) paramterization.
     new d7cda43  Document requirements of protected test methods
     new 7c20e10  Do not use test set-up and tear down fixtures
     new b51024f  Update test to use the protected methods to verify expected values
     new 052e447  Update constructor parameter name from p to mean
     new 3e7d19b  Use @ParameterizedTest for precondition test

The 13 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../distribution/CauchyDistribution.java           |  30 ++--
 .../distribution/ExponentialDistribution.java      |  17 +-
 .../statistics/distribution/LevyDistribution.java  |  12 +-
 .../distribution/PoissonDistribution.java          |  16 +-
 .../distribution/BinomialDistributionTest.java     |  49 +++---
 .../distribution/CauchyDistributionTest.java       |  49 +++---
 .../distribution/ChiSquaredDistributionTest.java   |  24 +--
 .../ContinuousDistributionAbstractTest.java        | 190 ++++++++++++++-------
 .../DiscreteDistributionAbstractTest.java          | 185 +++++++++++++-------
 .../distribution/ExponentialDistributionTest.java  |  37 ++--
 .../statistics/distribution/FDistributionTest.java |  36 ++--
 .../distribution/GammaDistributionTest.java        |  31 ++--
 .../distribution/GeometricDistributionTest.java    |  59 ++++---
 .../distribution/GumbelDistributionTest.java       |  27 ++-
 .../HypergeometricDistributionTest.java            |  51 +++---
 .../distribution/LaplaceDistributionTest.java      |  28 ++-
 .../distribution/LevyDistributionTest.java         | 112 ++++++++----
 .../distribution/LogNormalDistributionTest.java    |  29 +++-
 .../distribution/LogisticDistributionTest.java     |  13 +-
 .../distribution/NakagamiDistributionTest.java     |  30 +++-
 .../distribution/NormalDistributionTest.java       |  29 +++-
 .../distribution/ParetoDistributionTest.java       |  40 +++--
 .../distribution/PascalDistributionTest.java       |  42 ++---
 .../distribution/PoissonDistributionTest.java      |  33 ++--
 .../statistics/distribution/TDistributionTest.java |  21 ++-
 .../commons/statistics/distribution/TestUtils.java |   6 +-
 .../distribution/TriangularDistributionTest.java   |  68 +++-----
 .../UniformContinuousDistributionTest.java         |  19 +--
 .../UniformDiscreteDistributionTest.java           |  16 +-
 .../distribution/WeibullDistributionTest.java      |  38 +++--
 .../distribution/ZipfDistributionTest.java         |  33 ++--
 pom.xml                                            |   2 +-
 32 files changed, 824 insertions(+), 548 deletions(-)

[commons-statistics] 12/13: Update constructor parameter name from p to mean

Posted by ah...@apache.org.
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-statistics.git

commit 052e4474d4a0d3cbd1ee25d0021b30e0d42b3cb8
Author: aherbert <ah...@apache.org>
AuthorDate: Mon Sep 20 17:23:07 2021 +0100

    Update constructor parameter name from p to mean
---
 .../statistics/distribution/PoissonDistribution.java     | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

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 933123a..78277b5 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
@@ -40,30 +40,30 @@ public class PoissonDistribution extends AbstractDiscreteDistribution {
     /**
      * Creates a new Poisson distribution with specified mean.
      *
-     * @param p the Poisson mean
+     * @param mean the Poisson mean
      * @throws IllegalArgumentException if {@code p <= 0}.
      */
-    public PoissonDistribution(double p) {
-        this(p, DEFAULT_EPSILON, DEFAULT_MAX_ITERATIONS);
+    public PoissonDistribution(double mean) {
+        this(mean, DEFAULT_EPSILON, DEFAULT_MAX_ITERATIONS);
     }
 
     /**
      * Creates a new Poisson distribution with specified mean, convergence
      * criterion and maximum number of iterations.
      *
-     * @param p Poisson mean.
+     * @param mean Poisson mean.
      * @param epsilon Convergence criterion for cumulative probabilities.
      * @param maxIterations Maximum number of iterations for cumulative
      * probabilities.
      * @throws IllegalArgumentException if {@code p <= 0}.
      */
-    private PoissonDistribution(double p,
+    private PoissonDistribution(double mean,
                                 double epsilon,
                                 int maxIterations) {
-        if (p <= 0) {
-            throw new DistributionException(DistributionException.NOT_STRICTLY_POSITIVE, p);
+        if (mean <= 0) {
+            throw new DistributionException(DistributionException.NOT_STRICTLY_POSITIVE, mean);
         }
-        mean = p;
+        this.mean = mean;
         this.epsilon = epsilon;
         this.maxIterations = maxIterations;
     }

[commons-statistics] 04/13: Switch to junit-jupiter aggregator dependency

Posted by ah...@apache.org.
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-statistics.git

commit 814a5623e35439f09942ef6e314b784950507522
Author: aherbert <ah...@apache.org>
AuthorDate: Mon Sep 20 14:36:12 2021 +0100

    Switch to junit-jupiter aggregator dependency
    
    This adds the use of junit-jupiter-params.
---
 pom.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/pom.xml b/pom.xml
index 93fec16..9348984 100644
--- a/pom.xml
+++ b/pom.xml
@@ -192,7 +192,7 @@
   <dependencies>
      <dependency>
       <groupId>org.junit.jupiter</groupId>
-      <artifactId>junit-jupiter-engine</artifactId>
+      <artifactId>junit-jupiter</artifactId>
       <scope>test</scope>
     </dependency>
   </dependencies>

[commons-statistics] 03/13: Support pdf(x=mu) for the Levy distribution.

Posted by ah...@apache.org.
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-statistics.git

commit 1020638b31412e69983078c8a88994fb704b09c6
Author: aherbert <ah...@apache.org>
AuthorDate: Mon Sep 20 14:30:07 2021 +0100

    Support pdf(x=mu) for the Levy distribution.
    
    Allow evaluation when x=mu. This previously evaluated as NaN for the
    PDF. Python's scipy.stats and Wolfram's Mathematica evaluate zero for
    this point; it is the natural limit of the PDF as x approaches mu.
    
    Increase the test tolerance from 1e-4 to 1e-6. The low tolerance failed
    to detect an error in the inverse CDF:
    
    icdf(0.0) = 1.2 != 1.2001
---
 .../statistics/distribution/LevyDistribution.java  | 12 +++--
 .../distribution/LevyDistributionTest.java         | 61 ++++++++++++++++++----
 2 files changed, 60 insertions(+), 13 deletions(-)

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 477594f..44b9a8a 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
@@ -81,7 +81,11 @@ public class LevyDistribution extends AbstractContinuousDistribution {
     */
     @Override
     public double density(final double x) {
-        if (x < mu) {
+        if (x <= mu) {
+            // x=mu creates NaN:
+            // sqrt(c / 2pi) * exp(-c / 2(x-mu)) / (x-mu)^1.5
+            // = F * exp(-inf) * (x-mu)^-1.5 = F * 0 * inf
+            // Return 0 for this case.
             return 0;
         }
 
@@ -96,7 +100,7 @@ public class LevyDistribution extends AbstractContinuousDistribution {
      */
     @Override
     public double logDensity(double x) {
-        if (x < mu) {
+        if (x <= mu) {
             return Double.NEGATIVE_INFINITY;
         }
 
@@ -115,7 +119,7 @@ public class LevyDistribution extends AbstractContinuousDistribution {
      */
     @Override
     public double cumulativeProbability(final double x) {
-        if (x < mu) {
+        if (x <= mu) {
             return 0;
         }
         return Erfc.value(Math.sqrt(halfC / (x - mu)));
@@ -124,7 +128,7 @@ public class LevyDistribution extends AbstractContinuousDistribution {
     /** {@inheritDoc} */
     @Override
     public double survivalProbability(final double x) {
-        if (x < mu) {
+        if (x <= mu) {
             return 1;
         }
         return Erf.value(Math.sqrt(halfC / (x - mu)));
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 e10d01b..2adf79c 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
@@ -16,11 +16,23 @@
  */
 package org.apache.commons.statistics.distribution;
 
+import java.util.Arrays;
 import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
+/**
+ * Test cases for LevyDistribution.
+ */
 class LevyDistributionTest extends ContinuousDistributionAbstractTest {
 
+    //---------------------- Override tolerance --------------------------------
+
+    @BeforeEach
+    void customSetUp() {
+        setTolerance(1e-6);
+    }
+
     //-------------- Implementations for abstract methods ----------------------
 
     @Override
@@ -31,35 +43,49 @@ class LevyDistributionTest extends ContinuousDistributionAbstractTest {
     @Override
     public double[] makeCumulativeTestPoints() {
         return new double[] {
-            1.2001, 1.21, 1.225, 1.25, 1.3, 1.9, 3.4, 5.6
+            1.2, 1.2001, 1.21, 1.225, 1.25, 1.3, 1.9, 3.4, 5.6
         };
     }
 
     @Override
     public double[] makeCumulativeTestValues() {
         // values computed with R and function plevy from rmutil package
+        // 0 has been supplemented as R raises an error for x=mu;
+        // 'scipy.stats import levy' returns 0.
+        // Mathematica returns 0.
         return new double[] {
-            0, 2.53962850749e-10, 6.33424836662e-05, 0.00467773498105,
-            0.0455002638964, 0.449691797969, 0.669815357599, 0.763024600553
+            0, 0,
+            2.5396285074918978353e-10, 6.3342483666239957074e-05,
+            4.6777349810471768876e-03, 4.5500263896358417171e-02,
+            4.4969179796889102718e-01, 6.6981535759941657204e-01,
+            7.6302460055299503594e-01,
         };
     }
 
     @Override
     public double[] makeDensityTestValues() {
-        // values computed with R and function dlevy from rmutil package
+        // values computed with R and function plevy from rmutil package
+        // 0 has been supplemented for x=mu.
         return new double[] {
-            0, 5.20056373765e-07, 0.0214128361224, 0.413339707082, 1.07981933026,
-            0.323749319161, 0.0706032550094, 0.026122839884
+            0, 0,
+            5.2005637376544783034e-07, 2.1412836122382383069e-02,
+            4.1333970708184164522e-01, 1.0798193302637617563e+00,
+            3.2374931916108729002e-01, 7.0603255009363707906e-02,
+            2.6122839883975741693e-02,
         };
     }
 
     @Override
     public double[] makeLogDensityTestValues() {
         // Reference values are from R, version 2.14.1.
+        // -infinity has been supplemented for x=mu.
         return new double[] {
-            -1987.561573341398d, -14.469328620160d, -3.843764717971d,
-            -0.883485488811d, 0.076793740349d, -1.127785768948d,
-            -2.650679030597d, -3.644945255983d};
+            Double.NEGATIVE_INFINITY,   -1.9875615733413976614e+03,
+            -1.4469328620159595644e+01, -3.8437647179708118728e+00,
+            -8.8348548881076238715e-01,  7.6793740349318850846e-02,
+            -1.1277857689479373615e+00, -2.6506790305972467436e+00,
+            -3.6449452559826185372e+00
+        };
     }
 
     @Override
@@ -84,6 +110,23 @@ class LevyDistributionTest extends ContinuousDistributionAbstractTest {
         return new double[] {1.5957691216057308e-20, 2.4623252122982907e-20};
     }
 
+    @Override
+    public double[] makeInverseCumulativeTestPoints() {
+        // Eliminate redundancy as two cdf values are zero.
+        final double[] x = makeCumulativeTestValues();
+        return Arrays.copyOfRange(x, 1, x.length);
+    }
+
+    @Override
+    public double[] makeInverseCumulativeTestValues() {
+        // Remove the second test point which evaluates cdf(x) == 0.
+        double[] x = makeCumulativeTestPoints();
+        final double[] y = Arrays.copyOfRange(x, 1, x.length);
+        // Copy back the lowest value of x (this is the support lower bound)
+        y[0] = x[0];
+        return y;
+    }
+
     //-------------------- Additional test cases -------------------------------
 
     @Test

[commons-statistics] 11/13: Update test to use the protected methods to verify expected values

Posted by ah...@apache.org.
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-statistics.git

commit b51024f31de2b6b1ba621b3a39e16a62fac80d29
Author: aherbert <ah...@apache.org>
AuthorDate: Mon Sep 20 16:50:02 2021 +0100

    Update test to use the protected methods to verify expected values
---
 .../distribution/GeometricDistributionTest.java    | 34 ++++++++++++----------
 1 file changed, 18 insertions(+), 16 deletions(-)

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 2c1f573..d4f1b39 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
@@ -160,22 +160,24 @@ class GeometricDistributionTest extends DiscreteDistributionAbstractTest {
         Assertions.assertEquals(1.0, dist.getProbabilityOfSuccess());
         Assertions.assertEquals(0.0, dist.getMean());
         Assertions.assertEquals(0.0, dist.getVariance());
-        // XXX: Fails (returns NaN)
-        Assertions.assertEquals(1.0, dist.probability(0));
-        Assertions.assertEquals(0.0, dist.probability(1));
-        Assertions.assertEquals(0.0, dist.probability(2));
-        // XXX: Fails (returns NaN)
-        Assertions.assertEquals(0.0, dist.logProbability(0));
-        Assertions.assertEquals(Double.NEGATIVE_INFINITY, dist.logProbability(1));
-        Assertions.assertEquals(Double.NEGATIVE_INFINITY, dist.logProbability(2));
-        Assertions.assertEquals(1.0, dist.cumulativeProbability(0));
-        Assertions.assertEquals(1.0, dist.cumulativeProbability(1));
-        Assertions.assertEquals(0.0, dist.survivalProbability(0));
-        Assertions.assertEquals(0.0, dist.survivalProbability(1));
-        Assertions.assertEquals(0, dist.inverseCumulativeProbability(0.0));
-        Assertions.assertEquals(0, dist.inverseCumulativeProbability(0.5));
-        // XXX: Fails (returns Integer.MAX_VALUE)
-        Assertions.assertEquals(0, dist.inverseCumulativeProbability(1.0));
+
+        setDistribution(dist);
+        setProbabilityTestPoints(new int[] {0, 1, 2});
+        setProbabilityTestValues(new double[] {1.0, 0.0, 0.0});
+        setCumulativeTestPoints(new int[] {0, 1, 2});
+        setCumulativeTestValues(new double[] {1.0, 1.0, 1.0});
+        setInverseCumulativeTestPoints(new double[] {0, 0.5, 1.0});
+        setInverseCumulativeTestValues(new int[] {0, 0, 0});
+        // XXX: Fails (pmf(x=0) returns NaN)
+        verifyProbabilities();
+        // XXX: Fails (logpmf(x=0) returns NaN)
+        verifyLogProbabilities();
+        verifyCumulativeProbabilities();
+        verifySurvivalProbability();
+        verifySurvivalAndCumulativeProbabilityComplement();
+        // XXX: Fails (icdf(p=1) returns Integer.MAX_VALUE)
+        verifyInverseCumulativeProbabilities();
+
         Assertions.assertEquals(0, dist.getSupportLowerBound());
         // XXX: Fails (returns Integer.MAX_VALUE)
         Assertions.assertEquals(0, dist.getSupportUpperBound());

[commons-statistics] 01/13: Use assertThrows in-place of explicit try-catch

Posted by ah...@apache.org.
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-statistics.git

commit ceb97638eb8851ad33fd2491dea25fb9dab81fb6
Author: aherbert <ah...@apache.org>
AuthorDate: Mon Sep 20 12:06:01 2021 +0100

    Use assertThrows in-place of explicit try-catch
---
 .../distribution/ContinuousDistributionAbstractTest.java  | 15 +++++++--------
 .../distribution/DiscreteDistributionAbstractTest.java    | 15 +++++++--------
 2 files changed, 14 insertions(+), 16 deletions(-)

diff --git a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/ContinuousDistributionAbstractTest.java b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/ContinuousDistributionAbstractTest.java
index 5632fb2..7479ec2 100644
--- a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/ContinuousDistributionAbstractTest.java
+++ b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/ContinuousDistributionAbstractTest.java
@@ -275,19 +275,18 @@ abstract class ContinuousDistributionAbstractTest {
         }
         // verify probability(double, double)
         for (int i = 0; i < cumulativeTestPoints.length; i++) {
+            final double x0 = cumulativeTestPoints[i];
             for (int j = 0; j < cumulativeTestPoints.length; j++) {
-                if (cumulativeTestPoints[i] <= cumulativeTestPoints[j]) {
+                final double x1 = cumulativeTestPoints[j];
+                if (x0 <= x1) {
                     Assertions.assertEquals(
                         cumulativeTestValues[j] - cumulativeTestValues[i],
-                        distribution.probability(cumulativeTestPoints[i], cumulativeTestPoints[j]),
+                        distribution.probability(x0, x1),
                         getTolerance());
                 } else {
-                    try {
-                        distribution.probability(cumulativeTestPoints[i], cumulativeTestPoints[j]);
-                    } catch (final IllegalArgumentException e) {
-                        continue;
-                    }
-                    Assertions.fail("distribution.probability(double, double) should have thrown an exception that second argument is too large");
+                    Assertions.assertThrows(IllegalArgumentException.class,
+                        () -> distribution.probability(x0, x1),
+                        "distribution.probability(int, int) should have thrown an exception that first argument is too large");
                 }
             }
         }
diff --git a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/DiscreteDistributionAbstractTest.java b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/DiscreteDistributionAbstractTest.java
index 4ee99ad..4e49385 100644
--- a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/DiscreteDistributionAbstractTest.java
+++ b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/DiscreteDistributionAbstractTest.java
@@ -267,19 +267,18 @@ abstract class DiscreteDistributionAbstractTest {
         }
         // verify probability(double, double)
         for (int i = 0; i < cumulativeTestPoints.length; i++) {
+            final int x0 = cumulativeTestPoints[i];
             for (int j = 0; j < cumulativeTestPoints.length; j++) {
-                if (cumulativeTestPoints[i] <= cumulativeTestPoints[j]) {
+                final int x1 = cumulativeTestPoints[j];
+                if (x0 <= x1) {
                     Assertions.assertEquals(
                         cumulativeTestValues[j] - cumulativeTestValues[i],
-                        distribution.probability(cumulativeTestPoints[i], cumulativeTestPoints[j]),
+                        distribution.probability(x0, x1),
                         getTolerance());
                 } else {
-                    try {
-                        distribution.probability(cumulativeTestPoints[i], cumulativeTestPoints[j]);
-                    } catch (final IllegalArgumentException e) {
-                        continue;
-                    }
-                    Assertions.fail("distribution.probability(double, double) should have thrown an exception that second argument is too large");
+                    Assertions.assertThrows(IllegalArgumentException.class,
+                        () -> distribution.probability(x0, x1),
+                        "distribution.probability(int, int) should have thrown an exception that first argument is too large");
                 }
             }
         }

[commons-statistics] 06/13: Rename Cauchy distribution median to location

Posted by ah...@apache.org.
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-statistics.git

commit 2f61888cfa4b2d050ab81ed2ebe2d915c59d7349
Author: aherbert <ah...@apache.org>
AuthorDate: Mon Sep 20 15:00:59 2021 +0100

    Rename Cauchy distribution median to location
---
 .../distribution/CauchyDistribution.java           | 30 +++++++++++-----------
 .../distribution/CauchyDistributionTest.java       |  2 +-
 2 files changed, 16 insertions(+), 16 deletions(-)

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 d189025..c7fea19 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
@@ -23,8 +23,8 @@ import org.apache.commons.rng.sampling.distribution.StableSampler;
  * Implementation of the <a href="http://en.wikipedia.org/wiki/Cauchy_distribution">Cauchy distribution</a>.
  */
 public class CauchyDistribution extends AbstractContinuousDistribution {
-    /** The median of this distribution. */
-    private final double median;
+    /** The location of this distribution. */
+    private final double location;
     /** The scale of this distribution. */
     private final double scale;
     /** Density factor (scale / pi). */
@@ -35,28 +35,28 @@ public class CauchyDistribution extends AbstractContinuousDistribution {
     /**
      * Creates a distribution.
      *
-     * @param median Median for this distribution.
+     * @param location Location for this distribution.
      * @param scale Scale parameter for this distribution.
      * @throws IllegalArgumentException if {@code scale <= 0}.
      */
-    public CauchyDistribution(double median,
+    public CauchyDistribution(double location,
                               double scale) {
         if (scale <= 0) {
             throw new DistributionException(DistributionException.NOT_STRICTLY_POSITIVE, scale);
         }
         this.scale = scale;
-        this.median = median;
+        this.location = location;
         scaleOverPi = scale / Math.PI;
         scale2 = scale * scale;
     }
 
     /**
-     * Access the median.
+     * Access the location.
      *
-     * @return the median for this distribution.
+     * @return the location for this distribution.
      */
-    public double getMedian() {
-        return median;
+    public double getLocation() {
+        return location;
     }
 
     /**
@@ -71,20 +71,20 @@ public class CauchyDistribution extends AbstractContinuousDistribution {
     /** {@inheritDoc} */
     @Override
     public double density(double x) {
-        final double dev = x - median;
+        final double dev = x - location;
         return scaleOverPi / (dev * dev + scale2);
     }
 
     /** {@inheritDoc} */
     @Override
     public double cumulativeProbability(double x) {
-        return cdf((x - median) / scale);
+        return cdf((x - location) / scale);
     }
 
     /** {@inheritDoc} */
     @Override
     public double survivalProbability(double x) {
-        return cdf(-(x - median) / scale);
+        return cdf(-(x - location) / scale);
     }
 
     /**
@@ -112,7 +112,7 @@ public class CauchyDistribution extends AbstractContinuousDistribution {
         } else  if (p == 1) {
             return Double.POSITIVE_INFINITY;
         }
-        return median + scale * Math.tan(Math.PI * (p - .5));
+        return location + scale * Math.tan(Math.PI * (p - .5));
     }
 
     /**
@@ -181,7 +181,7 @@ public class CauchyDistribution extends AbstractContinuousDistribution {
     @Override
     public ContinuousDistribution.Sampler createSampler(final UniformRandomProvider rng) {
         // Cauchy distribution =
-        // Stable distribution with alpha=1, beta=0, gamma=scale, delta=location (median)
-        return StableSampler.of(rng, 1, 0, getScale(), getMedian())::sample;
+        // Stable distribution with alpha=1, beta=0, gamma=scale, delta=location
+        return StableSampler.of(rng, 1, 0, getScale(), getLocation())::sample;
     }
 }
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 ca34644..7b6835b 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
@@ -97,7 +97,7 @@ class CauchyDistributionTest extends ContinuousDistributionAbstractTest {
     @Test
     void testParameterAccessors() {
         final CauchyDistribution dist = makeDistribution();
-        Assertions.assertEquals(1.2, dist.getMedian());
+        Assertions.assertEquals(1.2, dist.getLocation());
         Assertions.assertEquals(2.1, dist.getScale());
     }
 

[commons-statistics] 09/13: Document requirements of protected test methods

Posted by ah...@apache.org.
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-statistics.git

commit d7cda43d1c9d84ff03cd2e1a662958d27dadbed8
Author: aherbert <ah...@apache.org>
AuthorDate: Mon Sep 20 15:53:18 2021 +0100

    Document requirements of protected test methods
---
 .../ContinuousDistributionAbstractTest.java        | 96 +++++++++++++++++++---
 .../DiscreteDistributionAbstractTest.java          | 96 +++++++++++++++++++---
 2 files changed, 170 insertions(+), 22 deletions(-)

diff --git a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/ContinuousDistributionAbstractTest.java b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/ContinuousDistributionAbstractTest.java
index 7479ec2..6092ff7 100644
--- a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/ContinuousDistributionAbstractTest.java
+++ b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/ContinuousDistributionAbstractTest.java
@@ -235,8 +235,16 @@ abstract class ContinuousDistributionAbstractTest {
     //-------------------- Verification methods -------------------------------
 
     /**
-     * Verifies that density calculations match expected values
-     * using current test instance data.
+     * Verifies that density calculations match expected values.
+     * Uses current test instance data.
+     *
+     * @see #makeDistribution()
+     * @see #makeCumulativeTestPoints()
+     * @see #makeDensityTestValues()
+     * @see #setDistribution(ContinuousDistribution)
+     * @see #setCumulativeTestPoints(double[])
+     * @see #setDensityTestValues(double[])
+     * @see #setTolerance(double)
      */
     protected void verifyDensities() {
         for (int i = 0; i < cumulativeTestPoints.length; i++) {
@@ -248,8 +256,16 @@ abstract class ContinuousDistributionAbstractTest {
     }
 
     /**
-     * Verifies that logarithmic density calculations match expected values
-     * using current test instance data.
+     * Verifies that logarithmic density calculations match expected values.
+     * Uses current test instance data.
+     *
+     * @see #makeDistribution()
+     * @see #makeCumulativeTestPoints()
+     * @see #makeLogDensityTestValues()
+     * @see #setDistribution(ContinuousDistribution)
+     * @see #setCumulativeTestPoints(double[])
+     * @see #setLogDensityTestValues(double[])
+     * @see #setTolerance(double)
      */
     protected void verifyLogDensities() {
         for (int i = 0; i < cumulativeTestPoints.length; i++) {
@@ -261,8 +277,16 @@ abstract class ContinuousDistributionAbstractTest {
     }
 
     /**
-     * Verifies that cumulative probability density calculations match expected values
-     * using current test instance data.
+     * Verifies that cumulative probability density calculations match expected values.
+     * Uses current test instance data.
+     *
+     * @see #makeDistribution()
+     * @see #makeCumulativeTestPoints()
+     * @see #makeCumulativeTestValues()
+     * @see #setDistribution(ContinuousDistribution)
+     * @see #setCumulativeTestPoints(double[])
+     * @see #setCumulativeTestValues(double[])
+     * @see #setTolerance(double)
      */
     protected void verifyCumulativeProbabilities() {
         // verify cumulativeProbability(double)
@@ -292,6 +316,19 @@ abstract class ContinuousDistributionAbstractTest {
         }
     }
 
+    /**
+     * Verifies that survival probability density calculations match expected values.
+     * The expected values are computed using 1 - CDF(x) from the cumulative test values.
+     * Uses current test instance data.
+     *
+     * @see #makeDistribution()
+     * @see #makeCumulativeTestPoints()
+     * @see #makeCumulativeTestValues()
+     * @see #setDistribution(ContinuousDistribution)
+     * @see #setCumulativeTestPoints(double[])
+     * @see #setCumulativeTestValues(double[])
+     * @see #setTolerance(double)
+     */
     protected void verifySurvivalProbability() {
         for (int i = 0; i < cumulativeTestPoints.length; i++) {
             final double x = cumulativeTestPoints[i];
@@ -303,6 +340,17 @@ abstract class ContinuousDistributionAbstractTest {
         }
     }
 
+    /**
+     * Verifies that cumulative probability density and survival probability calculations
+     * sum to approximately 1.0.
+     * Uses current test instance data.
+     *
+     * @see #makeDistribution()
+     * @see #makeCumulativeTestPoints()
+     * @see #setDistribution(ContinuousDistribution)
+     * @see #setCumulativeTestPoints(double[])
+     * @see #setTolerance(double)
+     */
     protected void verifySurvivalAndCumulativeProbabilityComplement() {
         for (final double x : cumulativeTestPoints) {
             Assertions.assertEquals(
@@ -314,8 +362,17 @@ abstract class ContinuousDistributionAbstractTest {
     }
 
     /**
-     * Verifies that survival is simply not 1-cdf by testing calculations that would underflow that calculation and
-     * result in an inaccurate answer.
+     * Verifies that survival is simply not 1-cdf by testing calculations that would underflow
+     * that calculation and result in an inaccurate answer.
+     * Uses current test instance data.
+     *
+     * @see #makeDistribution()
+     * @see #makeSurvivalPrecisionTestPoints()
+     * @see #makeSurvivalPrecisionTestValues()
+     * @see #setDistribution(ContinuousDistribution)
+     * @see #setSurvivalPrecisionTestPoints(double[])
+     * @see #setSurvivalPrecisionTestValues(double[])
+     * @see #setHighPrecisionTolerance(double)
      */
     protected void verifySurvivalProbabilityPrecision() {
         for (int i = 0; i < survivalPrecisionTestPoints.length; i++) {
@@ -329,8 +386,17 @@ abstract class ContinuousDistributionAbstractTest {
     }
 
     /**
-     * Verifies that CDF is simply not 1-survival function by testing values that would result with inaccurate results
-     * if simply calculating 1-survival function.
+     * Verifies that CDF is simply not 1-survival function by testing values that would result
+     * with inaccurate results if simply calculating 1-survival function.
+     * Uses current test instance data.
+     *
+     * @see #makeDistribution()
+     * @see #makeCumulativePrecisionTestPoints()
+     * @see #makeCumulativePrecisionTestValues()
+     * @see #setDistribution(ContinuousDistribution)
+     * @see #setCumulativePrecisionTestPoints(double[])
+     * @set #setCumulativePrecisionTestValues(double[])
+     * @see #setHighPrecisionTolerance(double)
      */
     protected void verifyCumulativeProbabilityPrecision() {
         for (int i = 0; i < cumulativePrecisionTestPoints.length; i++) {
@@ -345,7 +411,15 @@ abstract class ContinuousDistributionAbstractTest {
 
     /**
      * Verifies that inverse cumulative probability density calculations match expected values
-     * using current test instance data.
+     * Uses current test instance data.
+     *
+     * @see #makeDistribution()
+     * @see #makeInverseCumulativeTestPoints()
+     * @see #makeInverseCumulativeTestValues()
+     * @see #setDistribution(ContinuousDistribution)
+     * @see #setInverseCumulativeTestPoints(double[])
+     * @see #setInverseCumulativeTestValues(double[])
+     * @see #setTolerance(double)
      */
     protected void verifyInverseCumulativeProbabilities() {
         for (int i = 0; i < inverseCumulativeTestPoints.length; i++) {
diff --git a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/DiscreteDistributionAbstractTest.java b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/DiscreteDistributionAbstractTest.java
index 4e49385..a1e5428 100644
--- a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/DiscreteDistributionAbstractTest.java
+++ b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/DiscreteDistributionAbstractTest.java
@@ -229,8 +229,16 @@ abstract class DiscreteDistributionAbstractTest {
     //-------------------- Verification methods -------------------------------
 
     /**
-     * Verifies that probability calculations match expected values
-     * using current test instance data.
+     * Verifies that probability calculations match expected values.
+     * Uses current test instance data.
+     *
+     * @see #makeDistribution()
+     * @see #makeProbabilityTestPoints()
+     * @see #makeProbabilityTestValues()
+     * @see #setDistribution(DiscreteDistribution)
+     * @see #setProbabilityTestPoints(int[])
+     * @set #setProbabilityTestValues(double[])
+     * @see #setTolerance(double)
      */
     protected void verifyProbabilities() {
         for (int i = 0; i < probabilityTestPoints.length; i++) {
@@ -242,8 +250,16 @@ abstract class DiscreteDistributionAbstractTest {
     }
 
     /**
-     * Verifies that logarithmic probability calculations match expected values
-     * using current test instance data.
+     * Verifies that logarithmic probability calculations match expected values.
+     * Uses current test instance data.
+     *
+     * @see #makeDistribution()
+     * @see #makeProbabilityTestPoints()
+     * @see #makeLogProbabilityTestValues()
+     * @see #setDistribution(DiscreteDistribution)
+     * @see #setProbabilityTestPoints(int[])
+     * @set #setLogProbabilityTestValues(double[])
+     * @see #setTolerance(double)
      */
     protected void verifyLogProbabilities() {
         for (int i = 0; i < probabilityTestPoints.length; i++) {
@@ -255,8 +271,16 @@ abstract class DiscreteDistributionAbstractTest {
     }
 
     /**
-     * Verifies that cumulative probability density calculations match expected values
-     * using current test instance data.
+     * Verifies that cumulative probability density calculations match expected values.
+     * Uses current test instance data.
+     *
+     * @see #makeDistribution()
+     * @see #makeCumulativeTestPoints()
+     * @see #makeCumulativeTestValues()
+     * @see #setDistribution(DiscreteDistribution)
+     * @see #setCumulativeTestPoints(int[])
+     * @set #setCumulativeTestValues(double[])
+     * @see #setTolerance(double)
      */
     protected void verifyCumulativeProbabilities() {
         for (int i = 0; i < cumulativeTestPoints.length; i++) {
@@ -284,6 +308,19 @@ abstract class DiscreteDistributionAbstractTest {
         }
     }
 
+    /**
+     * Verifies that survival probability density calculations match expected values.
+     * The expected values are computed using 1 - CDF(x) from the cumulative test values.
+     * Uses current test instance data.
+     *
+     * @see #makeDistribution()
+     * @see #makeCumulativeTestPoints()
+     * @see #makeCumulativeTestValues()
+     * @see #setDistribution(DiscreteDistribution)
+     * @see #setCumulativeTestPoints(int[])
+     * @set #setCumulativeTestValues(double[])
+     * @see #setTolerance(double)
+     */
     protected void verifySurvivalProbability() {
         for (int i = 0; i < cumulativeTestPoints.length; i++) {
             final int x = cumulativeTestPoints[i];
@@ -295,6 +332,17 @@ abstract class DiscreteDistributionAbstractTest {
         }
     }
 
+    /**
+     * Verifies that cumulative probability density and survival probability calculations
+     * sum to approximately 1.0.
+     * Uses current test instance data.
+     *
+     * @see #makeDistribution()
+     * @see #makeCumulativeTestPoints()
+     * @see #setDistribution(DiscreteDistribution)
+     * @see #setCumulativeTestPoints(int[])
+     * @see #setTolerance(double)
+     */
     protected void verifySurvivalAndCumulativeProbabilityComplement() {
         for (final int x : cumulativeTestPoints) {
             Assertions.assertEquals(
@@ -306,8 +354,17 @@ abstract class DiscreteDistributionAbstractTest {
     }
 
     /**
-     * Verifies that survival is simply not 1-cdf by testing calculations that would underflow that calculation and
-     * result in an inaccurate answer.
+     * Verifies that survival is simply not 1-cdf by testing calculations that would underflow
+     * that calculation and result in an inaccurate answer.
+     * Uses current test instance data.
+     *
+     * @see #makeDistribution()
+     * @see #makeSurvivalPrecisionTestPoints()
+     * @see #makeSurvivalPrecisionTestValues()
+     * @see #setDistribution(DiscreteDistribution)
+     * @see #setSurvivalPrecisionTestPoints(int[])
+     * @set {@link #setSurvivalPrecisionTestValues(double[])}
+     * @see #setHighPrecisionTolerance(double)
      */
     protected void verifySurvivalProbabilityPrecision() {
         for (int i = 0; i < survivalPrecisionTestPoints.length; i++) {
@@ -321,8 +378,17 @@ abstract class DiscreteDistributionAbstractTest {
     }
 
     /**
-     * Verifies that CDF is simply not 1-survival function by testing values that would result with inaccurate results
-     * if simply calculating 1-survival function.
+     * Verifies that CDF is simply not 1-survival function by testing values that would result
+     * with inaccurate results if simply calculating 1-survival function.
+     * Uses current test instance data.
+     *
+     * @see #makeDistribution()
+     * @see #makeCumulativePrecisionTestPoints()
+     * @see #makeCumulativePrecisionTestValues()
+     * @see #setDistribution(DiscreteDistribution)
+     * @see #setCumulativePrecisionTestPoints(int[])
+     * @set #setCumulativePrecisionTestValues(double[])
+     * @see #setHighPrecisionTolerance(double)
      */
     protected void verifyCumulativeProbabilityPrecision() {
         for (int i = 0; i < cumulativePrecisionTestPoints.length; i++) {
@@ -337,7 +403,15 @@ abstract class DiscreteDistributionAbstractTest {
 
     /**
      * Verifies that inverse cumulative probability density calculations match expected values
-     * using current test instance data.
+     * Uses current test instance data.
+     *
+     * @see #makeDistribution()
+     * @see #makeInverseCumulativeTestPoints()
+     * @see #makeInverseCumulativeTestValues()
+     * @see #setDistribution(DiscreteDistribution)
+     * @see #setInverseCumulativeTestPoints(double[])
+     * @see #setInverseCumulativeTestValues(int[])
+     * @see #setTolerance(double)
      */
     protected void verifyInverseCumulativeProbabilities() {
         for (int i = 0; i < inverseCumulativeTestPoints.length; i++) {

[commons-statistics] 10/13: Do not use test set-up and tear down fixtures

Posted by ah...@apache.org.
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-statistics.git

commit 7c20e10dc0aee272b17a4ed11c813fbe44a8d0a2
Author: aherbert <ah...@apache.org>
AuthorDate: Mon Sep 20 16:40:01 2021 +0100

    Do not use test set-up and tear down fixtures
    
    The required data is generated in the specific test.
    
    This detected that the HypergeometricDistributionTest was not testing
    the high-precision cumulative probability points.
    
    The TearDown fixture is not required as the default JUnit 5 lifecycle is
    a new instance per test.
---
 .../distribution/BinomialDistributionTest.java     |  3 +
 .../distribution/CauchyDistributionTest.java       |  1 +
 .../distribution/ChiSquaredDistributionTest.java   |  1 +
 .../ContinuousDistributionAbstractTest.java        | 79 ++++++++++------------
 .../DiscreteDistributionAbstractTest.java          | 74 +++++++++-----------
 .../distribution/ExponentialDistributionTest.java  |  4 +-
 .../statistics/distribution/FDistributionTest.java |  2 +
 .../distribution/GammaDistributionTest.java        |  1 +
 .../distribution/GumbelDistributionTest.java       |  1 +
 .../HypergeometricDistributionTest.java            |  2 +-
 .../distribution/LaplaceDistributionTest.java      |  1 +
 .../distribution/LogNormalDistributionTest.java    |  4 +-
 .../distribution/LogisticDistributionTest.java     |  1 +
 .../distribution/NormalDistributionTest.java       |  2 +
 .../distribution/ParetoDistributionTest.java       |  4 +-
 .../statistics/distribution/TDistributionTest.java |  3 +
 .../distribution/WeibullDistributionTest.java      |  1 +
 17 files changed, 95 insertions(+), 89 deletions(-)

diff --git a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/BinomialDistributionTest.java b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/BinomialDistributionTest.java
index 88c599f..9aa2b7b 100644
--- a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/BinomialDistributionTest.java
+++ b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/BinomialDistributionTest.java
@@ -83,15 +83,18 @@ class BinomialDistributionTest extends DiscreteDistributionAbstractTest {
     void testSmallPValue() {
         final BinomialDistribution dist = new BinomialDistribution(10, 0.3);
         setDistribution(dist);
+        setCumulativeTestPoints(makeCumulativeTestPoints());
         // computed using R version 3.4.4
         setCumulativeTestValues(new double[] {0.00000000000000000000, 0.02824752489999998728, 0.14930834590000002793,
             0.38278278639999974153, 0.64961071840000017552, 0.84973166740000016794, 0.95265101260000006889,
             0.98940792160000001765, 0.99840961360000002323, 0.99985631409999997654, 0.99999409509999992451,
             1.00000000000000000000, 1.00000000000000000000});
+        setProbabilityTestPoints(makeProbabilityTestPoints());
         setProbabilityTestValues(new double[] {0.0000000000000000000e+00, 2.8247524899999980341e-02,
             1.2106082099999991575e-01, 2.3347444049999999116e-01, 2.6682793199999993439e-01, 2.0012094900000007569e-01,
             1.0291934520000002584e-01, 3.6756909000000004273e-02, 9.0016919999999864960e-03, 1.4467005000000008035e-03,
             1.3778099999999990615e-04, 5.9048999999999949131e-06, 0.0000000000000000000e+00});
+        setInverseCumulativeTestPoints(makeInverseCumulativeTestPoints());
         setInverseCumulativeTestValues(new int[] {0, 0, 0, 0, 1, 1, 8, 7, 6, 5, 5, 10});
         verifyProbabilities();
         verifyLogProbabilities();
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 74f8a2f..cc0e47a 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
@@ -91,6 +91,7 @@ class CauchyDistributionTest extends ContinuousDistributionAbstractTest {
 
     @Test
     void testInverseCumulativeProbabilityExtremes() {
+        setDistribution(makeDistribution());
         setInverseCumulativeTestPoints(new double[] {0.0, 1.0});
         setInverseCumulativeTestValues(new double[] {Double.NEGATIVE_INFINITY, Double.POSITIVE_INFINITY});
         verifyInverseCumulativeProbabilities();
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 08cbf61..082a9ea 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
@@ -105,6 +105,7 @@ class ChiSquaredDistributionTest extends ContinuousDistributionAbstractTest {
         setCumulativeTestPoints(new double[] {1.168926E-60, 1.168926E-40, 1.063132E-32,
                                               1.144775E-26, 1.168926E-20, 5.472917, 2.175255, 1.13438,
                                               0.5318646, 0.1526342});
+        setCumulativeTestValues(makeCumulativeTestValues());
         setInverseCumulativeTestValues(getCumulativeTestPoints());
         setInverseCumulativeTestPoints(getCumulativeTestValues());
         verifyCumulativeProbabilities();
diff --git a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/ContinuousDistributionAbstractTest.java b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/ContinuousDistributionAbstractTest.java
index 6092ff7..20dca4c 100644
--- a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/ContinuousDistributionAbstractTest.java
+++ b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/ContinuousDistributionAbstractTest.java
@@ -26,9 +26,7 @@ import org.apache.commons.math3.analysis.integration.IterativeLegendreGaussInteg
 import org.apache.commons.math3.util.MathArrays;
 import org.apache.commons.rng.simple.RandomSource;
 import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.BeforeEach;
 
 /**
  * Abstract base class for {@link ContinuousDistribution} tests.
@@ -191,47 +189,6 @@ abstract class ContinuousDistributionAbstractTest {
         return makeCumulativeTestPoints();
     }
 
-    //-------------------- Setup / tear down ----------------------------------
-
-    /**
-     * Setup sets all test instance data to default values.
-     * <p>
-     * This method is @BeforeEach (created for each test) as certain test methods may wish
-     * to alter the defaults.
-     */
-    @BeforeEach
-    void setUp() {
-        distribution = makeDistribution();
-        densityTestValues = makeDensityTestValues();
-        logDensityTestValues = makeLogDensityTestValues();
-        cumulativeTestPoints = makeCumulativeTestPoints();
-        cumulativeTestValues = makeCumulativeTestValues();
-        cumulativePrecisionTestPoints = makeCumulativePrecisionTestPoints();
-        cumulativePrecisionTestValues = makeCumulativePrecisionTestValues();
-        survivalPrecisionTestPoints = makeSurvivalPrecisionTestPoints();
-        survivalPrecisionTestValues = makeSurvivalPrecisionTestValues();
-        inverseCumulativeTestPoints = makeInverseCumulativeTestPoints();
-        inverseCumulativeTestValues = makeInverseCumulativeTestValues();
-    }
-
-    /**
-     * Cleans up test instance data.
-     */
-    @AfterEach
-    void tearDown() {
-        distribution = null;
-        densityTestValues = null;
-        logDensityTestValues = null;
-        cumulativeTestPoints = null;
-        cumulativeTestValues = null;
-        cumulativePrecisionTestPoints = null;
-        cumulativePrecisionTestValues = null;
-        survivalPrecisionTestPoints = null;
-        survivalPrecisionTestValues = null;
-        inverseCumulativeTestPoints = null;
-        inverseCumulativeTestValues = null;
-    }
-
     //-------------------- Verification methods -------------------------------
 
     /**
@@ -436,41 +393,64 @@ abstract class ContinuousDistributionAbstractTest {
 
     @Test
     void testDensities() {
+        distribution = makeDistribution();
+        cumulativeTestPoints = makeCumulativeTestPoints();
+        densityTestValues = makeDensityTestValues();
         verifyDensities();
     }
 
     @Test
     void testLogDensities() {
+        distribution = makeDistribution();
+        cumulativeTestPoints = makeCumulativeTestPoints();
+        logDensityTestValues = makeLogDensityTestValues();
         verifyLogDensities();
     }
 
     @Test
     void testCumulativeProbabilities() {
+        distribution = makeDistribution();
+        cumulativeTestPoints = makeCumulativeTestPoints();
+        cumulativeTestValues = makeCumulativeTestValues();
         verifyCumulativeProbabilities();
     }
 
     @Test
     void testSurvivalProbability() {
+        distribution = makeDistribution();
+        cumulativeTestPoints = makeCumulativeTestPoints();
+        cumulativeTestValues = makeCumulativeTestValues();
         verifySurvivalProbability();
     }
 
     @Test
     void testSurvivalAndCumulativeProbabilitiesAreComplementary() {
+        distribution = makeDistribution();
+        cumulativeTestPoints = makeCumulativeTestPoints();
         verifySurvivalAndCumulativeProbabilityComplement();
     }
 
     @Test
     void testCumulativeProbabilityPrecision() {
+        distribution = makeDistribution();
+        cumulativePrecisionTestPoints = makeCumulativePrecisionTestPoints();
+        cumulativePrecisionTestValues = makeCumulativePrecisionTestValues();
         verifyCumulativeProbabilityPrecision();
     }
 
     @Test
     void testSurvivalProbabilityPrecision() {
+        distribution = makeDistribution();
+        survivalPrecisionTestPoints = makeSurvivalPrecisionTestPoints();
+        survivalPrecisionTestValues = makeSurvivalPrecisionTestValues();
         verifySurvivalProbabilityPrecision();
     }
 
     @Test
     void testInverseCumulativeProbabilities() {
+        distribution = makeDistribution();
+        inverseCumulativeTestPoints = makeInverseCumulativeTestPoints();
+        inverseCumulativeTestValues = makeInverseCumulativeTestValues();
         verifyInverseCumulativeProbabilities();
     }
 
@@ -479,6 +459,8 @@ abstract class ContinuousDistributionAbstractTest {
      */
     @Test
     void testConsistency() {
+        distribution = makeDistribution();
+        cumulativeTestPoints = makeCumulativeTestPoints();
         for (int i = 1; i < cumulativeTestPoints.length; i++) {
 
             // check that cdf(x, x) = 0
@@ -500,6 +482,8 @@ abstract class ContinuousDistributionAbstractTest {
 
     @Test
     void testOutsideSupport() {
+        distribution = makeDistribution();
+
         // Test various quantities when the variable is outside the support.
         final double lo = distribution.getSupportLowerBound();
         Assertions.assertEquals(lo, distribution.inverseCumulativeProbability(0.0));
@@ -523,21 +507,25 @@ abstract class ContinuousDistributionAbstractTest {
 
     @Test
     void testProbabilityWithLowerBoundAboveUpperBound() {
+        distribution = makeDistribution();
         Assertions.assertThrows(DistributionException.class, () -> distribution.probability(1, 0));
     }
 
     @Test
     void testInverseCumulativeProbabilityWithProbabilityBelowZero() {
+        distribution = makeDistribution();
         Assertions.assertThrows(DistributionException.class, () -> distribution.inverseCumulativeProbability(-1));
     }
 
     @Test
     void testInverseCumulativeProbabilityWithProbabilityAboveOne() {
+        distribution = makeDistribution();
         Assertions.assertThrows(DistributionException.class, () -> distribution.inverseCumulativeProbability(2));
     }
 
     @Test
     void testSampling() {
+        distribution = makeDistribution();
         final double[] quartiles = TestUtils.getDistributionQuartiles(getDistribution());
         final double[] expected = {0.25, 0.25, 0.25, 0.25};
 
@@ -567,6 +555,10 @@ abstract class ContinuousDistributionAbstractTest {
      */
     @Test
     void testDensityIntegrals() {
+        distribution = makeDistribution();
+        cumulativeTestPoints = makeCumulativeTestPoints();
+        cumulativeTestValues = makeCumulativeTestValues();
+
         final double tol = 1e-9;
         final BaseAbstractUnivariateIntegrator integrator =
             new IterativeLegendreGaussIntegrator(5, 1e-12, 1e-10);
@@ -601,6 +593,7 @@ abstract class ContinuousDistributionAbstractTest {
      */
     @Test
     void testIsSupportConnected() {
+        distribution = makeDistribution();
         Assertions.assertEquals(isSupportConnected(), distribution.isSupportConnected());
     }
 
diff --git a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/DiscreteDistributionAbstractTest.java b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/DiscreteDistributionAbstractTest.java
index a1e5428..3aaf8af 100644
--- a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/DiscreteDistributionAbstractTest.java
+++ b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/DiscreteDistributionAbstractTest.java
@@ -19,9 +19,7 @@ package org.apache.commons.statistics.distribution;
 import java.util.Arrays;
 import org.apache.commons.math3.util.MathArrays;
 import org.apache.commons.rng.simple.RandomSource;
-import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
 /**
@@ -186,46 +184,6 @@ abstract class DiscreteDistributionAbstractTest {
     /** Creates the default inverse cumulative probability density test expected values. */
     public abstract int[] makeInverseCumulativeTestValues();
 
-    //-------------------- Setup / tear down ----------------------------------
-
-    /**
-     * Setup sets all test instance data to default values.
-     */
-    @BeforeEach
-    void setUp() {
-        distribution = makeDistribution();
-        probabilityTestPoints = makeProbabilityTestPoints();
-        probabilityTestValues = makeProbabilityTestValues();
-        logProbabilityTestValues = makeLogProbabilityTestValues();
-        cumulativeTestPoints = makeCumulativeTestPoints();
-        cumulativeTestValues = makeCumulativeTestValues();
-        cumulativePrecisionTestPoints = makeCumulativePrecisionTestPoints();
-        cumulativePrecisionTestValues = makeCumulativePrecisionTestValues();
-        survivalPrecisionTestPoints = makeSurvivalPrecisionTestPoints();
-        survivalPrecisionTestValues = makeSurvivalPrecisionTestValues();
-        inverseCumulativeTestPoints = makeInverseCumulativeTestPoints();
-        inverseCumulativeTestValues = makeInverseCumulativeTestValues();
-    }
-
-    /**
-     * Cleans up test instance data
-     */
-    @AfterEach
-    void tearDown() {
-        distribution = null;
-        probabilityTestPoints = null;
-        probabilityTestValues = null;
-        logProbabilityTestValues = null;
-        cumulativeTestPoints = null;
-        cumulativeTestValues = null;
-        cumulativePrecisionTestPoints = null;
-        cumulativePrecisionTestValues = null;
-        survivalPrecisionTestPoints = null;
-        survivalPrecisionTestValues = null;
-        inverseCumulativeTestPoints = null;
-        inverseCumulativeTestValues = null;
-    }
-
     //-------------------- Verification methods -------------------------------
 
     /**
@@ -426,41 +384,64 @@ abstract class DiscreteDistributionAbstractTest {
 
     @Test
     void testProbabilities() {
+        distribution = makeDistribution();
+        probabilityTestPoints = makeProbabilityTestPoints();
+        probabilityTestValues = makeProbabilityTestValues();
         verifyProbabilities();
     }
 
     @Test
     void testLogProbabilities() {
+        distribution = makeDistribution();
+        probabilityTestPoints = makeProbabilityTestPoints();
+        logProbabilityTestValues = makeLogProbabilityTestValues();
         verifyLogProbabilities();
     }
 
     @Test
     void testCumulativeProbabilities() {
+        distribution = makeDistribution();
+        cumulativeTestPoints = makeCumulativeTestPoints();
+        cumulativeTestValues = makeCumulativeTestValues();
         verifyCumulativeProbabilities();
     }
 
     @Test
     void testSurvivalProbability() {
+        distribution = makeDistribution();
+        cumulativeTestPoints = makeCumulativeTestPoints();
+        cumulativeTestValues = makeCumulativeTestValues();
         verifySurvivalProbability();
     }
 
     @Test
     void testSurvivalAndCumulativeProbabilitiesAreComplementary() {
+        distribution = makeDistribution();
+        cumulativeTestPoints = makeCumulativeTestPoints();
         verifySurvivalAndCumulativeProbabilityComplement();
     }
 
     @Test
     void testCumulativeProbabilityPrecision() {
+        distribution = makeDistribution();
+        cumulativePrecisionTestPoints = makeCumulativePrecisionTestPoints();
+        cumulativePrecisionTestValues = makeCumulativePrecisionTestValues();
         verifyCumulativeProbabilityPrecision();
     }
 
     @Test
     void testSurvivalProbabilityPrecision() {
+        distribution = makeDistribution();
+        survivalPrecisionTestPoints = makeSurvivalPrecisionTestPoints();
+        survivalPrecisionTestValues = makeSurvivalPrecisionTestValues();
         verifySurvivalProbabilityPrecision();
     }
 
     @Test
     void testInverseCumulativeProbabilities() {
+        distribution = makeDistribution();
+        inverseCumulativeTestPoints = makeInverseCumulativeTestPoints();
+        inverseCumulativeTestValues = makeInverseCumulativeTestValues();
         verifyInverseCumulativeProbabilities();
     }
 
@@ -469,6 +450,8 @@ abstract class DiscreteDistributionAbstractTest {
      */
     @Test
     void testConsistency() {
+        distribution = makeDistribution();
+        cumulativeTestPoints = makeCumulativeTestPoints();
         for (int i = 1; i < cumulativeTestPoints.length; i++) {
 
             // check that cdf(x, x) = 0
@@ -490,6 +473,8 @@ abstract class DiscreteDistributionAbstractTest {
 
     @Test
     void testOutsideSupport() {
+        distribution = makeDistribution();
+
         // Test various quantities when the variable is outside the support.
         final int lo = distribution.getSupportLowerBound();
         Assertions.assertEquals(distribution.probability(lo), distribution.cumulativeProbability(lo), getTolerance());
@@ -524,21 +509,25 @@ abstract class DiscreteDistributionAbstractTest {
 
     @Test
     void testProbabilityWithLowerBoundAboveUpperBound() {
+        distribution = makeDistribution();
         Assertions.assertThrows(DistributionException.class, () -> distribution.probability(1, 0));
     }
 
     @Test
     void testInverseCumulativeProbabilityWithProbabilityBelowZero() {
+        distribution = makeDistribution();
         Assertions.assertThrows(DistributionException.class, () -> distribution.inverseCumulativeProbability(-1));
     }
 
     @Test
     void testInverseCumulativeProbabilityWithProbabilityAboveOne() {
+        distribution = makeDistribution();
         Assertions.assertThrows(DistributionException.class, () -> distribution.inverseCumulativeProbability(2));
     }
 
     @Test
     void testSampling() {
+        distribution = makeDistribution();
         // This test uses the points that are used to test the distribution PMF.
         // The sum of the probability values does not have to be 1 (or very close to 1).
         // Any value generated by the sampler that is not an expected point will
@@ -586,6 +575,7 @@ abstract class DiscreteDistributionAbstractTest {
      */
     @Test
     void testIsSupportConnected() {
+        distribution = makeDistribution();
         Assertions.assertEquals(isSupportConnected(), distribution.isSupportConnected());
     }
 
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 17c029d..6903108 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
@@ -88,6 +88,7 @@ class ExponentialDistributionTest extends ContinuousDistributionAbstractTest {
 
     @Test
     void testCumulativeProbabilityExtremes() {
+        setDistribution(makeDistribution());
         setCumulativeTestPoints(new double[] {-2, 0});
         setCumulativeTestValues(new double[] {0, 0});
         verifyCumulativeProbabilities();
@@ -95,6 +96,7 @@ class ExponentialDistributionTest extends ContinuousDistributionAbstractTest {
 
     @Test
     void testInverseCumulativeProbabilityExtremes() {
+        setDistribution(makeDistribution());
         setInverseCumulativeTestPoints(new double[] {0, 1});
         setInverseCumulativeTestValues(new double[] {0, Double.POSITIVE_INFINITY});
         verifyInverseCumulativeProbabilities();
@@ -102,7 +104,7 @@ class ExponentialDistributionTest extends ContinuousDistributionAbstractTest {
 
     @Test
     void testCumulativeProbability2() {
-        final double actual = getDistribution().probability(0.25, 0.75);
+        final double actual = makeDistribution().probability(0.25, 0.75);
         Assertions.assertEquals(0.0905214, actual, 10e-4);
     }
 
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 38b38f1..ea19de0 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
@@ -85,6 +85,7 @@ class FDistributionTest extends ContinuousDistributionAbstractTest {
 
     @Test
     void testCumulativeProbabilityExtremes() {
+        setDistribution(makeDistribution());
         setCumulativeTestPoints(new double[] {-2, 0});
         setCumulativeTestValues(new double[] {0, 0});
         verifyCumulativeProbabilities();
@@ -92,6 +93,7 @@ class FDistributionTest extends ContinuousDistributionAbstractTest {
 
     @Test
     void testInverseCumulativeProbabilityExtremes() {
+        setDistribution(makeDistribution());
         setInverseCumulativeTestPoints(new double[] {0, 1});
         setInverseCumulativeTestValues(new double[] {0, Double.POSITIVE_INFINITY});
         verifyInverseCumulativeProbabilities();
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 ad0451c..9d89eea 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
@@ -224,6 +224,7 @@ class GammaDistributionTest extends ContinuousDistributionAbstractTest {
 
     @Test
     void testInverseCumulativeProbabilityExtremes() {
+        setDistribution(makeDistribution());
         setInverseCumulativeTestPoints(new double[] {0, 1});
         setInverseCumulativeTestValues(new double[] {0, Double.POSITIVE_INFINITY});
         verifyInverseCumulativeProbabilities();
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 3eca9c1..71275ad 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
@@ -80,6 +80,7 @@ class GumbelDistributionTest extends ContinuousDistributionAbstractTest {
 
     @Test
     void testInverseCumulativeProbabilityExtremes() {
+        setDistribution(makeDistribution());
         setInverseCumulativeTestPoints(new double[] {0.0, 1.0});
         setInverseCumulativeTestValues(new double[] {Double.NEGATIVE_INFINITY, Double.POSITIVE_INFINITY});
         verifyInverseCumulativeProbabilities();
diff --git a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/HypergeometricDistributionTest.java b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/HypergeometricDistributionTest.java
index 21ce1f0..8b29ffd 100644
--- a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/HypergeometricDistributionTest.java
+++ b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/HypergeometricDistributionTest.java
@@ -346,7 +346,7 @@ class HypergeometricDistributionTest extends DiscreteDistributionAbstractTest {
         setDistribution(new HypergeometricDistribution(500, 70, 300));
         setCumulativePrecisionTestPoints(new int[] {10, 8});
         setCumulativePrecisionTestValues(new double[] {2.4055720603264525e-17, 1.2848174992266236e-19});
-        verifySurvivalProbabilityPrecision();
+        verifyCumulativeProbabilityPrecision();
     }
 
     @Test
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 326178d..0af06cf 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
@@ -82,6 +82,7 @@ class LaplaceDistributionTest extends ContinuousDistributionAbstractTest {
 
     @Test
     void testInverseCumulativeProbabilityExtremes() {
+        setDistribution(makeDistribution());
         setInverseCumulativeTestPoints(new double[] {0.0, 1.0});
         setInverseCumulativeTestValues(new double[] {Double.NEGATIVE_INFINITY, Double.POSITIVE_INFINITY});
         verifyInverseCumulativeProbabilities();
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 d44d960..c2d24d3 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
@@ -127,6 +127,7 @@ class LogNormalDistributionTest extends ContinuousDistributionAbstractTest {
 
     @Test
     void testQuantiles() {
+        setDistribution(makeDistribution());
         setCumulativeTestValues(new double[] {0, 0.0396495152787,
                                               0.16601209243, 0.272533253269,
                                               0.357618409638, 0.426488363093,
@@ -164,6 +165,7 @@ class LogNormalDistributionTest extends ContinuousDistributionAbstractTest {
 
     @Test
     void testInverseCumulativeProbabilityExtremes() {
+        setDistribution(makeDistribution());
         setInverseCumulativeTestPoints(new double[] {0, 1});
         setInverseCumulativeTestValues(new double[] {0, Double.POSITIVE_INFINITY});
         verifyInverseCumulativeProbabilities();
@@ -189,7 +191,7 @@ class LogNormalDistributionTest extends ContinuousDistributionAbstractTest {
 
     @Test
     void testParameterAccessors() {
-        final LogNormalDistribution distribution = (LogNormalDistribution)getDistribution();
+        final LogNormalDistribution distribution = makeDistribution();
         Assertions.assertEquals(2.1, distribution.getMu());
         Assertions.assertEquals(1.4, distribution.getSigma());
     }
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 25b5c51..40d9c30 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
@@ -90,6 +90,7 @@ class LogisticDistributionTest extends ContinuousDistributionAbstractTest {
 
     @Test
     void testInverseCumulativeProbabilityExtremes() {
+        setDistribution(makeDistribution());
         setInverseCumulativeTestPoints(new double[] {0, 1});
         setInverseCumulativeTestValues(new double[] {Double.NEGATIVE_INFINITY, Double.POSITIVE_INFINITY});
         verifyInverseCumulativeProbabilities();
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 75fedf3..c6cc57a 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
@@ -104,6 +104,7 @@ class NormalDistributionTest extends ContinuousDistributionAbstractTest {
 
     @Test
     void testQuantiles() {
+        setDistribution(makeDistribution());
         setDensityTestValues(new double[] {0.0385649760808, 0.172836231799, 0.284958771715, 0.172836231799, 0.0385649760808,
                                            0.00316560600853, 9.55930184035e-05, 1.06194251052e-06});
         verifyQuantiles();
@@ -124,6 +125,7 @@ class NormalDistributionTest extends ContinuousDistributionAbstractTest {
 
     @Test
     void testInverseCumulativeProbabilityExtremes() {
+        setDistribution(makeDistribution());
         setInverseCumulativeTestPoints(new double[] {0, 1});
         setInverseCumulativeTestValues(new double[] {Double.NEGATIVE_INFINITY, Double.POSITIVE_INFINITY});
         verifyInverseCumulativeProbabilities();
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 b54bcd7..12ecc6b 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
@@ -117,6 +117,7 @@ class ParetoDistributionTest extends ContinuousDistributionAbstractTest {
 
     @Test
     void testQuantiles() {
+        setDistribution(makeDistribution());
         setCumulativeTestValues(new double[] {0, 0, 0, 0.510884134236, 0.694625688662, 0.785201995008, 0.837811522357, 0.871634279326});
         setDensityTestValues(new double[] {0, 0, 0.666666666, 0.195646346305, 0.0872498032394, 0.0477328899983, 0.0294888141169, 0.0197485724114});
         verifyQuantiles();
@@ -137,6 +138,7 @@ class ParetoDistributionTest extends ContinuousDistributionAbstractTest {
 
     @Test
     void testInverseCumulativeProbabilityExtremes() {
+        setDistribution(makeDistribution());
         setInverseCumulativeTestPoints(new double[] {0, 1});
         setInverseCumulativeTestValues(new double[] {2.1, Double.POSITIVE_INFINITY});
         verifyInverseCumulativeProbabilities();
@@ -144,7 +146,7 @@ class ParetoDistributionTest extends ContinuousDistributionAbstractTest {
 
     @Test
     void testParameterAccessors() {
-        final ParetoDistribution distribution = (ParetoDistribution)getDistribution();
+        final ParetoDistribution distribution = makeDistribution();
         Assertions.assertEquals(2.1, distribution.getScale());
         Assertions.assertEquals(1.4, distribution.getShape());
     }
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 be1635d..93ecdc8 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
@@ -104,10 +104,12 @@ class TDistributionTest extends ContinuousDistributionAbstractTest {
                                               -6.31375151468, -3.07768353718, 318.308838986,
                                               31.8205159538, 12.7062047362, 6.31375151468,
                                               3.07768353718});
+        setCumulativeTestValues(makeCumulativeTestValues());
         setDensityTestValues(new double[] {3.14158231817e-06, 0.000314055924703, 0.00195946145194,
                                            0.00778959736375, 0.0303958893917, 3.14158231817e-06,
                                            0.000314055924703, 0.00195946145194, 0.00778959736375,
                                            0.0303958893917});
+        setInverseCumulativeTestPoints(getCumulativeTestValues());
         setInverseCumulativeTestValues(getCumulativeTestPoints());
         verifyCumulativeProbabilities();
         verifyInverseCumulativeProbabilities();
@@ -116,6 +118,7 @@ class TDistributionTest extends ContinuousDistributionAbstractTest {
 
     @Test
     void testInverseCumulativeProbabilityExtremes() {
+        setDistribution(makeDistribution());
         setInverseCumulativeTestPoints(new double[] {0, 1});
         setInverseCumulativeTestValues(new double[] {Double.NEGATIVE_INFINITY, Double.POSITIVE_INFINITY});
         verifyInverseCumulativeProbabilities();
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 81f4e0b..6b1e28e 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
@@ -102,6 +102,7 @@ class WeibullDistributionTest extends ContinuousDistributionAbstractTest {
 
     @Test
     void testInverseCumulativeProbabilityExtremes() {
+        setDistribution(makeDistribution());
         setInverseCumulativeTestPoints(new double[] {0.0, 1.0});
         setInverseCumulativeTestValues(new double[] {0.0, Double.POSITIVE_INFINITY});
         verifyInverseCumulativeProbabilities();

[commons-statistics] 02/13: Append single characters using a char not a string

Posted by ah...@apache.org.
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-statistics.git

commit d9a569aab192fad1a48f7394e53ca5d8a05099f3
Author: aherbert <ah...@apache.org>
AuthorDate: Mon Sep 20 12:09:46 2021 +0100

    Append single characters using a char not a string
---
 .../java/org/apache/commons/statistics/distribution/TestUtils.java  | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/TestUtils.java b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/TestUtils.java
index 1e84c83..ca6dfc3 100644
--- a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/TestUtils.java
+++ b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/TestUtils.java
@@ -159,15 +159,15 @@ final class TestUtils {
             msgBuffer.append("value\texpected\tobserved\n");
             for (int i = 0; i < expected.length; i++) {
                 msgBuffer.append(valueLabels[i]);
-                msgBuffer.append("\t");
+                msgBuffer.append('\t');
                 msgBuffer.append(df.format(expected[i]));
                 msgBuffer.append("\t\t");
                 msgBuffer.append(observed[i]);
-                msgBuffer.append("\n");
+                msgBuffer.append('\n');
             }
             msgBuffer.append("This test can fail randomly due to sampling error with probability ");
             msgBuffer.append(alpha);
-            msgBuffer.append(".");
+            msgBuffer.append('.');
             Assertions.fail(msgBuffer.toString());
         }
     }

[commons-statistics] 05/13: Use ParameterizedTest with MethodSource

Posted by ah...@apache.org.
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-statistics.git

commit ceea72b7150257d4ac2c79b6446ce60da1f77f62
Author: aherbert <ah...@apache.org>
AuthorDate: Mon Sep 20 14:47:34 2021 +0100

    Use ParameterizedTest with MethodSource
---
 .../distribution/LevyDistributionTest.java         | 53 ++++++++++------------
 1 file changed, 25 insertions(+), 28 deletions(-)

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 2adf79c..7c26ba3 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
@@ -17,9 +17,12 @@
 package org.apache.commons.statistics.distribution;
 
 import java.util.Arrays;
+import java.util.stream.Stream;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.MethodSource;
 
 /**
  * Test cases for LevyDistribution.
@@ -129,41 +132,35 @@ class LevyDistributionTest extends ContinuousDistributionAbstractTest {
 
     //-------------------- Additional test cases -------------------------------
 
-    @Test
-    void testDensityAtSupportBounds() {
-        final LevyDistribution distribution = makeDistribution();
-        // Below the location
-        Assertions.assertEquals(0.0, distribution.density(distribution.getLocation() - 1));
+    static Stream<Arguments> distributionParameters() {
+        return Stream.of(
+            Arguments.arguments(0, 0.5),
+            Arguments.arguments(0, 1),
+            Arguments.arguments(-3, 2)
+        );
     }
 
-    @Test
-    void testParameterAccessors() {
-        final LevyDistribution dist = makeDistribution();
-        Assertions.assertEquals(1.2, dist.getLocation());
-        Assertions.assertEquals(0.4, dist.getScale());
+    @ParameterizedTest
+    @MethodSource("distributionParameters")
+    void testParameterAccessors(double location, double scale) {
+        final LevyDistribution dist = new LevyDistribution(location, scale);
+        Assertions.assertEquals(location, dist.getLocation());
+        Assertions.assertEquals(scale, dist.getScale());
     }
 
-    @Test
-    void testMoments() {
-        LevyDistribution dist;
-
-        dist = new LevyDistribution(0, 0.5);
-        Assertions.assertEquals(Double.POSITIVE_INFINITY, dist.getMean());
-        Assertions.assertEquals(Double.POSITIVE_INFINITY, dist.getVariance());
-
-        dist = new LevyDistribution(0, 1);
-        Assertions.assertEquals(Double.POSITIVE_INFINITY, dist.getMean());
-        Assertions.assertEquals(Double.POSITIVE_INFINITY, dist.getVariance());
-
-        dist = new LevyDistribution(-3, 2);
+    @ParameterizedTest
+    @MethodSource("distributionParameters")
+    void testMoments(double location, double scale) {
+        final LevyDistribution dist = new LevyDistribution(location, scale);
         Assertions.assertEquals(Double.POSITIVE_INFINITY, dist.getMean());
         Assertions.assertEquals(Double.POSITIVE_INFINITY, dist.getVariance());
     }
 
-    @Test
-    void testSupport() {
-        final LevyDistribution dist = makeDistribution();
-        Assertions.assertEquals(dist.getLocation(), dist.getSupportLowerBound());
+    @ParameterizedTest
+    @MethodSource("distributionParameters")
+    void testSupport(double location, double scale) {
+        final LevyDistribution dist = new LevyDistribution(location, scale);
+        Assertions.assertEquals(location, dist.getSupportLowerBound());
         Assertions.assertEquals(Double.POSITIVE_INFINITY, dist.getSupportUpperBound());
         Assertions.assertTrue(dist.isSupportConnected());
     }

[commons-statistics] 07/13: Use ParameterizedTest for addition Cauchy test cases

Posted by ah...@apache.org.
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-statistics.git

commit 3809a28b7da3520d1425aec73e993e68a5625abf
Author: aherbert <ah...@apache.org>
AuthorDate: Mon Sep 20 15:08:42 2021 +0100

    Use ParameterizedTest for addition Cauchy test cases
---
 .../distribution/CauchyDistributionTest.java       | 48 ++++++++++++----------
 1 file changed, 26 insertions(+), 22 deletions(-)

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 7b6835b..74f8a2f 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
@@ -20,6 +20,8 @@ package org.apache.commons.statistics.distribution;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.CsvSource;
 
 /**
  * Test cases for CauchyDistribution.
@@ -94,32 +96,34 @@ class CauchyDistributionTest extends ContinuousDistributionAbstractTest {
         verifyInverseCumulativeProbabilities();
     }
 
-    @Test
-    void testParameterAccessors() {
-        final CauchyDistribution dist = makeDistribution();
-        Assertions.assertEquals(1.2, dist.getLocation());
-        Assertions.assertEquals(2.1, dist.getScale());
+    @ParameterizedTest
+    @CsvSource({
+        "1.2, 2.1",
+        "0, 1",
+        "-3, 2",
+    })
+    void testParameterAccessors(double location, double scale) {
+        final CauchyDistribution dist = new CauchyDistribution(location, scale);
+        Assertions.assertEquals(location, dist.getLocation());
+        Assertions.assertEquals(scale, dist.getScale());
     }
 
-    @Test
-    void testConstructorPrecondition1() {
-        Assertions.assertThrows(DistributionException.class, () -> new CauchyDistribution(0, 0));
-    }
-
-    @Test
-    void testConstructorPrecondition2() {
-        Assertions.assertThrows(DistributionException.class, () -> new CauchyDistribution(0, -1));
+    @ParameterizedTest
+    @CsvSource({
+        "0, 0",
+        "0, -1",
+    })
+    void testConstructorPreconditions(double location, double scale) {
+        Assertions.assertThrows(DistributionException.class, () -> new CauchyDistribution(location, scale));
     }
 
-    @Test
-    void testMoments() {
-        CauchyDistribution dist;
-
-        dist = new CauchyDistribution(10.2, 0.15);
-        Assertions.assertTrue(Double.isNaN(dist.getMean()));
-        Assertions.assertTrue(Double.isNaN(dist.getVariance()));
-
-        dist = new CauchyDistribution(23.12, 2.12);
+    @ParameterizedTest
+    @CsvSource({
+        "10.2, 0.15",
+        "23.12, 2.12",
+    })
+    void testMoments(double location, double scale) {
+        final CauchyDistribution dist = new CauchyDistribution(location, scale);
         Assertions.assertTrue(Double.isNaN(dist.getMean()));
         Assertions.assertTrue(Double.isNaN(dist.getVariance()));
     }

[commons-statistics] 13/13: Use @ParameterizedTest for precondition test

Posted by ah...@apache.org.
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-statistics.git

commit 3e7d19bac3cf5a9719f2f57e3941ca1ae2661bc9
Author: aherbert <ah...@apache.org>
AuthorDate: Mon Sep 20 17:41:08 2021 +0100

    Use @ParameterizedTest for precondition test
---
 .../distribution/BinomialDistributionTest.java     | 46 +++++++--------
 .../distribution/CauchyDistributionTest.java       |  2 +-
 .../distribution/ChiSquaredDistributionTest.java   | 23 ++++----
 .../distribution/ExponentialDistributionTest.java  | 33 ++++-------
 .../statistics/distribution/FDistributionTest.java | 34 ++++++-----
 .../distribution/GammaDistributionTest.java        | 34 ++++++-----
 .../distribution/GeometricDistributionTest.java    | 25 ++++----
 .../distribution/GumbelDistributionTest.java       | 26 ++++++---
 .../HypergeometricDistributionTest.java            | 49 ++++++++--------
 .../distribution/LaplaceDistributionTest.java      | 27 ++++++---
 .../distribution/LogNormalDistributionTest.java    | 27 ++++++---
 .../distribution/LogisticDistributionTest.java     | 12 +++-
 .../distribution/NakagamiDistributionTest.java     | 30 +++++++---
 .../distribution/NormalDistributionTest.java       | 27 ++++++---
 .../distribution/ParetoDistributionTest.java       | 38 +++++++-----
 .../distribution/PascalDistributionTest.java       | 42 ++++++-------
 .../distribution/PoissonDistributionTest.java      | 33 ++++-------
 .../statistics/distribution/TDistributionTest.java | 18 +++---
 .../distribution/TriangularDistributionTest.java   | 68 +++++++++-------------
 .../UniformContinuousDistributionTest.java         | 19 +++---
 .../UniformDiscreteDistributionTest.java           | 16 +++--
 .../distribution/WeibullDistributionTest.java      | 37 +++++++-----
 .../distribution/ZipfDistributionTest.java         | 33 ++++++-----
 23 files changed, 382 insertions(+), 317 deletions(-)

diff --git a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/BinomialDistributionTest.java b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/BinomialDistributionTest.java
index 9aa2b7b..685691b 100644
--- a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/BinomialDistributionTest.java
+++ b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/BinomialDistributionTest.java
@@ -19,6 +19,8 @@ package org.apache.commons.statistics.distribution;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.CsvSource;
 
 /**
  * Test cases for BinomialDistribution. Extends DiscreteDistributionAbstractTest.
@@ -167,30 +169,26 @@ class BinomialDistributionTest extends DiscreteDistributionAbstractTest {
         Assertions.assertEquals(0, dist.getSupportUpperBound());
     }
 
-    @Test
-    void testParameterAccessors() {
-        for (final int n : new int[] {11, 42, 999}) {
-            for (final double p : new double[] {0.1, 0.456, 0.999}) {
-                final BinomialDistribution dist = new BinomialDistribution(n, p);
-                Assertions.assertEquals(n, dist.getNumberOfTrials());
-                Assertions.assertEquals(p, dist.getProbabilityOfSuccess());
-            }
-        }
-    }
-
-    @Test
-    void testConstructorPrecondition1() {
-        Assertions.assertThrows(DistributionException.class, () -> new BinomialDistribution(-1, 0.1));
-    }
-
-    @Test
-    void testConstructorPrecondition2() {
-        Assertions.assertThrows(DistributionException.class, () -> new BinomialDistribution(10, -0.1));
-    }
-
-    @Test
-    void testConstructorPrecondition3() {
-        Assertions.assertThrows(DistributionException.class, () -> new BinomialDistribution(10, 1.1));
+    @ParameterizedTest
+    @CsvSource({
+        "11, 0.1",
+        "42, 0.456",
+        "999, 0.999",
+    })
+    void testParameterAccessors(int trials, double p) {
+        final BinomialDistribution dist = new BinomialDistribution(trials, p);
+        Assertions.assertEquals(trials, dist.getNumberOfTrials());
+        Assertions.assertEquals(p, dist.getProbabilityOfSuccess());
+    }
+
+    @ParameterizedTest
+    @CsvSource({
+        "-1, 0.1",
+        "10, -0.1",
+        "10, 1.1",
+    })
+    void testConstructorPreconditions(int trials, double p) {
+        Assertions.assertThrows(DistributionException.class, () -> new BinomialDistribution(trials, p));
     }
 
     @Test
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 cc0e47a..1981f89 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
@@ -112,7 +112,7 @@ class CauchyDistributionTest extends ContinuousDistributionAbstractTest {
     @ParameterizedTest
     @CsvSource({
         "0, 0",
-        "0, -1",
+        "0, -0.1",
     })
     void testConstructorPreconditions(double location, double scale) {
         Assertions.assertThrows(DistributionException.class, () -> new CauchyDistribution(location, scale));
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 082a9ea..ff4c961 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
@@ -20,6 +20,8 @@ package org.apache.commons.statistics.distribution;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.ValueSource;
 
 /**
  * Test cases for {@link ChiSquaredDistribution}.
@@ -112,20 +114,17 @@ class ChiSquaredDistributionTest extends ContinuousDistributionAbstractTest {
         verifyInverseCumulativeProbabilities();
     }
 
-    @Test
-    void testParameterAccessors() {
-        final ChiSquaredDistribution dist = makeDistribution();
-        Assertions.assertEquals(5d, dist.getDegreesOfFreedom());
-    }
-
-    @Test
-    void testConstructorPrecondition1() {
-        Assertions.assertThrows(DistributionException.class, () -> new ChiSquaredDistribution(0));
+    @ParameterizedTest
+    @ValueSource(doubles = {0.5, 1, 2})
+    void testParameterAccessors(double df) {
+        final ChiSquaredDistribution dist = new ChiSquaredDistribution(df);
+        Assertions.assertEquals(df, dist.getDegreesOfFreedom());
     }
 
-    @Test
-    void testConstructorPrecondition2() {
-        Assertions.assertThrows(DistributionException.class, () -> new ChiSquaredDistribution(-1));
+    @ParameterizedTest
+    @ValueSource(doubles = {0, -0.1})
+    void testConstructorPrecondition(double df) {
+        Assertions.assertThrows(DistributionException.class, () -> new ChiSquaredDistribution(df));
     }
 
     @Test
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 6903108..9deca16 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
@@ -20,6 +20,8 @@ import org.apache.commons.numbers.core.Precision;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.ValueSource;
 
 /**
  * Test cases for ExponentialDistribution.
@@ -126,28 +128,17 @@ class ExponentialDistributionTest extends ContinuousDistributionAbstractTest {
         Assertions.assertEquals(0.1711390397, d2.density(2.0), 1e-8);
     }
 
-    @Test
-    void testMeanAccessors() {
-        final ExponentialDistribution dist = makeDistribution();
-        Assertions.assertEquals(5d, dist.getMean());
-    }
-
-    @Test
-    void testConstructorPrecondition1() {
-        Assertions.assertThrows(DistributionException.class, () -> new ExponentialDistribution(0));
+    @ParameterizedTest
+    @ValueSource(doubles = {0, -0.1})
+    void testConstructorPrecondition(double mean) {
+        Assertions.assertThrows(DistributionException.class, () -> new ExponentialDistribution(mean));
     }
 
-    @Test
-    void testMoments() {
-        final double tol = 1e-9;
-        ExponentialDistribution dist;
-
-        dist = new ExponentialDistribution(11d);
-        Assertions.assertEquals(11d, dist.getMean(), tol);
-        Assertions.assertEquals(11d * 11d, dist.getVariance(), tol);
-
-        dist = new ExponentialDistribution(10.5d);
-        Assertions.assertEquals(10.5d, dist.getMean(), tol);
-        Assertions.assertEquals(10.5d * 10.5d, dist.getVariance(), tol);
+    @ParameterizedTest
+    @ValueSource(doubles = {11, 10.5})
+    void testMoments(double mean) {
+        final ExponentialDistribution dist = new ExponentialDistribution(mean);
+        Assertions.assertEquals(mean, dist.getMean());
+        Assertions.assertEquals(mean * mean, dist.getVariance());
     }
 }
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 ea19de0..ef68dea 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
@@ -19,6 +19,8 @@ package org.apache.commons.statistics.distribution;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.CsvSource;
 
 /**
  * Test cases for FDistribution.
@@ -99,20 +101,24 @@ class FDistributionTest extends ContinuousDistributionAbstractTest {
         verifyInverseCumulativeProbabilities();
     }
 
-    @Test
-    void testParameterAccessors() {
-        final FDistribution dist = makeDistribution();
-        Assertions.assertEquals(5d, dist.getNumeratorDegreesOfFreedom());
-        Assertions.assertEquals(6d, dist.getDenominatorDegreesOfFreedom());
-    }
-
-    @Test
-    void testConstructorPrecondition1() {
-        Assertions.assertThrows(DistributionException.class, () -> new FDistribution(0, 1));
-    }
-    @Test
-    void testConstructorPrecondition2() {
-        Assertions.assertThrows(DistributionException.class, () -> new FDistribution(1, 0));
+    @ParameterizedTest
+    @CsvSource({
+        "11, 12",
+        "101, 400",
+    })
+    void testParameterAccessors(double df1, double df2) {
+        final FDistribution dist = new FDistribution(df1, df2);
+        Assertions.assertEquals(df1, dist.getNumeratorDegreesOfFreedom());
+        Assertions.assertEquals(df2, dist.getDenominatorDegreesOfFreedom());
+    }
+
+    @ParameterizedTest
+    @CsvSource({
+        "0, 1",
+        "1, 0",
+    })
+    void testConstructorPreconditions(double df1, double df2) {
+        Assertions.assertThrows(DistributionException.class, () -> new FDistribution(df1, df2));
     }
 
     @Test
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 9d89eea..cd27c41 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
@@ -27,6 +27,8 @@ import org.apache.commons.math3.stat.descriptive.SummaryStatistics;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.CsvSource;
 
 /**
  * Test cases for GammaDistribution.
@@ -100,20 +102,24 @@ class GammaDistributionTest extends ContinuousDistributionAbstractTest {
         Assertions.assertEquals(0.0, dist.density(Double.POSITIVE_INFINITY));
     }
 
-    @Test
-    void testParameterAccessors() {
-        final GammaDistribution dist = makeDistribution();
-        Assertions.assertEquals(4d, dist.getShape());
-        Assertions.assertEquals(2d, dist.getScale());
-    }
-
-    @Test
-    void testConstructorPrecondition1() {
-        Assertions.assertThrows(DistributionException.class, () -> new GammaDistribution(0, 1));
-    }
-    @Test
-    void testConstructorPrecondition2() {
-        Assertions.assertThrows(DistributionException.class, () -> new GammaDistribution(1, 0));
+    @ParameterizedTest
+    @CsvSource({
+        "4, 2",
+        "3.4, 1.2",
+    })
+    void testParameterAccessors(double shape, double scale) {
+        final GammaDistribution dist = new GammaDistribution(shape, scale);
+        Assertions.assertEquals(shape, dist.getShape());
+        Assertions.assertEquals(scale, dist.getScale());
+    }
+
+    @ParameterizedTest
+    @CsvSource({
+        "0, 1",
+        "1, 0",
+    })
+    void testConstructorPreconditions(double shape, double scale) {
+        Assertions.assertThrows(DistributionException.class, () -> new GammaDistribution(shape, scale));
     }
 
     @Test
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 d4f1b39..ff55aec 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
@@ -21,6 +21,8 @@ import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.ValueSource;
 
 /**
  * Test cases for GeometricDistribution.
@@ -188,22 +190,17 @@ class GeometricDistributionTest extends DiscreteDistributionAbstractTest {
         }
     }
 
-    @Test
-    void testParameterAccessors() {
-        for (final double x : new double[] {0.1, 0.456, 0.999}) {
-            final GeometricDistribution dist = new GeometricDistribution(x);
-            Assertions.assertEquals(x, dist.getProbabilityOfSuccess());
-        }
-    }
-
-    @Test
-    void testConstructorPrecondition1() {
-        Assertions.assertThrows(DistributionException.class, () -> new GeometricDistribution(-0.1));
+    @ParameterizedTest
+    @ValueSource(doubles = {0.1, 0.456, 0.999})
+    void testParameterAccessors(double p) {
+        final GeometricDistribution dist = new GeometricDistribution(p);
+        Assertions.assertEquals(p, dist.getProbabilityOfSuccess());
     }
 
-    @Test
-    void testConstructorPrecondition2() {
-        Assertions.assertThrows(DistributionException.class, () -> new GeometricDistribution(1.1));
+    @ParameterizedTest
+    @ValueSource(doubles = {-0.1, 0.0, 1.1})
+    void testConstructorPrecondition(double p) {
+        Assertions.assertThrows(DistributionException.class, () -> new GeometricDistribution(p));
     }
 
     @Test
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 71275ad..4bd7ab8 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
@@ -18,6 +18,8 @@ package org.apache.commons.statistics.distribution;
 
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.CsvSource;
 
 /**
  * Test cases for GumbelDistribution.
@@ -86,16 +88,24 @@ class GumbelDistributionTest extends ContinuousDistributionAbstractTest {
         verifyInverseCumulativeProbabilities();
     }
 
-    @Test
-    void testParameterAccessors() {
-        final GumbelDistribution dist = makeDistribution();
-        Assertions.assertEquals(0.5, dist.getLocation());
-        Assertions.assertEquals(2, dist.getScale());
+    @ParameterizedTest
+    @CsvSource({
+        "0.5, 2",
+        "1.3, 0.1",
+    })
+    void testParameterAccessors(double location, double scale) {
+        final GumbelDistribution dist = new GumbelDistribution(location, scale);
+        Assertions.assertEquals(location, dist.getLocation());
+        Assertions.assertEquals(scale, dist.getScale());
     }
 
-    @Test
-    void testConstructorPrecondition1() {
-        Assertions.assertThrows(DistributionException.class, () -> new GumbelDistribution(10, -0.1));
+    @ParameterizedTest
+    @CsvSource({
+        "10, 0.0",
+        "10, -0.1",
+    })
+    void testConstructorPreconditions(double location, double scale) {
+        Assertions.assertThrows(DistributionException.class, () -> new GumbelDistribution(location, scale));
     }
 
     @Test
diff --git a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/HypergeometricDistributionTest.java b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/HypergeometricDistributionTest.java
index 8b29ffd..3b799e2 100644
--- a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/HypergeometricDistributionTest.java
+++ b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/HypergeometricDistributionTest.java
@@ -22,6 +22,8 @@ import org.apache.commons.rng.simple.RandomSource;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.CsvSource;
 
 /**
  * Test cases for HyperGeometriclDistribution.
@@ -152,33 +154,30 @@ class HypergeometricDistributionTest extends DiscreteDistributionAbstractTest {
         Assertions.assertEquals(3, dist.getSupportUpperBound());
     }
 
-    @Test
-    void testParameterAccessors() {
-        final HypergeometricDistribution dist = new HypergeometricDistribution(5, 3, 4);
-        Assertions.assertEquals(5, dist.getPopulationSize());
-        Assertions.assertEquals(3, dist.getNumberOfSuccesses());
-        Assertions.assertEquals(4, dist.getSampleSize());
+    @ParameterizedTest
+    @CsvSource({
+        "5, 3, 4",
+        "10, 9, 1",
+    })
+    void testParameterAccessors(int populationSize, int numberOfSuccesses, int sampleSize) {
+        final HypergeometricDistribution dist = new HypergeometricDistribution(populationSize, numberOfSuccesses, sampleSize);
+        Assertions.assertEquals(populationSize, dist.getPopulationSize());
+        Assertions.assertEquals(numberOfSuccesses, dist.getNumberOfSuccesses());
+        Assertions.assertEquals(sampleSize, dist.getSampleSize());
     }
 
-    @Test
-    void testConstructorPrecondition1() {
-        Assertions.assertThrows(DistributionException.class, () -> new HypergeometricDistribution(0, 3, 5));
-    }
-    @Test
-    void testConstructorPrecondition2() {
-        Assertions.assertThrows(DistributionException.class, () -> new HypergeometricDistribution(5, -1, 5));
-    }
-    @Test
-    void testConstructorPrecondition3() {
-        Assertions.assertThrows(DistributionException.class, () -> new HypergeometricDistribution(5, 3, -1));
-    }
-    @Test
-    void testConstructorPrecondition4() {
-        Assertions.assertThrows(DistributionException.class, () -> new HypergeometricDistribution(5, 6, 5));
-    }
-    @Test
-    void testConstructorPrecondition5() {
-        Assertions.assertThrows(DistributionException.class, () -> new HypergeometricDistribution(5, 3, 6));
+    @ParameterizedTest
+    @CsvSource({
+        "0, 3, 5",
+        "-1, 3, 5",
+        "5, -1, 5",
+        "5, 3, -1",
+        "5, 6, 5",
+        "5, 3, 6",
+    })
+    void testConstructorPreconditions(int populationSize, int numberOfSuccesses, int sampleSize) {
+        Assertions.assertThrows(DistributionException.class,
+            () -> new HypergeometricDistribution(populationSize, numberOfSuccesses, sampleSize));
     }
 
     @Test
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 0af06cf..f34ffde 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
@@ -18,6 +18,8 @@ package org.apache.commons.statistics.distribution;
 
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.CsvSource;
 
 /**
  * Test cases for LaplaceDistribution.
@@ -88,16 +90,25 @@ class LaplaceDistributionTest extends ContinuousDistributionAbstractTest {
         verifyInverseCumulativeProbabilities();
     }
 
-    @Test
-    void testParameterAccessors() {
-        final LaplaceDistribution dist = makeDistribution();
-        Assertions.assertEquals(0, dist.getLocation());
-        Assertions.assertEquals(1, dist.getScale());
+    @ParameterizedTest
+    @CsvSource({
+        "1.2, 2.1",
+        "0, 1",
+        "-3, 2",
+    })
+    void testParameterAccessors(double location, double scale) {
+        final LaplaceDistribution dist = new LaplaceDistribution(location, scale);
+        Assertions.assertEquals(location, dist.getLocation());
+        Assertions.assertEquals(scale, dist.getScale());
     }
 
-    @Test
-    void testConstructorPrecondition1() {
-        Assertions.assertThrows(DistributionException.class, () -> new LaplaceDistribution(0, -0.1));
+    @ParameterizedTest
+    @CsvSource({
+        "0, 0",
+        "0, -0.1",
+    })
+    void testConstructorPreconditions(double location, double scale) {
+        Assertions.assertThrows(DistributionException.class, () -> new LaplaceDistribution(location, scale));
     }
 
     @Test
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 c2d24d3..609640d 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
@@ -20,6 +20,8 @@ package org.apache.commons.statistics.distribution;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.CsvSource;
 
 /**
  * Test cases for {@link LogNormalDistribution}. Extends
@@ -189,16 +191,25 @@ class LogNormalDistributionTest extends ContinuousDistributionAbstractTest {
         verifySurvivalProbability();
     }
 
-    @Test
-    void testParameterAccessors() {
-        final LogNormalDistribution distribution = makeDistribution();
-        Assertions.assertEquals(2.1, distribution.getMu());
-        Assertions.assertEquals(1.4, distribution.getSigma());
+    @ParameterizedTest
+    @CsvSource({
+        "1.2, 2.1",
+        "0, 1",
+        "-3, 2",
+    })
+    void testParameterAccessors(double mu, double sigma) {
+        final LogNormalDistribution dist = new LogNormalDistribution(mu, sigma);
+        Assertions.assertEquals(mu, dist.getMu());
+        Assertions.assertEquals(sigma, dist.getSigma());
     }
 
-    @Test
-    void testConstructorPrecondition1() {
-        Assertions.assertThrows(DistributionException.class, () -> new LogNormalDistribution(1, 0));
+    @ParameterizedTest
+    @CsvSource({
+        "0, 0",
+        "0, -0.1",
+    })
+    void testConstructorPreconditions(double mu, double sigma) {
+        Assertions.assertThrows(DistributionException.class, () -> new LogNormalDistribution(mu, sigma));
     }
 
     @Test
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 40d9c30..0b9084d 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
@@ -18,6 +18,8 @@ package org.apache.commons.statistics.distribution;
 
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.CsvSource;
 
 /**
  * Test cases for LogisticsDistribution.
@@ -103,9 +105,13 @@ class LogisticDistributionTest extends ContinuousDistributionAbstractTest {
         Assertions.assertEquals(5, dist.getScale());
     }
 
-    @Test
-    void testConstructorPrecondition1() {
-        Assertions.assertThrows(DistributionException.class, () -> new LogisticDistribution(1, 0));
+    @ParameterizedTest
+    @CsvSource({
+        "1, 0",
+        "1, -0.1",
+    })
+    void testConstructorPreconditions(double location, double scale) {
+        Assertions.assertThrows(DistributionException.class, () -> new LogisticDistribution(location, scale));
     }
 
     @Test
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 4ff0bba..3acd437 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
@@ -18,6 +18,8 @@ package org.apache.commons.statistics.distribution;
 
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.CsvSource;
 
 /**
  * Test cases for NakagamiDistribution.
@@ -87,21 +89,31 @@ class NakagamiDistributionTest extends ContinuousDistributionAbstractTest {
         Assertions.assertEquals(-1250.22579, dist.logDensity(x), 1e-4);
     }
 
+    @ParameterizedTest
+    @CsvSource({
+        "1.2, 2.1",
+        "0.5, 1",
+    })
+    void testParameterAccessors(double shape, double scale) {
+        final NakagamiDistribution dist = new NakagamiDistribution(shape, scale);
+        Assertions.assertEquals(shape, dist.getShape());
+        Assertions.assertEquals(scale, dist.getScale());
+    }
+
     @Test
     void testParameterAccessors() {
         final NakagamiDistribution dist = makeDistribution();
-        Assertions.assertEquals(0.5, dist.getShape());
         Assertions.assertEquals(1, dist.getScale());
     }
 
-    @Test
-    void testConstructorPrecondition1() {
-        Assertions.assertThrows(DistributionException.class, () -> new NakagamiDistribution(0.4999, 1.0));
-    }
-
-    @Test
-    void testConstructorPrecondition2() {
-        Assertions.assertThrows(DistributionException.class, () -> new NakagamiDistribution(0.5, 0.0));
+    @ParameterizedTest
+    @CsvSource({
+        "0.4999, 1.0",
+        "0.5, 0.0",
+        "0.5, -0.1",
+    })
+    void testConstructorPreconditions(double shape, double scale) {
+        Assertions.assertThrows(DistributionException.class, () -> new NakagamiDistribution(shape, scale));
     }
 
     @Test
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 c6cc57a..57afd43 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
@@ -20,6 +20,8 @@ package org.apache.commons.statistics.distribution;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.CsvSource;
 
 /**
  * Test cases for {@link NormalDistribution}. Extends
@@ -142,16 +144,25 @@ class NormalDistributionTest extends ContinuousDistributionAbstractTest {
         Assertions.assertEquals(1, v / expected, 1e-5);
     }
 
-    @Test
-    void testParameterAccessors() {
-        final NormalDistribution distribution = makeDistribution();
-        Assertions.assertEquals(2.1, distribution.getMean());
-        Assertions.assertEquals(1.4, distribution.getStandardDeviation());
+    @ParameterizedTest
+    @CsvSource({
+        "1.2, 2.1",
+        "0, 1",
+        "-3, 2",
+    })
+    void testParameterAccessors(double mu, double sigma) {
+        final NormalDistribution dist = new NormalDistribution(mu, sigma);
+        Assertions.assertEquals(mu, dist.getMean());
+        Assertions.assertEquals(sigma, dist.getStandardDeviation());
     }
 
-    @Test
-    void testConstructorPrecondition1() {
-        Assertions.assertThrows(DistributionException.class, () -> new NormalDistribution(1, 0));
+    @ParameterizedTest
+    @CsvSource({
+        "0, 0",
+        "0, -0.1",
+    })
+    void testConstructorPreconditions(double mu, double sigma) {
+        Assertions.assertThrows(DistributionException.class, () -> new NormalDistribution(mu, sigma));
     }
 
     @Test
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 12ecc6b..0fde16a 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
@@ -20,6 +20,8 @@ package org.apache.commons.statistics.distribution;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.CsvSource;
 
 /**
  * Test cases for {@link ParetoDistribution}.
@@ -144,21 +146,27 @@ class ParetoDistributionTest extends ContinuousDistributionAbstractTest {
         verifyInverseCumulativeProbabilities();
     }
 
-    @Test
-    void testParameterAccessors() {
-        final ParetoDistribution distribution = makeDistribution();
-        Assertions.assertEquals(2.1, distribution.getScale());
-        Assertions.assertEquals(1.4, distribution.getShape());
-    }
-
-    @Test
-    void testConstructorPrecondition1() {
-        Assertions.assertThrows(DistributionException.class, () -> new ParetoDistribution(1, 0));
-    }
-
-    @Test
-    void testConstructorPrecondition2() {
-        Assertions.assertThrows(DistributionException.class, () -> new ParetoDistribution(0, 1));
+    @ParameterizedTest
+    @CsvSource({
+        "1.2, 2.1",
+        "10, 1",
+        "3, 2",
+    })
+    void testParameterAccessors(double scale, double shape) {
+        final ParetoDistribution dist = new ParetoDistribution(scale, shape);
+        Assertions.assertEquals(scale, dist.getScale());
+        Assertions.assertEquals(shape, dist.getShape());
+    }
+
+    @ParameterizedTest
+    @CsvSource({
+        "1, 0",
+        "1, -0.1",
+        "0, 1",
+        "-0.1, 1",
+    })
+    void testConstructorPreconditions(double scale, double shape) {
+        Assertions.assertThrows(DistributionException.class, () -> new ParetoDistribution(scale, shape));
     }
 
     @Test
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 ecac3e8..6df69ee 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
@@ -19,6 +19,8 @@ package org.apache.commons.statistics.distribution;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.CsvSource;
 
 /**
  * Test cases for PascalDistribution.
@@ -127,26 +129,26 @@ class PascalDistributionTest extends DiscreteDistributionAbstractTest {
         verifyInverseCumulativeProbabilities();
     }
 
-    @Test
-    void testParameterAccessors() {
-        final PascalDistribution dist = makeDistribution();
-        Assertions.assertEquals(10, dist.getNumberOfSuccesses());
-        Assertions.assertEquals(0.7, dist.getProbabilityOfSuccess());
-    }
-
-    @Test
-    void testConstructorPrecondition1() {
-        Assertions.assertThrows(DistributionException.class, () -> new PascalDistribution(0, 0.5));
-    }
-
-    @Test
-    void testConstructorPrecondition2() {
-        Assertions.assertThrows(DistributionException.class, () -> new PascalDistribution(3, -0.1));
-    }
-
-    @Test
-    void testConstructorPrecondition3() {
-        Assertions.assertThrows(DistributionException.class, () -> new PascalDistribution(3, 1.1));
+    @ParameterizedTest
+    @CsvSource({
+        "10, 0.7",
+        "12, 0.5",
+    })
+    void testParameterAccessors(int r, double p) {
+        final PascalDistribution dist = new PascalDistribution(r, p);
+        Assertions.assertEquals(r, dist.getNumberOfSuccesses());
+        Assertions.assertEquals(p, dist.getProbabilityOfSuccess());
+    }
+
+    @ParameterizedTest
+    @CsvSource({
+        "0, 0.5",
+        "-1, 0.5",
+        "3, -0.1",
+        "3, 1.1",
+    })
+    void testConstructorPreconditions(int r, double p) {
+        Assertions.assertThrows(DistributionException.class, () -> new PascalDistribution(r, p));
     }
 
     @Test
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 7257887..76df0e6 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
@@ -19,6 +19,8 @@ package org.apache.commons.statistics.distribution;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.ValueSource;
 
 /**
  * <code>PoissonDistributionTest</code>
@@ -118,29 +120,18 @@ class PoissonDistributionTest extends DiscreteDistributionAbstractTest {
         Assertions.assertEquals(0, dist.inverseCumulativeProbability(0d));
     }
 
-    @Test
-    void testParameterAccessors() {
-        final PoissonDistribution dist = new PoissonDistribution(10.0);
-        Assertions.assertEquals(10.0, dist.getMean());
-    }
-
-    @Test
-    void testConstructorPrecondition1() {
-        Assertions.assertThrows(DistributionException.class, () -> new PoissonDistribution(-1));
+    @ParameterizedTest
+    @ValueSource(doubles = {0, -0.1})
+    void testConstructorPrecondition(double mean) {
+        Assertions.assertThrows(DistributionException.class, () -> new PoissonDistribution(mean));
     }
 
-    @Test
-    void testMoments() {
-        final double tol = 1e-9;
-        PoissonDistribution dist;
-
-        dist = new PoissonDistribution(1);
-        Assertions.assertEquals(1, dist.getMean(), tol);
-        Assertions.assertEquals(1, dist.getVariance(), tol);
-
-        dist = new PoissonDistribution(11.23);
-        Assertions.assertEquals(11.23, dist.getMean(), tol);
-        Assertions.assertEquals(11.23, dist.getVariance(), tol);
+    @ParameterizedTest
+    @ValueSource(doubles = {1.2, 15})
+    void testMoments(double mean) {
+        PoissonDistribution dist = new PoissonDistribution(mean);
+        Assertions.assertEquals(mean, dist.getMean());
+        Assertions.assertEquals(mean, dist.getVariance());
     }
 
     @Test
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 93ecdc8..011c29f 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
@@ -19,6 +19,8 @@ package org.apache.commons.statistics.distribution;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.ValueSource;
 /**
  * Test cases for TDistribution.
  * Extends ContinuousDistributionAbstractTest.  See class javadoc for
@@ -136,15 +138,17 @@ class TDistributionTest extends ContinuousDistributionAbstractTest {
         }
     }
 
-    @Test
-    void testParameterAccessors() {
-        final TDistribution dist = makeDistribution();
-        Assertions.assertEquals(5d, dist.getDegreesOfFreedom());
+    @ParameterizedTest
+    @ValueSource(doubles = {1, 12.3})
+    void testParameterAccessors(double df) {
+        final TDistribution dist = new TDistribution(df);
+        Assertions.assertEquals(df, dist.getDegreesOfFreedom());
     }
 
-    @Test
-    void testConstructorPrecondition1() {
-        Assertions.assertThrows(DistributionException.class, () -> new TDistribution(0));
+    @ParameterizedTest
+    @ValueSource(doubles = {0, -0.1})
+    void testConstructorPrecondition(double df) {
+        Assertions.assertThrows(DistributionException.class, () -> new TDistribution(df));
     }
 
     @Test
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 32664b4..6791766 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
@@ -20,6 +20,8 @@ package org.apache.commons.statistics.distribution;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.CsvSource;
 
 /**
  * Test cases for {@link TriangularDistribution}. See class javadoc for
@@ -113,50 +115,32 @@ class TriangularDistributionTest extends ContinuousDistributionAbstractTest {
 
     //-------------------- Additional test cases -------------------------------
 
-    /** Test lower bound getter. */
-    @Test
-    void testGetLowerBound() {
-        final TriangularDistribution dist = makeDistribution();
-        Assertions.assertEquals(-3.0, dist.getSupportLowerBound());
+    @ParameterizedTest
+    @CsvSource({
+        "1, 2, 3",
+        "0.12, 3.45, 12.56",
+    })
+    void testParameterAccessors(double lower, double mode, double upper) {
+        final TriangularDistribution dist = new TriangularDistribution(lower, mode, upper);
+        Assertions.assertEquals(lower, dist.getSupportLowerBound());
+        Assertions.assertEquals(mode, dist.getMode());
+        Assertions.assertEquals(upper, dist.getSupportUpperBound());
     }
 
-    /** Test upper bound getter. */
-    @Test
-    void testGetUpperBound() {
-        final TriangularDistribution dist = makeDistribution();
-        Assertions.assertEquals(12.0, dist.getSupportUpperBound());
-    }
-
-    @Test
-    void testParameterAccessors() {
-        for (final double x : new double[] {0.1, 0.2, 0.45}) {
-            final TriangularDistribution dist = new TriangularDistribution(0, x, 1.0);
-            Assertions.assertEquals(x, dist.getMode());
-        }
-    }
-
-    /** Test pre-condition for equal lower/upper limit. */
-    @Test
-    void testConstructorPreconditions1() {
-        Assertions.assertThrows(DistributionException.class, () -> new TriangularDistribution(0, 0, 0));
-    }
-
-    /** Test pre-condition for lower limit larger than upper limit. */
-    @Test
-    void testConstructorPreconditions2() {
-        Assertions.assertThrows(DistributionException.class, () -> new TriangularDistribution(1, 1, 0));
-    }
-
-    /** Test pre-condition for mode larger than upper limit. */
-    @Test
-    void testConstructorPreconditions3() {
-        Assertions.assertThrows(DistributionException.class, () -> new TriangularDistribution(0, 2, 1));
-    }
-
-    /** Test pre-condition for mode smaller than lower limit. */
-    @Test
-    void testConstructorPreconditions4() {
-        Assertions.assertThrows(DistributionException.class, () -> new TriangularDistribution(2, 1, 3));
+    @ParameterizedTest
+    @CsvSource({
+        "0, 0, 0",
+        // 1, 2, 3 is OK - move points to incorrect locations
+        "4, 2, 3",
+        "3, 2, 3",
+        "2.5, 2, 3",
+        "1, 0, 3",
+        "1, 4, 3",
+        "1, 2, -1",
+        "1, 2, 1.5",
+    })
+    void testConstructorPreconditions(double lower, double mode, double upper) {
+        Assertions.assertThrows(DistributionException.class, () -> new TriangularDistribution(lower, mode, upper));
     }
 
     @Test
diff --git a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/UniformContinuousDistributionTest.java b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/UniformContinuousDistributionTest.java
index 5e5c541..a0b0a17 100644
--- a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/UniformContinuousDistributionTest.java
+++ b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/UniformContinuousDistributionTest.java
@@ -20,6 +20,8 @@ package org.apache.commons.statistics.distribution;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.CsvSource;
 
 /**
  * Test cases for UniformContinuousDistribution. See class javadoc for
@@ -76,16 +78,13 @@ class UniformContinuousDistributionTest extends ContinuousDistributionAbstractTe
         Assertions.assertEquals(1.25, dist.getSupportUpperBound());
     }
 
-    /** Test pre-condition for equal lower/upper bound. */
-    @Test
-    void testConstructorPreconditions1() {
-        Assertions.assertThrows(DistributionException.class, () -> new UniformContinuousDistribution(0, 0));
-    }
-
-    /** Test pre-condition for lower bound larger than upper bound. */
-    @Test
-    void testConstructorPreconditions2() {
-        Assertions.assertThrows(DistributionException.class, () -> new UniformContinuousDistribution(1, 0));
+    @ParameterizedTest
+    @CsvSource({
+        "0, 0",
+        "1, 0",
+    })
+    void testConstructorPreconditions(double lower, double upper) {
+        Assertions.assertThrows(DistributionException.class, () -> new UniformContinuousDistribution(lower, upper));
     }
 
     @Test
diff --git a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/UniformDiscreteDistributionTest.java b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/UniformDiscreteDistributionTest.java
index 0e29262..c510f2f 100644
--- a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/UniformDiscreteDistributionTest.java
+++ b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/UniformDiscreteDistributionTest.java
@@ -20,6 +20,8 @@ package org.apache.commons.statistics.distribution;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.CsvSource;
 import org.apache.commons.numbers.core.Precision;
 
 /**
@@ -91,15 +93,19 @@ class UniformDiscreteDistributionTest extends DiscreteDistributionAbstractTest {
         Assertions.assertEquals(3 / 12.0, dist.getVariance());
     }
 
-    // MATH-1141
-    @Test
-    void testPreconditionUpperBoundInclusive1() {
-        Assertions.assertThrows(DistributionException.class, () -> new UniformDiscreteDistribution(1, 0));
+    @ParameterizedTest
+    @CsvSource({
+         // MATH-1141
+        "1, 0",
+        "3, 2",
+    })
+    void testConstructorPreconditions(int lower, int upper) {
+        Assertions.assertThrows(DistributionException.class, () -> new UniformDiscreteDistribution(lower, upper));
     }
 
     // MATH-1141
     @Test
-    void testPreconditionUpperBoundInclusive2() {
+    void testPreconditionUpperBoundInclusive() {
         // Degenerate case is allowed.
         Assertions.assertDoesNotThrow(() -> new UniformDiscreteDistribution(0, 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 6b1e28e..748d7eb 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
@@ -21,6 +21,8 @@ import org.apache.commons.numbers.gamma.LogGamma;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.CsvSource;
 
 /**
  * Test cases for WeibullDistribution.
@@ -108,21 +110,26 @@ class WeibullDistributionTest extends ContinuousDistributionAbstractTest {
         verifyInverseCumulativeProbabilities();
     }
 
-    @Test
-    void testParameterAccessors() {
-        final WeibullDistribution dist = new WeibullDistribution(1, 2);
-        Assertions.assertEquals(1, dist.getShape());
-        Assertions.assertEquals(2, dist.getScale());
-    }
-
-    @Test
-    void testConstructorPrecondition1() {
-        Assertions.assertThrows(DistributionException.class, () -> new WeibullDistribution(0, 2));
-    }
-
-    @Test
-    void testConstructorPrecondition2() {
-        Assertions.assertThrows(DistributionException.class, () -> new WeibullDistribution(1, 0));
+    @ParameterizedTest
+    @CsvSource({
+        "1, 2",
+        "0.1, 2.34",
+    })
+    void testParameterAccessors(double shape, double scale) {
+        final WeibullDistribution dist = new WeibullDistribution(shape, scale);
+        Assertions.assertEquals(shape, dist.getShape());
+        Assertions.assertEquals(scale, dist.getScale());
+    }
+
+    @ParameterizedTest
+    @CsvSource({
+        "0, 2",
+        "-0.1, 2",
+        "1, 0",
+        "1, -0.1",
+    })
+    void testConstructorPreconditions(double shape, double scale) {
+        Assertions.assertThrows(DistributionException.class, () -> new WeibullDistribution(shape, scale));
     }
 
     @Test
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 5325803..63db21b 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
@@ -21,6 +21,8 @@ import org.apache.commons.rng.simple.RandomSource;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.CsvSource;
 
 /**
  * Test cases for {@link ZipfDistribution}.
@@ -88,21 +90,26 @@ class ZipfDistributionTest extends DiscreteDistributionAbstractTest {
 
     //-------------------- Additional test cases -------------------------------
 
-    @Test
-    void testParameterAccessors() {
-        final ZipfDistribution dist = makeDistribution();
-        Assertions.assertEquals(10, dist.getNumberOfElements());
-        Assertions.assertEquals(1.0, dist.getExponent());
+    @ParameterizedTest
+    @CsvSource({
+        "10, 1",
+        "3, 0.5",
+    })
+    void testParameterAccessors(int n, double e) {
+        final ZipfDistribution dist = new ZipfDistribution(n, e);
+        Assertions.assertEquals(n, dist.getNumberOfElements());
+        Assertions.assertEquals(e, dist.getExponent());
     }
 
-    @Test
-    void testConstructorPreconditions1() {
-        Assertions.assertThrows(DistributionException.class, () -> new ZipfDistribution(0, 1));
-    }
-
-    @Test
-    void testConstructorPreconditions2() {
-        Assertions.assertThrows(DistributionException.class, () -> new ZipfDistribution(1, 0));
+    @ParameterizedTest
+    @CsvSource({
+        "0, 1",
+        "-1, 1",
+        "1, 0",
+        "1, -0.1",
+    })
+    void testConstructorPreconditions(int n, double e) {
+        Assertions.assertThrows(DistributionException.class, () -> new ZipfDistribution(n, e));
     }
 
     @Test

[commons-statistics] 08/13: Document exponential as using the mean (scale) paramterization.

Posted by ah...@apache.org.
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-statistics.git

commit 2bae640935782bf9e644d93f862f8f6aa93ff47a
Author: aherbert <ah...@apache.org>
AuthorDate: Mon Sep 20 15:41:02 2021 +0100

    Document exponential as using the mean (scale) paramterization.
    
    The alternative of the rate parameterization is noted in the class
    header.
---
 .../distribution/ExponentialDistribution.java           | 17 +++++++++++++----
 1 file changed, 13 insertions(+), 4 deletions(-)

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 295a03d..84ba2be 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
@@ -21,6 +21,10 @@ import org.apache.commons.rng.sampling.distribution.ZigguratSampler;
 
 /**
  * Implementation of the <a href="http://en.wikipedia.org/wiki/Exponential_distribution">exponential distribution</a>.
+ *
+ * <p>This implementation uses the scale parameter {@code μ} which is the mean of the distribution.
+ * A common alternative parameterization uses the rate parameter {@code λ} which is the reciprocal
+ * of the mean.
  */
 public class ExponentialDistribution extends AbstractContinuousDistribution {
     /** Support lower bound. */
@@ -35,7 +39,7 @@ public class ExponentialDistribution extends AbstractContinuousDistribution {
     /**
      * Creates a distribution.
      *
-     * @param mean Mean of this distribution.
+     * @param mean Mean of this distribution. This is a scale parameter.
      * @throws IllegalArgumentException if {@code mean <= 0}.
      */
     public ExponentialDistribution(double mean) {
@@ -109,7 +113,11 @@ public class ExponentialDistribution extends AbstractContinuousDistribution {
         return -mean * Math.log1p(-p);
     }
 
-    /** {@inheritDoc} */
+    /**
+     * {@inheritDoc}
+     *
+     * @return the mean
+     */
     @Override
     public double getMean() {
         return mean;
@@ -118,7 +126,8 @@ public class ExponentialDistribution extends AbstractContinuousDistribution {
     /**
      * {@inheritDoc}
      *
-     * <p>For mean parameter {@code k}, the variance is {@code k^2}.
+     * <p>For mean {@code k}, the variance is {@code k^2}.
+     * @return the variance
      */
     @Override
     public double getVariance() {
@@ -166,6 +175,6 @@ public class ExponentialDistribution extends AbstractContinuousDistribution {
     @Override
     public ContinuousDistribution.Sampler createSampler(final UniformRandomProvider rng) {
         // Exponential distribution sampler.
-        return ZigguratSampler.Exponential.of(rng, mean)::sample;
+        return ZigguratSampler.Exponential.of(rng, getMean())::sample;
     }
 }