stdlib: Add failing tests for SDL_strtoull

This commit is contained in:
Carl Åstholm 2024-09-11 00:41:52 +02:00 committed by Sam Lantinga
parent 88d3cb4f90
commit 5331f36789

View file

@ -1347,6 +1347,129 @@ static int SDLCALL stdlib_wcstol(void *arg)
return TEST_COMPLETED;
}
static int SDLCALL stdlib_strtoull(void *arg)
{
const char *text;
unsigned long long result;
char *endp;
unsigned long long expected_result;
char *expected_endp;
// infer decimal
text = "\t 123abcxyz"; // skip leading space
expected_result = 123;
expected_endp = (char *)text + 6;
result = SDL_strtoull(text, &endp, 0);
SDLTest_AssertPass("Call to SDL_strtoull(\"\\t 123abcxyz\", &endp, 0)");
SDLTest_AssertCheck(result == expected_result, "Check result value, expected: %llu, got: %llu", expected_result, result);
SDLTest_AssertCheck(endp == expected_endp, "Check endp value, expected: %p, got: %p", expected_endp, endp);
text = "+123abcxyz";
expected_result = 123;
expected_endp = (char *)text + 4;
result = SDL_strtoull(text, &endp, 0);
SDLTest_AssertPass("Call to SDL_strtoull(\"+123abcxyz\", &endp, 0)");
SDLTest_AssertCheck(result == expected_result, "Check result value, expected: %llu, got: %llu", expected_result, result);
SDLTest_AssertCheck(endp == expected_endp, "Check endp value, expected: %p, got: %p", expected_endp, endp);
text = "-123abcxyz";
expected_result = 0ULL - 123;
expected_endp = (char *)text + 4;
result = SDL_strtoull(text, &endp, 0);
SDLTest_AssertPass("Call to SDL_strtoull(\"-123abcxyz\", &endp, 0)");
SDLTest_AssertCheck(result == expected_result, "Check result value, expected: %llu, got: %llu", expected_result, result);
SDLTest_AssertCheck(endp == expected_endp, "Check endp value, expected: %p, got: %p", expected_endp, endp);
text = "9999999999999999999999999999999999999999abcxyz";
expected_result = ~0ULL; // ULLONG_MAX
expected_endp = (char *)text + 40;
result = SDL_strtoull(text, &endp, 0);
SDLTest_AssertPass("Call to SDL_strtoull(\"9999999999999999999999999999999999999999abcxyz\", &endp, 0)");
SDLTest_AssertCheck(result == expected_result, "Check result value, expected: %llu, got: %llu", expected_result, result);
SDLTest_AssertCheck(endp == expected_endp, "Check endp value, expected: %p, got: %p", expected_endp, endp);
text = "-9999999999999999999999999999999999999999abcxyz";
expected_result = ~0ULL; // ULLONG_MAX
expected_endp = (char *)text + 41;
result = SDL_strtoull(text, &endp, 0);
SDLTest_AssertPass("Call to SDL_strtoull(\"-9999999999999999999999999999999999999999abcxyz\", &endp, 0)");
SDLTest_AssertCheck(result == expected_result, "Check result value, expected: %llu, got: %llu", expected_result, result);
SDLTest_AssertCheck(endp == expected_endp, "Check endp value, expected: %p, got: %p", expected_endp, endp);
// infer hexadecimal
text = "0x123abcxyz";
expected_result = 0x123abc;
expected_endp = (char *)text + 8;
result = SDL_strtoull(text, &endp, 0);
SDLTest_AssertPass("Call to SDL_strtoull(\"0x123abcxyz\", &endp, 0)");
SDLTest_AssertCheck(result == expected_result, "Check result value, expected: %llu, got: %llu", expected_result, result);
SDLTest_AssertCheck(endp == expected_endp, "Check endp value, expected: %p, got: %p", expected_endp, endp);
text = "0X123ABCXYZ"; // uppercase X
expected_result = 0x123abc;
expected_endp = (char *)text + 8;
result = SDL_strtoull(text, &endp, 0);
SDLTest_AssertPass("Call to SDL_strtoull(\"0X123ABCXYZ\", &endp, 0)");
SDLTest_AssertCheck(result == expected_result, "Check result value, expected: %llu, got: %llu", expected_result, result);
SDLTest_AssertCheck(endp == expected_endp, "Check endp value, expected: %p, got: %p", expected_endp, endp);
// infer octal
text = "0123abcxyz";
expected_result = 0123;
expected_endp = (char *)text + 4;
result = SDL_strtoull(text, &endp, 0);
SDLTest_AssertPass("Call to SDL_strtoull(\"0123abcxyz\", &endp, 0)");
SDLTest_AssertCheck(result == expected_result, "Check result value, expected: %llu, got: %llu", expected_result, result);
SDLTest_AssertCheck(endp == expected_endp, "Check endp value, expected: %p, got: %p", expected_endp, endp);
// arbitrary bases
text = "00110011";
expected_result = 51;
expected_endp = (char *)text + 8;
result = SDL_strtoull(text, &endp, 2);
SDLTest_AssertPass("Call to SDL_strtoull(\"00110011\", &endp, 2)");
SDLTest_AssertCheck(result == expected_result, "Check result value, expected: %llu, got: %llu", expected_result, result);
SDLTest_AssertCheck(endp == expected_endp, "Check endp value, expected: %p, got: %p", expected_endp, endp);
text = "-uvwxyz";
expected_result = -991;
expected_endp = (char *)text + 3;
result = SDL_strtoull(text, &endp, 32);
SDLTest_AssertPass("Call to SDL_strtoull(\"-uvwxyz\", &endp, 32)");
SDLTest_AssertCheck(result == expected_result, "Check result value, expected: %llu, got: %llu", expected_result, result);
SDLTest_AssertCheck(endp == expected_endp, "Check endp value, expected: %p, got: %p", expected_endp, endp);
text = "ZzZzZzZzZzZzZzZzZzZzZzZzZ";
expected_result = ~0ULL; // ULLONG_MAX
expected_endp = (char *)text + 25;
result = SDL_strtoull(text, &endp, 36);
SDLTest_AssertPass("Call to SDL_strtoull(\"ZzZzZzZzZzZzZzZzZzZzZzZzZ\", &endp, 36)");
SDLTest_AssertCheck(result == expected_result, "Check result value, expected: %llu, got: %llu", expected_result, result);
SDLTest_AssertCheck(endp == expected_endp, "Check endp value, expected: %p, got: %p", expected_endp, endp);
text = "-0";
expected_result = 0;
expected_endp = (char *)text + 2;
result = SDL_strtoull(text, &endp, 10);
SDLTest_AssertPass("Call to SDL_strtoull(\"-0\", &endp, 10)");
SDLTest_AssertCheck(result == expected_result, "Check result value, expected: %llu, got: %llu", expected_result, result);
SDLTest_AssertCheck(endp == expected_endp, "Check endp value, expected: %p, got: %p", expected_endp, endp);
text = " +0x"; // invalid hexadecimal
expected_result = 0;
expected_endp = (char *)text;
result = SDL_strtoull(text, &endp, 0);
SDLTest_AssertPass("Call to SDL_strtoull(\" +0x\", &endp, 0)");
SDLTest_AssertCheck(result == expected_result, "Check result value, expected: %llu, got: %llu", expected_result, result);
SDLTest_AssertCheck(endp == expected_endp, "Check endp value, expected: %p, got: %p", expected_endp, endp);
return TEST_COMPLETED;
}
/* ================= Test References ================== */
/* Standard C routine test cases */
@ -1398,6 +1521,10 @@ static const SDLTest_TestCaseReference stdlibTest_wcstol = {
stdlib_wcstol, "stdlib_wcstol", "Calls to SDL_wcstol", TEST_ENABLED
};
static const SDLTest_TestCaseReference stdlibTest_strtoull = {
stdlib_strtoull, "stdlib_strtoull", "Calls to SDL_strtoull", TEST_ENABLED
};
/* Sequence of Standard C routine test cases */
static const SDLTest_TestCaseReference *stdlibTests[] = {
&stdlibTest_strnlen,
@ -1412,6 +1539,7 @@ static const SDLTest_TestCaseReference *stdlibTests[] = {
&stdlibTest_iconv,
&stdlibTest_strpbrk,
&stdlibTest_wcstol,
&stdlibTest_strtoull,
NULL
};