/* * PROJECT: ReactOS api tests * LICENSE: GPLv2+ - See COPYING in the top level directory * PURPOSE: Test for _tcstoul * PROGRAMMER: Thomas Faber */ #define WIN32_NO_STATUS #include #include #include #include #include #define StartSeh() ExceptionStatus = STATUS_SUCCESS; _SEH2_TRY { #define EndSeh(ExpectedStatus) } _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) { ExceptionStatus = _SEH2_GetExceptionCode(); } _SEH2_END; ok(ExceptionStatus == ExpectedStatus, "Exception %lx, expected %lx\n", ExceptionStatus, ExpectedStatus) #define ok_ulong(expression, result) \ do { \ unsigned long _value = (expression); \ ok(_value == (result), "Wrong value for '%s', expected: " #result " (%lu), got: %lu\n", \ #expression, (unsigned long)(result), _value); \ } while (0) START_TEST(tcstoul) { NTSTATUS ExceptionStatus; ULONG Result; _TCHAR Dummy; _TCHAR *End; struct { const _TCHAR *Input; int ExpectedLength0; ULONG Expected0; int ExpectedLength10; ULONG Expected10; } Tests[] = { { _T(""), 0, 0, 0, 0 }, { _T(" "), 0, 0, 0, 0 }, { _T(" 0"), 2, 0, 2, 0 }, { _T("0 "), 1, 0, 1, 0 }, { _T("0"), 1, 0, 1, 0 }, { _T("1"), 1, 1, 1, 1 }, { _T("10"), 2, 10, 2, 10 }, { _T("01"), 2, 1, 2, 1 }, { _T("010"), 3, 8, 3, 10 }, { _T("08"), 1, 0, 2, 8 }, { _T("008"), 2, 0, 3, 8 }, { _T("-1"), 2, -1, 2, -1 }, { _T("+1"), 2, 1, 2, 1 }, { _T("--1"), 0, 0, 0, 0 }, { _T("++1"), 0, 0, 0, 0 }, { _T("0a"), 1, 0, 1, 0 }, { _T("0x"), 0, 0, 1, 0 }, { _T("0x0"), 3, 0, 1, 0 }, { _T("0xFFFFFFFF"), 10, -1, 1, 0 }, { _T("0xFFFFFFFFF"),11, -1, 1, 0 }, { _T("4294967295"), 10, -1, 10, -1 }, { _T("4294967296"), 10, -1, 10, -1 }, { _T("4294967297"), 10, -1, 10, -1 }, { _T("42949672951"),11, -1, 11, -1 }, }; const INT TestCount = sizeof(Tests) / sizeof(Tests[0]); INT i; StartSeh() Result = _tcstoul(NULL, NULL, 0); EndSeh(STATUS_ACCESS_VIOLATION); StartSeh() Result = _tcstoul(_T(""), NULL, 0); ok_ulong(Result, 0); EndSeh(STATUS_SUCCESS); StartSeh() Result = _tcstoul(_T("1"), NULL, 0); ok_ulong(Result, 1); EndSeh(STATUS_SUCCESS); Result = _tcstoul(_T("1"), &End, 0); ok_ulong(Result, 1); for (i = 0; i < TestCount; i++) { #ifdef _UNICODE trace("%d: '%ls'\n", i, Tests[i].Input); #else trace("%d: '%s'\n", i, Tests[i].Input); #endif End = &Dummy; Result = _tcstoul(Tests[i].Input, &End, 0); ok_ulong(Result, Tests[i].Expected0); ok_ptr(End, Tests[i].Input + Tests[i].ExpectedLength0); End = &Dummy; Result = _tcstoul(Tests[i].Input, &End, 10); ok_ulong(Result, Tests[i].Expected10); ok_ptr(End, Tests[i].Input + Tests[i].ExpectedLength10); } }