// Copyright 2015-2018 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 "utility_histogram.hpp" #include "utility_meta.hpp" using namespace boost::histogram; using integer = axis::integer; using category = axis::category; template void run_tests() { { auto h = make_s(Tag(), std::vector(), integer()); const auto& a = h.axis(); h(-std::numeric_limits::infinity()); h(std::numeric_limits::quiet_NaN()); h(std::numeric_limits::infinity()); BOOST_TEST_EQ(a.size(), 0); BOOST_TEST_EQ(h.size(), 2); BOOST_TEST_EQ(h[-1], 1); BOOST_TEST_EQ(h[0], 2); h(0); BOOST_TEST_EQ(a.size(), 1); BOOST_TEST_EQ(h.size(), 3); BOOST_TEST_EQ(h[-1], 1); BOOST_TEST_EQ(h[0], 1); BOOST_TEST_EQ(h[1], 2); h(2); BOOST_TEST_EQ(a.size(), 3); BOOST_TEST_EQ(h.size(), 5); BOOST_TEST_EQ(h[-1], 1); BOOST_TEST_EQ(h[0], 1); BOOST_TEST_EQ(h[1], 0); BOOST_TEST_EQ(h[2], 1); BOOST_TEST_EQ(h[3], 2); h(-2); BOOST_TEST_EQ(a.size(), 5); BOOST_TEST_EQ(h.size(), 7); // BOOST_TEST_EQ(h[-1], 1) BOOST_TEST_EQ(h[0], 1); BOOST_TEST_EQ(h[1], 0); BOOST_TEST_EQ(h[2], 1); BOOST_TEST_EQ(h[3], 0); BOOST_TEST_EQ(h[4], 1); BOOST_TEST_EQ(h[5], 2); } { auto h = make_s(Tag(), std::vector(), integer(), category()); const auto& a = h.axis(0); const auto& b = h.axis(1); BOOST_TEST_EQ(a.size(), 0); BOOST_TEST_EQ(b.size(), 0); BOOST_TEST_EQ(h.size(), 0); h(0, "x"); h(-std::numeric_limits::infinity(), "x"); h(std::numeric_limits::infinity(), "x"); h(std::numeric_limits::quiet_NaN(), "x"); BOOST_TEST_EQ(a.size(), 1); BOOST_TEST_EQ(b.size(), 1); BOOST_TEST_EQ(h.size(), 3); h(2, "x"); BOOST_TEST_EQ(a.size(), 3); BOOST_TEST_EQ(b.size(), 1); BOOST_TEST_EQ(h.size(), 5); h(1, "y"); BOOST_TEST_EQ(a.size(), 3); BOOST_TEST_EQ(b.size(), 2); BOOST_TEST_EQ(h.size(), 10); BOOST_TEST_EQ(h.at(-1, 0), 1); BOOST_TEST_EQ(h.at(-1, 1), 0); BOOST_TEST_EQ(h.at(3, 0), 2); BOOST_TEST_EQ(h.at(3, 1), 0); BOOST_TEST_EQ(h.at(a.index(0), b.index("x")), 1); BOOST_TEST_EQ(h.at(a.index(1), b.index("x")), 0); BOOST_TEST_EQ(h.at(a.index(2), b.index("x")), 1); BOOST_TEST_EQ(h.at(a.index(0), b.index("y")), 0); BOOST_TEST_EQ(h.at(a.index(1), b.index("y")), 1); BOOST_TEST_EQ(h.at(a.index(2), b.index("y")), 0); } } int main() { run_tests(); run_tests(); return boost::report_errors(); }