// (C) Copyright 2005 Daniel Egloff, Eric Niebler // Use, modification and distribution are subject to the // Boost Software License, Version 1.0. (See accompanying file // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) #define BOOST_NUMERIC_FUNCTIONAL_STD_VECTOR_SUPPORT #include #include #include #include #include #include using namespace boost; using namespace unit_test; using namespace accumulators; /////////////////////////////////////////////////////////////////////////////// // test_stat // void test_stat() { std::vector dummy; dummy.push_back(0); dummy.push_back(0); accumulator_set >, double > acc; accumulator_set, stats >, double > acc2(sample = dummy); accumulator_set, tag::covariate1> >, double > acc3(covariate1 = dummy); accumulator_set, stats, tag::covariate1> >, double > acc4(sample = dummy, covariate1 = dummy); std::vector a; a.push_back(1.); a.push_back(2.); std::vector b; b.push_back(3.); b.push_back(4.); std::vector c; c.push_back(2.); c.push_back(5.); std::vector d; d.push_back(4.); d.push_back(2.); // double - double { acc(1., weight = 1.1, covariate1 = 2.); acc(1., weight = 2.2, covariate1 = 4.); acc(2., weight = 3.3, covariate1 = 3.); acc(6., weight = 4.4, covariate1 = 1.); } // vector - double { acc2(a, weight = 1.1, covariate1 = 1.); acc2(b, weight = 2.2, covariate1 = 1.); acc2(c, weight = 3.3, covariate1 = 2.); acc2(d, weight = 4.4, covariate1 = 6.); } // double - vector { acc3(1., weight = 1.1, covariate1 = a); acc3(1., weight = 2.2, covariate1 = b); acc3(2., weight = 3.3, covariate1 = c); acc3(6., weight = 4.4, covariate1 = d); } // vector - vector { acc4(a, weight = 1.1, covariate1 = b); acc4(b, weight = 2.2, covariate1 = c); acc4(a, weight = 3.3, covariate1 = c); acc4(d, weight = 4.4, covariate1 = b); } double epsilon = 1e-6; BOOST_CHECK_CLOSE((weighted_covariance(acc)), -2.39, epsilon); BOOST_CHECK_CLOSE((weighted_covariance(acc2))[0], 1.93, epsilon); BOOST_CHECK_CLOSE((weighted_covariance(acc2))[1], -2.09, epsilon); BOOST_CHECK_CLOSE((weighted_covariance(acc3))[0], 1.93, epsilon); BOOST_CHECK_CLOSE((weighted_covariance(acc3))[1], -2.09, epsilon); BOOST_CHECK_CLOSE((weighted_covariance(acc4))(0,0), 0.4, epsilon); BOOST_CHECK_CLOSE((weighted_covariance(acc4))(0,1), -0.2, epsilon); BOOST_CHECK_CLOSE((weighted_covariance(acc4))(1,0), -0.4, epsilon); BOOST_CHECK_CLOSE((weighted_covariance(acc4))(1,1), 0.2, epsilon); } /////////////////////////////////////////////////////////////////////////////// // init_unit_test_suite // test_suite* init_unit_test_suite( int argc, char* argv[] ) { test_suite *test = BOOST_TEST_SUITE("weighted_covariance test"); test->add(BOOST_TEST_CASE(&test_stat)); return test; }