#include #include #include using namespace boost::accumulators; // Start of Test Suite BOOST_AUTO_TEST_SUITE(AccumulatorsTests) /* REFERENCE VALUES PROVIDED BY OCTAVE: x=[1.2 2.3 3.4 4.5 0.4 2.2 7.1 4.0] m1 = mean(x(1)) m1_2 = mean(x(1:2)) v1_2 = var(x(1:2)) m1_3 = mean(x(1:3)) v1_3 = var(x(1:3)) m1_4 = mean(x(1:4)) v1_4 = var(x(1:4)) m2_5 = mean(x(2:5)) v2_5 = var(x(2:5)) m3_6 = mean(x(3:6)) v3_6 = var(x(3:6)) m4_7 = mean(x(4:7)) v4_7 = var(x(4:7)) m5_8 = mean(x(5:8)) v5_8 = var(x(5:8)) GIVES: m1 = 1.2000 m1_2 = 1.7500 v1_2 = 0.60500 m1_3 = 2.3000 v1_3 = 1.2100 m1_4 = 2.8500 v1_4 = 2.0167 m2_5 = 2.6500 v2_5 = 3.0567 m3_6 = 2.6250 v3_6 = 3.0825 m4_7 = 3.5500 v4_7 = 8.4167 m5_8 = 3.4250 v5_8 = 8.1625 */ BOOST_AUTO_TEST_CASE(RollingVarianceTest) { accumulator_set > Accumulator(tag::rolling_window::window_size = 4); double Mean; double Variance; // Window contains x(1) Accumulator(1.2); Mean = rolling_mean(Accumulator); Variance = rolling_variance(Accumulator); BOOST_CHECK_CLOSE(Mean,1.2,1e-10); BOOST_CHECK_CLOSE(Variance,0.0,1e-10); // Window contains x(1)...x(2) Accumulator(2.3); Mean = rolling_mean(Accumulator); Variance = rolling_variance(Accumulator); BOOST_CHECK_CLOSE(Mean,1.75,1e-10); BOOST_CHECK_CLOSE(Variance,0.605,1e-10); // Window contains x(1)...x(3) Accumulator(3.4); Mean = rolling_mean(Accumulator); Variance = rolling_variance(Accumulator); BOOST_CHECK_CLOSE(Mean,2.3,1e-10); BOOST_CHECK_CLOSE(Variance,1.21,1e-10); // Window contains x(1)...x(4) Accumulator(4.5); Mean = rolling_mean(Accumulator); Variance = rolling_variance(Accumulator); BOOST_CHECK_CLOSE(Mean,2.8500,1e-10); BOOST_CHECK_CLOSE(Variance,2.01666666666667,1e-10); // Window contains x(2)...x(5) Accumulator(0.4); Mean = rolling_mean(Accumulator); Variance = rolling_variance(Accumulator); BOOST_CHECK_CLOSE(Mean,2.6500,1e-10); BOOST_CHECK_CLOSE(Variance,3.05666666666667,1e-10); // Window contains x(3)...x(6) Accumulator(2.2); Mean = rolling_mean(Accumulator); Variance = rolling_variance(Accumulator); BOOST_CHECK_CLOSE(Mean,2.6250,1e-10); BOOST_CHECK_CLOSE(Variance,3.08250000000000,1e-10); // Window contains x(4)...x(7) Accumulator(7.1); Mean = rolling_mean(Accumulator); Variance = rolling_variance(Accumulator); BOOST_CHECK_CLOSE(Mean,3.5500,1e-10); BOOST_CHECK_CLOSE(Variance,8.41666666666667,1e-10); // Window contains x(5)...x(8) Accumulator(4.0); Mean = rolling_mean(Accumulator); Variance = rolling_variance(Accumulator); BOOST_CHECK_CLOSE(Mean,3.4250,1e-10); BOOST_CHECK_CLOSE(Variance,8.16250000000000,1e-10); } // End of Test Suite BOOST_AUTO_TEST_SUITE_END()