aboutsummaryrefslogtreecommitdiffstats
path: root/library/cpp/string_utils/base32/ut/base32_ut.cpp
diff options
context:
space:
mode:
authordaredevil2002 <daredevil2002@yandex-team.com>2023-08-22 21:19:48 +0300
committerdaredevil2002 <daredevil2002@yandex-team.com>2023-08-22 22:14:27 +0300
commit07ad0583b3f39038a4f7fe2ce3d4b8109cd1bb0e (patch)
treeb30e2ff9935ed6ca3e2425824dda8d093dd1d3fc /library/cpp/string_utils/base32/ut/base32_ut.cpp
parent16b49a7ff6a0740a19bab5650934824d3d7030f4 (diff)
downloadydb-07ad0583b3f39038a4f7fe2ce3d4b8109cd1bb0e.tar.gz
[yql/udfs/string] Add base32
Добавил в String UDF поддержку base32
Diffstat (limited to 'library/cpp/string_utils/base32/ut/base32_ut.cpp')
-rw-r--r--library/cpp/string_utils/base32/ut/base32_ut.cpp79
1 files changed, 79 insertions, 0 deletions
diff --git a/library/cpp/string_utils/base32/ut/base32_ut.cpp b/library/cpp/string_utils/base32/ut/base32_ut.cpp
new file mode 100644
index 0000000000..fdd2be41b1
--- /dev/null
+++ b/library/cpp/string_utils/base32/ut/base32_ut.cpp
@@ -0,0 +1,79 @@
+#include <library/cpp/string_utils/base32/base32.h>
+
+#include <library/cpp/testing/gtest/gtest.h>
+
+#include <util/generic/yexception.h>
+
+#include <vector>
+
+namespace {
+
+ static const std::vector<std::string> TEST_DATA = {
+ {},
+ "\x00",
+ "\x01\x02",
+ "\x01\x02\x03",
+ "\x03\x02\x01",
+ "\x10\x20\x30\x40",
+ "\x10\x20\x30\x40\x50",
+ "\xFF\xFF\xFF",
+ "\xFF\xFE\xFD\xFC\xFB\xFA",
+ };
+
+} // namespace
+
+TEST(base32, encode)
+{
+ EXPECT_EQ(Base32Encode({}), "");
+ EXPECT_EQ(Base32Encode({"\x00\x40", 2}), "ABAA====");
+ EXPECT_EQ(Base32Encode("apple"), "MFYHA3DF");
+ EXPECT_EQ(Base32Encode("TestTest"), "KRSXG5CUMVZXI===");
+ EXPECT_EQ(Base32Encode("1234567890"), "GEZDGNBVGY3TQOJQ");
+}
+
+TEST(base32, decode_strict)
+{
+ EXPECT_EQ(Base32StrictDecode(""), "");
+ EXPECT_EQ(Base32StrictDecode("MFYHA3DF"), "apple");
+
+ EXPECT_EQ(Base32StrictDecode("KRSXG5CUMVZXI"), "TestTest");
+ EXPECT_EQ(Base32StrictDecode("KRSXG5CUMVZXI==="), "TestTest");
+ EXPECT_THROW(Base32StrictDecode("KRSXG5CUMVZXI=======A"), yexception);
+
+ EXPECT_EQ(Base32StrictDecode("AA======"), std::string(1, '\x00'));
+ EXPECT_THROW(Base32StrictDecode("AAA="), yexception);
+
+ EXPECT_EQ(Base32StrictDecode("AE======"), "\x01");
+ EXPECT_THROW(Base32StrictDecode("AB======"), yexception); // "\x00\x40"
+
+ EXPECT_THROW(Base32StrictDecode("invalid"), yexception);
+ EXPECT_THROW(Base32StrictDecode("\xFF\xFF"), yexception);
+ EXPECT_THROW(Base32StrictDecode(std::string_view{"A\0", 2}), yexception);
+}
+
+TEST(base32, decode)
+{
+ EXPECT_EQ(Base32Decode(""), "");
+ EXPECT_EQ(Base32Decode("MFYHA3DF"), "apple");
+
+ EXPECT_EQ(Base32Decode("KRSXG5CUMVZXI"), "TestTest");
+ EXPECT_EQ(Base32Decode("KRSXG5CUMVZXI==="), "TestTest");
+ EXPECT_NO_THROW(Base32Decode("KRSXG5CUMVZXI=======A"));
+
+ EXPECT_EQ(Base32Decode("AA======"), std::string(1, '\x00'));
+ EXPECT_NO_THROW(Base32Decode("AAA="));
+
+ EXPECT_EQ(Base32Decode("AE======"), "\x01");
+ EXPECT_NO_THROW(Base32Decode("AB======")); // "\x00\x40"
+
+ EXPECT_NO_THROW(Base32Decode("invalid"));
+ EXPECT_NO_THROW(Base32Decode("\xFF\xFF"));
+ EXPECT_NO_THROW(Base32Decode(std::string_view{"A\0", 2}));
+}
+
+TEST(base32, encode_decode)
+{
+ for (const auto& data : TEST_DATA) {
+ EXPECT_THAT(Base32StrictDecode(Base32Encode(data)), ::testing::ContainerEq(data));
+ }
+}