mirror of
https://github.com/ApfelTeeSaft/reactos.git
synced 2026-08-27 11:53:32 +00:00
JIRA issue: CORE-19278 Reduce Wine test shlwapi:string failures. - Rewrite StrToIntA, StrToIntW, StrToIntExA, StrToInt64ExA, StrToIntExW, and StrToInt64ExW functions. - Add testcase StrToInt.
192 lines
4.4 KiB
C
192 lines
4.4 KiB
C
/*
|
|
* PROJECT: ReactOS api tests
|
|
* LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
|
|
* PURPOSE: Tests for StrToInt{,Ex,Ex64}{A,W}
|
|
* COPYRIGHT: Copyright 2026 Katayama Hirofumi MZ <[email protected]>
|
|
*/
|
|
|
|
#include <apitest.h>
|
|
#include <shlwapi.h>
|
|
|
|
#define ok_longlong(expression, result) do { \
|
|
long long _value = (expression); \
|
|
ok(_value == (result), "Wrong value for '%s', expected: " #result " (0x%llx), got: 0x%llx\n", \
|
|
#expression, (long long)(result), _value); \
|
|
} while (0)
|
|
|
|
static VOID TEST_StrToIntA(VOID)
|
|
{
|
|
INT n0, n1;
|
|
LONGLONG n2;
|
|
LPCSTR psz;
|
|
BOOL ret1, ret2;
|
|
|
|
n2 = n1 = 0xDEADFACE;
|
|
psz = NULL;
|
|
n0 = StrToIntA(psz);
|
|
ret1 = StrToIntExA(psz, 0, &n1);
|
|
ret2 = StrToInt64ExA(psz, 0, &n2);
|
|
ok_int(n0, 0);
|
|
ok_int(n1, 0);
|
|
ok_longlong(n2, 0xFFFFFFFFDEADFACE);
|
|
ok_int(ret1, FALSE);
|
|
ok_int(ret2, FALSE);
|
|
|
|
n2 = n1 = 0xDEADFACE;
|
|
psz = "";
|
|
n0 = StrToIntA(psz);
|
|
ret1 = StrToIntExA(psz, 0, &n1);
|
|
ret2 = StrToInt64ExA(psz, 0, &n2);
|
|
ok_int(n0, 0);
|
|
ok_int(n1, 0);
|
|
ok_longlong(n2, 0);
|
|
ok_int(ret1, FALSE);
|
|
ok_int(ret2, FALSE);
|
|
|
|
n2 = n1 = 0xDEADFACE;
|
|
psz = "123";
|
|
n0 = StrToIntA(psz);
|
|
ret1 = StrToIntExA(psz, 0, &n1);
|
|
ret2 = StrToInt64ExA(psz, 0, &n2);
|
|
ok_int(n0, 123);
|
|
ok_int(n1, 123);
|
|
ok_longlong(n2, 123);
|
|
ok_int(ret1, TRUE);
|
|
ok_int(ret2, TRUE);
|
|
|
|
n2 = n1 = 0xDEADFACE;
|
|
psz = "+123";
|
|
n0 = StrToIntA(psz);
|
|
ret1 = StrToIntExA(psz, 0, &n1);
|
|
ret2 = StrToInt64ExA(psz, 0, &n2);
|
|
ok_int(n0, 0);
|
|
ok_int(n1, 123);
|
|
ok_longlong(n2, 123);
|
|
ok_int(ret1, TRUE);
|
|
ok_int(ret2, TRUE);
|
|
|
|
n2 = n1 = 0xDEADFACE;
|
|
psz = "-123";
|
|
n0 = StrToIntA(psz);
|
|
ret1 = StrToIntExA(psz, 0, &n1);
|
|
ret2 = StrToInt64ExA(psz, 0, &n2);
|
|
ok_int(n0, -123);
|
|
ok_int(n1, -123);
|
|
ok_longlong(n2, -123);
|
|
ok_int(ret1, TRUE);
|
|
ok_int(ret2, TRUE);
|
|
|
|
n2 = n1 = 0xDEADFACE;
|
|
psz = " +123";
|
|
n0 = StrToIntA(psz);
|
|
ret1 = StrToIntExA(psz, 0, &n1);
|
|
ret2 = StrToInt64ExA(psz, 0, &n2);
|
|
ok_int(n0, 0);
|
|
ok_int(n1, 123);
|
|
ok_longlong(n2, 123);
|
|
ok_int(ret1, TRUE);
|
|
ok_int(ret2, TRUE);
|
|
|
|
n2 = n1 = 0xDEADFACE;
|
|
psz = " -123";
|
|
n0 = StrToIntA(psz);
|
|
ret1 = StrToIntExA(psz, 0, &n1);
|
|
ret2 = StrToInt64ExA(psz, 0, &n2);
|
|
ok_int(n0, 0);
|
|
ok_int(n1, -123);
|
|
ok_longlong(n2, -123);
|
|
ok_int(ret1, TRUE);
|
|
ok_int(ret2, TRUE);
|
|
}
|
|
|
|
static VOID TEST_StrToIntW(VOID)
|
|
{
|
|
INT n0, n1;
|
|
LONGLONG n2;
|
|
LPCWSTR psz;
|
|
BOOL ret1, ret2;
|
|
|
|
n2 = n1 = 0xDEADFACE;
|
|
psz = NULL;
|
|
n0 = StrToIntW(psz);
|
|
ret1 = StrToIntExW(psz, 0, &n1);
|
|
ret2 = StrToInt64ExW(psz, 0, &n2);
|
|
ok_int(n0, 0);
|
|
ok_int(n1, 0);
|
|
ok_longlong(n2, 0xFFFFFFFFDEADFACE);
|
|
ok_int(ret1, FALSE);
|
|
ok_int(ret2, FALSE);
|
|
|
|
n2 = n1 = 0xDEADFACE;
|
|
psz = L"";
|
|
n0 = StrToIntW(psz);
|
|
ret1 = StrToIntExW(psz, 0, &n1);
|
|
ret2 = StrToInt64ExW(psz, 0, &n2);
|
|
ok_int(n0, 0);
|
|
ok_int(n1, 0);
|
|
ok_longlong(n2, 0);
|
|
ok_int(ret1, FALSE);
|
|
ok_int(ret2, FALSE);
|
|
|
|
n2 = n1 = 0xDEADFACE;
|
|
psz = L"123";
|
|
n0 = StrToIntW(psz);
|
|
ret1 = StrToIntExW(psz, 0, &n1);
|
|
ret2 = StrToInt64ExW(psz, 0, &n2);
|
|
ok_int(n0, 123);
|
|
ok_int(n1, 123);
|
|
ok_longlong(n2, 123);
|
|
ok_int(ret1, TRUE);
|
|
ok_int(ret2, TRUE);
|
|
|
|
n2 = n1 = 0xDEADFACE;
|
|
psz = L"+123";
|
|
n0 = StrToIntW(psz);
|
|
ret1 = StrToIntExW(psz, 0, &n1);
|
|
ret2 = StrToInt64ExW(psz, 0, &n2);
|
|
ok_int(n0, 0);
|
|
ok_int(n1, 123);
|
|
ok_longlong(n2, 123);
|
|
ok_int(ret1, TRUE);
|
|
ok_int(ret2, TRUE);
|
|
|
|
n2 = n1 = 0xDEADFACE;
|
|
psz = L"-123";
|
|
n0 = StrToIntW(psz);
|
|
ret1 = StrToIntExW(psz, 0, &n1);
|
|
ret2 = StrToInt64ExW(psz, 0, &n2);
|
|
ok_int(n0, -123);
|
|
ok_int(n1, -123);
|
|
ok_longlong(n2, -123);
|
|
ok_int(ret1, TRUE);
|
|
ok_int(ret2, TRUE);
|
|
|
|
n2 = n1 = 0xDEADFACE;
|
|
psz = L" +123";
|
|
n0 = StrToIntW(psz);
|
|
ret1 = StrToIntExW(psz, 0, &n1);
|
|
ret2 = StrToInt64ExW(psz, 0, &n2);
|
|
ok_int(n0, 0);
|
|
ok_int(n1, 123);
|
|
ok_longlong(n2, 123);
|
|
ok_int(ret1, TRUE);
|
|
ok_int(ret2, TRUE);
|
|
|
|
n2 = n1 = 0xDEADFACE;
|
|
psz = L" -123";
|
|
n0 = StrToIntW(psz);
|
|
ret1 = StrToIntExW(psz, 0, &n1);
|
|
ret2 = StrToInt64ExW(psz, 0, &n2);
|
|
ok_int(n0, 0);
|
|
ok_int(n1, -123);
|
|
ok_longlong(n2, -123);
|
|
ok_int(ret1, TRUE);
|
|
ok_int(ret2, TRUE);
|
|
}
|
|
|
|
START_TEST(StrToInt)
|
|
{
|
|
TEST_StrToIntA();
|
|
TEST_StrToIntW();
|
|
}
|