#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.20000000000000 m1_2 = 1.75000000000000 v1_2 = 0.605000000000000 m1_3 = 2.30000000000000 v1_3 = 1.21000000000000 m1_4 = 2.85000000000000 v1_4 = 2.01666666666667 m2_5 = 2.65000000000000 v2_5 = 3.05666666666667 m3_6 = 2.62500000000000 v3_6 = 3.08250000000000 m4_7 = 3.55000000000000 v4_7 = 8.41666666666667 m5_8 = 3.42500000000000 v5_8 = 8.16250000000000 */ 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()