diff options
author | babenko <babenko@yandex-team.ru> | 2022-02-10 16:49:19 +0300 |
---|---|---|
committer | Daniil Cherednik <dcherednik@yandex-team.ru> | 2022-02-10 16:49:19 +0300 |
commit | cec37806d8847aa3db53bafc9e251d4aaf325c12 (patch) | |
tree | 4a61c191e93e31d9ab423e258c71ab43550ee3d2 /library/cpp/yt/misc/unittests | |
parent | 58cd0b86ed99a72df22479e26a20bc1c1e57e65e (diff) | |
download | ydb-cec37806d8847aa3db53bafc9e251d4aaf325c12.tar.gz |
Restoring authorship annotation for <babenko@yandex-team.ru>. Commit 1 of 2.
Diffstat (limited to 'library/cpp/yt/misc/unittests')
-rw-r--r-- | library/cpp/yt/misc/unittests/enum_ut.cpp | 496 | ||||
-rw-r--r-- | library/cpp/yt/misc/unittests/guid_ut.cpp | 36 | ||||
-rw-r--r-- | library/cpp/yt/misc/unittests/preprocessor_ut.cpp | 204 | ||||
-rw-r--r-- | library/cpp/yt/misc/unittests/ya.make | 26 |
4 files changed, 381 insertions, 381 deletions
diff --git a/library/cpp/yt/misc/unittests/enum_ut.cpp b/library/cpp/yt/misc/unittests/enum_ut.cpp index 6af11b04dc..0ee906d2ae 100644 --- a/library/cpp/yt/misc/unittests/enum_ut.cpp +++ b/library/cpp/yt/misc/unittests/enum_ut.cpp @@ -1,250 +1,250 @@ #include <library/cpp/testing/gtest/gtest.h> - + #include <library/cpp/yt/misc/enum.h> - -namespace NYT { -namespace { - -//////////////////////////////////////////////////////////////////////////////// - -DEFINE_ENUM(ESimple, - (X) - (Y) - (Z) -); - -DEFINE_ENUM(EColor, - ((Red) (10)) - ((Green)(20)) - ((Blue) (30)) - (Black) - (White) -); - -DEFINE_BIT_ENUM(EFlag, - ((_1)(0x0001)) - ((_2)(0x0002)) - ((_3)(0x0004)) - ((_4)(0x0008)) -); - -DEFINE_AMBIGUOUS_ENUM_WITH_UNDERLYING_TYPE(EMultipleNames, int, - (A1) - ((A2)(0)) - (B) - (C) - ((D1)(100)) - ((D2)(100)) -); - -//////////////////////////////////////////////////////////////////////////////// - -template <class T, size_t N> -std::vector<T> ToVector(std::array<T, N> array) -{ - return std::vector<T>(array.begin(), array.end()); -} - -TEST(TEnumTest, Domain) -{ - EXPECT_EQ(3, TEnumTraits<ESimple>::DomainSize); - std::vector<ESimple> v { - ESimple::X, - ESimple::Y, - ESimple::Z - }; - EXPECT_EQ(v, ToVector(TEnumTraits<ESimple>::GetDomainValues())); - EXPECT_EQ(ESimple::X, TEnumTraits<ESimple>::GetMinValue()); - EXPECT_EQ(ESimple::Z, TEnumTraits<ESimple>::GetMaxValue()); -} - -TEST(TEnumTest, Basic) -{ - EXPECT_EQ(0, static_cast<int>(ESimple::X)); - EXPECT_EQ(1, static_cast<int>(ESimple::Y)); - EXPECT_EQ(2, static_cast<int>(ESimple::Z)); - - EXPECT_EQ(0, static_cast<int>(EColor( ))); - EXPECT_EQ(5, static_cast<int>(EColor(5))); - - EXPECT_EQ(10, static_cast<int>(EColor::Red )); - EXPECT_EQ(20, static_cast<int>(EColor::Green)); - EXPECT_EQ(30, static_cast<int>(EColor::Blue )); - EXPECT_EQ(31, static_cast<int>(EColor::Black)); - EXPECT_EQ(32, static_cast<int>(EColor::White)); -} - -TEST(TEnumTest, ToString) -{ - EXPECT_EQ("EColor(0)", ToString(EColor( ))); - EXPECT_EQ("EColor(5)", ToString(EColor(5))); - - EXPECT_EQ("Red", ToString(EColor(EColor::Red ))); - EXPECT_EQ("Green", ToString(EColor::Green)); - EXPECT_EQ("Blue", ToString(EColor(EColor::Blue ))); - EXPECT_EQ("Black", ToString(EColor::Black)); - EXPECT_EQ("White", ToString(EColor::White)); -} - -TEST(TEnumTest, FromString) -{ - EXPECT_EQ(EColor::Red , TEnumTraits<EColor>::FromString("Red" )); - EXPECT_EQ(EColor::Green, TEnumTraits<EColor>::FromString("Green")); - EXPECT_EQ(EColor::Blue , TEnumTraits<EColor>::FromString("Blue" )); - EXPECT_EQ(EColor::Black, TEnumTraits<EColor>::FromString("Black")); - EXPECT_EQ(EColor::White, TEnumTraits<EColor>::FromString("White")); - - EXPECT_THROW(TEnumTraits<EColor>::FromString("Pink"), std::exception); - - EColor color; - bool returnValue; - - returnValue = TEnumTraits<EColor>::FindValueByLiteral("Red", &color); - EXPECT_EQ(EColor::Red, color); - EXPECT_TRUE(returnValue); - - returnValue = TEnumTraits<EColor>::FindValueByLiteral("Pink", &color); - EXPECT_EQ(EColor::Red, color); - EXPECT_FALSE(returnValue); -} - -TEST(TEnumTest, Ordering) -{ - ESimple a(ESimple::X); - ESimple b(ESimple::Y); - ESimple c(ESimple::Y); - ESimple d(ESimple::Z); - - EXPECT_FALSE(a < a); EXPECT_FALSE(a > a); - EXPECT_TRUE (a < b); EXPECT_TRUE (b > a); - EXPECT_TRUE (a < c); EXPECT_TRUE (c > a); - EXPECT_TRUE (a < d); EXPECT_TRUE (d > a); - - EXPECT_FALSE(b < a); EXPECT_FALSE(a > b); - EXPECT_FALSE(b < b); EXPECT_FALSE(b > b); - EXPECT_FALSE(b < c); EXPECT_FALSE(c > b); - EXPECT_TRUE (b < d); EXPECT_TRUE (d > b); - - EXPECT_FALSE(c < a); EXPECT_FALSE(a > c); - EXPECT_FALSE(c < b); EXPECT_FALSE(b > c); - EXPECT_FALSE(c < c); EXPECT_FALSE(c > c); - EXPECT_TRUE (c < d); EXPECT_TRUE (d > c); - - EXPECT_FALSE(d < a); EXPECT_FALSE(a > d); - EXPECT_FALSE(d < b); EXPECT_FALSE(b > d); - EXPECT_FALSE(d < c); EXPECT_FALSE(c > d); - EXPECT_FALSE(d < d); EXPECT_FALSE(d > d); - - EXPECT_TRUE (a <= b); - EXPECT_TRUE (b <= c); - EXPECT_TRUE (c <= d); - - EXPECT_TRUE (a == a); - EXPECT_FALSE(a == b); - EXPECT_TRUE (b == c); - EXPECT_FALSE(c == d); - EXPECT_FALSE(d == a); - - EXPECT_FALSE(a != a); - EXPECT_TRUE (a != b); - EXPECT_FALSE(b != c); - EXPECT_TRUE (c != d); - EXPECT_TRUE (d != a); -} - -TEST(TEnumTest, OrderingWithDomainValues) -{ - EColor color(EColor::Black); - - EXPECT_LT(EColor::Red, color); - EXPECT_LT(color, EColor::White); - - EXPECT_GT(color, EColor::Red); - EXPECT_GT(EColor::White, color); - - EXPECT_LE(EColor::Red, color); - EXPECT_LE(color, EColor::White); - - EXPECT_GE(EColor::White, color); - EXPECT_GE(color, EColor::Red); - - EXPECT_EQ(color, EColor::Black); - EXPECT_EQ(EColor::Black, color); - - EXPECT_NE(color, EColor::Blue); - EXPECT_NE(EColor::Blue, color); -} - -TEST(TEnumTest, DomainSize) -{ - EXPECT_EQ(3, TEnumTraits<ESimple>::DomainSize); - EXPECT_EQ(5, TEnumTraits<EColor>::DomainSize); -} - -TEST(TEnumTest, DomainValues) -{ - std::vector<ESimple> simpleValues; - simpleValues.push_back(ESimple::X); - simpleValues.push_back(ESimple::Y); - simpleValues.push_back(ESimple::Z); - EXPECT_EQ(simpleValues, ToVector(TEnumTraits<ESimple>::GetDomainValues())); - - std::vector<EColor> colorValues; - colorValues.push_back(EColor::Red); - colorValues.push_back(EColor::Green); - colorValues.push_back(EColor::Blue); - colorValues.push_back(EColor::Black); - colorValues.push_back(EColor::White); - EXPECT_EQ(colorValues, ToVector(TEnumTraits<EColor>::GetDomainValues())); -} - -TEST(TEnumTest, Decompose1) -{ - auto f = EFlag(0); - std::vector<EFlag> ff { }; - EXPECT_EQ(TEnumTraits<EFlag>::Decompose(f), ff); -} - -TEST(TEnumTest, Decompose2) -{ - auto f = EFlag::_1; - std::vector<EFlag> ff {EFlag::_1}; - EXPECT_EQ(TEnumTraits<EFlag>::Decompose(f), ff); -} - -TEST(TEnumTest, Decompose3) -{ - auto f = EFlag(EFlag::_1|EFlag::_2); - std::vector<EFlag> ff{EFlag::_1, EFlag::_2}; - EXPECT_EQ(TEnumTraits<EFlag>::Decompose(f), ff); -} - -TEST(TEnumTest, Decompose4) -{ - auto f = EFlag(EFlag::_2|EFlag::_4); - std::vector<EFlag> ff{EFlag::_2, EFlag::_4}; - EXPECT_EQ(TEnumTraits<EFlag>::Decompose(f), ff); -} - -TEST(TEnumTest, MultipleNames) -{ - EXPECT_EQ(EMultipleNames::A1, TEnumTraits<EMultipleNames>::FromString("A1")); - EXPECT_EQ(EMultipleNames::A1, TEnumTraits<EMultipleNames>::FromString("A2")); - EXPECT_EQ(EMultipleNames::B, TEnumTraits<EMultipleNames>::FromString("B")); - EXPECT_EQ(EMultipleNames::C, TEnumTraits<EMultipleNames>::FromString("C")); - EXPECT_EQ(EMultipleNames::D1, TEnumTraits<EMultipleNames>::FromString("D1")); - EXPECT_EQ(EMultipleNames::D1, TEnumTraits<EMultipleNames>::FromString("D2")); - - EXPECT_EQ("A1", ToString(EMultipleNames::A1)); - EXPECT_EQ("A1", ToString(EMultipleNames::A2)); - EXPECT_EQ("B", ToString(EMultipleNames::B)); - EXPECT_EQ("C", ToString(EMultipleNames::C)); - EXPECT_EQ("D1", ToString(EMultipleNames::D1)); - EXPECT_EQ("D1", ToString(EMultipleNames::D2)); -} - -//////////////////////////////////////////////////////////////////////////////// - -} // namespace -} // namespace NYT - + +namespace NYT { +namespace { + +//////////////////////////////////////////////////////////////////////////////// + +DEFINE_ENUM(ESimple, + (X) + (Y) + (Z) +); + +DEFINE_ENUM(EColor, + ((Red) (10)) + ((Green)(20)) + ((Blue) (30)) + (Black) + (White) +); + +DEFINE_BIT_ENUM(EFlag, + ((_1)(0x0001)) + ((_2)(0x0002)) + ((_3)(0x0004)) + ((_4)(0x0008)) +); + +DEFINE_AMBIGUOUS_ENUM_WITH_UNDERLYING_TYPE(EMultipleNames, int, + (A1) + ((A2)(0)) + (B) + (C) + ((D1)(100)) + ((D2)(100)) +); + +//////////////////////////////////////////////////////////////////////////////// + +template <class T, size_t N> +std::vector<T> ToVector(std::array<T, N> array) +{ + return std::vector<T>(array.begin(), array.end()); +} + +TEST(TEnumTest, Domain) +{ + EXPECT_EQ(3, TEnumTraits<ESimple>::DomainSize); + std::vector<ESimple> v { + ESimple::X, + ESimple::Y, + ESimple::Z + }; + EXPECT_EQ(v, ToVector(TEnumTraits<ESimple>::GetDomainValues())); + EXPECT_EQ(ESimple::X, TEnumTraits<ESimple>::GetMinValue()); + EXPECT_EQ(ESimple::Z, TEnumTraits<ESimple>::GetMaxValue()); +} + +TEST(TEnumTest, Basic) +{ + EXPECT_EQ(0, static_cast<int>(ESimple::X)); + EXPECT_EQ(1, static_cast<int>(ESimple::Y)); + EXPECT_EQ(2, static_cast<int>(ESimple::Z)); + + EXPECT_EQ(0, static_cast<int>(EColor( ))); + EXPECT_EQ(5, static_cast<int>(EColor(5))); + + EXPECT_EQ(10, static_cast<int>(EColor::Red )); + EXPECT_EQ(20, static_cast<int>(EColor::Green)); + EXPECT_EQ(30, static_cast<int>(EColor::Blue )); + EXPECT_EQ(31, static_cast<int>(EColor::Black)); + EXPECT_EQ(32, static_cast<int>(EColor::White)); +} + +TEST(TEnumTest, ToString) +{ + EXPECT_EQ("EColor(0)", ToString(EColor( ))); + EXPECT_EQ("EColor(5)", ToString(EColor(5))); + + EXPECT_EQ("Red", ToString(EColor(EColor::Red ))); + EXPECT_EQ("Green", ToString(EColor::Green)); + EXPECT_EQ("Blue", ToString(EColor(EColor::Blue ))); + EXPECT_EQ("Black", ToString(EColor::Black)); + EXPECT_EQ("White", ToString(EColor::White)); +} + +TEST(TEnumTest, FromString) +{ + EXPECT_EQ(EColor::Red , TEnumTraits<EColor>::FromString("Red" )); + EXPECT_EQ(EColor::Green, TEnumTraits<EColor>::FromString("Green")); + EXPECT_EQ(EColor::Blue , TEnumTraits<EColor>::FromString("Blue" )); + EXPECT_EQ(EColor::Black, TEnumTraits<EColor>::FromString("Black")); + EXPECT_EQ(EColor::White, TEnumTraits<EColor>::FromString("White")); + + EXPECT_THROW(TEnumTraits<EColor>::FromString("Pink"), std::exception); + + EColor color; + bool returnValue; + + returnValue = TEnumTraits<EColor>::FindValueByLiteral("Red", &color); + EXPECT_EQ(EColor::Red, color); + EXPECT_TRUE(returnValue); + + returnValue = TEnumTraits<EColor>::FindValueByLiteral("Pink", &color); + EXPECT_EQ(EColor::Red, color); + EXPECT_FALSE(returnValue); +} + +TEST(TEnumTest, Ordering) +{ + ESimple a(ESimple::X); + ESimple b(ESimple::Y); + ESimple c(ESimple::Y); + ESimple d(ESimple::Z); + + EXPECT_FALSE(a < a); EXPECT_FALSE(a > a); + EXPECT_TRUE (a < b); EXPECT_TRUE (b > a); + EXPECT_TRUE (a < c); EXPECT_TRUE (c > a); + EXPECT_TRUE (a < d); EXPECT_TRUE (d > a); + + EXPECT_FALSE(b < a); EXPECT_FALSE(a > b); + EXPECT_FALSE(b < b); EXPECT_FALSE(b > b); + EXPECT_FALSE(b < c); EXPECT_FALSE(c > b); + EXPECT_TRUE (b < d); EXPECT_TRUE (d > b); + + EXPECT_FALSE(c < a); EXPECT_FALSE(a > c); + EXPECT_FALSE(c < b); EXPECT_FALSE(b > c); + EXPECT_FALSE(c < c); EXPECT_FALSE(c > c); + EXPECT_TRUE (c < d); EXPECT_TRUE (d > c); + + EXPECT_FALSE(d < a); EXPECT_FALSE(a > d); + EXPECT_FALSE(d < b); EXPECT_FALSE(b > d); + EXPECT_FALSE(d < c); EXPECT_FALSE(c > d); + EXPECT_FALSE(d < d); EXPECT_FALSE(d > d); + + EXPECT_TRUE (a <= b); + EXPECT_TRUE (b <= c); + EXPECT_TRUE (c <= d); + + EXPECT_TRUE (a == a); + EXPECT_FALSE(a == b); + EXPECT_TRUE (b == c); + EXPECT_FALSE(c == d); + EXPECT_FALSE(d == a); + + EXPECT_FALSE(a != a); + EXPECT_TRUE (a != b); + EXPECT_FALSE(b != c); + EXPECT_TRUE (c != d); + EXPECT_TRUE (d != a); +} + +TEST(TEnumTest, OrderingWithDomainValues) +{ + EColor color(EColor::Black); + + EXPECT_LT(EColor::Red, color); + EXPECT_LT(color, EColor::White); + + EXPECT_GT(color, EColor::Red); + EXPECT_GT(EColor::White, color); + + EXPECT_LE(EColor::Red, color); + EXPECT_LE(color, EColor::White); + + EXPECT_GE(EColor::White, color); + EXPECT_GE(color, EColor::Red); + + EXPECT_EQ(color, EColor::Black); + EXPECT_EQ(EColor::Black, color); + + EXPECT_NE(color, EColor::Blue); + EXPECT_NE(EColor::Blue, color); +} + +TEST(TEnumTest, DomainSize) +{ + EXPECT_EQ(3, TEnumTraits<ESimple>::DomainSize); + EXPECT_EQ(5, TEnumTraits<EColor>::DomainSize); +} + +TEST(TEnumTest, DomainValues) +{ + std::vector<ESimple> simpleValues; + simpleValues.push_back(ESimple::X); + simpleValues.push_back(ESimple::Y); + simpleValues.push_back(ESimple::Z); + EXPECT_EQ(simpleValues, ToVector(TEnumTraits<ESimple>::GetDomainValues())); + + std::vector<EColor> colorValues; + colorValues.push_back(EColor::Red); + colorValues.push_back(EColor::Green); + colorValues.push_back(EColor::Blue); + colorValues.push_back(EColor::Black); + colorValues.push_back(EColor::White); + EXPECT_EQ(colorValues, ToVector(TEnumTraits<EColor>::GetDomainValues())); +} + +TEST(TEnumTest, Decompose1) +{ + auto f = EFlag(0); + std::vector<EFlag> ff { }; + EXPECT_EQ(TEnumTraits<EFlag>::Decompose(f), ff); +} + +TEST(TEnumTest, Decompose2) +{ + auto f = EFlag::_1; + std::vector<EFlag> ff {EFlag::_1}; + EXPECT_EQ(TEnumTraits<EFlag>::Decompose(f), ff); +} + +TEST(TEnumTest, Decompose3) +{ + auto f = EFlag(EFlag::_1|EFlag::_2); + std::vector<EFlag> ff{EFlag::_1, EFlag::_2}; + EXPECT_EQ(TEnumTraits<EFlag>::Decompose(f), ff); +} + +TEST(TEnumTest, Decompose4) +{ + auto f = EFlag(EFlag::_2|EFlag::_4); + std::vector<EFlag> ff{EFlag::_2, EFlag::_4}; + EXPECT_EQ(TEnumTraits<EFlag>::Decompose(f), ff); +} + +TEST(TEnumTest, MultipleNames) +{ + EXPECT_EQ(EMultipleNames::A1, TEnumTraits<EMultipleNames>::FromString("A1")); + EXPECT_EQ(EMultipleNames::A1, TEnumTraits<EMultipleNames>::FromString("A2")); + EXPECT_EQ(EMultipleNames::B, TEnumTraits<EMultipleNames>::FromString("B")); + EXPECT_EQ(EMultipleNames::C, TEnumTraits<EMultipleNames>::FromString("C")); + EXPECT_EQ(EMultipleNames::D1, TEnumTraits<EMultipleNames>::FromString("D1")); + EXPECT_EQ(EMultipleNames::D1, TEnumTraits<EMultipleNames>::FromString("D2")); + + EXPECT_EQ("A1", ToString(EMultipleNames::A1)); + EXPECT_EQ("A1", ToString(EMultipleNames::A2)); + EXPECT_EQ("B", ToString(EMultipleNames::B)); + EXPECT_EQ("C", ToString(EMultipleNames::C)); + EXPECT_EQ("D1", ToString(EMultipleNames::D1)); + EXPECT_EQ("D1", ToString(EMultipleNames::D2)); +} + +//////////////////////////////////////////////////////////////////////////////// + +} // namespace +} // namespace NYT + diff --git a/library/cpp/yt/misc/unittests/guid_ut.cpp b/library/cpp/yt/misc/unittests/guid_ut.cpp index ce9ee52109..bbbd6037aa 100644 --- a/library/cpp/yt/misc/unittests/guid_ut.cpp +++ b/library/cpp/yt/misc/unittests/guid_ut.cpp @@ -1,20 +1,20 @@ #include <library/cpp/testing/gtest/gtest.h> - + #include <library/cpp/yt/misc/guid.h> - -namespace NYT { -namespace { - -//////////////////////////////////////////////////////////////////////////////// - -TEST(TGuidTest, RandomGuids) -{ - auto guid = TGuid::Create(); - auto otherGuid = TGuid::Create(); - EXPECT_FALSE(guid == otherGuid); -} - -//////////////////////////////////////////////////////////////////////////////// - -} // namespace -} // namespace NYT + +namespace NYT { +namespace { + +//////////////////////////////////////////////////////////////////////////////// + +TEST(TGuidTest, RandomGuids) +{ + auto guid = TGuid::Create(); + auto otherGuid = TGuid::Create(); + EXPECT_FALSE(guid == otherGuid); +} + +//////////////////////////////////////////////////////////////////////////////// + +} // namespace +} // namespace NYT diff --git a/library/cpp/yt/misc/unittests/preprocessor_ut.cpp b/library/cpp/yt/misc/unittests/preprocessor_ut.cpp index 397e2a6a61..b8ec44c00b 100644 --- a/library/cpp/yt/misc/unittests/preprocessor_ut.cpp +++ b/library/cpp/yt/misc/unittests/preprocessor_ut.cpp @@ -1,102 +1,102 @@ -#include <library/cpp/testing/gtest/gtest.h> - -#include <library/cpp/yt/misc/preprocessor.h> - -namespace NYT { -namespace { - -//////////////////////////////////////////////////////////////////////////////// - -TEST(TPreprocessorTest, Concatenation) -{ - EXPECT_EQ(12, PP_CONCAT(1, 2)); - EXPECT_STREQ("FooBar", PP_STRINGIZE(PP_CONCAT(Foo, Bar))); -} - -TEST(TPreprocessorTest, Stringize) -{ - EXPECT_STREQ(PP_STRINGIZE(123456), "123456"); - EXPECT_STREQ(PP_STRINGIZE(FooBar), "FooBar"); - EXPECT_STREQ(PP_STRINGIZE(T::XYZ), "T::XYZ"); -} - -TEST(TPreprocessorTest, Count) -{ - EXPECT_EQ(0, PP_COUNT()); - EXPECT_EQ(1, PP_COUNT((0))); - EXPECT_EQ(2, PP_COUNT((0)(0))); - EXPECT_EQ(3, PP_COUNT((0)(0)(0))); - EXPECT_EQ(4, PP_COUNT((0)(0)(0)(0))); - EXPECT_EQ(5, PP_COUNT((0)(0)(0)(0)(0))); -} - -TEST(TPreprocessorTest, Kill) -{ - EXPECT_STREQ("PP_NIL (0)", PP_STRINGIZE(PP_NIL PP_KILL((0), 0))); - EXPECT_STREQ("PP_NIL", PP_STRINGIZE(PP_NIL PP_KILL((0), 1))); - EXPECT_STREQ("PP_NIL (0)(1)(2)", PP_STRINGIZE(PP_NIL PP_KILL((0)(1)(2), 0))); - EXPECT_STREQ("PP_NIL (1)(2)", PP_STRINGIZE(PP_NIL PP_KILL((0)(1)(2), 1))); - EXPECT_STREQ("PP_NIL (2)", PP_STRINGIZE(PP_NIL PP_KILL((0)(1)(2), 2))); - EXPECT_STREQ("PP_NIL", PP_STRINGIZE(PP_NIL PP_KILL((0)(1)(2), 3))); -} - -TEST(TPreprocessorTest, Head) -{ - EXPECT_STREQ("0", PP_STRINGIZE(PP_HEAD((0)))); - EXPECT_STREQ("0", PP_STRINGIZE(PP_HEAD((0)(1)))); - EXPECT_STREQ("0", PP_STRINGIZE(PP_HEAD((0)(1)(2)))); -} - -TEST(TPreprocessorTest, Tail) -{ - EXPECT_STREQ("PP_NIL", PP_STRINGIZE(PP_NIL PP_TAIL((0)))); - EXPECT_STREQ("PP_NIL (1)", PP_STRINGIZE(PP_NIL PP_TAIL((0)(1)))); - EXPECT_STREQ("PP_NIL (1)(2)", PP_STRINGIZE(PP_NIL PP_TAIL((0)(1)(2)))); -} - -TEST(TPreprocessorTest, ForEach) -{ - EXPECT_STREQ( - "\"Foo\" \"Bar\" \"Spam\" \"Ham\"", - PP_STRINGIZE(PP_FOR_EACH(PP_STRINGIZE, (Foo)(Bar)(Spam)(Ham))) - ); -#define my_functor(x) +x+ - EXPECT_STREQ( - "+1+ +2+ +3+", - PP_STRINGIZE(PP_FOR_EACH(my_functor, (1)(2)(3))) - ); -#undef my_functor -} - -TEST(TPreprocessorTest, MakeSingleton) -{ - EXPECT_EQ(1, PP_ELEMENT((1), 0)); - EXPECT_EQ(1, PP_ELEMENT((1)(2), 0)); - EXPECT_EQ(2, PP_ELEMENT((1)(2), 1)); - EXPECT_EQ(1, PP_ELEMENT((1)(2)(3), 0)); - EXPECT_EQ(2, PP_ELEMENT((1)(2)(3), 1)); - EXPECT_EQ(3, PP_ELEMENT((1)(2)(3), 2)); - EXPECT_EQ(1, PP_ELEMENT((1)(2)(3)(4), 0)); - EXPECT_EQ(2, PP_ELEMENT((1)(2)(3)(4), 1)); - EXPECT_EQ(3, PP_ELEMENT((1)(2)(3)(4), 2)); - EXPECT_EQ(4, PP_ELEMENT((1)(2)(3)(4), 3)); -} - -TEST(TPreprocessorTest, Conditional) -{ - EXPECT_EQ(1, PP_IF(PP_TRUE, 1, 2)); - EXPECT_EQ(2, PP_IF(PP_FALSE, 1, 2)); -} - -TEST(TPreprocessorTest, IsSequence) -{ - EXPECT_STREQ("PP_FALSE", PP_STRINGIZE(PP_IS_SEQUENCE( 0 ))); - EXPECT_STREQ("PP_TRUE", PP_STRINGIZE(PP_IS_SEQUENCE((0) ))); - EXPECT_STREQ("PP_TRUE", PP_STRINGIZE(PP_IS_SEQUENCE((0)(0)))); - EXPECT_STREQ("PP_FALSE", PP_STRINGIZE(PP_IS_SEQUENCE(PP_NIL))); -} - -//////////////////////////////////////////////////////////////////////////////// - -} // namespace -} // namespace NYT +#include <library/cpp/testing/gtest/gtest.h> + +#include <library/cpp/yt/misc/preprocessor.h> + +namespace NYT { +namespace { + +//////////////////////////////////////////////////////////////////////////////// + +TEST(TPreprocessorTest, Concatenation) +{ + EXPECT_EQ(12, PP_CONCAT(1, 2)); + EXPECT_STREQ("FooBar", PP_STRINGIZE(PP_CONCAT(Foo, Bar))); +} + +TEST(TPreprocessorTest, Stringize) +{ + EXPECT_STREQ(PP_STRINGIZE(123456), "123456"); + EXPECT_STREQ(PP_STRINGIZE(FooBar), "FooBar"); + EXPECT_STREQ(PP_STRINGIZE(T::XYZ), "T::XYZ"); +} + +TEST(TPreprocessorTest, Count) +{ + EXPECT_EQ(0, PP_COUNT()); + EXPECT_EQ(1, PP_COUNT((0))); + EXPECT_EQ(2, PP_COUNT((0)(0))); + EXPECT_EQ(3, PP_COUNT((0)(0)(0))); + EXPECT_EQ(4, PP_COUNT((0)(0)(0)(0))); + EXPECT_EQ(5, PP_COUNT((0)(0)(0)(0)(0))); +} + +TEST(TPreprocessorTest, Kill) +{ + EXPECT_STREQ("PP_NIL (0)", PP_STRINGIZE(PP_NIL PP_KILL((0), 0))); + EXPECT_STREQ("PP_NIL", PP_STRINGIZE(PP_NIL PP_KILL((0), 1))); + EXPECT_STREQ("PP_NIL (0)(1)(2)", PP_STRINGIZE(PP_NIL PP_KILL((0)(1)(2), 0))); + EXPECT_STREQ("PP_NIL (1)(2)", PP_STRINGIZE(PP_NIL PP_KILL((0)(1)(2), 1))); + EXPECT_STREQ("PP_NIL (2)", PP_STRINGIZE(PP_NIL PP_KILL((0)(1)(2), 2))); + EXPECT_STREQ("PP_NIL", PP_STRINGIZE(PP_NIL PP_KILL((0)(1)(2), 3))); +} + +TEST(TPreprocessorTest, Head) +{ + EXPECT_STREQ("0", PP_STRINGIZE(PP_HEAD((0)))); + EXPECT_STREQ("0", PP_STRINGIZE(PP_HEAD((0)(1)))); + EXPECT_STREQ("0", PP_STRINGIZE(PP_HEAD((0)(1)(2)))); +} + +TEST(TPreprocessorTest, Tail) +{ + EXPECT_STREQ("PP_NIL", PP_STRINGIZE(PP_NIL PP_TAIL((0)))); + EXPECT_STREQ("PP_NIL (1)", PP_STRINGIZE(PP_NIL PP_TAIL((0)(1)))); + EXPECT_STREQ("PP_NIL (1)(2)", PP_STRINGIZE(PP_NIL PP_TAIL((0)(1)(2)))); +} + +TEST(TPreprocessorTest, ForEach) +{ + EXPECT_STREQ( + "\"Foo\" \"Bar\" \"Spam\" \"Ham\"", + PP_STRINGIZE(PP_FOR_EACH(PP_STRINGIZE, (Foo)(Bar)(Spam)(Ham))) + ); +#define my_functor(x) +x+ + EXPECT_STREQ( + "+1+ +2+ +3+", + PP_STRINGIZE(PP_FOR_EACH(my_functor, (1)(2)(3))) + ); +#undef my_functor +} + +TEST(TPreprocessorTest, MakeSingleton) +{ + EXPECT_EQ(1, PP_ELEMENT((1), 0)); + EXPECT_EQ(1, PP_ELEMENT((1)(2), 0)); + EXPECT_EQ(2, PP_ELEMENT((1)(2), 1)); + EXPECT_EQ(1, PP_ELEMENT((1)(2)(3), 0)); + EXPECT_EQ(2, PP_ELEMENT((1)(2)(3), 1)); + EXPECT_EQ(3, PP_ELEMENT((1)(2)(3), 2)); + EXPECT_EQ(1, PP_ELEMENT((1)(2)(3)(4), 0)); + EXPECT_EQ(2, PP_ELEMENT((1)(2)(3)(4), 1)); + EXPECT_EQ(3, PP_ELEMENT((1)(2)(3)(4), 2)); + EXPECT_EQ(4, PP_ELEMENT((1)(2)(3)(4), 3)); +} + +TEST(TPreprocessorTest, Conditional) +{ + EXPECT_EQ(1, PP_IF(PP_TRUE, 1, 2)); + EXPECT_EQ(2, PP_IF(PP_FALSE, 1, 2)); +} + +TEST(TPreprocessorTest, IsSequence) +{ + EXPECT_STREQ("PP_FALSE", PP_STRINGIZE(PP_IS_SEQUENCE( 0 ))); + EXPECT_STREQ("PP_TRUE", PP_STRINGIZE(PP_IS_SEQUENCE((0) ))); + EXPECT_STREQ("PP_TRUE", PP_STRINGIZE(PP_IS_SEQUENCE((0)(0)))); + EXPECT_STREQ("PP_FALSE", PP_STRINGIZE(PP_IS_SEQUENCE(PP_NIL))); +} + +//////////////////////////////////////////////////////////////////////////////// + +} // namespace +} // namespace NYT diff --git a/library/cpp/yt/misc/unittests/ya.make b/library/cpp/yt/misc/unittests/ya.make index 690082ca59..539c7c1a4e 100644 --- a/library/cpp/yt/misc/unittests/ya.make +++ b/library/cpp/yt/misc/unittests/ya.make @@ -1,15 +1,15 @@ -GTEST(unittester-library-misc) - -OWNER(g:yt) - -SRCS( +GTEST(unittester-library-misc) + +OWNER(g:yt) + +SRCS( enum_ut.cpp guid_ut.cpp - preprocessor_ut.cpp -) - -PEERDIR( - library/cpp/yt/misc -) - -END() + preprocessor_ut.cpp +) + +PEERDIR( + library/cpp/yt/misc +) + +END() |