// Copyright 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 #include "utility_axis.hpp" using namespace boost::histogram::axis; int main() { { auto a = integer<>(1, 3); BOOST_TEST_EQ(traits::index(a, 1), 0); BOOST_TEST_EQ(traits::value(a, 0), 1); BOOST_TEST_EQ(traits::width(a, 0), 0); BOOST_TEST_EQ(traits::width(a, 0), 0); auto b = integer(1, 3); BOOST_TEST_EQ(traits::index(b, 1), 0); BOOST_TEST_EQ(traits::value(b, 0), 1); BOOST_TEST_EQ(traits::width(b, 0), 1); auto& b1 = b; BOOST_TEST(traits::static_options::test(option::underflow)); const auto& b2 = b; BOOST_TEST(traits::static_options::test(option::underflow)); auto c = category{"red", "blue"}; BOOST_TEST_EQ(traits::index(c, "blue"), 1); BOOST_TEST_EQ(traits::value(c, 0), std::string("red")); BOOST_TEST_EQ(traits::width(c, 0), 0); } { using A = integer<>; BOOST_TEST_EQ(traits::static_options::test(option::growth), false); BOOST_TEST_EQ(traits::static_options::test(option::growth), false); BOOST_TEST_EQ(traits::static_options::test(option::growth), false); BOOST_TEST_EQ(traits::options(A{}), option::underflow | option::overflow); using B = integer; BOOST_TEST_EQ(traits::static_options::test(option::growth), true); BOOST_TEST_EQ(traits::static_options::test(option::growth), true); BOOST_TEST_EQ(traits::static_options::test(option::growth), true); BOOST_TEST_EQ(traits::options(B{}), option::growth); struct growing { auto update(double) { return std::make_pair(0, 0); } }; using C = growing; BOOST_TEST_EQ(traits::static_options::test(option::growth), true); BOOST_TEST_EQ(traits::static_options::test(option::growth), true); BOOST_TEST_EQ(traits::static_options::test(option::growth), true); BOOST_TEST_EQ(traits::options(C{}), option::growth); struct notgrowing { auto index(double) { return 0; } }; using D = notgrowing; BOOST_TEST_EQ(traits::static_options::test(option::growth), false); BOOST_TEST_EQ(traits::static_options::test(option::growth), false); BOOST_TEST_EQ(traits::static_options::test(option::growth), false); BOOST_TEST_EQ(traits::options(D{}), option::none); } { auto a = integer(); BOOST_TEST_EQ(traits::update(a, 0), (std::pair(0, -1))); BOOST_TEST_THROWS(traits::update(a, "foo"), std::invalid_argument); } return boost::report_errors(); }