| 37 | } |
| 38 | |
| 39 | int main() { |
| 40 | // bad_ctors |
| 41 | { |
| 42 | BOOST_TEST_THROWS(axis::regular<>(0, 0, 1), std::logic_error); |
| 43 | BOOST_TEST_THROWS(axis::regular<>(1, 1, -1), std::logic_error); |
| 44 | BOOST_TEST_THROWS(axis::circular<>(0), std::logic_error); |
| 45 | BOOST_TEST_THROWS(axis::variable<>({}), std::logic_error); |
| 46 | BOOST_TEST_THROWS(axis::variable<>({1.0}), std::logic_error); |
| 47 | BOOST_TEST_THROWS(axis::integer<>(1, -1), std::logic_error); |
| 48 | BOOST_TEST_THROWS(axis::category<>({}), std::logic_error); |
| 49 | } |
| 50 | |
| 51 | // axis::regular |
| 52 | { |
| 53 | axis::regular<> a{4, -2, 2}; |
| 54 | BOOST_TEST_EQ(a[-1].lower(), -std::numeric_limits<double>::infinity()); |
| 55 | BOOST_TEST_EQ(a[a.size()].upper(), std::numeric_limits<double>::infinity()); |
| 56 | axis::regular<> b; |
| 57 | BOOST_TEST_NOT(a == b); |
| 58 | b = a; |
| 59 | BOOST_TEST_EQ(a, b); |
| 60 | b = b; |
| 61 | BOOST_TEST_EQ(a, b); |
| 62 | axis::regular<> c = std::move(b); |
| 63 | BOOST_TEST(c == a); |
| 64 | BOOST_TEST_NOT(b == a); |
| 65 | axis::regular<> d; |
| 66 | BOOST_TEST_NOT(c == d); |
| 67 | d = std::move(c); |
| 68 | BOOST_TEST_EQ(d, a); |
| 69 | BOOST_TEST_EQ(a.index(-10.), -1); |
| 70 | BOOST_TEST_EQ(a.index(-2.1), -1); |
| 71 | BOOST_TEST_EQ(a.index(-2.0), 0); |
| 72 | BOOST_TEST_EQ(a.index(-1.1), 0); |
| 73 | BOOST_TEST_EQ(a.index(0.0), 2); |
| 74 | BOOST_TEST_EQ(a.index(0.9), 2); |
| 75 | BOOST_TEST_EQ(a.index(1.0), 3); |
| 76 | BOOST_TEST_EQ(a.index(10.), 4); |
| 77 | BOOST_TEST_EQ(a.index(-std::numeric_limits<double>::infinity()), -1); |
| 78 | BOOST_TEST_EQ(a.index(std::numeric_limits<double>::infinity()), 4); |
| 79 | BOOST_TEST_EQ(a.index(std::numeric_limits<double>::quiet_NaN()), 4); |
| 80 | } |
| 81 | |
| 82 | // axis::regular with log transform |
| 83 | { |
| 84 | axis::regular<axis::transform::log> b{2, 1e0, 1e2}; |
| 85 | BOOST_TEST_EQ(b[-1].lower(), 0.0); |
| 86 | BOOST_TEST_IS_CLOSE(b[0].lower(), 1.0, 1e-9); |
| 87 | BOOST_TEST_IS_CLOSE(b[1].lower(), 10.0, 1e-9); |
| 88 | BOOST_TEST_IS_CLOSE(b[2].lower(), 100.0, 1e-9); |
| 89 | BOOST_TEST_EQ(b[2].upper(), std::numeric_limits<double>::infinity()); |
| 90 | |
| 91 | BOOST_TEST_EQ(b.index(-1), 2); // produces NaN in conversion |
| 92 | BOOST_TEST_EQ(b.index(0), -1); |
| 93 | BOOST_TEST_EQ(b.index(1), 0); |
| 94 | BOOST_TEST_EQ(b.index(9), 0); |
| 95 | BOOST_TEST_EQ(b.index(10), 1); |
| 96 | BOOST_TEST_EQ(b.index(90), 1); |
nothing calls this directly
no test coverage detected