Skip to content

Commit bae48fc

Browse files
committed
Add tests and small fix
1 parent aadecbb commit bae48fc

File tree

2 files changed

+30
-5
lines changed

2 files changed

+30
-5
lines changed

src/libunicode/scan_simd_impl.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ size_t scan_for_text_ascii_simd(std::string_view text, size_t maxColumnCount) no
7979
auto const is_control_mask = intrinsics::less(batch, vec_control);
8080
auto const is_complex_mask = intrinsics::equal(intrinsics::and_vec(batch, vec_complex), vec_complex);
8181
auto const ctrl_or_complex_mask = intrinsics::or_mask(is_control_mask, is_complex_mask);
82-
if (is_control_mask)
82+
if (ctrl_or_complex_mask)
8383
{
8484
int const advance = trailing_zero_count(intrinsics::to_unsigned(ctrl_or_complex_mask));
8585
input += advance;

src/libunicode/scan_test.cpp

+29-4
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,26 @@ TEST_CASE("scan.ascii.empty")
108108
}
109109

110110
TEST_CASE("scan.ascii.32")
111+
{
112+
auto const text = "0123456789ABCDEF0123456789ABCDEF"sv;
113+
CHECK(scan_for_text_ascii(text, 32) == 32);
114+
CHECK(scan_for_text_ascii(text, 16) == 16);
115+
CHECK(scan_for_text_ascii(text, 8) == 8);
116+
CHECK(scan_for_text_ascii(text, 1) == 1);
117+
}
118+
119+
TEST_CASE("scan.ascii.64")
120+
{
121+
auto const text = "0123456789ABCDEF0123456789ABCDEF"
122+
"0123456789ABCDEF0123456789ABCDEF"sv;
123+
CHECK(scan_for_text_ascii(text, 64) == 64);
124+
CHECK(scan_for_text_ascii(text, 32) == 32);
125+
CHECK(scan_for_text_ascii(text, 16) == 16);
126+
CHECK(scan_for_text_ascii(text, 8) == 8);
127+
CHECK(scan_for_text_ascii(text, 1) == 1);
128+
}
129+
130+
TEST_CASE("scan.ascii.128")
111131
{
112132
auto const text = "0123456789ABCDEF0123456789ABCDEF"
113133
"0123456789ABCDEF0123456789ABCDEF"
@@ -128,11 +148,16 @@ TEST_CASE("scan.ascii.mixed_with_controls")
128148
CHECK(scan_for_text_ascii("12345678\033", 80) == 8);
129149
CHECK(scan_for_text_ascii("0123456789ABCDEF\033", 80) == 16);
130150
CHECK(scan_for_text_ascii("0123456789ABCDEF1\033", 80) == 17);
131-
constexpr auto text = "0123456789ABCDEF0\033123456789ABCDEF"
132-
"0123456789ABCDEF0123456789ABCDEF"
133-
"0123456789ABCDEF0123456789ABCDEF"
134-
"0123456789ABCDEF0123456789ABCDEF"sv;
151+
auto text = "0123456789ABCDEF0\033123456789ABCDEF"
152+
"0123456789ABCDEF0123456789ABCDEF"
153+
"0123456789ABCDEF0123456789ABCDEF"
154+
"0123456789ABCDEF0123456789ABCDEF"sv;
135155
CHECK(scan_for_text_ascii(text, 80) == 17);
156+
text = "0123456789ABCDEF0123456789ABCDEF"
157+
"0123456789ABCDEF0123456789ABCDEF"
158+
"0123456789ABCDEF0123456789ABCDEF"
159+
"0123456789ABCDEF\0330123456789ABCDEF"sv;
160+
CHECK(scan_for_text_ascii(text, 128) == 112);
136161
}
137162

138163
TEST_CASE("scan.ascii.until_complex")

0 commit comments

Comments
 (0)