test: Add testing of various variants of strtok/wcstok

This commit is contained in:
Martin Storsjö committed 2025-03-20 17:28:57 +02:00
1 parent 4ba1178755
commit 4f0ec7f8f8
1 file changed
+40
+40
View File
@@ -69,6 +69,15 @@ const char *context = "";
} \
} while (0)
#define TEST_XSTR(strcmp, type, x, expect, fmt) do { \
const type *str = (x); \
tests++; \
if (!str || strcmp(str, (expect))) { \
fails++; \
printf("%s:%d: %sexpected \"" fmt "\", got \"" fmt "\"\n", __FILE__, __LINE__, context, (expect), str); \
} \
} while (0)
#define TEST_FLT(x, expect) do { \
tests++; \
if ((x) != (expect)) { \
@@ -470,6 +479,36 @@ void test_strings() {
#endif
}
void test_tokenize() {
#define TEST_STRTOK(strtok, type, prefix, strcmp, fmt) do { \
type buf[] = prefix ## " foo bar baz "; \
TEST_XSTR(strcmp, type, strtok(buf, prefix ## " "), prefix ## "foo", fmt); \
TEST_XSTR(strcmp, type, strtok(NULL, prefix ## " "), prefix ## "bar", fmt); \
TEST_XSTR(strcmp, type, strtok(NULL, prefix ## " "), prefix ## "baz", fmt); \
TEST(strtok(NULL, prefix ## " ") == NULL); \
} while (0)
#define TEST_STRTOK_R(strtok_r, type, prefix, strcmp, fmt) do { \
type buf[] = prefix ## " foo bar baz "; \
type *ptr; \
TEST_XSTR(strcmp, type, strtok_r(buf, prefix ## " ", &ptr), prefix ## "foo", fmt); \
TEST_XSTR(strcmp, type, strtok_r(NULL, prefix ## " ", &ptr), prefix ## "bar", fmt); \
TEST_XSTR(strcmp, type, strtok_r(NULL, prefix ## " ", &ptr), prefix ## "baz", fmt); \
TEST(strtok_r(NULL, prefix ## " ", &ptr) == NULL); \
} while (0)
TEST_STRTOK(strtok, char, , strcmp, "%s");
#ifndef _MSC_VER
TEST_STRTOK_R(strtok_r, char, , strcmp, "%s");
#endif
TEST_STRTOK_R(wcstok, wchar_t, L, wcscmp, "%ls");
#ifdef _WIN32
TEST_STRTOK(_wcstok, wchar_t, L, wcscmp, "%ls");
TEST_STRTOK_R(wcstok_s, wchar_t, L, wcscmp, "%ls");
#ifdef __cplusplus
TEST_STRTOK(wcstok, wchar_t, L, wcscmp, "%ls");
#endif
#endif
}
void test_parse_numbers() {
#ifdef _WIN32
_set_invalid_parameter_handler(invalid_parameter);
@@ -2161,6 +2200,7 @@ void test_win32_intrinsics() {
int main(int argc, char *argv[]) {
test_strings();
test_tokenize();
test_parse_numbers();
test_environment();
test_math_rounding();