diff options
| author | Joel Klinghed <the_jk@spawned.biz> | 2023-06-13 10:07:16 +0200 |
|---|---|---|
| committer | Joel Klinghed <the_jk@spawned.biz> | 2023-06-13 10:07:16 +0200 |
| commit | fc4547b412e28164af1bf8981234c6af959ccc0b (patch) | |
| tree | 061253e7a4f6abaca282223b36d10f0bed8cad23 /utf/tst/test_utf32.cc | |
WIP
Diffstat (limited to 'utf/tst/test_utf32.cc')
| -rw-r--r-- | utf/tst/test_utf32.cc | 145 |
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); +} |
