diff options
author | babenko <babenko@yandex-team.com> | 2024-10-26 23:13:30 +0300 |
---|---|---|
committer | babenko <babenko@yandex-team.com> | 2024-10-26 23:30:14 +0300 |
commit | 41d598c624442bf6918407466dac3316b8277347 (patch) | |
tree | 5895b8823d4f887e1e5ab4f99cbac991dca5ca17 /library/cpp/yt/string/unittests/enum_ut.cpp | |
parent | ddabd4ddff87ac13bfc87ef02af352216a0f4e13 (diff) | |
download | ydb-41d598c624442bf6918407466dac3316b8277347.tar.gz |
YT-22885: DEFINE_ENUM_UNKNOWN_VALUE, string-related conversions
commit_hash:14c7e42422af750383f04855b4a7ea6b267b92d2
Diffstat (limited to 'library/cpp/yt/string/unittests/enum_ut.cpp')
-rw-r--r-- | library/cpp/yt/string/unittests/enum_ut.cpp | 46 |
1 files changed, 44 insertions, 2 deletions
diff --git a/library/cpp/yt/string/unittests/enum_ut.cpp b/library/cpp/yt/string/unittests/enum_ut.cpp index be5387151a..39dbdfd207 100644 --- a/library/cpp/yt/string/unittests/enum_ut.cpp +++ b/library/cpp/yt/string/unittests/enum_ut.cpp @@ -27,13 +27,39 @@ DEFINE_BIT_ENUM(ELangs, ((Rust) (0x04)) ((Python) (0x08)) ((JavaScript) (0x10)) + ((CppGo) (0x03)) + ((All) (0x1f)) ); +DEFINE_BIT_ENUM(ELangsWithUnknown, + ((None) (0x00)) + ((Cpp) (0x01)) + ((Go) (0x02)) + ((Rust) (0x04)) + ((Python) (0x08)) + ((JavaScript) (0x10)) + ((CppGo) (0x03)) + ((All) (0x1f)) + ((Unknown) (0x20)) +); +DEFINE_ENUM_UNKNOWN_VALUE(ELangsWithUnknown, Unknown); + DEFINE_ENUM(ECustomDomainName, ((A) (1) ("value_a")) ((B) (2) ("value_b")) ); +DEFINE_ENUM(EColorWithUnknown, + (Red) + (Green) + (Unknown) +); +DEFINE_ENUM_UNKNOWN_VALUE(EColorWithUnknown, Unknown); + +DEFINE_BIT_ENUM(EBitEnumWithoutNone, + ((Some)(1)) +); + TEST(TFormatTest, Enum) { EXPECT_EQ("Red", Format("%v", EColor::Red)); @@ -42,7 +68,8 @@ TEST(TFormatTest, Enum) EXPECT_EQ("BlackAndWhite", Format("%v", EColor::BlackAndWhite)); EXPECT_EQ("black_and_white", Format("%lv", EColor::BlackAndWhite)); - EXPECT_EQ("EColor(100)", Format("%v", EColor(100))); + EXPECT_EQ("EColor::unknown-100", Format("%v", EColor(100))); + EXPECT_EQ("Cpp | ELangs::unknown-32", Format("%v", ELangs(0x21))); EXPECT_EQ("JavaScript", Format("%v", ELangs::JavaScript)); EXPECT_EQ("java_script", Format("%lv", ELangs::JavaScript)); @@ -50,6 +77,8 @@ TEST(TFormatTest, Enum) EXPECT_EQ("None", Format("%v", ELangs::None)); EXPECT_EQ("none", Format("%lv", ELangs::None)); + EXPECT_EQ("", Format("%v", EBitEnumWithoutNone())); + EXPECT_EQ("Cpp | Go", Format("%v", ELangs::Cpp | ELangs::Go)); EXPECT_EQ("cpp | go", Format("%lv", ELangs::Cpp | ELangs::Go)); @@ -64,6 +93,19 @@ TEST(TFormatEnumTest, FormatEnumWithCustomDomainName) EXPECT_EQ("value_b", FormatEnum(ECustomDomainName::B)); } +TEST(TParseEnumTest, ParseUnknown) +{ + EXPECT_EQ(std::nullopt, TryParseEnum<EColor>("yellow")); + EXPECT_THROW(ParseEnum<EColor>("yellow"), TSimpleException); + EXPECT_EQ(std::nullopt, TryParseEnum<EColorWithUnknown>("yellow")); + EXPECT_EQ(EColorWithUnknown::Unknown, TryParseEnum<EColorWithUnknown>("yellow", /*enableUnknown*/ true)); + EXPECT_EQ(EColorWithUnknown::Unknown, ParseEnum<EColorWithUnknown>("yellow")); + EXPECT_EQ(std::nullopt, TryParseEnum<ELangs>("cpp | haskell")); + EXPECT_THROW(ParseEnum<ELangs>("cpp | haskell"), TSimpleException); + EXPECT_EQ(ELangsWithUnknown::Cpp | ELangsWithUnknown::Unknown, TryParseEnum<ELangsWithUnknown>("cpp | haskell", /*enableUnknown*/ true)); + EXPECT_EQ(ELangsWithUnknown::Cpp | ELangsWithUnknown::Unknown, ParseEnum<ELangsWithUnknown>("cpp | haskell")); +} + TEST(TParseEnumTest, ParseEnumWithCustomDomainName) { EXPECT_EQ(ECustomDomainName::A, TryParseEnum<ECustomDomainName>("value_a")); @@ -77,7 +119,7 @@ TEST(TParseEnumTest, ParseBitEnum) EXPECT_EQ(ELangs::Cpp, TryParseEnum<ELangs>("cpp")); EXPECT_EQ(ELangs::Cpp | ELangs::Rust, TryParseEnum<ELangs>("cpp|rust")); EXPECT_EQ(ELangs::Cpp | ELangs::Rust, TryParseEnum<ELangs>("cpp | rust")); - EXPECT_EQ(std::nullopt, TryParseEnum<ELangs>("unk | rust")); + EXPECT_EQ(std::nullopt, TryParseEnum<ELangs>("haskell | rust")); } //////////////////////////////////////////////////////////////////////////////// |