| 51 | using ::fory::RegisteredEnum; |
| 52 | |
| 53 | TEST(EnumInfoTest, DefaultMetadataFallback) { |
| 54 | using Info = meta::EnumInfo<PlainEnum>; |
| 55 | static_assert(!Info::defined, "PlainEnum should not be registered"); |
| 56 | EXPECT_FALSE(Info::defined); |
| 57 | EXPECT_EQ(0u, Info::size); |
| 58 | EXPECT_FALSE(Info::contains(PlainEnum::A)); |
| 59 | EXPECT_FALSE(Info::contains(static_cast<PlainEnum>(123))); |
| 60 | |
| 61 | using Metadata = meta::EnumMetadata<PlainEnum>; |
| 62 | std::underlying_type_t<PlainEnum> ordinal = 0; |
| 63 | EXPECT_TRUE(Metadata::to_ordinal(PlainEnum::B, &ordinal)); |
| 64 | EXPECT_EQ(static_cast<std::underlying_type_t<PlainEnum>>(PlainEnum::B), |
| 65 | ordinal); |
| 66 | |
| 67 | PlainEnum roundtrip = PlainEnum::A; |
| 68 | EXPECT_TRUE(Metadata::from_ordinal(ordinal, &roundtrip)); |
| 69 | EXPECT_EQ(PlainEnum::B, roundtrip); |
| 70 | |
| 71 | ordinal = static_cast<std::underlying_type_t<PlainEnum>>(PlainEnum::A); |
| 72 | EXPECT_TRUE(Metadata::from_ordinal(ordinal, &roundtrip)); |
| 73 | EXPECT_EQ(PlainEnum::A, roundtrip); |
| 74 | } |
| 75 | |
| 76 | TEST(EnumInfoTest, RegisteredEnumProvidesMetadata) { |
| 77 | using Info = meta::EnumInfo<RegisteredEnum>; |