You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by lu...@apache.org on 2009/07/25 12:58:56 UTC

svn commit: r797742 - in /commons/proper/math/trunk/src/test/org/apache/commons/math/stat/descriptive: DescriptiveStatisticsTest.java MultivariateSummaryStatisticsTest.java

Author: luc
Date: Sat Jul 25 10:58:56 2009
New Revision: 797742

URL: http://svn.apache.org/viewvc?rev=797742&view=rev
Log:
improved test coverage

Modified:
    commons/proper/math/trunk/src/test/org/apache/commons/math/stat/descriptive/DescriptiveStatisticsTest.java
    commons/proper/math/trunk/src/test/org/apache/commons/math/stat/descriptive/MultivariateSummaryStatisticsTest.java

Modified: commons/proper/math/trunk/src/test/org/apache/commons/math/stat/descriptive/DescriptiveStatisticsTest.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/test/org/apache/commons/math/stat/descriptive/DescriptiveStatisticsTest.java?rev=797742&r1=797741&r2=797742&view=diff
==============================================================================
--- commons/proper/math/trunk/src/test/org/apache/commons/math/stat/descriptive/DescriptiveStatisticsTest.java (original)
+++ commons/proper/math/trunk/src/test/org/apache/commons/math/stat/descriptive/DescriptiveStatisticsTest.java Sat Jul 25 10:58:56 2009
@@ -13,6 +13,8 @@
  */
 package org.apache.commons.math.stat.descriptive;
 
+import java.util.Locale;
+
 import junit.framework.Test;
 import junit.framework.TestCase;
 import junit.framework.TestSuite;
@@ -42,7 +44,7 @@
         return new DescriptiveStatistics();
     }
 
