// 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 using namespace boost::histogram; template using vector_storage = storage_adaptor>; template using array_storage = storage_adaptor>; int main() { // ctor, copy, move { vector_storage a; vector_storage b(a); vector_storage c; c = a; vector_storage d(std::move(a)); vector_storage e; e = std::move(b); vector_storage f(e); vector_storage g(std::vector(10, 0)); array_storage h; h = g; array_storage i(g); } // increment and reset { vector_storage a, b; a.reset(1); b.reset(1); vector_storage c, d; c.reset(1); d.reset(2); a(0); b(0); c(0); c(0); d(0); d(1, 5); d(0, 2); BOOST_TEST_EQ(a[0], 1); BOOST_TEST_EQ(b[0], 1); BOOST_TEST_EQ(c[0], 2); BOOST_TEST_EQ(d[0], 3); BOOST_TEST_EQ(d[1], 5); BOOST_TEST(a == a); BOOST_TEST(a == b); BOOST_TEST(!(a == c)); BOOST_TEST(!(a == d)); } // multiply { vector_storage a; a.reset(2); a(0); a *= 3; BOOST_TEST_EQ(a[0], 3); BOOST_TEST_EQ(a[1], 0); a(1, 2); BOOST_TEST_EQ(a[0], 3); BOOST_TEST_EQ(a[1], 2); a *= 3; BOOST_TEST_EQ(a[0], 9); BOOST_TEST_EQ(a[1], 6); } // copy { vector_storage a; a.reset(1); a(0); decltype(a) b; b.reset(2); BOOST_TEST(!(a == b)); b = a; BOOST_TEST(a == b); BOOST_TEST_EQ(b.size(), 1); BOOST_TEST_EQ(b[0], 1); decltype(a) c(a); BOOST_TEST(a == c); BOOST_TEST_EQ(c.size(), 1); BOOST_TEST_EQ(c[0], 1); vector_storage d; d.reset(1); BOOST_TEST(!(a == d)); d = a; BOOST_TEST(a == d); decltype(d) e(a); BOOST_TEST(a == e); } // move { vector_storage a; a.reset(1); a(0); decltype(a) b; BOOST_TEST(!(a == b)); b = std::move(a); BOOST_TEST_EQ(a.size(), 0); BOOST_TEST_EQ(b.size(), 1); BOOST_TEST_EQ(b[0], 1); decltype(a) c(std::move(b)); BOOST_TEST_EQ(c.size(), 1); BOOST_TEST_EQ(c[0], 1); BOOST_TEST_EQ(b.size(), 0); } // with weight_counter { vector_storage> a; a.reset(1); a(0); a(0, 1); a(0, weight_counter(1, 0)); BOOST_TEST_EQ(a[0].value(), 3); BOOST_TEST_EQ(a[0].variance(), 2); a(0, weight(2)); BOOST_TEST_EQ(a[0].value(), 5); BOOST_TEST_EQ(a[0].variance(), 6); } return boost::report_errors(); }