KickJava   Java API By Example, From Geeks To Geeks.

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


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 VarianceTest extends StorelessUnivariateStatisticAbstractTest{
30
31     protected Variance stat;
32     
33     /**
34      * @param name
35      */

36     public VarianceTest(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 Variance();
45     }
46
47     public static Test suite() {
48         TestSuite suite = new TestSuite(VarianceTest.class);
49         suite.setName("Variance 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.var;
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         SecondMoment m = new SecondMoment();
77         m.evaluate(values); // side effect is to add values
78
Variance v1 = new Variance();
79         v1.setBiasCorrected(false);
80         assertEquals(populationVariance(values), v1.evaluate(values), 1E-14);
81         v1.incrementAll(values);
82         assertEquals(populationVariance(values), v1.getResult(), 1E-14);
83         v1 = new Variance(false, m);
84         assertEquals(populationVariance(values), v1.getResult(), 1E-14);
85         v1 = new Variance(false);
86         assertEquals(populationVariance(values), v1.evaluate(values), 1E-14);
87         v1.incrementAll(values);
88         assertEquals(populationVariance(values), v1.getResult(), 1E-14);
89     }
90     
91     /**
92      * Definitional formula for population variance
93      */

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