1 16 package org.apache.commons.math.stat.descriptive; 17 18 19 import junit.framework.Test; 20 import junit.framework.TestCase; 21 import junit.framework.TestSuite; 22 23 import org.apache.commons.math.TestUtils; 24 29 30 public final class SummaryStatisticsImplTest extends TestCase { 31 private double one = 1; 32 private float twoF = 2; 33 private long twoL = 2; 34 private int three = 3; 35 private double mean = 2; 36 private double sumSq = 18; 37 private double sum = 8; 38 private double var = 0.666666666666666666667; 39 private double std = Math.sqrt(var); 40 private double n = 4; 41 private double min = 1; 42 private double max = 3; 43 private double tolerance = 10E-15; 44 45 protected SummaryStatistics u = null; 46 47 public SummaryStatisticsImplTest(String name) { 48 super(name); 49 } 50 51 public void setUp() { 52 u = SummaryStatistics.newInstance(); 53 } 54 55 public static Test suite() { 56 TestSuite suite = new TestSuite(SummaryStatisticsImplTest.class); 57 suite.setName("Frequency Tests"); 58 return suite; 59 } 60 61 62 public void testStats() { 63 assertEquals("total count",0,u.getN(),tolerance); 64 u.addValue(one); 65 u.addValue(twoF); 66 u.addValue(twoL); 67 u.addValue(three); 68 assertEquals("N",n,u.getN(),tolerance); 69 assertEquals("sum",sum,u.getSum(),tolerance); 70 assertEquals("sumsq",sumSq,u.getSumsq(),tolerance); 71 assertEquals("var",var,u.getVariance(),tolerance); 72 assertEquals("std",std,u.getStandardDeviation(),tolerance); 73 assertEquals("mean",mean,u.getMean(),tolerance); 74 assertEquals("min",min,u.getMin(),tolerance); 75 assertEquals("max",max,u.getMax(),tolerance); 76 u.clear(); 77 assertEquals("total count",0,u.getN(),tolerance); 78 } 79 80 public void testN0andN1Conditions() throws Exception { 81 assertTrue("Mean of n = 0 set should be NaN", 82 Double.isNaN( u.getMean() ) ); 83 assertTrue("Standard Deviation of n = 0 set should be NaN", 84 Double.isNaN( u.getStandardDeviation() ) ); 85 assertTrue("Variance of n = 0 set should be NaN", 86 Double.isNaN(u.getVariance() ) ); 87 88 89 u.addValue(one); 90 assertTrue("mean should be one (n = 1)", 91 u.getMean() == one); 92 assertTrue("geometric should be one (n = 1) instead it is " + u.getGeometricMean(), 93 u.getGeometricMean() == one); 94 assertTrue("Std should be zero (n = 1)", 95 u.getStandardDeviation() == 0.0); 96 assertTrue("variance should be zero (n = 1)", 97 u.getVariance() == 0.0); 98 99 100 u.addValue(twoF); 101 assertTrue("Std should not be zero (n = 2)", 102 u.getStandardDeviation() != 0.0); 103 assertTrue("variance should not be zero (n = 2)", 104 u.getVariance() != 0.0); 105 106 } 107 108 public void testProductAndGeometricMean() throws Exception { 109 u.addValue( 1.0 ); 110 u.addValue( 2.0 ); 111 u.addValue( 3.0 ); 112 u.addValue( 4.0 ); 113 114 assertEquals( "Geometric mean not expected", 2.213364, 115 u.getGeometricMean(), 0.00001 ); 116 } 117 118 public void testNaNContracts() { 119 double nan = Double.NaN; 120 assertTrue("mean not NaN",Double.isNaN(u.getMean())); 121 assertTrue("min not NaN",Double.isNaN(u.getMin())); 122 assertTrue("std dev not NaN",Double.isNaN(u.getStandardDeviation())); 123 assertTrue("var not NaN",Double.isNaN(u.getVariance())); 124 assertTrue("geom mean not NaN",Double.isNaN(u.getGeometricMean())); 125 126 u.addValue(1.0); 127 128 assertEquals( "mean not expected", 1.0, 129 u.getMean(), Double.MIN_VALUE); 130 assertEquals( "variance not expected", 0.0, 131 u.getVariance(), Double.MIN_VALUE); 132 assertEquals( "geometric mean not expected", 1.0, 133 u.getGeometricMean(), Double.MIN_VALUE); 134 135 u.addValue(-1.0); 136 137 assertTrue("geom mean not NaN",Double.isNaN(u.getGeometricMean())); 138 139 u.addValue(0.0); 140 141 assertTrue("geom mean not NaN",Double.isNaN(u.getGeometricMean())); 142 143 } 145 146 public void testGetSummary() { 147 StatisticalSummary summary = u.getSummary(); 148 verifySummary(summary); 149 u.addValue(1d); 150 summary = u.getSummary(); 151 verifySummary(summary); 152 u.addValue(2d); 153 summary = u.getSummary(); 154 verifySummary(summary); 155 u.addValue(2d); 156 summary = u.getSummary(); 157 verifySummary(summary); 158 } 159 160 public void testSerialization() { 161 TestUtils.checkSerializedEquality(u); 163 SummaryStatistics s = (SummaryStatistics) TestUtils.serializeAndRecover(u); 164 StatisticalSummary summary = s.getSummary(); 165 verifySummary(summary); 166 167 u.addValue(2d); 169 u.addValue(1d); 170 u.addValue(3d); 171 u.addValue(4d); 172 u.addValue(5d); 173 174 TestUtils.checkSerializedEquality(u); 176 s = (SummaryStatistics) TestUtils.serializeAndRecover(u); 177 summary = s.getSummary(); 178 verifySummary(summary); 179 180 } 181 182 public void testEqualsAndHashCode() { 183 SummaryStatistics t = null; 184 int emptyHash = u.hashCode(); 185 assertTrue("reflexive", u.equals(u)); 186 assertFalse("non-null compared to null", u.equals(t)); 187 assertFalse("wrong type", u.equals(new Double (0))); 188 t = SummaryStatistics.newInstance(); 189 assertTrue("empty instances should be equal", t.equals(u)); 190 assertTrue("empty instances should be equal", u.equals(t)); 191 assertEquals("empty hash code", emptyHash, t.hashCode()); 192 193 u.addValue(2d); 195 u.addValue(1d); 196 u.addValue(3d); 197 u.addValue(4d); 198 assertFalse("different n's should make instances not equal", t.equals(u)); 199 assertFalse("different n's should make instances not equal", u.equals(t)); 200 assertTrue("different n's should make hashcodes different", 201 u.hashCode() != t.hashCode()); 202 203 t.addValue(4d); 205 t.addValue(2d); 206 t.addValue(3d); 207 t.addValue(1d); 208 assertTrue("summaries based on same data should be equal", t.equals(u)); 209 assertTrue("summaries based on same data should be equal", u.equals(t)); 210 assertEquals("summaries based on same data should have same hashcodes", 211 u.hashCode(), t.hashCode()); 212 213 u.clear(); 215 t.clear(); 216 assertTrue("empty instances should be equal", t.equals(u)); 217 assertTrue("empty instances should be equal", u.equals(t)); 218 assertEquals("empty hash code", emptyHash, t.hashCode()); 219 assertEquals("empty hash code", emptyHash, u.hashCode()); 220 } 221 222 private void verifySummary(StatisticalSummary s) { 223 assertEquals("N",s.getN(),u.getN()); 224 TestUtils.assertEquals("sum",s.getSum(),u.getSum(),tolerance); 225 TestUtils.assertEquals("var",s.getVariance(),u.getVariance(),tolerance); 226 TestUtils.assertEquals("std",s.getStandardDeviation(),u.getStandardDeviation(),tolerance); 227 TestUtils.assertEquals("mean",s.getMean(),u.getMean(),tolerance); 228 TestUtils.assertEquals("min",s.getMin(),u.getMin(),tolerance); 229 TestUtils.assertEquals("max",s.getMax(),u.getMax(),tolerance); 230 } 231 } 232 | Popular Tags |