// 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 "utility_meta.hpp" using namespace boost::histogram; int main() { BOOST_TEST_EQ(detail::cat("foo", 1, "bar"), "foo1bar"); // sequence equality { enum { A, B, C }; std::vector, axis::variable<>, axis::category<>, axis::integer<>>> std_vector1 = {axis::regular<>{2, -1, 1}, axis::variable<>{-1, 0, 1}, axis::category<>{A, B, C}}; std::vector, axis::variable<>, axis::category<>>> std_vector2 = {axis::regular<>{2, -1, 1}, axis::variable<>{-1, 0, 1}, axis::category<>{{A, B, C}}}; std::vector, axis::variable<>>> std_vector3 = { axis::variable<>{-1, 0, 1}, axis::regular<>{2, -1, 1}}; std::vector, axis::regular<>>> std_vector4 = { axis::regular<>{2, -1, 1}, axis::variable<>{-1, 0, 1}}; BOOST_TEST(detail::axes_equal(std_vector1, std_vector2)); BOOST_TEST_NOT(detail::axes_equal(std_vector2, std_vector3)); BOOST_TEST_NOT(detail::axes_equal(std_vector3, std_vector4)); auto tuple1 = std::make_tuple(axis::regular<>{2, -1, 1}, axis::variable<>{-1, 0, 1}, axis::category<>{{A, B, C}}); auto tuple2 = std::make_tuple(axis::regular<>{2, -1, 1}, axis::variable<>{-1, 0, 1}, axis::category<>{{A, B}}); auto tuple3 = std::make_tuple(axis::regular<>{2, -1, 1}, axis::variable<>{-1, 0, 1}); BOOST_TEST(detail::axes_equal(std_vector1, tuple1)); BOOST_TEST(detail::axes_equal(tuple1, std_vector1)); BOOST_TEST_NOT(detail::axes_equal(tuple1, tuple2)); BOOST_TEST_NOT(detail::axes_equal(tuple2, tuple3)); BOOST_TEST_NOT(detail::axes_equal(std_vector3, tuple3)); } // sequence assign { enum { A, B, C, D }; std::vector, axis::variable<>, axis::category<>, axis::integer<>>> std_vector1 = {axis::regular<>{2, -1, 1}, axis::variable<>{-1, 0, 1}, axis::category<>{A, B, C}}; std::vector, axis::variable<>, axis::category<>>> std_vector2 = {axis::regular<>{2, -2, 2}, axis::variable<>{-2, 0, 2}, axis::category<>{A, B}}; detail::axes_assign(std_vector2, std_vector1); BOOST_TEST(detail::axes_equal(std_vector2, std_vector1)); auto tuple1 = std::make_tuple(axis::regular<>{2, -3, 3}, axis::variable<>{-3, 0, 3}, axis::category<>{A, B, C, D}); detail::axes_assign(tuple1, std_vector1); BOOST_TEST(detail::axes_equal(tuple1, std_vector1)); decltype(std_vector1) std_vector3; BOOST_TEST_NOT(detail::axes_equal(std_vector3, tuple1)); detail::axes_assign(std_vector3, tuple1); BOOST_TEST(detail::axes_equal(std_vector3, tuple1)); auto tuple2 = std::make_tuple(axis::regular<>{2, -1, 1}, axis::variable<>{-1, 0, 1}, axis::category<>{A, B}); detail::axes_assign(tuple2, tuple1); BOOST_TEST(detail::axes_equal(tuple2, tuple1)); } // sub_axes { using ra = axis::regular<>; using ia = axis::integer<>; using ca = axis::category<>; 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>)); } // make_sub_tuple { using ia = axis::integer<>; using T = std::tuple; auto axes = T(ia(0, 1), ia(1, 2), ia(2, 3)); BOOST_TEST_EQ(detail::make_sub_axes(axes, i1(), i2()), (std::tuple(ia(1, 2), ia(2, 3)))); BOOST_TEST_EQ(detail::make_sub_axes(axes, i0(), i1()), (std::tuple(ia(0, 1), ia(1, 2)))); BOOST_TEST_EQ(detail::make_sub_axes(axes, i1()), (std::tuple(ia(1, 2)))); BOOST_TEST_EQ(detail::make_sub_axes(axes, i0(), i1(), i2()), axes); } return boost::report_errors(); }