Meta: Build AK and LibRegex tests in Lagom and for Serenity

These tests were never built for the serenity target. Move their Lagom
build steps to the Lagom CMakeLists.txt, and add serenity build steps
for them. Also, fix the build errors when building them with the
serenity cross-compiler :^)
This commit is contained in:
Andrew Kaster 2021-01-17 14:25:12 -07:00 committed by Andreas Kling
parent 860a3bbce3
commit e787738c24
10 changed files with 268 additions and 259 deletions

View file

@ -1,3 +1,5 @@
include(${CMAKE_SOURCE_DIR}/Meta/CMake/utils.cmake)
serenity_install_headers(AK)
serenity_install_sources(AK)
add_subdirectory(Tests)

View file

@ -1,3 +1,5 @@
set(AK_TEST_SOURCES
TestAllOf.cpp
TestAnyOf.cpp
@ -51,17 +53,6 @@ set(AK_TEST_SOURCES
foreach(source ${AK_TEST_SOURCES})
get_filename_component(name ${source} NAME_WE)
add_executable(${name} ${source})
target_link_libraries(${name} LagomCore)
add_test(
NAME ${name}
COMMAND ${name}
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
)
set_tests_properties(
${name}
PROPERTIES
FAIL_REGULAR_EXPRESSION
"FAIL"
)
target_link_libraries(${name} LibCore)
install(TARGETS ${name} RUNTIME DESTINATION usr/Tests/AK)
endforeach()

View file

@ -41,7 +41,7 @@ TEST_CASE(works_like_a_queue)
}
for (size_t idx = 0; idx < capacity; ++idx) {
u8 byte;
u8 byte = 0;
stream >> byte;
EXPECT_EQ(queue.dequeue(), byte);
@ -70,7 +70,7 @@ TEST_CASE(overwritting_is_well_defined)
stream << static_cast<u8>(idx % 256);
for (size_t idx = 0; idx < capacity; ++idx) {
u8 byte;
u8 byte = 0;
stream >> byte;
if (idx < half_capacity)

View file

@ -101,7 +101,7 @@ TEST_CASE(seeking_slicing_offset)
const Array<u8, 4> expected1 { 4, 5, 6, 7 };
const Array<u8, 4> expected2 { 1, 2, 3, 4 };
Array<u8, 4> actual0, actual1, actual2;
Array<u8, 4> actual0 {}, actual1 {}, actual2 {};
InputMemoryStream stream { input };

View file

@ -129,35 +129,22 @@ TEST_CASE(extremes_4byte)
EXPECT_EQ(human_readable_size(0xffffffff), "3.9 GiB");
}
template<int>
void actual_extremes_8byte();
template<>
void actual_extremes_8byte<4>()
{
warnln("(Skipping 8-byte-size_t test)");
}
template<>
void actual_extremes_8byte<8>()
{
warnln("(Running true 8-byte-size_t test)");
// Your editor might show "implicit conversion" warnings here.
// This is because your editor thinks the world is 32-bit, but it isn't.
EXPECT_EQ(human_readable_size(0x100000000ULL), "4.0 GiB");
EXPECT_EQ(human_readable_size(0x100000001ULL), "4.0 GiB");
EXPECT_EQ(human_readable_size(0x800000000ULL), "32.0 GiB");
EXPECT_EQ(human_readable_size(0x10000000000ULL), "1024.0 GiB");
// Oh yeah! These are *correct*!
EXPECT_EQ(human_readable_size(0x7fffffffffffffffULL), "8589934591.9 GiB");
EXPECT_EQ(human_readable_size(0x8000000000000000ULL), "8589934592.0 GiB");
EXPECT_EQ(human_readable_size(0xffffffffffffffffULL), "17179869183.9 GiB");
}
TEST_CASE(extremes_8byte)
{
actual_extremes_8byte<sizeof(size_t)>();
if constexpr (sizeof(size_t) == 8) {
warnln("(Running 8-byte-size_t test)");
EXPECT_EQ(human_readable_size(0x100000000ULL), "4.0 GiB");
EXPECT_EQ(human_readable_size(0x100000001ULL), "4.0 GiB");
EXPECT_EQ(human_readable_size(0x800000000ULL), "32.0 GiB");
EXPECT_EQ(human_readable_size(0x10000000000ULL), "1024.0 GiB");
// Oh yeah! These are *correct*!
EXPECT_EQ(human_readable_size(0x7fffffffffffffffULL), "8589934591.9 GiB");
EXPECT_EQ(human_readable_size(0x8000000000000000ULL), "8589934592.0 GiB");
EXPECT_EQ(human_readable_size(0xffffffffffffffffULL), "17179869183.9 GiB");
} else {
warnln("(Skipping 8-byte-size_t test on 32-bit platform)");
}
}
TEST_MAIN(NumberFormat)

View file

@ -99,8 +99,6 @@ include_directories(${CMAKE_BINARY_DIR})
add_subdirectory(Meta/Lagom)
add_subdirectory(Userland/DevTools/IPCCompiler)
add_subdirectory(Userland/Libraries/LibWeb/CodeGenerators)
add_subdirectory(AK/Tests)
add_subdirectory(Userland/Libraries/LibRegex/Tests)
set(write_if_different ${CMAKE_SOURCE_DIR}/Meta/write-only-on-difference.sh)

View file

@ -2,7 +2,7 @@ cmake_minimum_required (VERSION 3.0)
project (Lagom)
if (NOT ENABLE_OSS_FUZZ)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unknown-warning-option -O2 -Wall -Wextra -Werror -std=c++2a -fPIC -g -Wno-deprecated-copy")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unknown-warning-option -Wno-literal-suffix -O2 -Wall -Wextra -Werror -std=c++2a -fPIC -g -Wno-deprecated-copy")
else()
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++2a -fPIC -g -Wno-deprecated-copy")
endif()
@ -42,8 +42,10 @@ elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
endif()
file(GLOB AK_SOURCES CONFIGURE_DEPENDS "../../AK/*.cpp")
file(GLOB AK_TEST_SOURCES CONFIGURE_DEPENDS "../../AK/Tests/*.cpp")
file(GLOB LIBREGEX_LIBC_SOURCES "../../Userland/Libraries/LibRegex/C/Regex.cpp")
file(GLOB LIBREGEX_SOURCES CONFIGURE_DEPENDS "../../Userland/Libraries/LibRegex/*.cpp")
file(GLOB LIBREGEX_TESTS CONFIGURE_DEPENDS "../../Userland/Libraries/LibRegex/Tests/*.cpp")
file(GLOB LIBCORE_SOURCES CONFIGURE_DEPENDS "../../Userland/Libraries/LibCore/*.cpp")
file(GLOB LIBELF_SOURCES CONFIGURE_DEPENDS "../../Userland/Libraries/LibELF/*.cpp")
# There's no way we can reliably make this cross platform
@ -89,6 +91,7 @@ if (BUILD_LAGOM)
add_library(Lagom $<TARGET_OBJECTS:LagomCore> ${LAGOM_MORE_SOURCES})
if (NOT ENABLE_OSS_FUZZ AND NOT ENABLE_FUZZER_SANITIZER)
enable_testing()
add_executable(TestApp TestApp.cpp)
target_link_libraries(TestApp Lagom)
target_link_libraries(TestApp stdc++)
@ -161,6 +164,43 @@ if (BUILD_LAGOM)
PASS_REGULAR_EXPRESSION "PASS"
)
endforeach()
foreach(source ${AK_TEST_SOURCES})
get_filename_component(name ${source} NAME_WE)
add_executable(${name}_lagom ${source})
target_link_libraries(${name}_lagom LagomCore)
add_test(
NAME ${name}_lagom
COMMAND ${name}_lagom
# FIXME: Only TestJSON needs this property
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../../AK/Tests
)
set_tests_properties(
${name}_lagom
PROPERTIES
FAIL_REGULAR_EXPRESSION
"FAIL"
)
endforeach()
foreach(source ${LIBREGEX_TESTS})
get_filename_component(name ${source} NAME_WE)
add_executable(${name}_lagom ${source} ${LAGOM_REGEX_SOURCES})
target_link_libraries(${name}_lagom LagomCore)
add_test(
NAME ${name}_lagom
COMMAND ${name}_lagom
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
)
set_tests_properties(
${name}_lagom
PROPERTIES
FAIL_REGULAR_EXPRESSION
"FAIL"
)
endforeach()
endif()
endif()

