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 962ddfc467c0488948439528a21445422e6a4dc5
Author: Alex Herbert <aherb...@apache.org>
AuthorDate: Thu Nov 17 15:58:45 2022 +0000

    Use parameterized tests
---
 .../statistics/distribution/ArgumentUtilsTest.java | 50 ++++++++---------
 .../distribution/BetaDistributionTest.java         | 48 ++++++++---------
 .../distribution/ChiSquaredDistributionTest.java   | 63 ++++++++++++----------
 3 files changed, 84 insertions(+), 77 deletions(-)

diff --git 
a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/ArgumentUtilsTest.java
 
b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/ArgumentUtilsTest.java
index 82c09f9..59a33f1 100644
--- 
a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/ArgumentUtilsTest.java
+++ 
b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/ArgumentUtilsTest.java
@@ -17,37 +17,37 @@
 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.ValueSource;
 
 /**
  * Test for {@link ArgumentUtils}.
  */
 class ArgumentUtilsTest {
-    @Test
-    void testIsFiniteStrictlyPositive() {
-        final double[] good = {Double.MIN_VALUE, 1, 2, 3, Double.MAX_VALUE};
-        final double[] bad = {0, -0.0, -Double.MIN_VALUE, -Double.MAX_VALUE,
-            Double.POSITIVE_INFINITY, Double.NEGATIVE_INFINITY, Double.NaN};
-        for (final double x : good) {
-            Assertions.assertTrue(ArgumentUtils.isFiniteStrictlyPositive(x), 
() -> Double.toString(x));
-        }
-        for (final double x : bad) {
-            Assertions.assertFalse(ArgumentUtils.isFiniteStrictlyPositive(x), 
() -> Double.toString(x));
-        }
+    @ParameterizedTest
+    @ValueSource(doubles = {Double.MIN_VALUE, 1, 2, 3, Double.MAX_VALUE})
+    void testIsFiniteStrictlyPositiveTrue(double x) {
+        Assertions.assertTrue(ArgumentUtils.isFiniteStrictlyPositive(x), () -> 
Double.toString(x));
     }
 
-    @Test
-    void testCheckProbability() {
-        // Currently this allows -0.0
-        final double[] good = {-0.0, 0.0, Double.MIN_VALUE, 1 - 0x1.0p-53, 1};
-        final double[] bad = {-Double.MIN_VALUE, -0.1, -1, -2, 
Math.nextUp(1.0), 1.1, -Double.MAX_VALUE,
-            Double.POSITIVE_INFINITY, Double.NEGATIVE_INFINITY, Double.NaN};
-        for (final double p : good) {
-            Assertions.assertDoesNotThrow(() -> 
ArgumentUtils.checkProbability(p), () -> Double.toString(p));
-        }
-        for (final double p : bad) {
-            Assertions.assertThrows(IllegalArgumentException.class,
-                () -> ArgumentUtils.checkProbability(p), () -> 
Double.toString(p));
-        }
+    @ParameterizedTest
+    @ValueSource(doubles = {0, -0.0, -Double.MIN_VALUE, -Double.MAX_VALUE,
+        Double.POSITIVE_INFINITY, Double.NEGATIVE_INFINITY, Double.NaN})
+    void testIsFiniteStrictlyPositiveFalse(double x) {
+        Assertions.assertFalse(ArgumentUtils.isFiniteStrictlyPositive(x), () 
-> Double.toString(x));
+    }
+
+    @ParameterizedTest
+    @ValueSource(doubles = {-0.0, 0.0, Double.MIN_VALUE, 1 - 0x1.0p-53, 1})
+    void testCheckProbability(double p) {
+        Assertions.assertDoesNotThrow(() -> ArgumentUtils.checkProbability(p), 
() -> Double.toString(p));
+    }
+
+    @ParameterizedTest
+    @ValueSource(doubles = {-Double.MIN_VALUE, -0.1, -1, -2, 1.0 + 0x1.0p-52, 
1.1, -Double.MAX_VALUE,
+        Double.POSITIVE_INFINITY, Double.NEGATIVE_INFINITY, Double.NaN})
+    void testCheckProbabilityThrows(double p) {
+        Assertions.assertThrows(IllegalArgumentException.class,
+            () -> ArgumentUtils.checkProbability(p), () -> Double.toString(p));
     }
 }
diff --git 
a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/BetaDistributionTest.java
 
b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/BetaDistributionTest.java
index 86984ac..30ec9fd 100644
--- 
a/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/BetaDistributionTest.java
+++ 
b/commons-statistics-distribution/src/test/java/org/apache/commons/statistics/distribution/BetaDistributionTest.java
@@ -73,31 +73,16 @@ class BetaDistributionTest extends 
BaseContinuousDistributionTest {
      * Precision tests for verifying that CDF calculates accurately in cases
      * where 1-cdf(x) is inaccurately 1.
      */
-    @Test
-    void testCumulativePrecision() {
-        // Calculated using WolframAlpha
-        checkCumulativePrecision(5.0, 5.0, 0.0001, 1.2595800539968654e-18);
-        checkCumulativePrecision(4.0, 5.0, 0.00001, 6.999776002800025e-19);
-        checkCumulativePrecision(5.0, 4.0, 0.0001, 5.598600119996539e-19);
-        checkCumulativePrecision(6.0, 2.0, 0.001, 6.994000000000028e-18);
-        checkCumulativePrecision(2.0, 6.0, 1e-9, 2.0999999930000014e-17);
-    }
-
-    /**
-     * Precision tests for verifying that survival function calculates 
accurately in cases
-     * where 1-sf(x) is inaccurately 1.
-     */
-    @Test
-    void testSurvivalPrecision() {
+    @ParameterizedTest
+    @CsvSource({
         // Calculated using WolframAlpha
-        checkSurvivalPrecision(5.0, 5.0, 0.9999, 1.2595800539961496e-18);
-        checkSurvivalPrecision(4.0, 5.0, 0.9999, 5.598600119993397e-19);
-        checkSurvivalPrecision(5.0, 4.0, 0.99998, 1.1199283217964632e-17);
-        checkSurvivalPrecision(6.0, 2.0, 0.999999999, 2.0999998742158932e-17);
-        checkSurvivalPrecision(2.0, 6.0, 0.999, 6.994000000000077e-18);
-    }
-
-    private static void checkCumulativePrecision(double alpha, double beta, 
double value, double expected) {
+        "5.0, 5.0, 0.0001, 1.2595800539968654e-18",
+        "4.0, 5.0, 0.00001, 6.999776002800025e-19",
+        "5.0, 4.0, 0.0001, 5.598600119996539e-19",
+        "6.0, 2.0, 0.001, 6.994000000000028e-18",
+        "2.0, 6.0, 1e-9, 2.0999999930000014e-17",
+    })
+    void testCumulativePrecision(double alpha, double beta, double value, 
double expected) {
         final double tolerance = 1e-22;
         final BetaDistribution dist = BetaDistribution.of(alpha, beta);
         Assertions.assertEquals(
@@ -107,7 +92,20 @@ class BetaDistributionTest extends 
BaseContinuousDistributionTest {
             () -> "cumulative probability not precise at " + value + " for a=" 
+ alpha + " & b=" + beta);
     }
 
-    private static void checkSurvivalPrecision(double alpha, double beta, 
double value, double expected) {
+    /**
+     * Precision tests for verifying that survival function calculates 
accurately in cases
+     * where 1-sf(x) is inaccurately 1.
+     */
+    @ParameterizedTest
+    @CsvSource({
+        // Calculated using WolframAlpha
+        "5.0, 5.0, 0.9999, 1.2595800539961496e-18",
+        "4.0, 5.0, 0.9999, 5.598600119993397e-19",
+        "5.0, 4.0, 0.99998, 1.1199283217964632e-17",
+        "6.0, 2.0, 0.999999999, 2.0999998742158932e-17",
+        "2.0, 6.0, 0.999, 6.994000000000077e-18",
+    })
+    void testSurvivalPrecision(double alpha, double beta, double value, double 
expected) {
         final double tolerance = 1e-22;
         final BetaDistribution dist = BetaDistribution.of(alpha, beta);
         Assertions.assertEquals(
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 57daa18..6917a97 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
@@ -17,7 +17,10 @@
 
 package org.apache.commons.statistics.distribution;
 
-import org.junit.jupiter.api.Test;
+import java.util.stream.Stream;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.MethodSource;
 
 /**
  * Test cases for {@link ChiSquaredDistribution}.
@@ -50,37 +53,43 @@ class ChiSquaredDistributionTest extends 
BaseContinuousDistributionTest {
 
     //-------------------- Additional test cases 
-------------------------------
 
-    @Test
-    void testAdditionalDensity() {
+    @ParameterizedTest
+    @MethodSource
+    void testAdditionalDensity(double df, double[] points, double[] values) {
         // Values have many digits above the decimal point so use relative 
tolerance
         final DoubleTolerance tol = createRelTolerance(5e-14);
+        testDensity(ChiSquaredDistribution.of(df), points, values, tol);
+    }
 
-        final double[] x = new double[]{-0.1, 1e-6, 0.5, 1, 2, 5};
+    static Stream<Arguments> testAdditionalDensity() {
         // R 2.5:
         // x <- c(-0.1, 1e-6, 0.5, 1, 2, 5)
-        // print(dchisq(x, df=1), digits=17)
-        testDensity(ChiSquaredDistribution.of(1), x, new double[] {
-            0.0, 398.942080930342626743, 0.439391289467722435, 
0.241970724519143365,
-            0.103776874355148693, 0.014644982561926489}, tol);
-        // print(dchisq(x, df=0.1), digits=17)
-        testDensity(ChiSquaredDistribution.of(0.1), x, new double[]{
-            0, 2.4864539972849805e+04, 7.4642387316120481e-02,
-            3.0090777182393683e-02, 9.4472991589506262e-03, 
8.8271993957607896e-04}, tol);
-        // print(dchisq(x, df=2), digits=17)
-        testDensity(ChiSquaredDistribution.of(2), x, new double[]{0,
-            0.49999975000006253, 0.38940039153570244,
-            0.30326532985631671, 0.18393972058572117, 0.04104249931194940}, 
tol);
-        // print(dchisq(x, df=10), digits=17)
-        testDensity(ChiSquaredDistribution.of(10), x, new double[]{0,
-            1.3020826822918329e-27, 6.3378969976514082e-05,
-            7.8975346316749191e-04, 7.6641550244050524e-03, 
6.6800942890542614e-02}, tol);
-        // print(dchisq(x, df=100), digits=17)
-        testDensity(ChiSquaredDistribution.of(100), x, new double[]{0,
-            0.0000000000000000e+00, 2.0200026568141969e-93,
-            8.8562141121618944e-79, 3.0239224849774644e-64, 
2.1290671364111626e-45}, tol);
+        final double[] x = new double[]{-0.1, 1e-6, 0.5, 1, 2, 5};
+        return Stream.of(
+            // print(dchisq(x, df=1), digits=17)
+            Arguments.of(1, x, new double[] {
+                0, 398.942080930342626743, 0.439391289467722435, 
0.241970724519143365,
+                0.103776874355148693, 0.014644982561926489}),
+            // print(dchisq(x, df=0.1), digits=17)
+            Arguments.of(0.1, x, new double[] {
+                0, 2.4864539972849805e+04, 7.4642387316120481e-02,
+                3.0090777182393683e-02, 9.4472991589506262e-03, 
8.8271993957607896e-04}),
+            // print(dchisq(x, df=2), digits=17)
+            Arguments.of(2, x, new double[] {
+                0, 0.49999975000006253, 0.38940039153570244,
+                0.30326532985631671, 0.18393972058572117, 
0.04104249931194940}),
+            // print(dchisq(x, df=10), digits=17)
+            Arguments.of(10, x, new double[] {
+                0, 1.3020826822918329e-27, 6.3378969976514082e-05,
+                7.8975346316749191e-04, 7.6641550244050524e-03, 
6.6800942890542614e-02}),
+            // print(dchisq(x, df=100), digits=17)
+            Arguments.of(100, x, new double[] {
+                0, 0.0000000000000000e+00, 2.0200026568141969e-93,
+                8.8562141121618944e-79, 3.0239224849774644e-64, 
2.1290671364111626e-45})
 
-        // TODO:
-        // Add more density checks with large DF and x points around the mean
-        // and into overflow for the underlying Gamma distribution.
+            // TODO:
+            // Add more density checks with large DF and x points around the 
mean
+            // and into overflow for the underlying Gamma distribution.
+        );
     }
 }

Reply via email to