diff options
author | Devtools Arcadia <arcadia-devtools@yandex-team.ru> | 2022-02-07 18:08:42 +0300 |
---|---|---|
committer | Devtools Arcadia <arcadia-devtools@mous.vla.yp-c.yandex.net> | 2022-02-07 18:08:42 +0300 |
commit | 1110808a9d39d4b808aef724c861a2e1a38d2a69 (patch) | |
tree | e26c9fed0de5d9873cce7e00bc214573dc2195b7 /library/cpp/yson_pull/ut/cescape_ut.cpp | |
download | ydb-1110808a9d39d4b808aef724c861a2e1a38d2a69.tar.gz |
intermediate changes
ref:cde9a383711a11544ce7e107a78147fb96cc4029
Diffstat (limited to 'library/cpp/yson_pull/ut/cescape_ut.cpp')
-rw-r--r-- | library/cpp/yson_pull/ut/cescape_ut.cpp | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/library/cpp/yson_pull/ut/cescape_ut.cpp b/library/cpp/yson_pull/ut/cescape_ut.cpp new file mode 100644 index 0000000000..6628ba1d15 --- /dev/null +++ b/library/cpp/yson_pull/ut/cescape_ut.cpp @@ -0,0 +1,71 @@ +#include <library/cpp/yson_pull/detail/cescape.h> + +#include <library/cpp/testing/unittest/registar.h> + +using namespace NYsonPull::NDetail; + +namespace { + void test_roundtrip(const TVector<ui8>& str) { + TStringBuf str_buf( + reinterpret_cast<const char*>(str.data()), + str.size()); + auto tmp = NCEscape::encode(str_buf); + auto dest = NCEscape::decode(tmp); + UNIT_ASSERT_VALUES_EQUAL_C( + str_buf, TStringBuf(dest), + "A[" << str.size() << "]: " << str_buf << '\n' + << "B[" << tmp.size() << "]: " << tmp << '\n' + << "C[" << dest.size() << "]: " << dest); + } + + template <size_t N> + void test_exhaustive(TVector<ui8>& str) { + for (int i = 0; i < 256; ++i) { + str[str.size() - N] = static_cast<char>(i); + test_exhaustive<N - 1>(str); + } + } + + template <> + void test_exhaustive<0>(TVector<ui8>& str) { + test_roundtrip(str); + } + + template <size_t N> + void test_exhaustive() { + TVector<ui8> str(N, ' '); + test_exhaustive<N>(str); + } + +} // anonymous namespace + +Y_UNIT_TEST_SUITE(CEscape) { + Y_UNIT_TEST(ExhaustiveOneChar) { + test_exhaustive<1>(); + } + + Y_UNIT_TEST(ExhaustiveTwoChars) { + test_exhaustive<2>(); + } + + Y_UNIT_TEST(ExhaustiveThreeChars) { + test_exhaustive<3>(); + } + + Y_UNIT_TEST(SpecialEscapeEncode) { + //UNIT_ASSERT_VALUES_EQUAL(R"(\b)", NCEscape::encode("\b")); + //UNIT_ASSERT_VALUES_EQUAL(R"(\f)", NCEscape::encode("\f")); + UNIT_ASSERT_VALUES_EQUAL(R"(\n)", NCEscape::encode("\n")); + UNIT_ASSERT_VALUES_EQUAL(R"(\r)", NCEscape::encode("\r")); + UNIT_ASSERT_VALUES_EQUAL(R"(\t)", NCEscape::encode("\t")); + } + + Y_UNIT_TEST(SpecialEscapeDecode) { + UNIT_ASSERT_VALUES_EQUAL("\b", NCEscape::decode(R"(\b)")); + UNIT_ASSERT_VALUES_EQUAL("\f", NCEscape::decode(R"(\f)")); + UNIT_ASSERT_VALUES_EQUAL("\n", NCEscape::decode(R"(\n)")); + UNIT_ASSERT_VALUES_EQUAL("\r", NCEscape::decode(R"(\r)")); + UNIT_ASSERT_VALUES_EQUAL("\t", NCEscape::decode(R"(\t)")); + } + +} // Y_UNIT_TEST_SUITE(CEscape) |