-    public void testSetterInjection() throws Exception {
+    public void testSetterInjection() {
         DescriptiveStatistics stats = createDescriptiveStatistics();
         stats.addValue(1);
         stats.addValue(3);
@@ -52,6 +54,114 @@
         assertEquals(42, stats.getMean(), 1E-10);
     }
     
+    public void testCopy() {
+        DescriptiveStatistics stats = createDescriptiveStatistics();
+        stats.addValue(1);
+        stats.addValue(3);
+        DescriptiveStatistics copy = new DescriptiveStatistics(stats);
+        assertEquals(2, copy.getMean(), 1E-10);
+        // Now lets try some new math
+        stats.setMeanImpl(new deepMean());
+        copy = stats.copy();
+        assertEquals(42, copy.getMean(), 1E-10);
+    }
+    
+    public void testWindowSize() {
+        DescriptiveStatistics stats = createDescriptiveStatistics();
+        stats.setWindowSize(300);
+        for (int i = 0; i < 100; ++i) {
+            stats.addValue(i + 1);
+        }
+        int refSum = (100 * 101) / 2;
+        assertEquals(refSum / 100.0, stats.getMean(), 1E-10);
+        assertEquals(300, stats.getWindowSize());
+        try {
+            stats.setWindowSize(-3);
+            fail("an exception should have been thrown");
+        } catch (IllegalArgumentException iae) {
+            // expected
+        } catch (Exception e) {
+            fail("wrong exception caught: " + e.getMessage());
+        }
+        assertEquals(300, stats.getWindowSize());
+        stats.setWindowSize(50);
+        assertEquals(50, stats.getWindowSize());
+        int refSum2 = refSum - (50 * 51) / 2;
+        assertEquals(refSum2 / 50.0, stats.getMean(), 1E-10);
+    }
+    
+    public void testGetValues() {
+        DescriptiveStatistics stats = createDescriptiveStatistics();
+        for (int i = 100; i > 0; --i) {
+            stats.addValue(i);
+        }
+        int refSum = (100 * 101) / 2;
+        assertEquals(refSum / 100.0, stats.getMean(), 1E-10);
+        double[] v = stats.getValues();
+        for (int i = 0; i < v.length; ++i) {
+            assertEquals(100.0 - i, v[i], 1.0e-10);
+        }
+        double[] s = stats.getSortedValues();
+        for (int i = 0; i < s.length; ++i) {
+            assertEquals(i + 1.0, s[i], 1.0e-10);
+        }
+        assertEquals(12.0, stats.getElement(88), 1.0e-10);
+    }
+    
+    public void testToString() {
+        DescriptiveStatistics stats = createDescriptiveStatistics();
+        stats.addValue(1);
+        stats.addValue(2);
+        stats.addValue(3);
+        Locale d = Locale.getDefault();
+        Locale.setDefault(Locale.US);
+        assertEquals("DescriptiveStatistics:\n" +
+                     "n: 3\n" +
+                     "min: 1.0\n" +
+                     "max: 3.0\n" +
+                     "mean: 2.0\n" +
+                     "std dev: 1.0\n" +
+                     "median: 2.0\n" +
+                     "skewness: 0.0\n" +
+                     "kurtosis: NaN\n",  stats.toString());
+        Locale.setDefault(d);
+    }
+
+    public void testShuffledStatistics() {
+        // the purpose of this test is only to check the get/set methods
+        // we are aware shuffling statistics like this is really not
+        // something sensible to do in production ...
+        DescriptiveStatistics reference = createDescriptiveStatistics();
+        DescriptiveStatistics shuffled  = createDescriptiveStatistics();
+
+        UnivariateStatistic tmp = shuffled.getGeometricMeanImpl();
+        shuffled.setGeometricMeanImpl(shuffled.getMeanImpl());
+        shuffled.setMeanImpl(shuffled.getKurtosisImpl());
+        shuffled.setKurtosisImpl(shuffled.getSkewnessImpl());
+        shuffled.setSkewnessImpl(shuffled.getVarianceImpl());
+        shuffled.setVarianceImpl(shuffled.getMaxImpl());
+        shuffled.setMaxImpl(shuffled.getMinImpl());
+        shuffled.setMinImpl(shuffled.getSumImpl());
+        shuffled.setSumImpl(shuffled.getSumsqImpl());
+        shuffled.setSumsqImpl(tmp);
+
+        for (int i = 100; i > 0; --i) {
+            reference.addValue(i);
+            shuffled.addValue(i);
+        }
+
+        assertEquals(reference.getMean(),          shuffled.getGeometricMean(), 1.0e-10);
+        assertEquals(reference.getKurtosis(),      shuffled.getMean(),          1.0e-10);
+        assertEquals(reference.getSkewness(),      shuffled.getKurtosis(), 1.0e-10);
+        assertEquals(reference.getVariance(),      shuffled.getSkewness(), 1.0e-10);
+        assertEquals(reference.getMax(),           shuffled.getVariance(), 1.0e-10);
+        assertEquals(reference.getMin(),           shuffled.getMax(), 1.0e-10);
+        assertEquals(reference.getSum(),           shuffled.getMin(), 1.0e-10);
+        assertEquals(reference.getSumsq(),         shuffled.getSum(), 1.0e-10);
+        assertEquals(reference.getGeometricMean(), shuffled.getSumsq(), 1.0e-10);
+
+    }
+    
     public void testPercentileSetter() throws Exception {
         DescriptiveStatistics stats = createDescriptiveStatistics();
         stats.addValue(1);

Modified: commons/proper/math/trunk/src/test/org/apache/commons/math/stat/descriptive/MultivariateSummaryStatisticsTest.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/test/org/apache/commons/math/stat/descriptive/MultivariateSummaryStatisticsTest.java?rev=797742&r1=797741&r2=797742&view=diff
==============================================================================
--- commons/proper/math/trunk/src/test/org/apache/commons/math/stat/descriptive/MultivariateSummaryStatisticsTest.java (original)
+++ commons/proper/math/trunk/src/test/org/apache/commons/math/stat/descriptive/MultivariateSummaryStatisticsTest.java Sat Jul 25 10:58:56 2009
@@ -17,6 +17,8 @@
 package org.apache.commons.math.stat.descriptive;
 
 
+import java.util.Locale;
+
 import junit.framework.Test;
 import junit.framework.TestCase;
 import junit.framework.TestSuite;
@@ -69,6 +71,7 @@
         u.addValue(new double[] { 3, 4 });
         assertEquals(2, u.getMean()[0], 1E-14);
         assertEquals(3, u.getMean()[1], 1E-14);
+        assertEquals(2, u.getDimension());
     }
     
     public void testSetterIllegalState() throws Exception {
@@ -84,6 +87,58 @@
             // expected
         }
     }
