12#include "../3rdparty/catch2/catch.hpp"
14#include "../core/utf8.hpp"
16#include "../safeguards.h"
18TEST_CASE(
"Utf8View - empty")
21 auto begin = view.begin();
22 auto end = view.end();
24 CHECK(begin.GetByteOffset() == 0);
27TEST_CASE(
"Utf8View - invalid")
29 Utf8View view(
"\u1234\x80\x80""a\xFF\x80\x80\x80\x80\x80""b\xF0");
30 auto begin = view.begin();
31 auto end = view.end();
35 CHECK(it.GetByteOffset() == 0);
40 CHECK(it.GetByteOffset() == 5);
45 CHECK(it.GetByteOffset() == 6);
50 CHECK(it.GetByteOffset() == 12);
55 CHECK(it.GetByteOffset() == 13);
58 CHECK(it.GetByteOffset() == 14);
64 CHECK(it.GetByteOffset() == 13);
69 CHECK(it.GetByteOffset() == 12);
74 CHECK(it.GetByteOffset() == 6);
79 CHECK(it.GetByteOffset() == 5);
83 CHECK(it.GetByteOffset() == 0);
87TEST_CASE(
"Utf8View - iterate")
89 Utf8View view(
"\u1234a\0b\U00012345"sv);
90 auto begin = view.begin();
91 auto end = view.end();
95 CHECK(it.GetByteOffset() == 0);
96 CHECK(std::distance(begin, it) == 0);
97 CHECK(std::distance(it, end) == 5);
105 CHECK(it.GetByteOffset() == 3);
106 CHECK(std::distance(begin, it) == 1);
107 CHECK(std::distance(it, end) == 4);
111 CHECK(it.GetByteOffset() == 4);
112 CHECK(std::distance(begin, it) == 2);
113 CHECK(std::distance(it, end) == 3);
117 CHECK(it.GetByteOffset() == 5);
118 CHECK(std::distance(begin, it) == 3);
119 CHECK(std::distance(it, end) == 2);
125 CHECK(it.GetByteOffset() == 6);
126 CHECK(std::distance(begin, it) == 4);
127 CHECK(std::distance(it, end) == 1);
128 CHECK(*it == 0x00012345);
135 CHECK(it.GetByteOffset() == 10);
136 CHECK(std::distance(begin, it) == 5);
137 CHECK(std::distance(it, end) == 0);
143 CHECK(it.GetByteOffset() == 6);
144 CHECK(*it == 0x00012345);
148 CHECK(it.GetByteOffset() == 5);
Constant span of UTF-8 encoded data.
iterator GetIterAtByte(size_t offset) const
Create iterator pointing at codepoint, which occupies the byte position "offset".