23 #define CATCH_CONFIG_MAIN
26 #undef MAGIC_ENUM_RANGE_MIN
27 #define MAGIC_ENUM_RANGE_MIN -120
28 #undef MAGIC_ENUM_RANGE_MAX
29 #define MAGIC_ENUM_RANGE_MAX 120
36 #include <string_view>
50 static_assert(
is_magic_enum_supported,
"magic_enum: Unsupported compiler (https://github.com/Neargye/magic_enum#compiler-compatibility).");
54 constexpr
auto lang = enum_cast<Language>(
"日本語");
60 REQUIRE_FALSE(enum_cast<Language>(
"Französisch").has_value());
64 constexpr
auto lang = enum_cast<Language>(10);
76 REQUIRE(enum_integer<Language&>(korean) == 20);
86 REQUIRE(enum_index<Language&>(korean) == 1);
97 REQUIRE(enum_contains<Language&>(korean));
105 REQUIRE(enum_contains<Language&>(lang));
112 auto lang = std::string{
"日本語"};
113 REQUIRE(enum_contains<Language&>(
"한국어"));
114 REQUIRE(enum_contains<Language>(
"English"));
115 REQUIRE(enum_contains<const Language>(lang));
116 REQUIRE(enum_contains<Language>(
"😃"));
122 constexpr
auto lang = enum_value<Language>(3);
130 constexpr
auto& s7 = enum_values<const Language>();
135 constexpr
auto s7 = enum_count<Language>();
142 constexpr
auto lang_name =
enum_name(lang);
144 REQUIRE(enum_name<Language&>(lk) ==
"한국어");
154 constexpr
auto lang_name = enum_name<lang>();
155 REQUIRE(enum_name<Language::한국어>() ==
"한국어");
156 REQUIRE(enum_name<Language::English>() ==
"English");
158 REQUIRE(enum_name<Language::😃>() ==
"😃");
163 constexpr
auto& s5 = enum_names<const Language>();
164 REQUIRE(s5 == std::array<std::string_view, 5>{{
"日本語",
"한국어",
"English",
"😃",
"TVÅ"}});
168 constexpr
auto& s5 = enum_entries<const Language>();
169 REQUIRE(s5 == std::array<std::pair<Language, std::string_view>, 5>{{{
Language::日本語,
"日本語"}, {
Language::한국어,
"한국어"}, {
Language::English,
"English"}, {
Language::😃,
"😃"}, {
Language::TVÅ,
"TVÅ"}}});
173 auto test_ostream = [](
auto e, std::string name) {
175 std::stringstream ss;
185 test_ostream(
static_cast<Language>(0),
"0");
186 test_ostream(std::make_optional(
static_cast<Language>(0)),
"0");
190 auto test_istream = [](
const auto e, std::string name) {
192 std::istringstream ss(name);
193 std::decay_t<decltype(e)> v;
247 REQUIRE(enum_type_name<const Language&>() ==
"Language");
267 constexpr
auto lang = enum_cast<LanguageFlag>(
"日本語");
276 constexpr
auto lang = enum_cast<LanguageFlag>(1 << 1);
288 REQUIRE(enum_index<LanguageFlag&>(korean).
value() == 1);
299 REQUIRE(enum_contains<LanguageFlag&>(korean));
307 constexpr
auto lang = enum_contains<LanguageFlag&>(1 << 1);
309 REQUIRE(enum_contains<const LanguageFlag>(1 << 2));
310 REQUIRE(enum_contains<LanguageFlag>(1 << 3));
311 REQUIRE(enum_contains<LanguageFlag>(1 << 4));
316 auto lang = std::string{
"日本語"};
317 REQUIRE(enum_contains<LanguageFlag&>(
"한국어"));
318 REQUIRE(enum_contains<LanguageFlag>(
"English"));
319 REQUIRE(enum_contains<const LanguageFlag>(lang));
320 REQUIRE(enum_contains<LanguageFlag>(
"😃"));
327 constexpr
auto lang = enum_value<LanguageFlag>(3);
335 constexpr
auto& s5 = enum_values<const LanguageFlag>();
340 constexpr
auto s5 = enum_count<LanguageFlag>();
347 constexpr
auto lang_name =
enum_name(lang);
349 REQUIRE(enum_name<LanguageFlag&>(lk) ==
"한국어");
361 REQUIRE(enum_flags_name<LanguageFlag&>(lk) ==
"한국어");
369 constexpr
auto& s5 = enum_names<const LanguageFlag>();
370 REQUIRE(s5 == std::array<std::string_view, 4>{{
"日本語",
"한국어",
"English",
"😃"}});
374 constexpr
auto& s5 = enum_entries<const LanguageFlag>();
379 auto test_ostream = [](
auto e, std::string name) {
381 std::stringstream ss;
391 test_ostream(std::make_optional(
static_cast<LanguageFlag>(0)),
"0");
395 auto test_istream = [](
const auto e, std::string name) {
397 std::istringstream ss(name);
398 std::decay_t<decltype(e)> v;