improved test coverage
git-svn-id: https://svn.apache.org/repos/asf/commons/proper/math/trunk@797742 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
648a02f0b4
commit
00589c9975
|
@ -13,6 +13,8 @@
|
||||||
*/
|
*/
|
||||||
package org.apache.commons.math.stat.descriptive;
|
package org.apache.commons.math.stat.descriptive;
|
||||||
|
|
||||||
|
import java.util.Locale;
|
||||||
|
|
||||||
import junit.framework.Test;
|
import junit.framework.Test;
|
||||||
import junit.framework.TestCase;
|
import junit.framework.TestCase;
|
||||||
import junit.framework.TestSuite;
|
import junit.framework.TestSuite;
|
||||||
|
@ -42,7 +44,7 @@ public class DescriptiveStatisticsTest extends TestCase {
|
||||||
return new DescriptiveStatistics();
|
return new DescriptiveStatistics();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testSetterInjection() throws Exception {
|
public void testSetterInjection() {
|
||||||
DescriptiveStatistics stats = createDescriptiveStatistics();
|
DescriptiveStatistics stats = createDescriptiveStatistics();
|
||||||
stats.addValue(1);
|
stats.addValue(1);
|
||||||
stats.addValue(3);
|
stats.addValue(3);
|
||||||
|
@ -52,6 +54,114 @@ public class DescriptiveStatisticsTest extends TestCase {
|
||||||
assertEquals(42, stats.getMean(), 1E-10);
|
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 {
|
public void testPercentileSetter() throws Exception {
|
||||||
DescriptiveStatistics stats = createDescriptiveStatistics();
|
DescriptiveStatistics stats = createDescriptiveStatistics();
|
||||||
stats.addValue(1);
|
stats.addValue(1);
|
||||||
|
|
|
@ -17,6 +17,8 @@
|
||||||
package org.apache.commons.math.stat.descriptive;
|
package org.apache.commons.math.stat.descriptive;
|
||||||
|
|
||||||
|
|
||||||
|
import java.util.Locale;
|
||||||
|
|
||||||
import junit.framework.Test;
|
import junit.framework.Test;
|
||||||
import junit.framework.TestCase;
|
import junit.framework.TestCase;
|
||||||
import junit.framework.TestSuite;
|
import junit.framework.TestSuite;
|
||||||
|
@ -69,6 +71,7 @@ public class MultivariateSummaryStatisticsTest extends TestCase {
|
||||||
u.addValue(new double[] { 3, 4 });
|
u.addValue(new double[] { 3, 4 });
|
||||||
assertEquals(2, u.getMean()[0], 1E-14);
|
assertEquals(2, u.getMean()[0], 1E-14);
|
||||||
assertEquals(3, u.getMean()[1], 1E-14);
|
assertEquals(3, u.getMean()[1], 1E-14);
|
||||||
|
assertEquals(2, u.getDimension());
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testSetterIllegalState() throws Exception {
|
public void testSetterIllegalState() throws Exception {
|
||||||
|
@ -85,6 +88,58 @@ public class MultivariateSummaryStatisticsTest extends TestCase {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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.
|
* Bogus mean implementation to test setter injection.
|
||||||
* Returns the sum instead of the mean.
|
* Returns the sum instead of the mean.
|
||||||
|
|
Loading…
Reference in New Issue