// Copyright 2015-2017 Hans Dembinski // // Distributed under 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) #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace boost::histogram::detail; struct for_each_test_visitor { int i = 0; bool result = true; template void operator()(T& t) { // expect: int char float switch (i++) { case 0: result &= std::is_same::value; break; case 1: result &= std::is_same::value; break; case 2: result &= std::is_same::value; }; t += 1; } }; int main() { // escape0 { std::ostringstream os; escape(os, std::string("abc")); BOOST_TEST_EQ(os.str(), std::string("'abc'")); } // escape1 { std::ostringstream os; escape(os, std::string("abc\n")); BOOST_TEST_EQ(os.str(), std::string("'abc\n'")); } // escape2 { std::ostringstream os; escape(os, std::string("'abc'")); BOOST_TEST_EQ(os.str(), std::string("'\\\'abc\\\''")); } // // assign_axis unreachable branch // { // using V1 = boost::variant; // using V2 = boost::variant; // V1 v1(1.0); // V2 v2(2); // boost::apply_visitor(assign_axis(v1), v2); // BOOST_TEST_EQ(v1, V1(1.0)); // BOOST_TEST_EQ(v2, V2(2)); // } // index_mapper 1 { std::vector n{{2, 2}}; std::vector b{{true, false}}; index_mapper m(std::move(n), std::move(b)); BOOST_TEST_EQ(m.first, 0); BOOST_TEST_EQ(m.second, 0); BOOST_TEST_EQ(m.next(), true); BOOST_TEST_EQ(m.first, 1); BOOST_TEST_EQ(m.second, 1); BOOST_TEST_EQ(m.next(), true); BOOST_TEST_EQ(m.first, 2); BOOST_TEST_EQ(m.second, 0); BOOST_TEST_EQ(m.next(), true); BOOST_TEST_EQ(m.first, 3); BOOST_TEST_EQ(m.second, 1); BOOST_TEST_EQ(m.next(), false); } // index_mapper 2 { std::vector n{{2, 2}}; std::vector b{{false, true}}; index_mapper m(std::move(n), std::move(b)); BOOST_TEST_EQ(m.first, 0); BOOST_TEST_EQ(m.second, 0); BOOST_TEST_EQ(m.next(), true); BOOST_TEST_EQ(m.first, 1); BOOST_TEST_EQ(m.second, 0); BOOST_TEST_EQ(m.next(), true); BOOST_TEST_EQ(m.first, 2); BOOST_TEST_EQ(m.second, 1); BOOST_TEST_EQ(m.next(), true); BOOST_TEST_EQ(m.first, 3); BOOST_TEST_EQ(m.second, 1); BOOST_TEST_EQ(m.next(), false); } // cat { BOOST_TEST_EQ(cat("foo", 1, "bar"), std::string("foo1bar")); } // unique_sorted { using input = ::boost::mp11::mp_list_c; using result = unique_sorted_t; using expected = ::boost::mp11::mp_list_c; BOOST_TEST_TRAIT_TRUE((std::is_same)); } // union { using main_list = ::boost::mp11::mp_list; using aux_list = ::boost::mp11::mp_list; using result = union_t; using expected = ::boost::mp11::mp_list; BOOST_TEST_TRAIT_TRUE((std::is_same)); } // has_variance_support { struct no_methods {}; struct value_method { const double &value() const; }; struct variance_method { const double &variance() const; }; struct value_and_variance_methods { const double &value() const; const double &variance() const; }; BOOST_TEST_EQ(has_variance_support_t(), false); BOOST_TEST_EQ(has_variance_support_t(), false); BOOST_TEST_EQ(has_variance_support_t(), false); BOOST_TEST_EQ(has_variance_support_t(), true); } // classify_container { using result1 = classify_container_t; BOOST_TEST_TRAIT_TRUE(( std::is_same )); using result1a = classify_container_t; BOOST_TEST_TRAIT_TRUE(( std::is_same )); using result2 = classify_container_t>; BOOST_TEST_TRAIT_TRUE(( std::is_same )); using result2a = classify_container_t&>; BOOST_TEST_TRAIT_TRUE(( std::is_same )); using result3 = classify_container_t>; BOOST_TEST_TRAIT_TRUE(( std::is_same )); using result3a = classify_container_t&>; BOOST_TEST_TRAIT_TRUE(( std::is_same )); using result4 = classify_container_t; BOOST_TEST_TRAIT_TRUE(( std::is_same )); } // for_each { for_each_test_visitor v; std::tuple t(0, 0, 0); ::boost::histogram::detail::for_each(t, v); BOOST_TEST_EQ(v.i, 3); BOOST_TEST_EQ(v.result, true); BOOST_TEST_EQ(std::get<0>(t), 1); BOOST_TEST_EQ(std::get<1>(t), 1); BOOST_TEST_EQ(std::get<2>(t), 1); } return boost::report_errors(); }