rolling_sum.cpp 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. // (C) Copyright Eric Niebler 2008.
  2. // Use, modification and distribution are subject to the
  3. // Boost Software License, Version 1.0. (See accompanying file
  4. // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
  5. #include <boost/test/unit_test.hpp>
  6. #include <boost/accumulators/accumulators.hpp>
  7. #include <boost/accumulators/statistics/stats.hpp>
  8. #include <boost/accumulators/statistics/rolling_sum.hpp>
  9. #include <sstream>
  10. #include <boost/archive/text_oarchive.hpp>
  11. #include <boost/archive/text_iarchive.hpp>
  12. using namespace boost;
  13. using namespace unit_test;
  14. using namespace accumulators;
  15. ///////////////////////////////////////////////////////////////////////////////
  16. // test_stat
  17. //
  18. void test_stat()
  19. {
  20. accumulator_set<int, stats<tag::rolling_sum> > acc(tag::rolling_window::window_size = 3);
  21. BOOST_CHECK_EQUAL(0, rolling_sum(acc));
  22. acc(1);
  23. BOOST_CHECK_EQUAL(1, rolling_sum(acc));
  24. acc(2);
  25. BOOST_CHECK_EQUAL(3, rolling_sum(acc));
  26. acc(3);
  27. BOOST_CHECK_EQUAL(6, rolling_sum(acc));
  28. acc(4);
  29. BOOST_CHECK_EQUAL(9, rolling_sum(acc));
  30. acc(5);
  31. BOOST_CHECK_EQUAL(12, rolling_sum(acc));
  32. }
  33. ///////////////////////////////////////////////////////////////////////////////
  34. // test_persistency
  35. //
  36. void test_persistency()
  37. {
  38. std::stringstream ss;
  39. {
  40. accumulator_set<int, stats<tag::rolling_sum> > acc(tag::rolling_window::window_size = 3);
  41. acc(1);
  42. acc(2);
  43. acc(3);
  44. acc(4);
  45. acc(5);
  46. BOOST_CHECK_EQUAL(12, rolling_sum(acc));
  47. boost::archive::text_oarchive oa(ss);
  48. acc.serialize(oa, 0);
  49. }
  50. accumulator_set<int, stats<tag::rolling_sum> > acc(tag::rolling_window::window_size = 3);
  51. boost::archive::text_iarchive ia(ss);
  52. acc.serialize(ia, 0);
  53. BOOST_CHECK_EQUAL(12, rolling_sum(acc));
  54. }
  55. ///////////////////////////////////////////////////////////////////////////////
  56. // init_unit_test_suite
  57. //
  58. test_suite* init_unit_test_suite( int argc, char* argv[] )
  59. {
  60. test_suite *test = BOOST_TEST_SUITE("rolling sum test");
  61. test->add(BOOST_TEST_CASE(&test_stat));
  62. test->add(BOOST_TEST_CASE(&test_persistency));
  63. return test;
  64. }