21 #define BOOST_TEST_MODULE libjmmcg_tests
22 #include <boost/test/included/unit_test.hpp>
24 #include <boost/mpl/list.hpp>
26 #include "core/count_setbits.hpp"
27 #include "core/ave_deviation_meter.hpp"
28 #include "core/stats_output.hpp"
30 #include <boost/mpl/int.hpp>
35 using namespace libjmmcg;
60 BOOST_AUTO_TEST_SUITE(count_setbits_tests)
62 BOOST_AUTO_TEST_SUITE(mpl)
64 BOOST_AUTO_TEST_CASE_TEMPLATE(check_value, setbits_t, check_mpl_setbits_tests) {
65 BOOST_CHECK_EQUAL(setbits_t::first_type::value, setbits_t::second_type::value);
68 BOOST_AUTO_TEST_SUITE_END()
70 BOOST_AUTO_TEST_SUITE(dyn)
72 BOOST_AUTO_TEST_CASE_TEMPLATE(check_value_0, setbits_t, check_dyn_setbits_tests) {
73 BOOST_CHECK_EQUAL(setbits_t::result(0), 0);
76 BOOST_AUTO_TEST_CASE_TEMPLATE(check_value_1, setbits_t, check_dyn_setbits_tests) {
77 BOOST_CHECK_EQUAL(setbits_t::result(1), 1);
80 BOOST_AUTO_TEST_CASE_TEMPLATE(check_value_2, setbits_t, check_dyn_setbits_tests) {
81 BOOST_CHECK_EQUAL(setbits_t::result(2), 1);
84 BOOST_AUTO_TEST_CASE_TEMPLATE(check_value_3, setbits_t, check_dyn_setbits_tests) {
85 BOOST_CHECK_EQUAL(setbits_t::result(3), 2);
88 BOOST_AUTO_TEST_CASE_TEMPLATE(check_value_4, setbits_t, check_dyn_setbits_tests) {
89 BOOST_CHECK_EQUAL(setbits_t::result(4), 1);
92 BOOST_AUTO_TEST_CASE_TEMPLATE(check_value_5, setbits_t, check_dyn_setbits_tests) {
93 BOOST_CHECK_EQUAL(setbits_t::result(5), 2);
96 BOOST_AUTO_TEST_CASE_TEMPLATE(check_value_6, setbits_t, check_dyn_setbits_tests) {
97 BOOST_CHECK_EQUAL(setbits_t::result(6), 2);
100 BOOST_AUTO_TEST_CASE_TEMPLATE(check_value_7, setbits_t, check_dyn_setbits_tests) {
101 BOOST_CHECK_EQUAL(setbits_t::result(7), 3);
104 BOOST_AUTO_TEST_CASE_TEMPLATE(check_value_1023, setbits_t, check_dyn_setbits_tests) {
105 std::cout<<
"Efficiency="<<setbits_t::efficiency()<<
std::endl;
106 BOOST_CHECK_EQUAL(setbits_t::result(1023), 10);
109 BOOST_AUTO_TEST_SUITE_END()
111 BOOST_AUTO_TEST_SUITE(performance, *stats_to_csv::make_fixture(
"count_setbits.csv"))
137 BOOST_AUTO_TEST_CASE_TEMPLATE(rate, setbits_t, check_dyn_setbits_tests) {
138 typedef std::vector<
typename setbits_t::element_type> vtr_colln_t;
140 #ifdef JMMCG_PERFORMANCE_TESTS
141 const unsigned long test_size=2<<21;
143 const unsigned long test_size=2<<8;
145 const unsigned short loops_for_conv=50;
146 const double perc_conv_estimate=5.0;
147 typename setbits_t::element_type total=0;
149 const std::pair<timed_results_t,
bool> timed_results(compute_average_deviation<timed_results_t::value_type>(
154 v.reserve(test_size);
155 std::mt19937_64 gen(42);
156 std::uniform_int_distribution<
typename vtr_colln_t::value_type> distribution;
157 std::generate_n(std::back_inserter(v), test_size, std::bind(distribution, gen));
158 const auto t1=std::chrono::high_resolution_clock::now();
159 for (
auto const &i : v) {
160 total+=setbits_t::result(i);
162 const auto t2=std::chrono::high_resolution_clock::now();
163 return timed_results_t::value_type(
static_cast<
double>(test_size)*1000000/std::chrono::duration_cast<std::chrono::microseconds>(t2 - t1).count());
166 std::cout<<
typeid(setbits_t).name()<<
" counts/sec="<<timed_results.first<<std::endl;
167 #ifdef JMMCG_PERFORMANCE_TESTS
168 stats_to_csv::handle->stats<<timed_results.first.to_csv()<<std::flush;
169 BOOST_CHECK(!timed_results.second);
173 BOOST_AUTO_TEST_SUITE_END()
175 BOOST_AUTO_TEST_SUITE_END()