diff options
| author | levlam <levlam@telegram.org> | 2023-07-26 14:21:27 +0300 |
|---|---|---|
| committer | levlam <levlam@telegram.org> | 2023-07-26 14:21:27 +0300 |
| commit | 4c2859b85c8950810890a7b380dcc2ab30772238 (patch) | |
| tree | 3b416132b1e50d4d8b9d7952e5ae9e452541204c /tdutils/test | |
| parent | 5bc2634d124077e3707057263a42d99c7aaae23c (diff) | |
Add test for zero_encode.
Diffstat (limited to 'tdutils/test')
| -rw-r--r-- | tdutils/test/misc.cpp | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/tdutils/test/misc.cpp b/tdutils/test/misc.cpp index e1612a992..140223373 100644 --- a/tdutils/test/misc.cpp +++ b/tdutils/test/misc.cpp @@ -265,6 +265,45 @@ TEST(Misc, base64) { ASSERT_TRUE(td::base64url_encode("ab><cd") == "YWI-PGNk"); } +static void test_zero_encode(td::Slice str, td::Slice expected_zero = td::Slice(), + td::Slice expected_zero_one = td::Slice()) { + auto encoded = td::zero_encode(str); + if (!expected_zero.empty()) { + ASSERT_EQ(encoded, expected_zero); + } + ASSERT_EQ(td::zero_decode(encoded), str); + + encoded = td::zero_one_encode(str); + if (!expected_zero_one.empty()) { + ASSERT_EQ(encoded, expected_zero_one); + } + ASSERT_EQ(td::zero_one_decode(encoded), str); +} + +TEST(Misc, zero_encode) { + td::string str; + for (unsigned char i = 1; i < 255; i++) { + str += static_cast<char>(i); + } + test_zero_encode(str, str, str); + + test_zero_encode(""); + test_zero_encode(td::Slice("\0"), td::Slice("\0\1"), td::Slice("\0\1")); + test_zero_encode(td::Slice("\0\xff\0\xff\0\xff\0\xff\0\xff\0\xff\0\xff"), + td::Slice("\0\1\xff\0\1\xff\0\1\xff\0\1\xff\0\1\xff\0\1\xff\0\1\xff"), + td::Slice("\0\1\xff\1\0\1\xff\1\0\1\xff\1\0\1\xff\1\0\1\xff\1\0\1\xff\1\0\1\xff\1")); + test_zero_encode(td::Slice("\0\0\xff\xff\0\0\xff\xff\0\0\xff\xff\0\0\xff\xff\0\0\xff\xff\0\0\xff\xff"), + td::Slice("\0\2\xff\xff\0\2\xff\xff\0\2\xff\xff\0\2\xff\xff\0\2\xff\xff\0\2\xff\xff"), + td::Slice("\0\2\xff\2\0\2\xff\2\0\2\xff\2\0\2\xff\2\0\2\xff\2\0\2\xff\2")); + test_zero_encode(td::Slice("\0\0\0\0\0\xff\xff\xff\xff\xff"), td::Slice("\0\5\xff\xff\xff\xff\xff"), + td::Slice("\0\5\xff\5")); + test_zero_encode(td::Slice( + "\0\0\0\0\0\xff\xff\xff\xff\xff\0\0\0\0\0\xff\xff\xff\xff\xff\0\0\0\0\0\xff\xff\xff\xff\xff\0\0\0\0\0\xff\xff\xff" + "\xff\xff\0\0\0\0\0\xff\xff\xff\xff\xff\0\0\0\0\0\xff\xff\xff\xff\xff\0\0\0\0\0\xff\xff\xff\xff\xff")); + test_zero_encode(td::string(1000, '\0')); + test_zero_encode(str + td::string(1000, '\0') + str + td::string(1000, '\xff') + str); +} + template <class T> static void test_remove_if(td::vector<int> v, const T &func, const td::vector<int> &expected) { td::remove_if(v, func); |
