| 83 | #endif |
| 84 | |
| 85 | void run_tests() |
| 86 | { |
| 87 | using leaf::detail::optional; |
| 88 | { |
| 89 | optional<my_info> x; |
| 90 | BOOST_TEST(x.empty()); |
| 91 | } |
| 92 | BOOST_TEST(!object_count); |
| 93 | BOOST_TEST(!value_count); |
| 94 | { |
| 95 | my_info a(42); |
| 96 | BOOST_TEST_EQ(object_count, 1); |
| 97 | BOOST_TEST_EQ(value_count, 1); |
| 98 | optional<my_info> x(10, a); |
| 99 | BOOST_TEST_EQ(object_count, 2); |
| 100 | BOOST_TEST_EQ(value_count, 2); |
| 101 | BOOST_TEST(!x.empty()); |
| 102 | BOOST_TEST(x.has_value(10)); |
| 103 | BOOST_TEST(!x.has_value(11)); |
| 104 | BOOST_TEST_EQ(x.value(10).value, 42); |
| 105 | } |
| 106 | BOOST_TEST(!object_count); |
| 107 | BOOST_TEST(!value_count); |
| 108 | #ifndef BOOST_LEAF_NO_EXCEPTIONS |
| 109 | { |
| 110 | throws_on_copy a; |
| 111 | BOOST_TEST_EQ(object_count, 1); |
| 112 | try |
| 113 | { |
| 114 | optional<throws_on_copy> x(10, a); |
| 115 | BOOST_TEST(false); |
| 116 | } |
| 117 | catch( std::exception & ) |
| 118 | { |
| 119 | } |
| 120 | } |
| 121 | #endif |
| 122 | BOOST_TEST(!object_count); |
| 123 | BOOST_TEST(!value_count); |
| 124 | { |
| 125 | my_info a(42); |
| 126 | BOOST_TEST_EQ(object_count, 1); |
| 127 | BOOST_TEST_EQ(value_count, 1); |
| 128 | optional<my_info> x(10, std::move(a)); |
| 129 | BOOST_TEST_EQ(object_count, 2); |
| 130 | BOOST_TEST_EQ(value_count, 1); |
| 131 | BOOST_TEST(!x.empty()); |
| 132 | BOOST_TEST(x.has_value(10)); |
| 133 | BOOST_TEST(!x.has_value(11)); |
| 134 | BOOST_TEST_EQ(x.value(10).value, 42); |
| 135 | } |
| 136 | BOOST_TEST(!object_count); |
| 137 | BOOST_TEST(!value_count); |
| 138 | { |
| 139 | optional<my_info> x(10, my_info(42)); |
| 140 | BOOST_TEST_EQ(object_count, 1); |
| 141 | BOOST_TEST_EQ(value_count, 1); |
| 142 | BOOST_TEST(!x.empty()); |
no test coverage detected