1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.math4.legacy.stat.descriptive.moment;
18
19 import org.apache.commons.math4.legacy.stat.descriptive.StorelessUnivariateStatisticAbstractTest;
20 import org.apache.commons.math4.legacy.stat.descriptive.UnivariateStatistic;
21 import org.apache.commons.math4.core.jdkmath.JdkMath;
22 import org.junit.Assert;
23 import org.junit.Test;
24
25
26
27
28
29 public class StandardDeviationTest extends StorelessUnivariateStatisticAbstractTest{
30
31 protected StandardDeviation stat;
32
33
34
35
36 @Override
37 public UnivariateStatistic getUnivariateStatistic() {
38 return new StandardDeviation();
39 }
40
41
42
43
44 @Override
45 public double expectedValue() {
46 return this.std;
47 }
48
49
50
51
52
53 @Test
54 public void testNaN() {
55 StandardDeviation std = new StandardDeviation();
56 Assert.assertTrue(Double.isNaN(std.getResult()));
57 std.increment(1d);
58 Assert.assertEquals(0d, std.getResult(), 0);
59 }
60
61
62
63
64 @Test
65 public void testPopulation() {
66 double[] values = {-1.0d, 3.1d, 4.0d, -2.1d, 22d, 11.7d, 3d, 14d};
67 double sigma = populationStandardDeviation(values);
68 SecondMoment m = new SecondMoment();
69 m.incrementAll(values);
70 StandardDeviation s1 = new StandardDeviation();
71 s1.setBiasCorrected(false);
72 Assert.assertEquals(sigma, s1.evaluate(values), 1E-14);
73 s1.incrementAll(values);
74 Assert.assertEquals(sigma, s1.getResult(), 1E-14);
75 s1 = new StandardDeviation(false, m);
76 Assert.assertEquals(sigma, s1.getResult(), 1E-14);
77 s1 = new StandardDeviation(false);
78 Assert.assertEquals(sigma, s1.evaluate(values), 1E-14);
79 s1.incrementAll(values);
80 Assert.assertEquals(sigma, s1.getResult(), 1E-14);
81 }
82
83
84
85
86 protected double populationStandardDeviation(double[] v) {
87 double mean = new Mean().evaluate(v);
88 double sum = 0;
89 for (int i = 0; i < v.length; i++) {
90 sum += (v[i] - mean) * (v[i] - mean);
91 }
92 return JdkMath.sqrt(sum / v.length);
93 }
94 }