1 | #include <boost/test/unit_test.hpp>
|
---|
2 | #include <boost/test/test_case_template.hpp>
|
---|
3 |
|
---|
4 | #include <RollingVariance.hpp>
|
---|
5 |
|
---|
6 |
|
---|
7 | using namespace boost::accumulators;
|
---|
8 |
|
---|
9 | // Start of Test Suite
|
---|
10 | BOOST_AUTO_TEST_SUITE(AccumulatorsTests)
|
---|
11 |
|
---|
12 | /*
|
---|
13 | REFERENCE VALUES PROVIDED BY OCTAVE:
|
---|
14 |
|
---|
15 | x=[1.2 2.3 3.4 4.5 0.4 2.2 7.1 4.0]
|
---|
16 |
|
---|
17 | m1 = mean(x(1))
|
---|
18 | m1_2 = mean(x(1:2))
|
---|
19 | v1_2 = var(x(1:2))
|
---|
20 | m1_3 = mean(x(1:3))
|
---|
21 | v1_3 = var(x(1:3))
|
---|
22 | m1_4 = mean(x(1:4))
|
---|
23 | v1_4 = var(x(1:4))
|
---|
24 | m2_5 = mean(x(2:5))
|
---|
25 | v2_5 = var(x(2:5))
|
---|
26 | m3_6 = mean(x(3:6))
|
---|
27 | v3_6 = var(x(3:6))
|
---|
28 | m4_7 = mean(x(4:7))
|
---|
29 | v4_7 = var(x(4:7))
|
---|
30 | m5_8 = mean(x(5:8))
|
---|
31 | v5_8 = var(x(5:8))
|
---|
32 |
|
---|
33 | GIVES:
|
---|
34 |
|
---|
35 | m1 = 1.20000000000000
|
---|
36 | m1_2 = 1.75000000000000
|
---|
37 | v1_2 = 0.605000000000000
|
---|
38 | m1_3 = 2.30000000000000
|
---|
39 | v1_3 = 1.21000000000000
|
---|
40 | m1_4 = 2.85000000000000
|
---|
41 | v1_4 = 2.01666666666667
|
---|
42 | m2_5 = 2.65000000000000
|
---|
43 | v2_5 = 3.05666666666667
|
---|
44 | m3_6 = 2.62500000000000
|
---|
45 | v3_6 = 3.08250000000000
|
---|
46 | m4_7 = 3.55000000000000
|
---|
47 | v4_7 = 8.41666666666667
|
---|
48 | m5_8 = 3.42500000000000
|
---|
49 | v5_8 = 8.16250000000000
|
---|
50 | */
|
---|
51 |
|
---|
52 | BOOST_AUTO_TEST_CASE(RollingVarianceTest)
|
---|
53 | {
|
---|
54 | accumulator_set<double, stats<tag::rolling_variance,tag::rolling_mean> > Accumulator(tag::rolling_window::window_size = 4);
|
---|
55 |
|
---|
56 | double Mean;
|
---|
57 | double Variance;
|
---|
58 |
|
---|
59 | // Window contains x(1)
|
---|
60 | Accumulator(1.2);
|
---|
61 | Mean = rolling_mean(Accumulator);
|
---|
62 | Variance = rolling_variance(Accumulator);
|
---|
63 |
|
---|
64 | BOOST_CHECK_CLOSE(Mean,1.2,1e-10);
|
---|
65 | BOOST_CHECK_CLOSE(Variance,0.0,1e-10);
|
---|
66 |
|
---|
67 | // Window contains x(1)...x(2)
|
---|
68 | Accumulator(2.3);
|
---|
69 | Mean = rolling_mean(Accumulator);
|
---|
70 | Variance = rolling_variance(Accumulator);
|
---|
71 | BOOST_CHECK_CLOSE(Mean,1.75,1e-10);
|
---|
72 | BOOST_CHECK_CLOSE(Variance,0.605,1e-10);
|
---|
73 |
|
---|
74 | // Window contains x(1)...x(3)
|
---|
75 | Accumulator(3.4);
|
---|
76 | Mean = rolling_mean(Accumulator);
|
---|
77 | Variance = rolling_variance(Accumulator);
|
---|
78 | BOOST_CHECK_CLOSE(Mean,2.3,1e-10);
|
---|
79 | BOOST_CHECK_CLOSE(Variance,1.21,1e-10);
|
---|
80 |
|
---|
81 | // Window contains x(1)...x(4)
|
---|
82 | Accumulator(4.5);
|
---|
83 | Mean = rolling_mean(Accumulator);
|
---|
84 | Variance = rolling_variance(Accumulator);
|
---|
85 | BOOST_CHECK_CLOSE(Mean,2.8500,1e-10);
|
---|
86 | BOOST_CHECK_CLOSE(Variance,2.01666666666667,1e-10);
|
---|
87 |
|
---|
88 | // Window contains x(2)...x(5)
|
---|
89 | Accumulator(0.4);
|
---|
90 | Mean = rolling_mean(Accumulator);
|
---|
91 | Variance = rolling_variance(Accumulator);
|
---|
92 | BOOST_CHECK_CLOSE(Mean,2.6500,1e-10);
|
---|
93 | BOOST_CHECK_CLOSE(Variance,3.05666666666667,1e-10);
|
---|
94 |
|
---|
95 | // Window contains x(3)...x(6)
|
---|
96 | Accumulator(2.2);
|
---|
97 | Mean = rolling_mean(Accumulator);
|
---|
98 | Variance = rolling_variance(Accumulator);
|
---|
99 | BOOST_CHECK_CLOSE(Mean,2.6250,1e-10);
|
---|
100 | BOOST_CHECK_CLOSE(Variance,3.08250000000000,1e-10);
|
---|
101 |
|
---|
102 | // Window contains x(4)...x(7)
|
---|
103 | Accumulator(7.1);
|
---|
104 | Mean = rolling_mean(Accumulator);
|
---|
105 | Variance = rolling_variance(Accumulator);
|
---|
106 | BOOST_CHECK_CLOSE(Mean,3.5500,1e-10);
|
---|
107 | BOOST_CHECK_CLOSE(Variance,8.41666666666667,1e-10);
|
---|
108 |
|
---|
109 | // Window contains x(5)...x(8)
|
---|
110 | Accumulator(4.0);
|
---|
111 | Mean = rolling_mean(Accumulator);
|
---|
112 | Variance = rolling_variance(Accumulator);
|
---|
113 | BOOST_CHECK_CLOSE(Mean,3.4250,1e-10);
|
---|
114 | BOOST_CHECK_CLOSE(Variance,8.16250000000000,1e-10);
|
---|
115 | }
|
---|
116 |
|
---|
117 | // End of Test Suite
|
---|
118 | BOOST_AUTO_TEST_SUITE_END()
|
---|