diff -r 26500fc24058 -r e06249e09f99 tests/test_string.c --- a/tests/test_string.c Sun Jan 14 13:13:12 2024 +0100 +++ b/tests/test_string.c Sun Jan 14 13:50:17 2024 +0100 @@ -175,34 +175,37 @@ CX_TEST(test_strstr) { cxstring str = CX_STR("find the match in this string"); - cxstring longstr = CX_STR( - "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijkl" - "mnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwx" - "yzabcdeababababnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghij" - "klmnopqrstuvwxyzaababababababababrstuvwxyzabcdefghijklmnopqrstuv" - "abababababababababababababababababababababababababababababababab" - "abababababababababababababababababababababababababababababababab" - "abababababababababababababababababababababababababababababababab" - "abababababababababababababababababababababababababababababababab" - "abababababababababababababababababababababababababababababababab" - "abababababababababababababababababababababababababababababababab" - "wxyz1234567890"); - cxstring longstrpattern = CX_STR( - "abababababababababababababababababababababababababababababababab" - "abababababababababababababababababababababababababababababababab" - "abababababababababababababababababababababababababababababababab" - "abababababababababababababababababababababababababababababababab" - "abababababababababababababababababababababababababababababababab" + + size_t const longstrpatternlen = 64 + cx_strstr_sbo_size; + size_t const longstrlen = 320 + longstrpatternlen + 14; + + char *longstrc = malloc(longstrlen+1); + char *longstrpatternc = malloc(longstrpatternlen+1); + + memcpy(longstrc, + "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijkl" + "mnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwx" + "yzabcdeababababnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghij" + "klmnopqrstuvwxyzaababababababababrstuvwxyzabcdefghijklmnopqrstuv" + "abababababababababababababababababababababababababababababababab", + 320 ); - cxstring longstrresult = CX_STR( - "abababababababababababababababababababababababababababababababab" - "abababababababababababababababababababababababababababababababab" - "abababababababababababababababababababababababababababababababab" - "abababababababababababababababababababababababababababababababab" - "abababababababababababababababababababababababababababababababab" - "abababababababababababababababababababababababababababababababab" - "wxyz1234567890" + memcpy(longstrpatternc, + "abababababababababababababababababababababababababababababababab", + 64 ); + char x = 'a', y='b', z; + for (size_t i = 0; i < cx_strstr_sbo_size ; i++) { + longstrpatternc[64+i] = x; + longstrc[320+i] = x; + z=x; x=y; y=z; + } + longstrpatternc[longstrpatternlen] = '\0'; + memcpy(longstrc+longstrlen-14, "wxyz1234567890", 15); + + cxmutstr longstr = cx_mutstrn(longstrc, longstrlen); + cxstring longstrpattern = cx_strn(longstrpatternc, longstrpatternlen); + cxmutstr longstrresult = cx_mutstrn(longstrc+256, longstrlen-256); CX_TEST_DO { cxstring notfound = cx_strstr(str, CX_STR("no match")); @@ -216,17 +219,13 @@ CX_TEST_ASSERT(result.length == str.length); CX_TEST_ASSERT(0 == strcmp(result.ptr, str.ptr)); - result = cx_strstr(longstr, longstrpattern); - CX_TEST_ASSERT(result.length == longstrresult.length); - CX_TEST_ASSERT(0 == strcmp(result.ptr, longstrresult.ptr)); + cxmutstr resultm = cx_strstr_m(longstr, longstrpattern); + CX_TEST_ASSERT(resultm.length == longstrresult.length); + CX_TEST_ASSERT(0 == strcmp(resultm.ptr, longstrresult.ptr)); + } - // just for coverage, call the _m variant - cxmutstr mstr = cx_strdup(longstr); - cxmutstr m = cx_strstr_m(mstr, longstrpattern); - CX_TEST_ASSERT(m.length == longstrresult.length); - CX_TEST_ASSERT(0 == strcmp(m.ptr, longstrresult.ptr)); - cx_strfree(&mstr); - } + free(longstrc); + free(longstrpatternc); } CX_TEST(test_strcmp) {