Ticket #6128: UnitTestsAccumulators.cpp

File UnitTestsAccumulators.cpp, 2.9 KB (added by Pieter Ober <jaapaap@…>, 11 years ago)
Line 
1#include <boost/test/unit_test.hpp>
2#include <boost/test/test_case_template.hpp>
3
4#include <RollingVariance.hpp>
5
6
7using namespace boost::accumulators;
8
9// Start of Test Suite
10BOOST_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.2000
36 m1_2 = 1.7500
37 v1_2 = 0.60500
38 m1_3 = 2.3000
39 v1_3 = 1.2100
40 m1_4 = 2.8500
41 v1_4 = 2.0167
42 m2_5 = 2.6500
43 v2_5 = 3.0567
44 m3_6 = 2.6250
45 v3_6 = 3.0825
46 m4_7 = 3.5500
47 v4_7 = 8.4167
48 m5_8 = 3.4250
49 v5_8 = 8.1625
50*/
51
52BOOST_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
118BOOST_AUTO_TEST_SUITE_END()