--- a/tests/test_string.c Sun Dec 28 14:47:36 2025 +0100 +++ b/tests/test_string.c Sun Dec 28 15:45:39 2025 +0100 @@ -226,34 +226,115 @@ } } -CX_TEST(test_strsubs) { +CX_TEST(test_strsubs_cxs) { cxstring str = cx_str("A test string"); + cxstring sub; CX_TEST_DO { - cxstring sub = cx_strsubs(str, 0); + sub = cx_strsubs(str, 0); + CX_TEST_ASSERT(0 == cx_strcmp(sub, str)); + + sub = cx_strsubs(str, 2); + CX_TEST_ASSERT(0 == cx_strcmp(sub, "test string")); + + sub = cx_strsubs(str, 7); + CX_TEST_ASSERT(0 == cx_strcmp(sub, "string")); + + sub = cx_strsubs(str, 15); + CX_TEST_ASSERT(0 == cx_strcmp(sub, "")); + + sub = cx_strsubsl(str, 2, 4); + CX_TEST_ASSERT(0 == cx_strcmp(sub, "test")); + + sub = cx_strsubsl(str, 7, 3); + CX_TEST_ASSERT(0 == cx_strcmp(sub, "str")); + + sub = cx_strsubsl(str, 7, 20); + CX_TEST_ASSERT(0 == cx_strcmp(sub, "string")); + } +} + +CX_TEST(test_strsubs_cc) { + const char *str = "A test string"; + cxstring sub; + + CX_TEST_DO { + sub = cx_strsubs(str, 0); CX_TEST_ASSERT(0 == cx_strcmp(sub, str)); sub = cx_strsubs(str, 2); - CX_TEST_ASSERT(0 == cx_strcmp(sub, cx_str("test string"))); + CX_TEST_ASSERT(0 == cx_strcmp(sub, "test string")); sub = cx_strsubs(str, 7); - CX_TEST_ASSERT(0 == cx_strcmp(sub, cx_str("string"))); + CX_TEST_ASSERT(0 == cx_strcmp(sub, "string")); sub = cx_strsubs(str, 15); - CX_TEST_ASSERT(0 == cx_strcmp(sub, cx_str(""))); + CX_TEST_ASSERT(0 == cx_strcmp(sub, "")); sub = cx_strsubsl(str, 2, 4); - CX_TEST_ASSERT(0 == cx_strcmp(sub, cx_str("test"))); + CX_TEST_ASSERT(0 == cx_strcmp(sub, "test")); sub = cx_strsubsl(str, 7, 3); - CX_TEST_ASSERT(0 == cx_strcmp(sub, cx_str("str"))); + CX_TEST_ASSERT(0 == cx_strcmp(sub, "str")); sub = cx_strsubsl(str, 7, 20); - CX_TEST_ASSERT(0 == cx_strcmp(sub, cx_str("string"))); + CX_TEST_ASSERT(0 == cx_strcmp(sub, "string")); + } +} + +CX_TEST(test_strsubs_cxms) { + cxmutstr str = cx_mutstr((char*)"A test string"); + cxmutstr sub; + + CX_TEST_DO { + sub = cx_strsubs(str, 0); + CX_TEST_ASSERT(0 == cx_strcmp(sub, str)); + + sub = cx_strsubs(str, 2); + CX_TEST_ASSERT(0 == cx_strcmp(sub, "test string")); + + sub = cx_strsubs(str, 7); + CX_TEST_ASSERT(0 == cx_strcmp(sub, "string")); + + sub = cx_strsubs(str, 15); + CX_TEST_ASSERT(0 == cx_strcmp(sub, "")); + + sub = cx_strsubsl(str, 2, 4); + CX_TEST_ASSERT(0 == cx_strcmp(sub, "test")); + + sub = cx_strsubsl(str, 7, 3); + CX_TEST_ASSERT(0 == cx_strcmp(sub, "str")); - // just for coverage, call the _m variant - cxmutstr m = cx_strsubs_m(cx_mutstrn(NULL, 0), 0); - CX_TEST_ASSERT(0 == cx_strcmp(m, "")); + sub = cx_strsubsl(str, 7, 20); + CX_TEST_ASSERT(0 == cx_strcmp(sub, "string")); + } +} + +CX_TEST(test_strsubs_c) { + char *str = "A test string"; + cxmutstr sub; + + CX_TEST_DO { + sub = cx_strsubs(str, 0); + CX_TEST_ASSERT(0 == cx_strcmp(sub, str)); + + sub = cx_strsubs(str, 2); + CX_TEST_ASSERT(0 == cx_strcmp(sub, "test string")); + + sub = cx_strsubs(str, 7); + CX_TEST_ASSERT(0 == cx_strcmp(sub, "string")); + + sub = cx_strsubs(str, 15); + CX_TEST_ASSERT(0 == cx_strcmp(sub, "")); + + sub = cx_strsubsl(str, 2, 4); + CX_TEST_ASSERT(0 == cx_strcmp(sub, "test")); + + sub = cx_strsubsl(str, 7, 3); + CX_TEST_ASSERT(0 == cx_strcmp(sub, "str")); + + sub = cx_strsubsl(str, 7, 20); + CX_TEST_ASSERT(0 == cx_strcmp(sub, "string")); } } @@ -1566,7 +1647,10 @@ cx_test_register(suite, test_strdup_shortened); cx_test_register(suite, test_strcpy); cx_test_register(suite, test_strlen); - cx_test_register(suite, test_strsubs); + cx_test_register(suite, test_strsubs_cxs); + cx_test_register(suite, test_strsubs_cxms); + cx_test_register(suite, test_strsubs_cc); + cx_test_register(suite, test_strsubs_c); cx_test_register(suite, test_strat); cx_test_register(suite, test_strchr); cx_test_register(suite, test_strrchr);