]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/accumulators/test/weighted_mean.cpp
add subtree-ish sources for 12.0.3
[ceph.git] / ceph / src / boost / libs / accumulators / test / weighted_mean.cpp
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/test/floating_point_comparison.hpp>
8 #include <boost/accumulators/accumulators.hpp>
9 #include <boost/accumulators/statistics/stats.hpp>
10 #include <boost/accumulators/statistics/weighted_mean.hpp>
11 #include <boost/accumulators/statistics/variates/covariate.hpp>
12
13 using namespace boost;
14 using namespace unit_test;
15 using namespace accumulators;
16
17 template<typename T>
18 void assert_is_double(T const &)
19 {
20 BOOST_MPL_ASSERT((is_same<T, double>));
21 }
22
23 ///////////////////////////////////////////////////////////////////////////////
24 // test_stat
25 //
26 void test_stat()
27 {
28 accumulator_set<
29 int
30 , stats<
31 tag::weighted_mean
32 , tag::mean_of_weights
33 , tag::weighted_mean_of_variates<int, tag::covariate1>
34 >
35 , int
36 > acc, test_acc(sample = 0);
37
38 acc(1, weight = 2, covariate1 = 3);
39 BOOST_CHECK_CLOSE(1., weighted_mean(acc), 1e-5);
40 BOOST_CHECK_EQUAL(1u, count(acc));
41 BOOST_CHECK_EQUAL(2, sum(acc));
42 BOOST_CHECK_CLOSE(2., mean_of_weights(acc), 1e-5);
43 BOOST_CHECK_CLOSE(3., (accumulators::weighted_mean_of_variates<int, tag::covariate1>(acc)), 1e-5);
44
45 acc(0, weight = 4, covariate1 = 4);
46 BOOST_CHECK_CLOSE(1./3., weighted_mean(acc), 1e-5);
47 BOOST_CHECK_EQUAL(2u, count(acc));
48 BOOST_CHECK_EQUAL(2, sum(acc));
49 BOOST_CHECK_CLOSE(3., mean_of_weights(acc), 1e-5);
50 BOOST_CHECK_CLOSE(11./3., (accumulators::weighted_mean_of_variates<int, tag::covariate1>(acc)), 1e-5);
51
52 acc(2, weight = 9, covariate1 = 8);
53 BOOST_CHECK_CLOSE(4./3., weighted_mean(acc), 1e-5);
54 BOOST_CHECK_EQUAL(3u, count(acc));
55 BOOST_CHECK_EQUAL(20, sum(acc));
56 BOOST_CHECK_CLOSE(5., mean_of_weights(acc), 1e-5);
57 BOOST_CHECK_CLOSE(94./15., (accumulators::weighted_mean_of_variates<int, tag::covariate1>(acc)), 1e-5);
58
59 assert_is_double(mean(acc));
60
61 accumulator_set<
62 int
63 , stats<
64 tag::weighted_mean(immediate)
65 , tag::mean_of_weights(immediate)
66 , tag::weighted_mean_of_variates<int, tag::covariate1>(immediate)
67 >
68 , int
69 > acc2, test_acc2(sample = 0);
70
71 acc2(1, weight = 2, covariate1 = 3);
72 BOOST_CHECK_CLOSE(1., weighted_mean(acc2), 1e-5);
73 BOOST_CHECK_EQUAL(1u, count(acc2));
74 BOOST_CHECK_CLOSE(2., mean_of_weights(acc2), 1e-5);
75 BOOST_CHECK_CLOSE(3., (accumulators::weighted_mean_of_variates<int, tag::covariate1>(acc2)), 1e-5);
76
77 acc2(0, weight = 4, covariate1 = 4);
78 BOOST_CHECK_CLOSE(1./3., weighted_mean(acc2), 1e-5);
79 BOOST_CHECK_EQUAL(2u, count(acc2));
80 BOOST_CHECK_CLOSE(3., mean_of_weights(acc2), 1e-5);
81 BOOST_CHECK_CLOSE(11./3., (accumulators::weighted_mean_of_variates<int, tag::covariate1>(acc2)), 1e-5);
82
83 acc2(2, weight = 9, covariate1 = 8);
84 BOOST_CHECK_CLOSE(4./3., weighted_mean(acc2), 1e-5);
85 BOOST_CHECK_EQUAL(3u, count(acc2));
86 BOOST_CHECK_CLOSE(5., mean_of_weights(acc2), 1e-5);
87 BOOST_CHECK_CLOSE(94./15., (accumulators::mean_of_variates<int, tag::covariate1>(acc2)), 1e-5);
88
89 assert_is_double(mean(acc2));
90 }
91
92 ///////////////////////////////////////////////////////////////////////////////
93 // init_unit_test_suite
94 //
95 test_suite* init_unit_test_suite( int argc, char* argv[] )
96 {
97 test_suite *test = BOOST_TEST_SUITE("weighted_mean test");
98
99 test->add(BOOST_TEST_CASE(&test_stat));
100
101 return test;
102 }