// Copyright 2015-2019 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 "std_ostream.hpp" using namespace boost::histogram; using namespace boost::histogram::literals; namespace dtl = boost::histogram::detail; int main() { // literals { BOOST_TEST_TRAIT_SAME(std::integral_constant, decltype(0_c)); BOOST_TEST_TRAIT_SAME(std::integral_constant, decltype(3_c)); BOOST_TEST_EQ(decltype(10_c)::value, 10); BOOST_TEST_EQ(decltype(213_c)::value, 213); } // common_storage { BOOST_TEST_TRAIT_SAME(dtl::common_storage, unlimited_storage<>>, unlimited_storage<>); BOOST_TEST_TRAIT_SAME( dtl::common_storage, dense_storage>, dense_storage); BOOST_TEST_TRAIT_SAME(dtl::common_storage, dense_storage>, dense_storage); BOOST_TEST_TRAIT_SAME(dtl::common_storage, dense_storage>, dense_storage); BOOST_TEST_TRAIT_SAME(dtl::common_storage, unlimited_storage<>>, dense_storage); BOOST_TEST_TRAIT_SAME(dtl::common_storage, unlimited_storage<>>, unlimited_storage<>); BOOST_TEST_TRAIT_SAME(dtl::common_storage, weight_storage>, weight_storage); } // size & data { char a[4] = {1, 2, 3, 4}; BOOST_TEST_EQ(dtl::size(a), 4u); BOOST_TEST_EQ(dtl::data(a), a); auto b = {1, 2}; BOOST_TEST_EQ(dtl::size(b), 2u); BOOST_TEST_EQ(dtl::data(b), b.begin()); struct C { unsigned size() const { return 3; } int* data() { return buf; } const int* data() const { return buf; } int buf[1]; } c; BOOST_TEST_EQ(dtl::size(c), 3u); BOOST_TEST_EQ(dtl::data(c), c.buf); BOOST_TEST_EQ(dtl::data(static_cast(c)), c.buf); struct { int size() const { return 5; } } d; BOOST_TEST_EQ(dtl::size(d), 5u); } // counting_streambuf { dtl::counting_streambuf cbuf; std::ostream os(&cbuf); os.put('x'); BOOST_TEST_EQ(cbuf.count, 1); os << 12; BOOST_TEST_EQ(cbuf.count, 3); os << "123"; BOOST_TEST_EQ(cbuf.count, 6); } return boost::report_errors(); }