// 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 "throw_exception.hpp" #include "utility_histogram.hpp" using namespace boost::histogram; template void run_tests() { // compare { auto a = make(T1{}, axis::regular<>{3, 0, 3}, axis::integer<>(0, 2)); auto b = make_s(T2{}, std::vector(), axis::regular<>{3, 0, 3}, axis::integer<>(0, 2)); BOOST_TEST_EQ(a, b); auto b2 = make(T2{}, axis::integer<>{0, 3}, axis::integer<>(0, 2)); BOOST_TEST_NE(a, b2); auto b3 = make(T2{}, axis::regular<>(3, 0, 4), axis::integer<>(0, 2)); BOOST_TEST_NE(a, b3); } // operators { auto a = make(T1{}, axis::integer{0, 2}); auto b = make(T2{}, axis::integer{0, 2}); BOOST_TEST_EQ(a, b); a(0); // 1 0 b(1); // 0 1 a += b; BOOST_TEST_EQ(a[0], 1); BOOST_TEST_EQ(a[1], 1); a *= b; BOOST_TEST_EQ(a[0], 0); BOOST_TEST_EQ(a[1], 1); a -= b; BOOST_TEST_EQ(a[0], 0); BOOST_TEST_EQ(a[1], 0); a[0] = 2; a[1] = 4; b[0] = 2; b[1] = 2; a /= b; BOOST_TEST_EQ(a[0], 1); BOOST_TEST_EQ(a[1], 2); BOOST_TEST_THROWS(a += make(T2{}, axis::integer<>{0, 3}), std::invalid_argument); BOOST_TEST_THROWS(a -= make(T2{}, axis::integer<>{0, 3}), std::invalid_argument); BOOST_TEST_THROWS(a *= make(T2{}, axis::integer<>{0, 3}), std::invalid_argument); BOOST_TEST_THROWS(a /= make(T2{}, axis::integer<>{0, 3}), std::invalid_argument); } // copy_assign { auto a = make(T1{}, axis::regular<>{3, 0, 3}, axis::integer<>{0, 2}); auto b = make_s(T2{}, std::vector(), axis::regular<>{3, 0, 3}, axis::integer<>{0, 2}); a(1, 1); BOOST_TEST_NE(a, b); b = a; BOOST_TEST_EQ(a, b); } } int main() { run_tests(); run_tests(); return boost::report_errors(); }