1   /*
2    * Copyright 2003-2004 The Apache Software Foundation.
3    * 
4    * Licensed under the Apache License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    * 
8    *      http://www.apache.org/licenses/LICENSE-2.0
9    * 
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   */
16  package org.apache.commons.math.stat;
17  
18  import junit.framework.Test;
19  import junit.framework.TestCase;
20  import junit.framework.TestSuite;
21  
22  import java.io.BufferedReader;
23  import java.io.InputStreamReader;
24  
25  import org.apache.commons.math.stat.descriptive.SummaryStatistics;
26  import org.apache.commons.math.stat.descriptive.SummaryStatisticsImpl;
27  import org.apache.commons.math.stat.descriptive.DescriptiveStatistics;
28  
29  /***
30   * Certified data test cases.
31   * @version $Revision: 1.19 $ $Date: 2004/10/08 05:08:19 $
32   */
33  public class CertifiedDataTest extends TestCase  {
34  
35  	protected double mean = Double.NaN;
36  
37  	protected double std = Double.NaN;
38  
39  	/***
40  	 * Certified Data Test Constructor
41  	 * @param name
42  	 */
43  	public CertifiedDataTest(String name) {
44  		super(name);
45  	}
46  
47  	/* (non-Javadoc)
48  	 * @see junit.framework.TestCase#setUp()
49  	 */
50  	public void setUp() {
51  	}
52  
53  	/***
54  	 * @return The test suite
55  	 */
56  	public static Test suite() {
57  		TestSuite suite = new TestSuite(CertifiedDataTest.class);
58  		suite.setName("Certified Tests");
59  		return suite;
60  	}
61  
62  	/***
63  	 * Test StorelessDescriptiveStatistics
64  	*/
65  	public void testUnivariateImpl() throws Exception {
66  		SummaryStatistics u = SummaryStatistics.newInstance(SummaryStatisticsImpl.class);
67  		loadStats("data/PiDigits.txt", u);
68  		assertEquals("PiDigits: std", std, u.getStandardDeviation(), .0000000000001);
69  		assertEquals("PiDigits: mean", mean, u.getMean(), .0000000000001);	
70  
71  		loadStats("data/Mavro.txt", u);
72  		assertEquals("Mavro: std", std, u.getStandardDeviation(), .00000000000001);
73  		assertEquals("Mavro: mean", mean, u.getMean(), .00000000000001);
74  		
75  		//loadStats("data/Michelso.txt");
76  		//assertEquals("Michelso: std", std, u.getStandardDeviation(), .00000000000001);
77  		//assertEquals("Michelso: mean", mean, u.getMean(), .00000000000001);	
78  										
79  		loadStats("data/NumAcc1.txt", u);
80  		assertEquals("NumAcc1: std", std, u.getStandardDeviation(), .00000000000001);
81  		assertEquals("NumAcc1: mean", mean, u.getMean(), .00000000000001);
82  		
83  		//loadStats("data/NumAcc2.txt");
84  		//assertEquals("NumAcc2: std", std, u.getStandardDeviation(), .000000001);
85  		//assertEquals("NumAcc2: mean", mean, u.getMean(), .00000000000001);
86  	}
87  
88  	/***
89  	 * Test StorelessDescriptiveStatistics
90  	 */
91  	public void testStoredUnivariateImpl() throws Exception {
92  
93  		DescriptiveStatistics u = DescriptiveStatistics.newInstance();
94  		
95  		loadStats("data/PiDigits.txt", u);
96  		assertEquals("PiDigits: std", std, u.getStandardDeviation(), .0000000000001);
97  		assertEquals("PiDigits: mean", mean, u.getMean(), .0000000000001);
98  		
99  		loadStats("data/Mavro.txt", u);
100 		assertEquals("Mavro: std", std, u.getStandardDeviation(), .00000000000001);
101 		assertEquals("Mavro: mean", mean, u.getMean(), .00000000000001);		
102 		
103 		//loadStats("data/Michelso.txt");
104 		//assertEquals("Michelso: std", std, u.getStandardDeviation(), .00000000000001);
105 		//assertEquals("Michelso: mean", mean, u.getMean(), .00000000000001);	
106 
107 		loadStats("data/NumAcc1.txt", u);
108 		assertEquals("NumAcc1: std", std, u.getStandardDeviation(), .00000000000001);
109 		assertEquals("NumAcc1: mean", mean, u.getMean(), .00000000000001);
110 		
111 		//loadStats("data/NumAcc2.txt");
112 		//assertEquals("NumAcc2: std", std, u.getStandardDeviation(), .000000001);
113 		//assertEquals("NumAcc2: mean", mean, u.getMean(), .00000000000001);
114 	}
115 
116 	/***
117 	 * loads a DescriptiveStatistics off of a test file
118 	 * @param file
119 	 * @param statistical summary
120 	 */
121 	private void loadStats(String resource, Object u) throws Exception {
122 	    
123 	    DescriptiveStatistics d = null;
124 	    SummaryStatistics s = null;
125 	    if (u instanceof DescriptiveStatistics) {
126 	        d = (DescriptiveStatistics) u;
127 	    } else {
128 	        s = (SummaryStatistics) u;
129 	    }
130 	    
131 	    u.getClass().getDeclaredMethod("clear", null).invoke(u, null);
132 	    mean = Double.NaN;
133 	    std = Double.NaN;
134 	    
135 	    BufferedReader in =
136 	        new BufferedReader(
137 	                new InputStreamReader(
138 	                        getClass().getResourceAsStream(resource)));
139 	    
140 	    String line = null;
141 	    
142 	    for (int j = 0; j < 60; j++) {
143 	        line = in.readLine();
144 	        if (j == 40) {
145 	            mean =
146 	                Double.parseDouble(
147 	                        line.substring(line.lastIndexOf(":") + 1).trim());
148 	        }
149 	        if (j == 41) {
150 	            std =
151 	                Double.parseDouble(
152 	                        line.substring(line.lastIndexOf(":") + 1).trim());
153 	        }
154 	    }
155 	    
156 	    line = in.readLine();
157 	    
158 	    while (line != null) {
159 	        if (d != null) {
160 	            d.addValue(Double.parseDouble(line.trim()));
161 	        }  else {
162 	            s.addValue(Double.parseDouble(line.trim()));
163 	        }
164 	        line = in.readLine();
165 	    }
166 	    
167 	    in.close();
168 	}
169 }