|
2 | 2 | #include <msg/field.hpp>
|
3 | 3 | #include <msg/field_matchers.hpp>
|
4 | 4 |
|
| 5 | +#include <stdx/ct_string.hpp> |
| 6 | +#include <stdx/tuple.hpp> |
| 7 | + |
5 | 8 | #include <catch2/catch_test_macros.hpp>
|
6 | 9 |
|
7 | 10 | namespace {
|
8 | 11 | using namespace msg;
|
9 | 12 | using test_field =
|
10 | 13 | field<"test_field", std::uint32_t>::located<at{0_dw, 31_msb, 24_lsb}>;
|
| 14 | + |
| 15 | +enum struct E { A, B, C }; |
| 16 | + |
| 17 | +using test_enum_field = |
| 18 | + field<"enum_field", E>::located<at{0_dw, 31_msb, 24_lsb}>; |
11 | 19 | } // namespace
|
12 | 20 |
|
| 21 | +TEST_CASE("matcher description", "[field matchers]") { |
| 22 | + using namespace stdx::literals; |
| 23 | + constexpr auto m = msg::less_than_t<test_field, 5>{}; |
| 24 | + constexpr auto desc = m.describe(); |
| 25 | + static_assert(desc.str == "test_field < 0x5"_ctst); |
| 26 | +} |
| 27 | + |
| 28 | +TEST_CASE("matcher description of match", "[field matchers]") { |
| 29 | + using namespace stdx::literals; |
| 30 | + using msg_data = std::array<std::uint32_t, 1>; |
| 31 | + |
| 32 | + constexpr auto m = msg::less_than_t<test_field, 5>{}; |
| 33 | + constexpr auto desc = m.describe_match(msg_data{0x01ff'ffff}); |
| 34 | + static_assert(desc.str == "test_field (0x{:x}) < 0x5"_ctst); |
| 35 | + static_assert(desc.args == stdx::tuple{1}); |
| 36 | +} |
| 37 | + |
| 38 | +TEST_CASE("matcher description (enum field)", "[field matchers]") { |
| 39 | + using namespace stdx::literals; |
| 40 | + constexpr auto m = msg::less_than_t<test_enum_field, E::C>{}; |
| 41 | + constexpr auto desc = m.describe(); |
| 42 | + static_assert(desc.str == "enum_field < C"_ctst); |
| 43 | +} |
| 44 | + |
| 45 | +TEST_CASE("matcher description of match (enum field)", "[field matchers]") { |
| 46 | + using namespace stdx::literals; |
| 47 | + using msg_data = std::array<std::uint32_t, 1>; |
| 48 | + |
| 49 | + constexpr auto m = msg::less_than_t<test_enum_field, E::C>{}; |
| 50 | + constexpr auto desc = m.describe_match(msg_data{0x01ff'ffff}); |
| 51 | + static_assert(desc.str == "enum_field ({}) < C"_ctst); |
| 52 | + static_assert(desc.args == stdx::tuple{E::B}); |
| 53 | +} |
| 54 | + |
13 | 55 | TEST_CASE("negate less_than", "[field matchers]") {
|
14 | 56 | constexpr auto m = msg::less_than_t<test_field, 5>{};
|
15 | 57 | constexpr auto n = match::negate(m);
|
|
0 commit comments