1 package baseCode.math;
2
3 import junit.framework.TestCase;
4 import baseCode.math.Stats;
5 import baseCode.util.RegressionTesting;
6 import cern.colt.list.DoubleArrayList;
7
8 /***
9 *
10 *
11 * <hr>
12 * <p>
13 * Copyright (c) 2004 Columbia University
14 *
15 * @author pavlidis
16 * @version $Id: TestStats.java,v 1.1 2005/03/17 13:58:42 pavlidis Exp $
17 */
18 public class TestStats extends TestCase {
19
20 private DoubleArrayList data1missing;
21 private DoubleArrayList data1Nomissing;
22 private DoubleArrayList data2missing;
23 private DoubleArrayList data2Nomissing;
24 private DoubleArrayList data3shortmissing;
25 private DoubleArrayList data3shortNomissing;
26 private DoubleArrayList longtest;
27
28 protected void setUp() throws Exception {
29 super.setUp();
30 data1missing = new DoubleArrayList( new double[] { 1.0, Double.NaN, 3.0,
31 4.0, 5.0, 6.0 } );
32 data2missing = new DoubleArrayList( new double[] { Double.NaN,
33 Double.NaN, 3.0, Double.NaN, 3.5, 4.0 } );
34 data3shortmissing = new DoubleArrayList( new double[] { Double.NaN,
35 Double.NaN, 3.0 } );
36
37
38 data1Nomissing = new DoubleArrayList( new double[] { 1.0, 3.0, 4.0, 5.0,
39 6.0 } );
40 data2Nomissing = new DoubleArrayList( new double[] { 3.0, 3.5, 4.0 } );
41 data3shortNomissing = new DoubleArrayList( new double[] { 3.0 } );
42
43 longtest = new DoubleArrayList( new double[] { 0.944582576545844,
44 0.779251841525345, 0.243662620408789, 0.221922034715125,
45 0.707629937237768, 0.844940612116396, 0.37307859512114,
46 0.216209684719754, 0.606640632705043, 0.0289807962282107,
47 0.831726757257319, 0.599810024125913, 0.945573940587206,
48 0.692997506949111, 0.139842747221286, 0.606947460245238,
49 0.0423340684872135, 0.974213612924272, 0.963219529277481,
50 0.990324034140914, 0.18366629791934, 0.998038865833498,
51 0.95102835078158, 0.260760025894898, 0.135541313794304,
52 0.362569773855302, 0.00907603291856485, 0.347046293225362,
53 0.552972766279235, 0.956864628364488, 0.578842167640368,
54 0.0202553960552123, 0.139571658240153, 0.838049580661271,
55 0.696258674341387, 0.167767706757327, 0.857975063707331,
56 0.384427669696752, 0.675471091800467, 0.012919572385802,
57 0.0944474009613609, 0.420980230040455, 0.658166227311119,
58 0.0618454224981813, 0.595221354638128, 0.880250901050482,
59 0.155426216787906, 0.652202074026153, 0.487896010852323,
60 0.714714352227883, } );
61
62 }
63
64
65
66 protected void tearDown() throws Exception {
67 super.tearDown();
68 }
69
70 public final void testIsValidFraction() {
71 boolean actualReturn = Stats.isValidFraction( 12 );
72 assertEquals( false, actualReturn );
73 }
74
75 public final void testIsValidFraction2() {
76 boolean actualReturn = Stats.isValidFraction( 0.5 );
77 assertEquals( true, actualReturn );
78 }
79
80 public final void testCv() {
81 double expectedReturn = 1.975525931;
82 double actualReturn = Stats.cv( data1Nomissing );
83 assertEquals( expectedReturn, actualReturn, 0.000001 );
84 }
85
86 public final void testCumulate() {
87 DoubleArrayList expectedReturn = new DoubleArrayList( new double[] { 1,
88 4, 8, 13, 19 } );
89 DoubleArrayList actualReturn = Stats.cumulate( data1Nomissing );
90 assertEquals( true, RegressionTesting.closeEnough( actualReturn,
91 expectedReturn, 0.0001 ) );
92 }
93
94 public final void testCumulateRight() {
95 DoubleArrayList expectedReturn = new DoubleArrayList( new double[] { 19,
96 18, 15, 11, 6 } );
97 DoubleArrayList actualReturn = Stats.cumulateRight( data1Nomissing );
98 assertEquals( true, RegressionTesting.closeEnough( actualReturn,
99 expectedReturn, 0.0001 ) );
100 }
101
102 public final void testCdf() {
103 DoubleArrayList expectedReturn = new DoubleArrayList( new double[] { 1,
104 0.947368421052632, 0.789473684210526, 0.578947368421053,
105 0.315789473684211 } );
106 DoubleArrayList actualReturn = Stats.cdf( data1Nomissing );
107 assertEquals( true, RegressionTesting.closeEnough( actualReturn,
108 expectedReturn, 0.0001 ) );
109 }
110
111
112
113
114 public final void testNormalizeDoubleArrayListdouble() {
115 DoubleArrayList expectedReturn = new DoubleArrayList( new double[] {
116 0.263157894736842, 0.789473684210526, 1.05263157894737,
117 1.31578947368421, 1.57894736842105, } );
118
119 DoubleArrayList actualReturn = Stats.normalize( data1Nomissing, 3.8 );
120 assertEquals( true, RegressionTesting.closeEnough( actualReturn,
121 expectedReturn, 0.0001 ) );
122 }
123
124
125
126
127 public final void testNormalizeDoubleArrayList() {
128 DoubleArrayList expectedReturn = new DoubleArrayList( new double[] {
129 0.0526315789473684, 0.157894736842105, 0.210526315789474,
130 0.263157894736842, 0.315789473684211 } );
131
132 DoubleArrayList actualReturn = Stats.normalize( data1Nomissing );
133 assertEquals( true, RegressionTesting.closeEnough( actualReturn,
134 expectedReturn, 0.0001 ) );
135 }
136
137 public final void testMeanAboveQuantile() {
138 double expectedReturn = 0.806953261;
139 double actualReturn = Stats.meanAboveQuantile(25, longtest.elements(), 50);
140 assertEquals( expectedReturn, actualReturn, 1e-5 );
141 }
142
143 public final void testRange() {
144 double expectedReturn = 5;
145 double actualReturn = Stats.range( data1Nomissing );
146 assertEquals( expectedReturn, actualReturn, 1e-5 );
147 }
148
149 public final void testQuantile() {
150 double expectedReturn = 0.595221355;
151 double actualReturn = Stats.quantile(25, longtest.elements(), 50);
152 assertEquals( expectedReturn, actualReturn, 1e-5 );
153 }
154
155 public final void testQuantile75() {
156 double expectedReturn = 0.831726757;
157 double actualReturn = Stats.quantile(25, longtest.elements(), 37);
158 assertEquals( expectedReturn, actualReturn, 1e-5 );
159 }
160
161 }