summaryrefslogtreecommitdiff
path: root/utf/tst/test_utf32.cc
diff options
context:
space:
mode:
authorJoel Klinghed <the_jk@spawned.biz>2023-06-13 10:07:16 +0200
committerJoel Klinghed <the_jk@spawned.biz>2023-06-13 10:07:16 +0200
commitfc4547b412e28164af1bf8981234c6af959ccc0b (patch)
tree061253e7a4f6abaca282223b36d10f0bed8cad23 /utf/tst/test_utf32.cc
WIP
Diffstat (limited to 'utf/tst/test_utf32.cc')
-rw-r--r--utf/tst/test_utf32.cc145
1 files changed, 145 insertions, 0 deletions
diff --git a/utf/tst/test_utf32.cc b/utf/tst/test_utf32.cc
new file mode 100644
index 0000000..796b4cd
--- /dev/null
+++ b/utf/tst/test_utf32.cc
@@ -0,0 +1,145 @@
+#include "utf32.hh"
+
+#include "utf_error.hh"
+
+#include <gtest/gtest.h>
+
+TEST(utf32be, sanity) {
+ std::string_view str("\x00\x00\x00\x24", 4);
+ size_t offset = 0;
+ auto ret = utf::read32be(str, offset);
+ EXPECT_EQ('$', ret);
+ EXPECT_EQ(4, offset);
+
+ str = std::string_view("\x00\x00\x20\xAC", 4);
+ offset = 0;
+ ret = utf::read32be(str, offset);
+ EXPECT_EQ(0x20AC, ret);
+ EXPECT_EQ(4, offset);
+
+ str = std::string_view("\x00\x01\x04\x37", 4);
+ offset = 0;
+ ret = utf::read32be(str, offset);
+ EXPECT_EQ(0x10437, ret);
+ EXPECT_EQ(4, offset);
+}
+
+TEST(utf32le, sanity) {
+ std::string_view str("\x24\x00\x00\x00", 4);
+ size_t offset = 0;
+ auto ret = utf::read32le(str, offset);
+ EXPECT_EQ('$', ret);
+ EXPECT_EQ(4, offset);
+
+ str = std::string_view("\xAC\x20\x00\x00", 4);
+ offset = 0;
+ ret = utf::read32le(str, offset);
+ EXPECT_EQ(0x20AC, ret);
+ EXPECT_EQ(4, offset);
+
+ str = std::string_view("\x37\x04\x01\x00", 4);
+ offset = 0;
+ ret = utf::read32le(str, offset);
+ EXPECT_EQ(0x10437, ret);
+ EXPECT_EQ(4, offset);
+}
+
+TEST(utf32be, invalid) {
+ std::string_view str("\xFF\xFF\xFF\xFF");
+ size_t offset = 0;
+ auto ret = utf::read32be(str, offset);
+ EXPECT_EQ(utf::INVALID, ret);
+ EXPECT_EQ(0, offset);
+
+ str = std::string_view("\x00\x00\xD8\x00", 4);
+ offset = 0;
+ ret = utf::read32be(str, offset);
+ EXPECT_EQ(utf::INVALID, ret);
+ EXPECT_EQ(0, offset);
+
+ str = "";
+ offset = 0;
+ ret = utf::read32be(str, offset);
+ EXPECT_EQ(utf::NEED_MORE, ret);
+ EXPECT_EQ(0, offset);
+
+ str = std::string_view("\x00", 1);
+ offset = 0;
+ ret = utf::read32be(str, offset);
+ EXPECT_EQ(utf::NEED_MORE, ret);
+ EXPECT_EQ(0, offset);
+
+ str = std::string_view("\x00\x00", 2);
+ offset = 0;
+ ret = utf::read32be(str, offset);
+ EXPECT_EQ(utf::NEED_MORE, ret);
+ EXPECT_EQ(0, offset);
+
+ str = std::string_view("\x00\x00\x00", 3);
+ offset = 0;
+ ret = utf::read32be(str, offset);
+ EXPECT_EQ(utf::NEED_MORE, ret);
+ EXPECT_EQ(0, offset);
+}
+
+TEST(utf32le, invalid) {
+ std::string_view str("\xFF\xFF\xFF\xFF");
+ size_t offset = 0;
+ auto ret = utf::read32le(str, offset);
+ EXPECT_EQ(utf::INVALID, ret);
+ EXPECT_EQ(0, offset);
+
+ str = std::string_view("\x00\xD8\x00\x00", 4);
+ offset = 0;
+ ret = utf::read32le(str, offset);
+ EXPECT_EQ(utf::INVALID, ret);
+ EXPECT_EQ(0, offset);
+
+ str = "";
+ offset = 0;
+ ret = utf::read32le(str, offset);
+ EXPECT_EQ(utf::NEED_MORE, ret);
+ EXPECT_EQ(0, offset);
+
+ str = std::string_view("\x00", 1);
+ offset = 0;
+ ret = utf::read32le(str, offset);
+ EXPECT_EQ(utf::NEED_MORE, ret);
+ EXPECT_EQ(0, offset);
+
+ str = std::string_view("\x00\x00", 2);
+ offset = 0;
+ ret = utf::read32le(str, offset);
+ EXPECT_EQ(utf::NEED_MORE, ret);
+ EXPECT_EQ(0, offset);
+
+ str = std::string_view("\x00\x00\x00", 3);
+ offset = 0;
+ ret = utf::read32le(str, offset);
+ EXPECT_EQ(utf::NEED_MORE, ret);
+ EXPECT_EQ(0, offset);
+}
+
+TEST(utf32be, bom) {
+ std::string_view str("\x00\x00\xFF\xFE\x00\x00\x20\xAC", 8);
+ size_t offset = 0;
+ auto ret = utf::read32be(str, offset);
+ EXPECT_EQ(0xFFFE, ret);
+ ret = utf::read32be(str, offset);
+ EXPECT_EQ(0x20AC, ret);
+ ret = utf::read32be(str, offset);
+ EXPECT_EQ(utf::NEED_MORE, ret);
+ EXPECT_EQ(str.size(), offset);
+}
+
+TEST(utf32le, bom) {
+ std::string_view str("\xFE\xFF\x00\x00\xAC\x20\x00\x00", 8);
+ size_t offset = 0;
+ auto ret = utf::read32le(str, offset);
+ EXPECT_EQ(0xFFFE, ret);
+ ret = utf::read32le(str, offset);
+ EXPECT_EQ(0x20AC, ret);
+ ret = utf::read32le(str, offset);
+ EXPECT_EQ(utf::NEED_MORE, ret);
+ EXPECT_EQ(str.size(), offset);
+}