// 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 #include #include "utility_meta.hpp" using namespace boost::histogram; using namespace boost::histogram::literals; int main() { BOOST_TEST_EQ(detail::cat("foo", 1, "bar"), "foo1bar"); // literals { BOOST_TEST_TRAIT_TRUE( (std::is_same, decltype(0_c)>)); BOOST_TEST_TRAIT_TRUE( (std::is_same, decltype(3_c)>)); BOOST_TEST_EQ(decltype(10_c)::value, 10); BOOST_TEST_EQ(decltype(213_c)::value, 213); } // sequence equality { using R = axis::regular<>; using I = axis::integer<>; using V = axis::variable<>; auto r = R(2, -1, 1); auto i = I(-1, 1); auto v = V{-1, 0, 1}; std::vector> v1 = {r, i}; std::vector> v2 = {r, i}; std::vector> v3 = {i, r}; std::vector> v4 = {r, i}; std::vector> v5 = {r, r}; std::vector v6 = {r, r}; BOOST_TEST(detail::axes_equal(v1, v2)); BOOST_TEST(detail::axes_equal(v1, v4)); BOOST_TEST(detail::axes_equal(v5, v6)); BOOST_TEST_NOT(detail::axes_equal(v1, v3)); BOOST_TEST_NOT(detail::axes_equal(v2, v3)); BOOST_TEST_NOT(detail::axes_equal(v3, v4)); BOOST_TEST_NOT(detail::axes_equal(v1, v5)); auto t1 = std::make_tuple(r, i); auto t2 = std::make_tuple(i, r); auto t3 = std::make_tuple(v, i); auto t4 = std::make_tuple(r, r); BOOST_TEST(detail::axes_equal(t1, v1)); BOOST_TEST(detail::axes_equal(t1, v2)); BOOST_TEST(detail::axes_equal(t1, v4)); BOOST_TEST(detail::axes_equal(v1, t1)); BOOST_TEST(detail::axes_equal(v2, t1)); BOOST_TEST(detail::axes_equal(v4, t1)); BOOST_TEST(detail::axes_equal(t2, v3)); BOOST_TEST(detail::axes_equal(v3, t2)); BOOST_TEST(detail::axes_equal(t4, v5)); BOOST_TEST(detail::axes_equal(t4, v6)); BOOST_TEST_NOT(detail::axes_equal(t1, t2)); BOOST_TEST_NOT(detail::axes_equal(t2, t3)); BOOST_TEST_NOT(detail::axes_equal(t1, v3)); BOOST_TEST_NOT(detail::axes_equal(t1, v3)); BOOST_TEST_NOT(detail::axes_equal(t3, v1)); BOOST_TEST_NOT(detail::axes_equal(t3, v2)); BOOST_TEST_NOT(detail::axes_equal(t3, v3)); BOOST_TEST_NOT(detail::axes_equal(t3, v4)); } // sequence assign { using R = axis::regular<>; using I = axis::integer<>; using V = axis::variable<>; auto r = R(2, -1, 1); auto i = I(-1, 1); auto v = V{-1, 0, 1}; std::vector> v1 = {r, i}; std::vector> v2; std::vector v3 = {r, r}; BOOST_TEST_NOT(detail::axes_equal(v2, v1)); detail::axes_assign(v2, v1); BOOST_TEST(detail::axes_equal(v2, v1)); detail::axes_assign(v2, v3); BOOST_TEST(detail::axes_equal(v2, v3)); auto t1 = std::make_tuple(r); detail::axes_assign(v3, t1); BOOST_TEST(detail::axes_equal(v3, t1)); auto t2 = std::make_tuple(r, i); detail::axes_assign(v2, t2); BOOST_TEST(detail::axes_equal(v2, t2)); auto t3 = std::make_tuple(R{3, -1, 1}, i); BOOST_TEST_NOT(detail::axes_equal(t2, t3)); detail::axes_assign(t2, t3); BOOST_TEST(detail::axes_equal(t2, t3)); } // bincount overflow { auto v = std::vector>( 100, axis::integer<>(0, std::numeric_limits::max() - 2)); BOOST_TEST_THROWS(detail::bincount(v), std::overflow_error); } // common_container { using A = std::array; using B = std::vector; using C = std::map; BOOST_TEST_TRAIT_TRUE((std::is_same, A>)); BOOST_TEST_TRAIT_TRUE((std::is_same, A>)); BOOST_TEST_TRAIT_TRUE((std::is_same, A>)); BOOST_TEST_TRAIT_TRUE((std::is_same, A>)); BOOST_TEST_TRAIT_TRUE((std::is_same, B>)); BOOST_TEST_TRAIT_TRUE((std::is_same, B>)); } // // common_storage // { // using A = storage_adaptor>; // using B = storage_adaptor>; // using C = storage_adaptor>; // BOOST_TEST_TRAIT_TRUE((std::is_same, // storage_adaptor>>)); // BOOST_TEST_TRAIT_TRUE((std::is_same, // storage_adaptor>>)); // } return boost::report_errors(); }