+
+    public void testToString() throws DimensionMismatchException {
+        MultivariateSummaryStatistics stats = createMultivariateSummaryStatistics(2, true);
+        stats.addValue(new double[] {1, 3});
+        stats.addValue(new double[] {2, 2});
+        stats.addValue(new double[] {3, 1});
+        Locale d = Locale.getDefault();
+        Locale.setDefault(Locale.US);
+        assertEquals("MultivariateSummaryStatistics:\n" +
+                     "n: 3\n" +
+                     "min: 1.0, 1.0\n" +
+                     "max: 3.0, 3.0\n" +
+                     "mean: 2.0, 2.0\n" +
+                     "geometric mean: 1.8171205928321394, 1.8171205928321394\n" +
+                     "sum of squares: 14.0, 14.0\n" +
+                     "sum of logarithms: 1.791759469228055, 1.791759469228055\n" +
+                     "standard deviation: 1.0, 1.0\n" +
+                     "covariance: Array2DRowRealMatrix{{1.0,-1.0},{-1.0,1.0}}\n",
+                     stats.toString());
+        Locale.setDefault(d);
+    }
+
+    public void testShuffledStatistics() throws DimensionMismatchException {
+        // the purpose of this test is only to check the get/set methods
+        // we are aware shuffling statistics like this is really not
+        // something sensible to do in production ...
+        MultivariateSummaryStatistics reference = createMultivariateSummaryStatistics(2, true);
+        MultivariateSummaryStatistics shuffled  = createMultivariateSummaryStatistics(2, true);
+
+        StorelessUnivariateStatistic[] tmp = shuffled.getGeoMeanImpl();
+        shuffled.setGeoMeanImpl(shuffled.getMeanImpl());
+        shuffled.setMeanImpl(shuffled.getMaxImpl());
+        shuffled.setMaxImpl(shuffled.getMinImpl());
+        shuffled.setMinImpl(shuffled.getSumImpl());
+        shuffled.setSumImpl(shuffled.getSumsqImpl());
+        shuffled.setSumsqImpl(shuffled.getSumLogImpl());
+        shuffled.setSumLogImpl(tmp);
+
+        for (int i = 100; i > 0; --i) {
+            reference.addValue(new double[] {i, i});
+            shuffled.addValue(new double[] {i, i});
+        }
+
+        TestUtils.assertEquals(reference.getMean(),          shuffled.getGeometricMean(), 1.0e-10);
+        TestUtils.assertEquals(reference.getMax(),           shuffled.getMean(),          1.0e-10);
+        TestUtils.assertEquals(reference.getMin(),           shuffled.getMax(),           1.0e-10);
+        TestUtils.assertEquals(reference.getSum(),           shuffled.getMin(),           1.0e-10);
+        TestUtils.assertEquals(reference.getSumSq(),         shuffled.getSum(),           1.0e-10);
+        TestUtils.assertEquals(reference.getSumLog(),        shuffled.getSumSq(),         1.0e-10);
+        TestUtils.assertEquals(reference.getGeometricMean(), shuffled.getSumLog(),        1.0e-10);
+
+    }
     
     /**
      * Bogus mean implementation to test setter injection.