1#include <boost/core/lightweight_test.hpp>
2#include <boost/core/span.hpp>
3#include <boost/histogram/detail/nonmember_container_access.hpp>
4#include <boost/histogram/detail/reduce_command.hpp>
5#include <boost/histogram/detail/sub_array.hpp>
6#include <initializer_list>
7#include <stdexcept>
8#include <utility>
9#include "throw_exception.hpp"
10
11namespace boost {
12namespace histogram {
13namespace detail {
14template <class T, std::size_t N>
15std::ostream& operator<<(std::ostream& os, const sub_array<T, N>&) {
16 return os;
17}
18std::ostream& operator<<(std::ostream& os, const reduce_command&) { return os; }
19} // namespace detail
20} // namespace histogram
21} // namespace boost
22
23using namespace boost::histogram::detail;
24
25int main() {
26 using boost::span;
27
28 {
29 sub_array<int, 3> a = {1, 2};
30
31 BOOST_TEST_EQ(a.size(), 2);
32 BOOST_TEST_EQ(a.max_size(), 3);
33 BOOST_TEST_EQ(a.at(0), 1);
34 BOOST_TEST_EQ(a.at(1), 2);
35
36 sub_array<int, 3> b = {1, 2};
37 BOOST_TEST_EQ(a, b);
38
39 sub_array<int, 3> c = {1, 2, 3};
40 BOOST_TEST_NE(a, c);
41
42 sub_array<int, 3> d = {2, 2};
43 BOOST_TEST_NE(a, d);
44
45 auto sp = span<int>(a);
46 BOOST_TEST_EQ(sp.size(), 2);
47 BOOST_TEST_EQ(sp.front(), 1);
48 BOOST_TEST_EQ(sp.back(), 2);
49
50 const auto& ca = a;
51 auto csp = span<const int>(ca);
52 BOOST_TEST_EQ(csp.size(), 2);
53 BOOST_TEST_EQ(csp.front(), 1);
54 BOOST_TEST_EQ(csp.back(), 2);
55 }
56
57 {
58 sub_array<int, 2> a(2, 1);
59 sub_array<int, 2> b(1, 2);
60 std::swap(a, b);
61
62 BOOST_TEST_EQ(a.size(), 1);
63 BOOST_TEST_EQ(b.size(), 2);
64 BOOST_TEST_EQ(a[0], 2);
65 BOOST_TEST_EQ(b[0], 1);
66 BOOST_TEST_EQ(b[1], 1);
67 }
68
69 {
70 const std::initializer_list<int> a = {1, 2};
71 auto sp = span<const int>(a);
72 BOOST_TEST_EQ(sp.size(), 2);
73 }
74
75 {
76 const sub_array<reduce_command, 3> a(2);
77 auto sp = span<const reduce_command>(a);
78 BOOST_TEST_EQ(sp.size(), 2);
79 }
80
81 {
82 const std::initializer_list<reduce_command> a = {reduce_command{}};
83 auto sp = span<const reduce_command>(a);
84 BOOST_TEST_EQ(sp.size(), 1);
85 }
86
87 return boost::report_errors();
88}

source code of boost/libs/histogram/test/detail_sub_array_and_span_test.cpp