From bae48fc281d315ad39bccfcde464f1fc91a3824d Mon Sep 17 00:00:00 2001 From: Yaraslau Tamashevich Date: Sun, 10 Nov 2024 16:52:04 +0200 Subject: [PATCH] Add tests and small fix --- src/libunicode/scan_simd_impl.h | 2 +- src/libunicode/scan_test.cpp | 33 +++++++++++++++++++++++++++++---- 2 files changed, 30 insertions(+), 5 deletions(-) diff --git a/src/libunicode/scan_simd_impl.h b/src/libunicode/scan_simd_impl.h index ebd1e55..2e0b88e 100644 --- a/src/libunicode/scan_simd_impl.h +++ b/src/libunicode/scan_simd_impl.h @@ -79,7 +79,7 @@ size_t scan_for_text_ascii_simd(std::string_view text, size_t maxColumnCount) no auto const is_control_mask = intrinsics::less(batch, vec_control); auto const is_complex_mask = intrinsics::equal(intrinsics::and_vec(batch, vec_complex), vec_complex); auto const ctrl_or_complex_mask = intrinsics::or_mask(is_control_mask, is_complex_mask); - if (is_control_mask) + if (ctrl_or_complex_mask) { int const advance = trailing_zero_count(intrinsics::to_unsigned(ctrl_or_complex_mask)); input += advance; diff --git a/src/libunicode/scan_test.cpp b/src/libunicode/scan_test.cpp index cfdbb7c..555c3e9 100644 --- a/src/libunicode/scan_test.cpp +++ b/src/libunicode/scan_test.cpp @@ -108,6 +108,26 @@ TEST_CASE("scan.ascii.empty") } TEST_CASE("scan.ascii.32") +{ + auto const text = "0123456789ABCDEF0123456789ABCDEF"sv; + CHECK(scan_for_text_ascii(text, 32) == 32); + CHECK(scan_for_text_ascii(text, 16) == 16); + CHECK(scan_for_text_ascii(text, 8) == 8); + CHECK(scan_for_text_ascii(text, 1) == 1); +} + +TEST_CASE("scan.ascii.64") +{ + auto const text = "0123456789ABCDEF0123456789ABCDEF" + "0123456789ABCDEF0123456789ABCDEF"sv; + CHECK(scan_for_text_ascii(text, 64) == 64); + CHECK(scan_for_text_ascii(text, 32) == 32); + CHECK(scan_for_text_ascii(text, 16) == 16); + CHECK(scan_for_text_ascii(text, 8) == 8); + CHECK(scan_for_text_ascii(text, 1) == 1); +} + +TEST_CASE("scan.ascii.128") { auto const text = "0123456789ABCDEF0123456789ABCDEF" "0123456789ABCDEF0123456789ABCDEF" @@ -128,11 +148,16 @@ TEST_CASE("scan.ascii.mixed_with_controls") CHECK(scan_for_text_ascii("12345678\033", 80) == 8); CHECK(scan_for_text_ascii("0123456789ABCDEF\033", 80) == 16); CHECK(scan_for_text_ascii("0123456789ABCDEF1\033", 80) == 17); - constexpr auto text = "0123456789ABCDEF0\033123456789ABCDEF" - "0123456789ABCDEF0123456789ABCDEF" - "0123456789ABCDEF0123456789ABCDEF" - "0123456789ABCDEF0123456789ABCDEF"sv; + auto text = "0123456789ABCDEF0\033123456789ABCDEF" + "0123456789ABCDEF0123456789ABCDEF" + "0123456789ABCDEF0123456789ABCDEF" + "0123456789ABCDEF0123456789ABCDEF"sv; CHECK(scan_for_text_ascii(text, 80) == 17); + text = "0123456789ABCDEF0123456789ABCDEF" + "0123456789ABCDEF0123456789ABCDEF" + "0123456789ABCDEF0123456789ABCDEF" + "0123456789ABCDEF\0330123456789ABCDEF"sv; + CHECK(scan_for_text_ascii(text, 128) == 112); } TEST_CASE("scan.ascii.until_complex")