// 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)); } // axes_size { std::tuple a; std::vector b(3); std::array c; BOOST_TEST_EQ(detail::axes_size(a), 2); BOOST_TEST_EQ(detail::axes_size(b), 3); BOOST_TEST_EQ(detail::axes_size(c), 4); } // 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)); } // make_sub_axes { using boost::mp11::mp_list; axis::integer<> a0(0, 1), a1(1, 2), a2(2, 3); auto axes = std::make_tuple(a0, a1, a2); BOOST_TEST_EQ(detail::make_sub_axes(axes, i0()), std::make_tuple(a0)); BOOST_TEST_EQ(detail::make_sub_axes(axes, i1()), std::make_tuple(a1)); BOOST_TEST_EQ(detail::make_sub_axes(axes, i2()), std::make_tuple(a2)); BOOST_TEST_EQ(detail::make_sub_axes(axes, i0(), i1()), std::make_tuple(a0, a1)); BOOST_TEST_EQ(detail::make_sub_axes(axes, i0(), i2()), std::make_tuple(a0, a2)); BOOST_TEST_EQ(detail::make_sub_axes(axes, i1(), i2()), std::make_tuple(a1, a2)); BOOST_TEST_EQ(detail::make_sub_axes(axes, i0(), i1(), i2()), std::make_tuple(a0, a1, a2)); } // is_set { std::vector v({3, 1, 2}); BOOST_TEST(detail::is_set(v.begin(), v.end())); v = {3, 1, 2, 1}; BOOST_TEST_NOT(detail::is_set(v.begin(), v.end())); } return boost::report_errors(); }