Use "ChiSquareTest" from "Commons Math" (unit tests).

Project: http://git-wip-us.apache.org/repos/asf/commons-rng/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-rng/commit/ecb27296
Tree: http://git-wip-us.apache.org/repos/asf/commons-rng/tree/ecb27296
Diff: http://git-wip-us.apache.org/repos/asf/commons-rng/diff/ecb27296

Branch: refs/heads/master
Commit: ecb27296c13dcdc5d0b624e1be3020e8e2f93e11
Parents: 85b94d9
Author: Gilles <er...@apache.org>
Authored: Mon Nov 14 15:21:36 2016 +0100
Committer: Gilles <er...@apache.org>
Committed: Mon Nov 14 15:21:36 2016 +0100

----------------------------------------------------------------------
 .../DiscreteSamplerParametricTest.java          | 37 ++++----------------
 .../distribution/DiscreteSamplersList.java      |  8 ++---
 2 files changed, 11 insertions(+), 34 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/commons-rng/blob/ecb27296/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/DiscreteSamplerParametricTest.java
----------------------------------------------------------------------
diff --git 
a/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/DiscreteSamplerParametricTest.java
 
b/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/DiscreteSamplerParametricTest.java
index 6f39d06..3cf6455 100644
--- 
a/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/DiscreteSamplerParametricTest.java
+++ 
b/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/DiscreteSamplerParametricTest.java
@@ -27,6 +27,7 @@ import org.junit.runners.Parameterized;
 import org.junit.runners.Parameterized.Parameters;
 
 import org.apache.commons.math3.distribution.ChiSquaredDistribution;
+import org.apache.commons.math3.stat.inference.ChiSquareTest;
 
 /**
  * Tests for random deviates generators.
@@ -56,9 +57,9 @@ public class DiscreteSamplerParametricTest {
 
         final double[] prob = sampler.getProbabilities();
         final int len = prob.length; 
-        final long[] expected = new long[len];
+        final double[] expected = new double[len];
         for (int i = 0; i < len; i++) {
-            expected[i] = (long) (prob[i] * sampleSize);
+            expected[i] = prob[i] * sampleSize;
         }
         check(sampleSize,
               sampler.getSampler(),
@@ -80,7 +81,8 @@ public class DiscreteSamplerParametricTest {
     private void check(long sampleSize,
                        DiscreteSampler sampler,
                        int[] points,
-                       long[] expected) {
+                       double[] expected) {
+        final ChiSquareTest chiSquareTest = new ChiSquareTest();
         final int numTests = 50;
 
         // Run the tests.
@@ -105,10 +107,8 @@ public class DiscreteSamplerParametricTest {
                     }
                 }
 
-                // Statistics check. XXX
-                final double chi2stat = chiSquareStat(expected, observed);
-                if (chi2stat < 0.001) {
-                    failedStat.add(chi2stat);
+                if (chiSquareTest.chiSquareTest(expected, observed, 0.001)) {
+                    failedStat.add(chiSquareTest.chiSquareTest(expected, 
observed));
                     ++numFailures;
                 }
             }
@@ -123,27 +123,4 @@ public class DiscreteSamplerParametricTest {
                         "chi2=" + Arrays.toString(failedStat.toArray(new 
Double[0])));
         }
     }
-
-    /**
-     * @param expected Counts.
-     * @param observed Counts.
-     * @return the chi-square statistics.
-     */
-    private static double chiSquareStat(long[] expected,
-                                        long[] observed) {
-        final int numBins = expected.length;
-        double chi2 = 0;
-        for (int i = 0; i < numBins; i++) {
-            final long diff = observed[i] - expected[i];
-            chi2 += (diff / (double) expected[i]) * diff;
-            // System.out.println("bin[" + i + "]" +
-            //                    " obs=" + observed[i] +
-            //                    " exp=" + expected[i]);
-        }
-
-        final int dof = numBins - 1;
-        final ChiSquaredDistribution dist = new ChiSquaredDistribution(null, 
dof, 1e-8);
-
-        return 1 - dist.cumulativeProbability(chi2);
-    }
 }

http://git-wip-us.apache.org/repos/asf/commons-rng/blob/ecb27296/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/DiscreteSamplersList.java
----------------------------------------------------------------------
diff --git 
a/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/DiscreteSamplersList.java
 
b/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/DiscreteSamplersList.java
index e1fa88f..cf3ae99 100644
--- 
a/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/DiscreteSamplersList.java
+++ 
b/commons-rng-sampling/src/test/java/org/apache/commons/rng/sampling/distribution/DiscreteSamplersList.java
@@ -70,22 +70,22 @@ public class DiscreteSamplersList {
             final int loUniform = -3;
             final int hiUniform = 4;
             add(LIST, new 
org.apache.commons.math3.distribution.UniformIntegerDistribution(loUniform, 
hiUniform),
-                MathArrays.sequence(10, -4, 1),
+                MathArrays.sequence(8, -3, 1),
                 RandomSource.create(RandomSource.SPLIT_MIX_64));
             // Uniform.
             add(LIST, new 
org.apache.commons.math3.distribution.UniformIntegerDistribution(loUniform, 
hiUniform),
-                MathArrays.sequence(10, -4, 1),
+                MathArrays.sequence(8, -3, 1),
                 new 
DiscreteUniformSampler(RandomSource.create(RandomSource.MT_64), loUniform, 
hiUniform));
 
             // Zipf ("inverse method").
             final int numElementsZipf = 5;
             final double exponentZipf = 2.345;
             add(LIST, new 
org.apache.commons.math3.distribution.ZipfDistribution(numElementsZipf, 
exponentZipf),
-                MathArrays.sequence(5, 0, 1),
+                MathArrays.sequence(5, 1, 1),
                 RandomSource.create(RandomSource.XOR_SHIFT_1024_S));
             // Zipf.
             add(LIST, new 
org.apache.commons.math3.distribution.ZipfDistribution(numElementsZipf, 
exponentZipf),
-                MathArrays.sequence(7, 0, 1),
+                MathArrays.sequence(5, 1, 1),
                 new 
RejectionInversionZipfSampler(RandomSource.create(RandomSource.WELL_19937_C), 
numElementsZipf, exponentZipf));
 
             // Poisson ("inverse method").

Reply via email to