mirror of
https://github.com/libsdl-org/SDL.git
synced 2025-05-29 07:59:11 +00:00
stdlib: Add failing tests for SDL_strtoull
This commit is contained in:
parent
88d3cb4f90
commit
5331f36789
1 changed files with 128 additions and 0 deletions
|
@ -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
|
||||
};
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue