diff --git a/test/test.cpp b/test/test.cpp index fc5a5a1..0b29562 100644 --- a/test/test.cpp +++ b/test/test.cpp @@ -23,6 +23,8 @@ #define CATCH_CONFIG_MAIN #include +#define MAGIC_ENUM_RANGE_MIN -120 +#define MAGIC_ENUM_RANGE_MAX 120 #include #include @@ -31,11 +33,11 @@ enum class Color { RED = -12, GREEN = 7, BLUE = 15 }; -enum class Numbers : char { one = 10, two = 20, three = 30 }; +enum class Numbers : char { one = 10, two = 20, three = 30, many = 127 }; -enum Directions { Up = 85, Down = -42, Right = 119, Left = -119 }; +enum Directions { Up = 85, Down = -42, Right = 120, Left = -120 }; -enum number : unsigned long { one = 100, two = 200, three = 300 }; +enum number : unsigned long { zero = 0, one = 100, two = 200, three = 300, four = 400 }; namespace magic_enum { template <> @@ -61,6 +63,7 @@ TEST_CASE("enum_cast") { REQUIRE(no.value() == Numbers::one); REQUIRE(magic_enum::enum_cast("two").value() == Numbers::two); REQUIRE(magic_enum::enum_cast("three").value() == Numbers::three); + REQUIRE_FALSE(magic_enum::enum_cast("many").has_value()); REQUIRE_FALSE(magic_enum::enum_cast("None").has_value()); constexpr auto dr = magic_enum::enum_cast("Right"); @@ -74,6 +77,8 @@ TEST_CASE("enum_cast") { REQUIRE(magic_enum::enum_cast("one").value() == number::one); REQUIRE(magic_enum::enum_cast("two").value() == number::two); REQUIRE(nt.value() == number::three); + REQUIRE_FALSE(magic_enum::enum_cast("zero").has_value()); + REQUIRE_FALSE(magic_enum::enum_cast("four").has_value()); REQUIRE_FALSE(magic_enum::enum_cast("None").has_value()); #undef constexpr @@ -91,24 +96,27 @@ TEST_CASE("enum_cast") { REQUIRE(magic_enum::enum_cast(20).value() == Numbers::two); REQUIRE(magic_enum::enum_cast(30).value() == Numbers::three); REQUIRE_FALSE(magic_enum::enum_cast(0).has_value()); + REQUIRE_FALSE(magic_enum::enum_cast(127).has_value()); - constexpr auto dr = magic_enum::enum_cast(119); + constexpr auto dr = magic_enum::enum_cast(120); REQUIRE(magic_enum::enum_cast(85).value() == Directions::Up); REQUIRE(magic_enum::enum_cast(-42).value() == Directions::Down); REQUIRE(dr.value() == Directions::Right); - REQUIRE(magic_enum::enum_cast(-119).value() == Directions::Left); - REQUIRE_FALSE(magic_enum::enum_cast(0).has_value()); + REQUIRE(magic_enum::enum_cast(-120).value() == Directions::Left); + REQUIRE_FALSE(magic_enum::enum_cast(0).has_value());; constexpr auto nt = magic_enum::enum_cast(300); REQUIRE(magic_enum::enum_cast(100).value() == number::one); REQUIRE(magic_enum::enum_cast(200).value() == number::two); REQUIRE(nt.value() == number::three); REQUIRE_FALSE(magic_enum::enum_cast(0).has_value()); + REQUIRE_FALSE(magic_enum::enum_cast(0).has_value()); + REQUIRE_FALSE(magic_enum::enum_cast(400).has_value()); } } TEST_CASE("enum_value") { - constexpr auto cr = magic_enum::enum_value(0); + constexpr auto cr = magic_enum::enum_value(0); REQUIRE(cr == Color::RED); REQUIRE(magic_enum::enum_value(1) == Color::GREEN); REQUIRE(magic_enum::enum_value(2) == Color::BLUE); @@ -173,6 +181,7 @@ TEST_CASE("enum_name") { REQUIRE(magic_enum::enum_name(Numbers::two).value() == "two"); REQUIRE(magic_enum::enum_name(Numbers::three).value() == "three"); REQUIRE_FALSE(magic_enum::enum_name(static_cast(0)).has_value()); + REQUIRE_FALSE(magic_enum::enum_name(static_cast(127)).has_value()); constexpr Directions dr = Directions::Right; constexpr auto dr_name = magic_enum::enum_name(dr); @@ -188,6 +197,7 @@ TEST_CASE("enum_name") { REQUIRE(magic_enum::enum_name(number::two).value() == "two"); REQUIRE(nt_name.value() == "three"); REQUIRE_FALSE(magic_enum::enum_name(static_cast(0)).has_value()); + REQUIRE_FALSE(magic_enum::enum_name(static_cast(400)).has_value()); } TEST_CASE("enum_names") { @@ -215,23 +225,25 @@ TEST_CASE("operator<<") { test_ostream(Color::RED, "RED"); test_ostream(Color::GREEN, "GREEN"); test_ostream(Color::BLUE, "BLUE"); - test_ostream((Color)0, ""); + test_ostream(static_cast(0), ""); test_ostream(Numbers::one, "one"); test_ostream(Numbers::two, "two"); test_ostream(Numbers::three, "three"); - test_ostream((Numbers)0, ""); + test_ostream(static_cast(0), ""); + test_ostream(static_cast(127), ""); test_ostream(Directions::Up, "Up"); test_ostream(Directions::Down, "Down"); test_ostream(Directions::Right, "Right"); test_ostream(Directions::Left, "Left"); - test_ostream((Directions)0, ""); + test_ostream(static_cast(0), ""); test_ostream(number::one, "one"); test_ostream(number::two, "two"); test_ostream(number::three, "three"); - test_ostream((number)0, ""); + test_ostream(static_cast(0), ""); + test_ostream(static_cast(400), ""); } TEST_CASE("type_traits") {