12#include "../3rdparty/catch2/catch.hpp"
14#include "../core/utf8.hpp"
16#include "../safeguards.h"
18using namespace std::literals;
20TEST_CASE(
"Utf8View - empty")
23 auto begin = view.begin();
24 auto end = view.end();
26 CHECK(begin.GetByteOffset() == 0);
29TEST_CASE(
"Utf8View - invalid")
31 Utf8View view(
"\u1234\x80\x80""a\xFF\x80\x80\x80\x80\x80""b\xF0");
32 auto begin = view.begin();
33 auto end = view.end();
37 CHECK(it.GetByteOffset() == 0);
42 CHECK(it.GetByteOffset() == 5);
47 CHECK(it.GetByteOffset() == 6);
52 CHECK(it.GetByteOffset() == 12);
57 CHECK(it.GetByteOffset() == 13);
60 CHECK(it.GetByteOffset() == 14);
66 CHECK(it.GetByteOffset() == 13);
71 CHECK(it.GetByteOffset() == 12);
76 CHECK(it.GetByteOffset() == 6);
81 CHECK(it.GetByteOffset() == 5);
85 CHECK(it.GetByteOffset() == 0);
89TEST_CASE(
"Utf8View - iterate")
91 Utf8View view(
"\u1234a\0b\U00012345"sv);
92 auto begin = view.begin();
93 auto end = view.end();
97 CHECK(it.GetByteOffset() == 0);
98 CHECK(std::distance(begin, it) == 0);
99 CHECK(std::distance(it, end) == 5);
100 CHECK(*it == 0x1234);
107 CHECK(it.GetByteOffset() == 3);
108 CHECK(std::distance(begin, it) == 1);
109 CHECK(std::distance(it, end) == 4);
113 CHECK(it.GetByteOffset() == 4);
114 CHECK(std::distance(begin, it) == 2);
115 CHECK(std::distance(it, end) == 3);
119 CHECK(it.GetByteOffset() == 5);
120 CHECK(std::distance(begin, it) == 3);
121 CHECK(std::distance(it, end) == 2);
127 CHECK(it.GetByteOffset() == 6);
128 CHECK(std::distance(begin, it) == 4);
129 CHECK(std::distance(it, end) == 1);
130 CHECK(*it == 0x00012345);
137 CHECK(it.GetByteOffset() == 10);
138 CHECK(std::distance(begin, it) == 5);
139 CHECK(std::distance(it, end) == 0);
145 CHECK(it.GetByteOffset() == 6);
146 CHECK(*it == 0x00012345);
150 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".