// 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 "utility.hpp" using namespace boost::histogram::detail; using namespace boost::histogram::literals; namespace mp11 = boost::mp11; int main() { // literals { auto j0 = 0_c; auto j3 = 3_c; auto j10 = 10_c; auto j213 = 213_c; BOOST_TEST_TRAIT_TRUE((std::is_same)); BOOST_TEST_TRAIT_TRUE((std::is_same)); BOOST_TEST_EQ(decltype(j10)::value, 10); BOOST_TEST_EQ(decltype(j213)::value, 213); } // has_variance_support { struct no_methods {}; struct value_method { void value() {} }; struct variance_method { void variance() {} }; struct value_and_variance_methods { void value() {} void variance() {} }; BOOST_TEST_TRAIT_FALSE((has_variance_support)); BOOST_TEST_TRAIT_FALSE((has_variance_support)); BOOST_TEST_TRAIT_FALSE((has_variance_support)); BOOST_TEST_TRAIT_TRUE((has_variance_support)); } // has_method_lower { struct no_methods {}; struct lower_method { void lower(int) {} }; BOOST_TEST_TRAIT_FALSE((has_method_lower)); BOOST_TEST_TRAIT_TRUE((has_method_lower)); } // classify_container { using result1 = classify_container; BOOST_TEST_TRAIT_TRUE((std::is_same)); using result1a = classify_container; BOOST_TEST_TRAIT_TRUE((std::is_same)); using result2 = classify_container>; BOOST_TEST_TRAIT_TRUE((std::is_same)); using result2a = classify_container&>; BOOST_TEST_TRAIT_TRUE((std::is_same)); using result3 = classify_container>; BOOST_TEST_TRAIT_TRUE((std::is_same)); using result3a = classify_container&>; BOOST_TEST_TRAIT_TRUE((std::is_same)); using result4 = classify_container; BOOST_TEST_TRAIT_TRUE((std::is_same)); } // bool mask { auto v1 = bool_mask(4, false); BOOST_TEST_EQ(v1, std::vector({true, false, false, true})); auto v2 = bool_mask(4, true); BOOST_TEST_EQ(v2, std::vector({false, true, false, true})); } // rm_cv_ref { using T1 = int; using T2 = const int; using T3 = const int&; using T4 = volatile int; using T5 = volatile const int; using T6 = volatile const int&; BOOST_TEST_TRAIT_TRUE((std::is_same, int>)); BOOST_TEST_TRAIT_TRUE((std::is_same, int>)); BOOST_TEST_TRAIT_TRUE((std::is_same, int>)); BOOST_TEST_TRAIT_TRUE((std::is_same, int>)); BOOST_TEST_TRAIT_TRUE((std::is_same, int>)); BOOST_TEST_TRAIT_TRUE((std::is_same, int>)); } // mp_size { using T1 = std::tuple; using T2 = const std::tuple; using T3 = std::tuple&; using T4 = const std::tuple&; BOOST_TEST_EQ(mp_size::value, 1); BOOST_TEST_EQ(mp_size::value, 2); BOOST_TEST_EQ(mp_size::value, 3); BOOST_TEST_EQ(mp_size::value, 4); } // copy_qualifiers { BOOST_TEST_TRAIT_TRUE((std::is_same, long>)); BOOST_TEST_TRAIT_TRUE( (std::is_same, const long>)); BOOST_TEST_TRAIT_TRUE((std::is_same, long&>)); BOOST_TEST_TRAIT_TRUE( (std::is_same, const long&>)); BOOST_TEST_TRAIT_TRUE( (std::is_same, long&&>)); } // mp_set_union { using L1 = mp11::mp_list; using L2 = mp11::mp_list; using result = mp_set_union; using expected = mp11::mp_list; BOOST_TEST_TRAIT_TRUE((std::is_same)); } // selection { using T = std::tuple; BOOST_TEST_TRAIT_TRUE((std::is_same, std::tuple>)); BOOST_TEST_TRAIT_TRUE((std::is_same, std::tuple>)); BOOST_TEST_TRAIT_TRUE((std::is_same, std::tuple>)); BOOST_TEST_TRAIT_TRUE(( std::is_same, std::tuple>)); BOOST_TEST_TRAIT_TRUE( (std::is_same, std::tuple>)); BOOST_TEST_TRAIT_TRUE( (std::is_same, std::tuple>)); BOOST_TEST_TRAIT_TRUE( (std::is_same, std::tuple>)); BOOST_TEST_TRAIT_TRUE( (std::is_same, std::tuple>)); } // unique_sorted { using input = mp11::mp_list_c; using result = unique_sorted; using expected = mp11::mp_list_c; BOOST_TEST_TRAIT_TRUE((std::is_same)); } // make_sub_tuple { std::tuple t(1, 2, 3); auto result = make_sub_tuple(t); auto expected = std::tuple(2, 3); BOOST_TEST_EQ(result, expected); } return boost::report_errors(); }