KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > apache > commons > math > stat > descriptive > moment > StandardDeviationTest


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.descriptive.moment;
17
18 import junit.framework.Test;
19 import junit.framework.TestSuite;
20
21 import org.apache.commons.math.stat.descriptive.StorelessUnivariateStatisticAbstractTest;
22 import org.apache.commons.math.stat.descriptive.UnivariateStatistic;
23
24 /**
25  * Test cases for the {@link UnivariateStatistic} class.
26  *
27  * @version $Revision$ $Date: 2005-02-26 05:11:52 -0800 (Sat, 26 Feb 2005) $
28  */

29 public class StandardDeviationTest extends StorelessUnivariateStatisticAbstractTest{
30
31     protected StandardDeviation stat;
32     
33     /**
34      * @param name
35      */

36     public StandardDeviationTest(String JavaDoc name) {
37         super(name);
38     }
39
40     /* (non-Javadoc)
41      * @see org.apache.commons.math.stat.descriptive.UnivariateStatisticAbstractTest#getUnivariateStatistic()
42      */

43     public UnivariateStatistic getUnivariateStatistic() {
44         return new StandardDeviation();
45     }
46
47     public static Test suite() {
48         TestSuite suite = new TestSuite(StandardDeviationTest.class);
49         suite.setName("StandardDeviation Tests");
50         return suite;
51     }
52     
53     /* (non-Javadoc)
54      * @see org.apache.commons.math.stat.descriptive.UnivariateStatisticAbstractTest#expectedValue()
55      */

56     public double expectedValue() {
57         return this.std;
58     }
59     
60     /**
61      * Make sure Double.NaN is returned iff n = 0
62      *
63      */

64     public void testNaN() {
65         StandardDeviation std = new StandardDeviation();
66         assertTrue(Double.isNaN(std.getResult()));
67         std.increment(1d);
68         assertEquals(0d, std.getResult(), 0);
69     }
70     
71     /**
72      * Test population version of variance
73      */

74     public void testPopulation() {
75         double[] values = {-1.0d, 3.1d, 4.0d, -2.1d, 22d, 11.7d, 3d, 14d};
76         double sigma = populationStandardDeviation(values);
77         SecondMoment m = new SecondMoment();
78         m.evaluate(values); // side effect is to add values
79
StandardDeviation s1 = new StandardDeviation();
80         s1.setBiasCorrected(false);
81         assertEquals(sigma, s1.evaluate(values), 1E-14);
82         s1.incrementAll(values);
83         assertEquals(sigma, s1.getResult(), 1E-14);
84         s1 = new StandardDeviation(false, m);
85         assertEquals(sigma, s1.getResult(), 1E-14);
86         s1 = new StandardDeviation(false);
87         assertEquals(sigma, s1.evaluate(values), 1E-14);
88         s1.incrementAll(values);
89         assertEquals(sigma, s1.getResult(), 1E-14);
90     }
91     
92     /**
93      * Definitional formula for population standard deviation
94      */

95     protected double populationStandardDeviation(double[] v) {
96         double mean = new Mean().evaluate(v);
97         double sum = 0;
98         for (int i = 0; i < v.length; i++) {
99             sum += (v[i] - mean) * (v[i] - mean);
100         }
101         return Math.sqrt(sum / (double) v.length);
102     }
103
104 }
105
Popular Tags