1 16 package org.apache.commons.math.stat.descriptive; 17 18 import java.util.ArrayList ; 19 import java.util.List ; 20 21 import org.apache.commons.math.util.NumberTransformer; 22 import org.apache.commons.math.util.TransformerMap; 23 import junit.framework.Test; 24 import junit.framework.TestCase; 25 import junit.framework.TestSuite; 26 27 32 33 public final class MixedListUnivariateImplTest extends TestCase { 34 private double one = 1; 35 private float two = 2; 36 private int three = 3; 37 38 private double mean = 2; 39 private double sumSq = 18; 40 private double sum = 8; 41 private double var = 0.666666666666666666667; 42 private double std = Math.sqrt(var); 43 private double n = 4; 44 private double min = 1; 45 private double max = 3; 46 private double skewness = 0; 47 private double kurtosis = 0.5; 48 private double tolerance = 10E-15; 49 50 private TransformerMap transformers = new TransformerMap(); 51 52 public MixedListUnivariateImplTest(String name) { 53 super(name); 54 transformers = new TransformerMap(); 55 56 transformers.putTransformer(Foo.class, new NumberTransformer() { 57 public double transform(Object o) { 58 return Double.parseDouble(((Foo) o).heresFoo()); 59 } 60 }); 61 62 transformers.putTransformer(Bar.class, new NumberTransformer() { 63 public double transform(Object o) { 64 return Double.parseDouble(((Bar) o).heresBar()); 65 } 66 67 }); 68 69 } 70 71 public void setUp() { 72 } 73 74 public static Test suite() { 75 TestSuite suite = new TestSuite(MixedListUnivariateImplTest.class); 76 suite.setName("Mixed List Tests"); 77 return suite; 78 } 79 80 81 public void testStats() { 82 List externalList = new ArrayList (); 83 84 DescriptiveStatistics u = new ListUnivariateImpl(externalList,transformers); 85 86 assertEquals("total count", 0, u.getN(), tolerance); 87 u.addValue(one); 88 u.addValue(two); 89 u.addValue(two); 90 u.addValue(three); 91 assertEquals("N", n, u.getN(), tolerance); 92 assertEquals("sum", sum, u.getSum(), tolerance); 93 assertEquals("sumsq", sumSq, u.getSumsq(), tolerance); 94 assertEquals("var", var, u.getVariance(), tolerance); 95 assertEquals("std", std, u.getStandardDeviation(), tolerance); 96 assertEquals("mean", mean, u.getMean(), tolerance); 97 assertEquals("min", min, u.getMin(), tolerance); 98 assertEquals("max", max, u.getMax(), tolerance); 99 u.clear(); 100 assertEquals("total count", 0, u.getN(), tolerance); 101 } 102 103 public void testN0andN1Conditions() throws Exception { 104 List list = new ArrayList (); 105 106 DescriptiveStatistics u = new ListUnivariateImpl(new ArrayList (),transformers); 107 108 assertTrue( 109 "Mean of n = 0 set should be NaN", 110 Double.isNaN(u.getMean())); 111 assertTrue( 112 "Standard Deviation of n = 0 set should be NaN", 113 Double.isNaN(u.getStandardDeviation())); 114 assertTrue( 115 "Variance of n = 0 set should be NaN", 116 Double.isNaN(u.getVariance())); 117 118 u.addValue(one); 119 120 assertTrue( 121 "Mean of n = 1 set should be value of single item n1, instead it is " + u.getMean() , 122 u.getMean() == one); 123 124 assertTrue( 125 "StdDev of n = 1 set should be zero, instead it is: " 126 + u.getStandardDeviation(), 127 u.getStandardDeviation() == 0); 128 assertTrue( 129 "Variance of n = 1 set should be zero", 130 u.getVariance() == 0); 131 } 132 133 public void testSkewAndKurtosis() { 134 ListUnivariateImpl u = 135 new ListUnivariateImpl(new ArrayList (), transformers); 136 137 u.addObject("12.5"); 138 u.addObject(new Integer (12)); 139 u.addObject("11.8"); 140 u.addObject("14.2"); 141 u.addObject(new Foo()); 142 u.addObject("14.5"); 143 u.addObject(new Long (21)); 144 u.addObject("8.2"); 145 u.addObject("10.3"); 146 u.addObject("11.3"); 147 u.addObject(new Float (14.1)); 148 u.addObject("9.9"); 149 u.addObject("12.2"); 150 u.addObject(new Bar()); 151 u.addObject("12.1"); 152 u.addObject("11"); 153 u.addObject(new Double (19.8)); 154 u.addObject("11"); 155 u.addObject("10"); 156 u.addObject("8.8"); 157 u.addObject("9"); 158 u.addObject("12.3"); 159 160 161 assertEquals("mean", 12.40455, u.getMean(), 0.0001); 162 assertEquals("variance", 10.00236, u.getVariance(), 0.0001); 163 assertEquals("skewness", 1.437424, u.getSkewness(), 0.0001); 164 assertEquals("kurtosis", 2.37719, u.getKurtosis(), 0.0001); 165 } 166 167 public void testProductAndGeometricMean() throws Exception { 168 ListUnivariateImpl u = new ListUnivariateImpl(new ArrayList (),transformers); 169 u.setWindowSize(10); 170 171 u.addValue(1.0); 172 u.addValue(2.0); 173 u.addValue(3.0); 174 u.addValue(4.0); 175 176 assertEquals( 177 "Geometric mean not expected", 178 2.213364, 179 u.getGeometricMean(), 180 0.00001); 181 182 for (int i = 0; i < 10; i++) { 185 u.addValue(i + 2); 186 } 187 assertEquals( 189 "Geometric mean not expected", 190 5.755931, 191 u.getGeometricMean(), 192 0.00001); 193 194 } 195 196 public final class Foo { 197 public String heresFoo() { 198 return "14.9"; 199 } 200 } 201 202 public final class Bar { 203 public String heresBar() { 204 return "12.0"; 205 } 206 } 207 } 208 | Popular Tags |