View file

@ -8,3 +8,5 @@ set(SOURCES
serenity_lib(LibRegex regex)
target_link_libraries(LibRegex LibC LibCore)
add_subdirectory(Tests)

View file

@ -4,17 +4,6 @@ file(GLOB REGEX_SOURCES CONFIGURE_DEPENDS "../*.cpp" "../C/*.cpp")
foreach(source ${TEST_SOURCES})
get_filename_component(name ${source} NAME_WE)
add_executable(${name} ${source} ${REGEX_SOURCES})
target_link_libraries(${name} LagomCore)
add_test(
NAME ${name}
COMMAND ${name}
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
)
set_tests_properties(
${name}
PROPERTIES
FAIL_REGULAR_EXPRESSION
"FAIL"
)
target_link_libraries(${name} LibCore)
install(TARGETS ${name} RUNTIME DESTINATION usr/Tests/LibRegex)
endforeach()

View file

@ -163,26 +163,26 @@ TEST_CASE(simple_questionmark_matchall)
EXPECT_EQ(regcomp(&regex, pattern.characters(), REG_EXTENDED), REG_NOERR);
EXPECT_EQ(regexec(&regex, "a", num_matches, matches, REG_GLOBAL), REG_NOMATCH);
EXPECT_EQ(matches[0].rm_cnt, 0u);
EXPECT_EQ(matches[0].rm_cnt, 0);
EXPECT_EQ(regexec(&regex, "daa", num_matches, matches, REG_GLOBAL), REG_NOMATCH);
EXPECT_EQ(matches[0].rm_cnt, 0u);
EXPECT_EQ(matches[0].rm_cnt, 0);
EXPECT_EQ(regexec(&regex, "ddddd", num_matches, matches, REG_GLOBAL), REG_NOERR);
EXPECT_EQ(matches[0].rm_cnt, 2u);
EXPECT_EQ(matches[0].rm_cnt, 2);
EXPECT_EQ(matches[0].rm_so, 0u);
EXPECT_EQ(matches[0].rm_eo, 2u);
EXPECT_EQ(matches[1].rm_so, 2u);
EXPECT_EQ(matches[1].rm_eo, 4u);
EXPECT_EQ(matches[0].rm_so, 0);
EXPECT_EQ(matches[0].rm_eo, 2);
EXPECT_EQ(matches[1].rm_so, 2);
EXPECT_EQ(matches[1].rm_eo, 4);
EXPECT_EQ(regexec(&regex, "dd", num_matches, matches, REG_GLOBAL), REG_NOERR);
EXPECT_EQ(matches[0].rm_cnt, 1u);
EXPECT_EQ(matches[0].rm_cnt, 1);
EXPECT_EQ(regexec(&regex, "dad", num_matches, matches, REG_GLOBAL), REG_NOERR);
EXPECT_EQ(matches[0].rm_cnt, 1u);
EXPECT_EQ(matches[0].rm_cnt, 1);
EXPECT_EQ(regexec(&regex, "dada", num_matches, matches, REG_GLOBAL), REG_NOERR);
EXPECT_EQ(matches[0].rm_cnt, 1u);
EXPECT_EQ(matches[0].rm_cnt, 1);
EXPECT_EQ(regexec(&regex, "adadaa", num_matches, matches, REG_GLOBAL), REG_NOERR);
EXPECT_EQ(matches[0].rm_cnt, 1u);
EXPECT_EQ(matches[0].rm_cnt, 1);
regfree(&regex);
}
@ -197,9 +197,9 @@ TEST_CASE(character_class)
String haystack = "[Window]\nOpacity=255\nAudibleBeep=0\n";
EXPECT_EQ(regcomp(&regex, pattern.characters(), REG_EXTENDED), REG_NOERR);
EXPECT_EQ(regexec(&regex, haystack.characters(), num_matches, matches, 0), REG_NOMATCH);
EXPECT_EQ(matches[0].rm_cnt, 0u);
EXPECT_EQ(matches[0].rm_cnt, 0);
EXPECT_EQ(regexec(&regex, haystack.characters(), num_matches, matches, REG_GLOBAL), REG_NOERR);
EXPECT_EQ(matches[0].rm_cnt, 24u);
EXPECT_EQ(matches[0].rm_cnt, 24);
EXPECT_EQ(haystack.substring_view(matches[0].rm_so, matches[0].rm_eo - matches[0].rm_so), "W");
EXPECT_EQ(haystack.substring_view(matches[1].rm_so, matches[1].rm_eo - matches[1].rm_so), "i");
@ -217,7 +217,7 @@ TEST_CASE(character_class2)
EXPECT_EQ(regcomp(&regex, pattern.characters(), REG_EXTENDED | REG_NEWLINE), REG_NOERR);
EXPECT_EQ(regexec(&regex, haystack.characters(), num_matches, matches, 0), REG_NOERR);
EXPECT_EQ(matches[0].rm_cnt, 3u);
EXPECT_EQ(matches[0].rm_cnt, 3);
#if 0
for (int i = 0; i < num_matches; ++i) {
fprintf(stderr, "Matches[%i].rm_so: %li, .rm_eo: %li .rm_cnt: %li: ", i, matches[i].rm_so, matches[i].rm_eo, matches[i].rm_cnt);
@ -275,7 +275,7 @@ TEST_CASE(char_qualifier_asterisk)
EXPECT_EQ(regcomp(&regex, pattern.characters(), REG_EXTENDED), REG_NOERR);
EXPECT_EQ(regexec(&regex, "#include <regex.h>", num_matches, matches, REG_GLOBAL), REG_NOERR);
EXPECT_EQ(matches[0].rm_cnt, 1u);
EXPECT_EQ(matches[0].rm_cnt, 1);
regfree(&regex);
}
@ -289,7 +289,7 @@ TEST_CASE(char_utf8)
EXPECT_EQ(regcomp(&regex, pattern.characters(), REG_EXTENDED), REG_NOERR);
EXPECT_EQ(regexec(&regex, "Привет, мир! 😀 γειά σου κόσμος 😀 こんにちは世界", num_matches, matches, REG_GLOBAL), REG_NOERR);
EXPECT_EQ(matches[0].rm_cnt, 2u);
EXPECT_EQ(matches[0].rm_cnt, 2);
regfree(&regex);
}
@ -304,12 +304,12 @@ TEST_CASE(parens)
EXPECT_EQ(regcomp(&regex, pattern.characters(), REG_EXTENDED), REG_NOERR);
EXPECT_EQ(regexec(&regex, "testhellotest", num_matches, matches, 0), REG_NOERR);
EXPECT_EQ(matches[0].rm_cnt, 1u);
EXPECT_EQ(matches[0].rm_cnt, 1);
EXPECT_EQ(matches[0].rm_so, 0u);
EXPECT_EQ(matches[0].rm_eo, 13u);
EXPECT_EQ(matches[1].rm_so, 4u);
EXPECT_EQ(matches[1].rm_eo, 9u);
EXPECT_EQ(matches[0].rm_so, 0);
EXPECT_EQ(matches[0].rm_eo, 13);
EXPECT_EQ(matches[1].rm_so, 4);
EXPECT_EQ(matches[1].rm_eo, 9);
regfree(&regex);
}
@ -427,18 +427,18 @@ TEST_CASE(parens_qualifier_questionmark)
match_str = "testtest";
EXPECT_EQ(regexec(&regex, match_str, num_matches, matches, 0), REG_NOERR);
EXPECT_EQ(matches[0].rm_cnt, 1u);
EXPECT_EQ(matches[0].rm_so, 0u);
EXPECT_EQ(matches[0].rm_eo, 8u);
EXPECT_EQ(matches[0].rm_cnt, 1);
EXPECT_EQ(matches[0].rm_so, 0);
EXPECT_EQ(matches[0].rm_eo, 8);
EXPECT_EQ(StringView(&match_str[matches[0].rm_so], matches[0].rm_eo - matches[0].rm_so), "testtest");
match_str = "testhellotest";
EXPECT_EQ(regexec(&regex, match_str, num_matches, matches, 0), REG_NOERR);
EXPECT_EQ(matches[0].rm_cnt, 1u);
EXPECT_EQ(matches[0].rm_so, 0u);
EXPECT_EQ(matches[0].rm_eo, 13u);
EXPECT_EQ(matches[1].rm_so, 4u);
EXPECT_EQ(matches[1].rm_eo, 9u);
EXPECT_EQ(matches[0].rm_cnt, 1);
EXPECT_EQ(matches[0].rm_so, 0);
EXPECT_EQ(matches[0].rm_eo, 13);
EXPECT_EQ(matches[1].rm_so, 4);
EXPECT_EQ(matches[1].rm_eo, 9);
EXPECT_EQ(StringView(&match_str[matches[0].rm_so], matches[0].rm_eo - matches[0].rm_so), "testhellotest");
EXPECT_EQ(StringView(&match_str[matches[1].rm_so], matches[1].rm_eo - matches[1].rm_so), "hello");
@ -457,32 +457,32 @@ TEST_CASE(parens_qualifier_asterisk)
match_str = "testtest";
EXPECT_EQ(regexec(&regex, match_str, num_matches, matches, 0), REG_NOERR);
EXPECT_EQ(matches[0].rm_cnt, 1u);
EXPECT_EQ(matches[0].rm_so, 0u);
EXPECT_EQ(matches[0].rm_eo, 8u);
EXPECT_EQ(matches[0].rm_cnt, 1);
EXPECT_EQ(matches[0].rm_so, 0);
EXPECT_EQ(matches[0].rm_eo, 8);
EXPECT_EQ(StringView(&match_str[matches[0].rm_so], matches[0].rm_eo - matches[0].rm_so), "testtest");
match_str = "testhellohellotest";
EXPECT_EQ(regexec(&regex, match_str, num_matches, matches, 0), REG_NOERR);
EXPECT_EQ(matches[0].rm_cnt, 1u);
EXPECT_EQ(matches[0].rm_so, 0u);
EXPECT_EQ(matches[0].rm_eo, 18u);
EXPECT_EQ(matches[1].rm_so, 9u);
EXPECT_EQ(matches[1].rm_eo, 14u);
EXPECT_EQ(matches[0].rm_cnt, 1);
EXPECT_EQ(matches[0].rm_so, 0);
EXPECT_EQ(matches[0].rm_eo, 18);
EXPECT_EQ(matches[1].rm_so, 9);
EXPECT_EQ(matches[1].rm_eo, 14);
EXPECT_EQ(StringView(&match_str[matches[0].rm_so], matches[0].rm_eo - matches[0].rm_so), "testhellohellotest");
EXPECT_EQ(StringView(&match_str[matches[1].rm_so], matches[1].rm_eo - matches[1].rm_so), "hello");
match_str = "testhellohellotest, testhellotest";
EXPECT_EQ(regexec(&regex, match_str, num_matches, matches, REG_GLOBAL), REG_NOERR);
EXPECT_EQ(matches[0].rm_cnt, 2u);
EXPECT_EQ(matches[0].rm_so, 0u);
EXPECT_EQ(matches[0].rm_eo, 18u);
EXPECT_EQ(matches[1].rm_so, 9u);
EXPECT_EQ(matches[1].rm_eo, 14u);
EXPECT_EQ(matches[2].rm_so, 20u);
EXPECT_EQ(matches[2].rm_eo, 33u);
EXPECT_EQ(matches[3].rm_so, 24u);
EXPECT_EQ(matches[3].rm_eo, 29u);
EXPECT_EQ(matches[0].rm_cnt, 2);
EXPECT_EQ(matches[0].rm_so, 0);
EXPECT_EQ(matches[0].rm_eo, 18);
EXPECT_EQ(matches[1].rm_so, 9);
EXPECT_EQ(matches[1].rm_eo, 14);
EXPECT_EQ(matches[2].rm_so, 20);
EXPECT_EQ(matches[2].rm_eo, 33);
EXPECT_EQ(matches[3].rm_so, 24);
EXPECT_EQ(matches[3].rm_eo, 29);
EXPECT_EQ(StringView(&match_str[matches[0].rm_so], matches[0].rm_eo - matches[0].rm_so), "testhellohellotest");
EXPECT_EQ(StringView(&match_str[matches[1].rm_so], matches[1].rm_eo - matches[1].rm_so), "hello");
EXPECT_EQ(StringView(&match_str[matches[2].rm_so], matches[2].rm_eo - matches[2].rm_so), "testhellotest");
@ -503,31 +503,31 @@ TEST_CASE(parens_qualifier_asterisk_2)
match_str = "testasdftest";
EXPECT_EQ(regexec(&regex, match_str, num_matches, matches, 0), REG_NOERR);
EXPECT_EQ(matches[0].rm_cnt, 1u);
EXPECT_EQ(matches[0].rm_so, 0u);
EXPECT_EQ(matches[0].rm_eo, 12u);
EXPECT_EQ(matches[1].rm_so, 4u);
EXPECT_EQ(matches[1].rm_eo, 8u);
EXPECT_EQ(matches[0].rm_cnt, 1);
EXPECT_EQ(matches[0].rm_so, 0);
EXPECT_EQ(matches[0].rm_eo, 12);
EXPECT_EQ(matches[1].rm_so, 4);
EXPECT_EQ(matches[1].rm_eo, 8);
EXPECT_EQ(StringView(&match_str[matches[0].rm_so], matches[0].rm_eo - matches[0].rm_so), "testasdftest");
EXPECT_EQ(StringView(&match_str[matches[1].rm_so], matches[1].rm_eo - matches[1].rm_so), "asdf");
match_str = "testasdfasdftest";
EXPECT_EQ(regexec(&regex, match_str, num_matches, matches, 0), REG_NOERR);
EXPECT_EQ(matches[0].rm_cnt, 1u);
EXPECT_EQ(matches[0].rm_so, 0u);
EXPECT_EQ(matches[0].rm_eo, 16u);
EXPECT_EQ(matches[1].rm_so, 4u);
EXPECT_EQ(matches[1].rm_eo, 12u);
EXPECT_EQ(matches[0].rm_cnt, 1);
EXPECT_EQ(matches[0].rm_so, 0);
EXPECT_EQ(matches[0].rm_eo, 16);
EXPECT_EQ(matches[1].rm_so, 4);
EXPECT_EQ(matches[1].rm_eo, 12);
EXPECT_EQ(StringView(&match_str[matches[0].rm_so], matches[0].rm_eo - matches[0].rm_so), "testasdfasdftest");
EXPECT_EQ(StringView(&match_str[matches[1].rm_so], matches[1].rm_eo - matches[1].rm_so), "asdfasdf");
match_str = "testaaaatest, testbbbtest, testtest";
EXPECT_EQ(regexec(&regex, match_str, num_matches, matches, REG_GLOBAL), REG_NOERR);
EXPECT_EQ(matches[0].rm_cnt, 1u);
EXPECT_EQ(matches[0].rm_so, 0u);
EXPECT_EQ(matches[0].rm_eo, 35u);
EXPECT_EQ(matches[1].rm_so, 4u);
EXPECT_EQ(matches[1].rm_eo, 31u);
EXPECT_EQ(matches[0].rm_cnt, 1);
EXPECT_EQ(matches[0].rm_so, 0);
EXPECT_EQ(matches[0].rm_eo, 35);
EXPECT_EQ(matches[1].rm_so, 4);
EXPECT_EQ(matches[1].rm_eo, 31);
EXPECT_EQ(StringView(&match_str[matches[0].rm_so], matches[0].rm_eo - matches[0].rm_so), "testaaaatest, testbbbtest, testtest");
EXPECT_EQ(StringView(&match_str[matches[1].rm_so], matches[1].rm_eo - matches[1].rm_so), "aaaatest, testbbbtest, test");
@ -549,52 +549,52 @@ TEST_CASE(mulit_parens_qualifier_too_less_result_values)
match_str = "testabtest";
EXPECT_EQ(regexec(&regex, match_str, num_matches - 1, matches, 0), REG_NOERR);
EXPECT_EQ(matches[0].rm_cnt, 1u);
EXPECT_EQ(matches[0].rm_so, 0u);
EXPECT_EQ(matches[0].rm_eo, 10u);
EXPECT_EQ(matches[1].rm_so, 4u);
EXPECT_EQ(matches[1].rm_eo, 5u);
EXPECT_EQ(matches[2].rm_so, 5u);
EXPECT_EQ(matches[2].rm_eo, 6u);
EXPECT_EQ(matches[0].rm_cnt, 1);
EXPECT_EQ(matches[0].rm_so, 0);
EXPECT_EQ(matches[0].rm_eo, 10);
EXPECT_EQ(matches[1].rm_so, 4);
EXPECT_EQ(matches[1].rm_eo, 5);
EXPECT_EQ(matches[2].rm_so, 5);
EXPECT_EQ(matches[2].rm_eo, 6);
EXPECT_EQ(StringView(&match_str[matches[0].rm_so], matches[0].rm_eo - matches[0].rm_so), "testabtest");
EXPECT_EQ(StringView(&match_str[matches[1].rm_so], matches[1].rm_eo - matches[1].rm_so), "a");
EXPECT_EQ(StringView(&match_str[matches[2].rm_so], matches[2].rm_eo - matches[2].rm_so), "b");
EXPECT_EQ(matches[3].rm_so, -2);
EXPECT_EQ(matches[3].rm_eo, -2);
EXPECT_EQ(matches[3].rm_cnt, 100u);
EXPECT_EQ(matches[3].rm_cnt, 100);
match_str = "testabctest";
EXPECT_EQ(regexec(&regex, match_str, num_matches - 1, matches, 0), REG_NOERR);
EXPECT_EQ(matches[0].rm_cnt, 1u);
EXPECT_EQ(matches[0].rm_so, 0u);
EXPECT_EQ(matches[0].rm_eo, 11u);
EXPECT_EQ(matches[1].rm_so, 4u);
EXPECT_EQ(matches[1].rm_eo, 5u);
EXPECT_EQ(matches[2].rm_so, 5u);
EXPECT_EQ(matches[2].rm_eo, 6u);
EXPECT_EQ(matches[0].rm_cnt, 1);
EXPECT_EQ(matches[0].rm_so, 0);
EXPECT_EQ(matches[0].rm_eo, 11);
EXPECT_EQ(matches[1].rm_so, 4);
EXPECT_EQ(matches[1].rm_eo, 5);
EXPECT_EQ(matches[2].rm_so, 5);
EXPECT_EQ(matches[2].rm_eo, 6);
EXPECT_EQ(StringView(&match_str[matches[0].rm_so], matches[0].rm_eo - matches[0].rm_so), "testabctest");
EXPECT_EQ(StringView(&match_str[matches[1].rm_so], matches[1].rm_eo - matches[1].rm_so), "a");
EXPECT_EQ(StringView(&match_str[matches[2].rm_so], matches[2].rm_eo - matches[2].rm_so), "b");
EXPECT_EQ(matches[3].rm_so, -2);
EXPECT_EQ(matches[3].rm_eo, -2);
EXPECT_EQ(matches[3].rm_cnt, 100u);
EXPECT_EQ(matches[3].rm_cnt, 100);
match_str = "testabctest, testabctest";
EXPECT_EQ(regexec(&regex, match_str, num_matches - 1, matches, REG_GLOBAL), REG_NOERR);
EXPECT_EQ(matches[0].rm_cnt, 2u);
EXPECT_EQ(matches[0].rm_so, 0u);
EXPECT_EQ(matches[0].rm_eo, 11u);
EXPECT_EQ(matches[1].rm_so, 4u);
EXPECT_EQ(matches[1].rm_eo, 5u);
EXPECT_EQ(matches[2].rm_so, 5u);
EXPECT_EQ(matches[2].rm_eo, 6u);
EXPECT_EQ(matches[0].rm_cnt, 2);
EXPECT_EQ(matches[0].rm_so, 0);
EXPECT_EQ(matches[0].rm_eo, 11);
EXPECT_EQ(matches[1].rm_so, 4);
EXPECT_EQ(matches[1].rm_eo, 5);
EXPECT_EQ(matches[2].rm_so, 5);
EXPECT_EQ(matches[2].rm_eo, 6);
EXPECT_EQ(StringView(&match_str[matches[0].rm_so], matches[0].rm_eo - matches[0].rm_so), "testabctest");
EXPECT_EQ(StringView(&match_str[matches[1].rm_so], matches[1].rm_eo - matches[1].rm_so), "a");
EXPECT_EQ(StringView(&match_str[matches[2].rm_so], matches[2].rm_eo - matches[2].rm_so), "b");
EXPECT_EQ(matches[3].rm_so, -2);
EXPECT_EQ(matches[3].rm_eo, -2);
EXPECT_EQ(matches[3].rm_cnt, 100u);
EXPECT_EQ(matches[3].rm_cnt, 100);
regfree(&regex);
}
@ -611,20 +611,20 @@ TEST_CASE(multi_parens_qualifier_questionmark)
match_str = "testtest";
EXPECT_EQ(regexec(&regex, match_str, num_matches, matches, 0), REG_NOERR);
EXPECT_EQ(matches[0].rm_cnt, 1u);
EXPECT_EQ(matches[0].rm_so, 0u);
EXPECT_EQ(matches[0].rm_eo, 8u);
EXPECT_EQ(matches[0].rm_cnt, 1);
EXPECT_EQ(matches[0].rm_so, 0);
EXPECT_EQ(matches[0].rm_eo, 8);
EXPECT_EQ(StringView(&match_str[matches[0].rm_so], matches[0].rm_eo - matches[0].rm_so), "testtest");
match_str = "testabctest";
EXPECT_EQ(regexec(&regex, match_str, num_matches, matches, 0), REG_NOERR);
EXPECT_EQ(matches[0].rm_cnt, 1u);
EXPECT_EQ(matches[0].rm_so, 0u);
EXPECT_EQ(matches[0].rm_eo, 11u);
EXPECT_EQ(matches[1].rm_so, 4u);
EXPECT_EQ(matches[1].rm_eo, 5u);
EXPECT_EQ(matches[2].rm_so, 5u);
EXPECT_EQ(matches[2].rm_eo, 6u);
EXPECT_EQ(matches[0].rm_cnt, 1);
EXPECT_EQ(matches[0].rm_so, 0);
EXPECT_EQ(matches[0].rm_eo, 11);
EXPECT_EQ(matches[1].rm_so, 4);
EXPECT_EQ(matches[1].rm_eo, 5);
EXPECT_EQ(matches[2].rm_so, 5);
EXPECT_EQ(matches[2].rm_eo, 6);
EXPECT_EQ(StringView(&match_str[matches[0].rm_so], matches[0].rm_eo - matches[0].rm_so), "testabctest");
EXPECT_EQ(StringView(&match_str[matches[1].rm_so], matches[1].rm_eo - matches[1].rm_so), "a");
EXPECT_EQ(StringView(&match_str[matches[2].rm_so], matches[2].rm_eo - matches[2].rm_so), "b");
@ -632,24 +632,24 @@ TEST_CASE(multi_parens_qualifier_questionmark)
match_str = "testabctest, testactest";
EXPECT_EQ(regexec(&regex, match_str, num_matches, matches, REG_GLOBAL), REG_NOERR);
EXPECT_EQ(matches[0].rm_cnt, 2u);
EXPECT_EQ(matches[0].rm_so, 0u);
EXPECT_EQ(matches[0].rm_eo, 11u);
EXPECT_EQ(matches[1].rm_so, 4u);
EXPECT_EQ(matches[1].rm_eo, 5u);
EXPECT_EQ(matches[2].rm_so, 5u);
EXPECT_EQ(matches[2].rm_eo, 6u);
EXPECT_EQ(matches[3].rm_so, 6u);
EXPECT_EQ(matches[3].rm_eo, 7u);
EXPECT_EQ(matches[0].rm_cnt, 2);
EXPECT_EQ(matches[0].rm_so, 0);
EXPECT_EQ(matches[0].rm_eo, 11);
EXPECT_EQ(matches[1].rm_so, 4);
EXPECT_EQ(matches[1].rm_eo, 5);
EXPECT_EQ(matches[2].rm_so, 5);
EXPECT_EQ(matches[2].rm_eo, 6);
EXPECT_EQ(matches[3].rm_so, 6);
EXPECT_EQ(matches[3].rm_eo, 7);
EXPECT_EQ(matches[4].rm_so, 13u);
EXPECT_EQ(matches[4].rm_eo, 23u);
EXPECT_EQ(matches[5].rm_so, 17u);
EXPECT_EQ(matches[5].rm_eo, 18u);
EXPECT_EQ(matches[4].rm_so, 13);
EXPECT_EQ(matches[4].rm_eo, 23);
EXPECT_EQ(matches[5].rm_so, 17);
EXPECT_EQ(matches[5].rm_eo, 18);
EXPECT_EQ(matches[6].rm_so, -1);
EXPECT_EQ(matches[6].rm_eo, -1);
EXPECT_EQ(matches[7].rm_so, 18u);
EXPECT_EQ(matches[7].rm_eo, 19u);
EXPECT_EQ(matches[7].rm_so, 18);
EXPECT_EQ(matches[7].rm_eo, 19);
EXPECT_EQ(StringView(&match_str[matches[0].rm_so], matches[0].rm_eo - matches[0].rm_so), "testabctest");
EXPECT_EQ(StringView(&match_str[matches[1].rm_so], matches[1].rm_eo - matches[1].rm_so), "a");
@ -673,19 +673,19 @@ TEST_CASE(simple_alternative)
EXPECT_EQ(regcomp(&regex, pattern.characters(), REG_EXTENDED), REG_NOERR);
EXPECT_EQ(regexec(&regex, "test", num_matches, matches, 0), REG_NOERR);
EXPECT_EQ(matches[0].rm_cnt, 1u);
EXPECT_EQ(matches[0].rm_so, 0u);
EXPECT_EQ(matches[0].rm_eo, 4u);
EXPECT_EQ(matches[0].rm_cnt, 1);
EXPECT_EQ(matches[0].rm_so, 0);
EXPECT_EQ(matches[0].rm_eo, 4);
EXPECT_EQ(regexec(&regex, "hello", num_matches, matches, 0), REG_NOERR);
EXPECT_EQ(matches[0].rm_cnt, 1u);
EXPECT_EQ(matches[0].rm_so, 0u);
EXPECT_EQ(matches[0].rm_eo, 5u);
EXPECT_EQ(matches[0].rm_cnt, 1);
EXPECT_EQ(matches[0].rm_so, 0);
EXPECT_EQ(matches[0].rm_eo, 5);
EXPECT_EQ(regexec(&regex, "friends", num_matches, matches, 0), REG_NOERR);
EXPECT_EQ(matches[0].rm_cnt, 1u);
EXPECT_EQ(matches[0].rm_so, 0u);
EXPECT_EQ(matches[0].rm_eo, 7u);
EXPECT_EQ(matches[0].rm_cnt, 1);
EXPECT_EQ(matches[0].rm_so, 0);
EXPECT_EQ(matches[0].rm_eo, 7);
regfree(&regex);
}
@ -702,7 +702,7 @@ TEST_CASE(alternative_match_groups)
match_str = "test";
EXPECT_EQ(regexec(&regex, match_str, num_matches, matches, 0), REG_NOERR);
EXPECT_EQ(matches[0].rm_cnt, 1u);
EXPECT_EQ(matches[0].rm_cnt, 1);
EXPECT_EQ(matches[0].rm_so, 0);
EXPECT_EQ(matches[0].rm_eo, 4);
EXPECT_EQ(matches[1].rm_so, -1);
@ -715,11 +715,11 @@ TEST_CASE(alternative_match_groups)
match_str = "testa";
EXPECT_EQ(regexec(&regex, match_str, num_matches, matches, 0), REG_NOERR);
EXPECT_EQ(matches[0].rm_cnt, 1u);
EXPECT_EQ(matches[0].rm_so, 0u);
EXPECT_EQ(matches[0].rm_eo, 5u);
EXPECT_EQ(matches[1].rm_so, 4u);
EXPECT_EQ(matches[1].rm_eo, 5u);
EXPECT_EQ(matches[0].rm_cnt, 1);
EXPECT_EQ(matches[0].rm_so, 0);
EXPECT_EQ(matches[0].rm_eo, 5);
EXPECT_EQ(matches[1].rm_so, 4);
EXPECT_EQ(matches[1].rm_eo, 5);
EXPECT_EQ(matches[2].rm_so, -1);
EXPECT_EQ(matches[2].rm_eo, -1);
EXPECT_EQ(StringView(&match_str[matches[0].rm_so], matches[0].rm_eo - matches[0].rm_so), "testa");
@ -728,22 +728,22 @@ TEST_CASE(alternative_match_groups)
match_str = "testb";
EXPECT_EQ(regexec(&regex, match_str, num_matches, matches, 0), REG_NOERR);
EXPECT_EQ(matches[0].rm_cnt, 1u);
EXPECT_EQ(matches[0].rm_so, 0u);
EXPECT_EQ(matches[0].rm_eo, 5u);
EXPECT_EQ(matches[0].rm_cnt, 1);
EXPECT_EQ(matches[0].rm_so, 0);
EXPECT_EQ(matches[0].rm_eo, 5);
EXPECT_EQ(matches[1].rm_so, -1);
EXPECT_EQ(matches[1].rm_eo, -1);
EXPECT_EQ(matches[2].rm_so, 4u);
EXPECT_EQ(matches[2].rm_eo, 5u);
EXPECT_EQ(matches[2].rm_so, 4);
EXPECT_EQ(matches[2].rm_eo, 5);
EXPECT_EQ(StringView(&match_str[matches[0].rm_so], matches[0].rm_eo - matches[0].rm_so), "testb");
EXPECT_EQ(StringView(&match_str[matches[1].rm_so], matches[1].rm_eo - matches[1].rm_so), "");
EXPECT_EQ(StringView(&match_str[matches[2].rm_so], matches[2].rm_eo - matches[2].rm_so), "b");
match_str = "hello friends";
EXPECT_EQ(regexec(&regex, match_str, num_matches, matches, 0), REG_NOERR);
EXPECT_EQ(matches[0].rm_cnt, 1u);
EXPECT_EQ(matches[0].rm_so, 0u);
EXPECT_EQ(matches[0].rm_eo, 13u);
EXPECT_EQ(matches[0].rm_cnt, 1);
EXPECT_EQ(matches[0].rm_so, 0);
EXPECT_EQ(matches[0].rm_eo, 13);
EXPECT_EQ(matches[1].rm_so, -1);
EXPECT_EQ(matches[1].rm_eo, -1);
EXPECT_EQ(StringView(&match_str[matches[0].rm_so], matches[0].rm_eo - matches[0].rm_so), "hello friends");
@ -751,9 +751,9 @@ TEST_CASE(alternative_match_groups)
match_str = "hello dear friends";
EXPECT_EQ(regexec(&regex, match_str, num_matches, matches, 0), REG_NOERR);
EXPECT_EQ(matches[0].rm_cnt, 1u);
EXPECT_EQ(matches[0].rm_so, 0u);
EXPECT_EQ(matches[0].rm_eo, 18u);
EXPECT_EQ(matches[0].rm_cnt, 1);
EXPECT_EQ(matches[0].rm_so, 0);
EXPECT_EQ(matches[0].rm_eo, 18);
EXPECT_EQ(matches[1].rm_so, -1);
EXPECT_EQ(matches[1].rm_eo, -1);
EXPECT_EQ(matches[2].rm_so, -1);
@ -767,9 +767,9 @@ TEST_CASE(alternative_match_groups)
match_str = "hello my friends";
EXPECT_EQ(regexec(&regex, match_str, num_matches, matches, 0), REG_NOERR);
EXPECT_EQ(matches[0].rm_cnt, 1u);
EXPECT_EQ(matches[0].rm_so, 0u);
EXPECT_EQ(matches[0].rm_eo, 16u);
EXPECT_EQ(matches[0].rm_cnt, 1);
EXPECT_EQ(matches[0].rm_so, 0);
EXPECT_EQ(matches[0].rm_eo, 16);
EXPECT_EQ(matches[1].rm_so, -1);
EXPECT_EQ(matches[1].rm_eo, -1);
EXPECT_EQ(matches[2].rm_so, -1);
@ -783,13 +783,13 @@ TEST_CASE(alternative_match_groups)
match_str = "testabc";
EXPECT_EQ(regexec(&regex, match_str, num_matches, matches, 0), REG_NOMATCH);
EXPECT_EQ(matches[0].rm_cnt, 0u);
EXPECT_EQ(matches[0].rm_cnt, 0);
EXPECT_EQ(matches[0].rm_so, -1);
EXPECT_EQ(matches[0].rm_eo, -1);
match_str = "hello test friends";
EXPECT_EQ(regexec(&regex, match_str, num_matches, matches, 0), REG_NOMATCH);
EXPECT_EQ(matches[0].rm_cnt, 0u);
EXPECT_EQ(matches[0].rm_cnt, 0);
EXPECT_EQ(matches[0].rm_so, -1);
EXPECT_EQ(matches[0].rm_eo, -1);
@ -808,35 +808,35 @@ TEST_CASE(parens_qualifier_exact)
match_str = "hello";
EXPECT_EQ(regexec(&regex, match_str, num_matches, matches, 0), REG_NOMATCH);
EXPECT_EQ(matches[0].rm_cnt, 0u);
EXPECT_EQ(matches[0].rm_cnt, 0);
match_str = "hellohellohello";
EXPECT_EQ(regexec(&regex, match_str, num_matches, matches, 0), REG_NOERR);
EXPECT_EQ(matches[0].rm_cnt, 1u);
EXPECT_EQ(matches[0].rm_so, 0u);
EXPECT_EQ(matches[0].rm_eo, 15u);
EXPECT_EQ(matches[1].rm_so, 10u);
EXPECT_EQ(matches[1].rm_eo, 15u);
EXPECT_EQ(matches[0].rm_cnt, 1);
EXPECT_EQ(matches[0].rm_so, 0);
EXPECT_EQ(matches[0].rm_eo, 15);
EXPECT_EQ(matches[1].rm_so, 10);
EXPECT_EQ(matches[1].rm_eo, 15);
EXPECT_EQ(StringView(&match_str[matches[0].rm_so], matches[0].rm_eo - matches[0].rm_so), "hellohellohello");
EXPECT_EQ(StringView(&match_str[matches[1].rm_so], matches[1].rm_eo - matches[1].rm_so), "hello");
match_str = "hellohellohellohello";
EXPECT_EQ(regexec(&regex, match_str, num_matches, matches, REG_GLOBAL), REG_NOERR);
EXPECT_EQ(matches[0].rm_cnt, 1u);
EXPECT_EQ(matches[0].rm_so, 0u);
EXPECT_EQ(matches[0].rm_eo, 15u);
EXPECT_EQ(matches[1].rm_so, 10u);
EXPECT_EQ(matches[1].rm_eo, 15u);
EXPECT_EQ(matches[0].rm_cnt, 1);
EXPECT_EQ(matches[0].rm_so, 0);
EXPECT_EQ(matches[0].rm_eo, 15);
EXPECT_EQ(matches[1].rm_so, 10);
EXPECT_EQ(matches[1].rm_eo, 15);
EXPECT_EQ(StringView(&match_str[matches[0].rm_so], matches[0].rm_eo - matches[0].rm_so), "hellohellohello");
EXPECT_EQ(StringView(&match_str[matches[1].rm_so], matches[1].rm_eo - matches[1].rm_so), "hello");
match_str = "test hellohellohello";
EXPECT_EQ(regexec(&regex, match_str, num_matches, matches, REG_GLOBAL), REG_NOERR);
EXPECT_EQ(matches[0].rm_cnt, 1u);
EXPECT_EQ(matches[0].rm_so, 5u);
EXPECT_EQ(matches[0].rm_eo, 20u);
EXPECT_EQ(matches[1].rm_so, 15u);
EXPECT_EQ(matches[1].rm_eo, 20u);
EXPECT_EQ(matches[0].rm_cnt, 1);
EXPECT_EQ(matches[0].rm_so, 5);
EXPECT_EQ(matches[0].rm_eo, 20);
EXPECT_EQ(matches[1].rm_so, 15);
EXPECT_EQ(matches[1].rm_eo, 20);
EXPECT_EQ(StringView(&match_str[matches[0].rm_so], matches[0].rm_eo - matches[0].rm_so), "hellohellohello");
EXPECT_EQ(StringView(&match_str[matches[1].rm_so], matches[1].rm_eo - matches[1].rm_so), "hello");
@ -855,46 +855,46 @@ TEST_CASE(parens_qualifier_minimum)
match_str = "hello";
EXPECT_EQ(regexec(&regex, match_str, num_matches, matches, 0), REG_NOMATCH);
EXPECT_EQ(matches[0].rm_cnt, 0u);
EXPECT_EQ(matches[0].rm_cnt, 0);
match_str = "hellohellohello";
EXPECT_EQ(regexec(&regex, match_str, num_matches, matches, 0), REG_NOERR);
EXPECT_EQ(matches[0].rm_cnt, 1u);
EXPECT_EQ(matches[0].rm_so, 0u);
EXPECT_EQ(matches[0].rm_eo, 15u);
EXPECT_EQ(matches[1].rm_so, 10u);
EXPECT_EQ(matches[1].rm_eo, 15u);
EXPECT_EQ(matches[0].rm_cnt, 1);
EXPECT_EQ(matches[0].rm_so, 0);
EXPECT_EQ(matches[0].rm_eo, 15);
EXPECT_EQ(matches[1].rm_so, 10);
EXPECT_EQ(matches[1].rm_eo, 15);
EXPECT_EQ(StringView(&match_str[matches[0].rm_so], matches[0].rm_eo - matches[0].rm_so), "hellohellohello");
EXPECT_EQ(StringView(&match_str[matches[1].rm_so], matches[1].rm_eo - matches[1].rm_so), "hello");
match_str = "hellohellohellohello";
EXPECT_EQ(regexec(&regex, match_str, num_matches, matches, REG_SEARCH), REG_NOERR);
EXPECT_EQ(matches[0].rm_cnt, 1u);
EXPECT_EQ(matches[0].rm_so, 0u);
EXPECT_EQ(matches[0].rm_eo, 20u);
EXPECT_EQ(matches[1].rm_so, 15u);
EXPECT_EQ(matches[1].rm_eo, 20u);
EXPECT_EQ(matches[0].rm_cnt, 1);
EXPECT_EQ(matches[0].rm_so, 0);
EXPECT_EQ(matches[0].rm_eo, 20);
EXPECT_EQ(matches[1].rm_so, 15);
EXPECT_EQ(matches[1].rm_eo, 20);
EXPECT_EQ(StringView(&match_str[matches[0].rm_so], matches[0].rm_eo - matches[0].rm_so), "hellohellohellohello");
EXPECT_EQ(StringView(&match_str[matches[1].rm_so], matches[1].rm_eo - matches[1].rm_so), "hello");
match_str = "test hellohellohello";
EXPECT_EQ(regexec(&regex, match_str, num_matches, matches, REG_GLOBAL), REG_NOERR);
EXPECT_EQ(matches[0].rm_cnt, 1u);
EXPECT_EQ(matches[0].rm_so, 5u);
EXPECT_EQ(matches[0].rm_eo, 20u);
EXPECT_EQ(matches[1].rm_so, 15u);
EXPECT_EQ(matches[1].rm_eo, 20u);
EXPECT_EQ(matches[0].rm_cnt, 1);
EXPECT_EQ(matches[0].rm_so, 5);
EXPECT_EQ(matches[0].rm_eo, 20);
EXPECT_EQ(matches[1].rm_so, 15);
EXPECT_EQ(matches[1].rm_eo, 20);
EXPECT_EQ(StringView(&match_str[matches[0].rm_so], matches[0].rm_eo - matches[0].rm_so), "hellohellohello");
EXPECT_EQ(StringView(&match_str[matches[1].rm_so], matches[1].rm_eo - matches[1].rm_so), "hello");
match_str = "test hellohellohellohello";
EXPECT_EQ(regexec(&regex, match_str, num_matches, matches, REG_GLOBAL), REG_NOERR);
EXPECT_EQ(matches[0].rm_cnt, 1u);
EXPECT_EQ(matches[0].rm_so, 5u);
EXPECT_EQ(matches[0].rm_eo, 25u);
EXPECT_EQ(matches[1].rm_so, 20u);
EXPECT_EQ(matches[1].rm_eo, 25u);
EXPECT_EQ(matches[0].rm_cnt, 1);
EXPECT_EQ(matches[0].rm_so, 5);
EXPECT_EQ(matches[0].rm_eo, 25);
EXPECT_EQ(matches[1].rm_so, 20);
EXPECT_EQ(matches[1].rm_eo, 25);
EXPECT_EQ(StringView(&match_str[matches[0].rm_so], matches[0].rm_eo - matches[0].rm_so), "hellohellohellohello");
EXPECT_EQ(StringView(&match_str[matches[1].rm_so], matches[1].rm_eo - matches[1].rm_so), "hello");
@ -913,45 +913,45 @@ TEST_CASE(parens_qualifier_maximum)
match_str = "hello";
EXPECT_EQ(regexec(&regex, match_str, num_matches, matches, 0), REG_NOMATCH);
EXPECT_EQ(matches[0].rm_cnt, 0u);
EXPECT_EQ(matches[0].rm_cnt, 0);
match_str = "hellohellohello";
EXPECT_EQ(regexec(&regex, match_str, num_matches, matches, 0), REG_NOERR);
EXPECT_EQ(matches[0].rm_cnt, 1u);
EXPECT_EQ(matches[0].rm_so, 0u);
EXPECT_EQ(matches[0].rm_eo, 15u);
EXPECT_EQ(matches[1].rm_so, 10u);
EXPECT_EQ(matches[1].rm_eo, 15u);
EXPECT_EQ(matches[0].rm_cnt, 1);
EXPECT_EQ(matches[0].rm_so, 0);
EXPECT_EQ(matches[0].rm_eo, 15);
EXPECT_EQ(matches[1].rm_so, 10);
EXPECT_EQ(matches[1].rm_eo, 15);
EXPECT_EQ(StringView(&match_str[matches[0].rm_so], matches[0].rm_eo - matches[0].rm_so), "hellohellohello");
EXPECT_EQ(StringView(&match_str[matches[1].rm_so], matches[1].rm_eo - matches[1].rm_so), "hello");
match_str = "hellohellohellohello";
EXPECT_EQ(regexec(&regex, match_str, num_matches, matches, REG_GLOBAL), REG_NOERR);
EXPECT_EQ(matches[0].rm_cnt, 1u);
EXPECT_EQ(matches[0].rm_so, 0u);
EXPECT_EQ(matches[0].rm_eo, 15u);
EXPECT_EQ(matches[1].rm_so, 10u);
EXPECT_EQ(matches[1].rm_eo, 15u);
EXPECT_EQ(matches[0].rm_cnt, 1);
EXPECT_EQ(matches[0].rm_so, 0);
EXPECT_EQ(matches[0].rm_eo, 15);
EXPECT_EQ(matches[1].rm_so, 10);
EXPECT_EQ(matches[1].rm_eo, 15);
EXPECT_EQ(StringView(&match_str[matches[0].rm_so], matches[0].rm_eo - matches[0].rm_so), "hellohellohello");
EXPECT_EQ(StringView(&match_str[matches[1].rm_so], matches[1].rm_eo - matches[1].rm_so), "hello");
match_str = "test hellohellohello";
EXPECT_EQ(regexec(&regex, match_str, num_matches, matches, REG_GLOBAL), REG_NOERR);
EXPECT_EQ(matches[0].rm_cnt, 1u);
EXPECT_EQ(matches[0].rm_so, 5u);
EXPECT_EQ(matches[0].rm_eo, 20u);
EXPECT_EQ(matches[1].rm_so, 15u);
EXPECT_EQ(matches[1].rm_eo, 20u);
EXPECT_EQ(matches[0].rm_cnt, 1);
EXPECT_EQ(matches[0].rm_so, 5);
EXPECT_EQ(matches[0].rm_eo, 20);
EXPECT_EQ(matches[1].rm_so, 15);
EXPECT_EQ(matches[1].rm_eo, 20);
EXPECT_EQ(StringView(&match_str[matches[0].rm_so], matches[0].rm_eo - matches[0].rm_so), "hellohellohello");
EXPECT_EQ(StringView(&match_str[matches[1].rm_so], matches[1].rm_eo - matches[1].rm_so), "hello");
match_str = "test hellohellohellohello";
EXPECT_EQ(regexec(&regex, match_str, num_matches, matches, REG_GLOBAL), REG_NOERR);
EXPECT_EQ(matches[0].rm_cnt, 1u);
EXPECT_EQ(matches[0].rm_so, 5u);
EXPECT_EQ(matches[0].rm_eo, 20u);
EXPECT_EQ(matches[1].rm_so, 15u);
EXPECT_EQ(matches[1].rm_eo, 20u);
EXPECT_EQ(matches[0].rm_cnt, 1);
EXPECT_EQ(matches[0].rm_so, 5);
EXPECT_EQ(matches[0].rm_eo, 20);
EXPECT_EQ(matches[1].rm_so, 15);
EXPECT_EQ(matches[1].rm_eo, 20);
EXPECT_EQ(StringView(&match_str[matches[0].rm_so], matches[0].rm_eo - matches[0].rm_so), "hellohellohello");
EXPECT_EQ(StringView(&match_str[matches[1].rm_so], matches[1].rm_eo - matches[1].rm_so), "hello");
@ -970,7 +970,7 @@ TEST_CASE(char_qualifier_min_max)
EXPECT_EQ(regexec(&regex, "cc", num_matches, matches, 0), REG_NOMATCH);
EXPECT_EQ(regexec(&regex, "ccc", num_matches, matches, 0), REG_NOERR);
EXPECT_EQ(regexec(&regex, "cccccccccccccccccccccccccccccc", num_matches, matches, 0), REG_NOERR);
EXPECT_EQ(matches[0].rm_cnt, 1u);
EXPECT_EQ(matches[0].rm_cnt, 1);
EXPECT_EQ(regexec(&regex, "ccccccccccccccccccccccccccccccc", num_matches, matches, 0), REG_NOMATCH);
EXPECT_EQ(regexec(&regex, "ccccccccccccccccccccccccccccccc", num_matches, matches, REG_GLOBAL), REG_NOERR);
EXPECT_EQ(regexec(&regex, "cccccccccccccccccccccccccccccccc", num_matches, matches, 0), REG_NOMATCH);