| 26 | using namespace boost::histogram::literals; // to get _c suffix |
| 27 | |
| 28 | int main() { |
| 29 | // special stuff that only works with dynamic_tag |
| 30 | |
| 31 | // init |
| 32 | { |
| 33 | auto v = std::vector<axis::any<axis::regular<>, axis::integer<>>>(); |
| 34 | v.push_back(axis::regular<>(4, -1, 1)); |
| 35 | v.push_back(axis::integer<>(1, 7)); |
| 36 | auto h = make_dynamic_histogram(v.begin(), v.end()); |
| 37 | BOOST_TEST_EQ(h.dim(), 2); |
| 38 | BOOST_TEST_EQ(h.axis(0), v[0]); |
| 39 | BOOST_TEST_EQ(h.axis(1), v[1]); |
| 40 | |
| 41 | auto h2 = make_dynamic_histogram_with(array_storage<int>(), v.begin(), v.end()); |
| 42 | BOOST_TEST_EQ(h2.dim(), 2); |
| 43 | BOOST_TEST_EQ(h2.axis(0), v[0]); |
| 44 | BOOST_TEST_EQ(h2.axis(1), v[1]); |
| 45 | } |
| 46 | |
| 47 | // bad fill argument |
| 48 | { |
| 49 | auto h = make_dynamic_histogram(axis::integer<>(0, 3)); |
| 50 | BOOST_TEST_THROWS(h(std::string()), std::invalid_argument); |
| 51 | } |
| 52 | |
| 53 | // axis methods |
| 54 | { |
| 55 | enum { A, B }; |
| 56 | auto c = make_dynamic_histogram(axis::category<>({A, B})); |
| 57 | BOOST_TEST_THROWS(c.axis().lower(0), std::runtime_error); |
| 58 | } |
| 59 | |
| 60 | // reduce |
| 61 | { |
| 62 | auto h1 = make_dynamic_histogram(axis::integer<>(0, 2), axis::integer<>(0, 3)); |
| 63 | h1(0, 0); |
| 64 | h1(0, 1); |
| 65 | h1(1, 0); |
| 66 | h1(1, 1); |
| 67 | h1(1, 2); |
| 68 | |
| 69 | std::vector<int> x; |
| 70 | |
| 71 | x = {0}; |
| 72 | auto h1_0 = h1.reduce_to(x.begin(), x.end()); |
| 73 | BOOST_TEST_EQ(h1_0.dim(), 1); |
| 74 | BOOST_TEST_EQ(sum(h1_0), 5); |
| 75 | BOOST_TEST_EQ(h1_0.at(0), 2); |
| 76 | BOOST_TEST_EQ(h1_0.at(1), 3); |
| 77 | BOOST_TEST(h1_0.axis() == h1.axis(0_c)); |
| 78 | |
| 79 | x = {1}; |
| 80 | auto h1_1 = h1.reduce_to(x.begin(), x.end()); |
| 81 | BOOST_TEST_EQ(h1_1.dim(), 1); |
| 82 | BOOST_TEST_EQ(sum(h1_1), 5); |
| 83 | BOOST_TEST_EQ(h1_1.at(0), 2); |
| 84 | BOOST_TEST_EQ(h1_1.at(1), 2); |
| 85 | BOOST_TEST_EQ(h1_1.at(2), 1); |
nothing calls this directly
no test coverage detected