• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1  //  (C) Copyright Eric Niebler 2005.
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  
6  #include <boost/test/unit_test.hpp>
7  #include <boost/accumulators/accumulators.hpp>
8  #include <boost/accumulators/statistics/stats.hpp>
9  #include <boost/accumulators/statistics/rolling_count.hpp>
10  #include <sstream>
11  #include <boost/archive/text_oarchive.hpp>
12  #include <boost/archive/text_iarchive.hpp>
13  
14  using namespace boost;
15  using namespace unit_test;
16  using namespace accumulators;
17  
18  ///////////////////////////////////////////////////////////////////////////////
19  // test_stat
20  //
test_stat()21  void test_stat()
22  {
23      accumulator_set<int, stats<tag::rolling_count> > acc(tag::rolling_window::window_size = 3);
24  
25      BOOST_CHECK_EQUAL(0u, rolling_count(acc));
26  
27      acc(1);
28      BOOST_CHECK_EQUAL(1u, rolling_count(acc));
29  
30      acc(1);
31      BOOST_CHECK_EQUAL(2u, rolling_count(acc));
32  
33      acc(1);
34      BOOST_CHECK_EQUAL(3u, rolling_count(acc));
35  
36      acc(1);
37      BOOST_CHECK_EQUAL(3u, rolling_count(acc));
38  
39      acc(1);
40      BOOST_CHECK_EQUAL(3u, rolling_count(acc));
41  }
42  
43  ///////////////////////////////////////////////////////////////////////////////
44  // test_persistency
45  //
test_persistency()46  void test_persistency()
47  {
48      std::stringstream ss;
49      {
50          accumulator_set<int, stats<tag::rolling_count> > acc(tag::rolling_window::window_size = 3);
51          acc(1);
52          acc(1);
53          acc(1);
54          acc(1);
55          acc(1);
56          acc(1);
57          BOOST_CHECK_EQUAL(3u, rolling_count(acc));
58          boost::archive::text_oarchive oa(ss);
59          acc.serialize(oa, 0);
60      }
61      accumulator_set<int, stats<tag::rolling_count> > acc(tag::rolling_window::window_size = 3);
62      boost::archive::text_iarchive ia(ss);
63      acc.serialize(ia, 0);
64      BOOST_CHECK_EQUAL(3u, rolling_count(acc));
65  }
66  
67  ///////////////////////////////////////////////////////////////////////////////
68  // init_unit_test_suite
69  //
init_unit_test_suite(int argc,char * argv[])70  test_suite* init_unit_test_suite( int argc, char* argv[] )
71  {
72      test_suite *test = BOOST_TEST_SUITE("rolling count test");
73  
74      test->add(BOOST_TEST_CASE(&test_stat));
75      test->add(BOOST_TEST_CASE(&test_persistency));
76  
77      return test;
78  }
79