Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-cw
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-cw
Commits
93189f23
Commit
93189f23
authored
Mar 18, 2003
by
Thomas Mertes
Committed by
Alexandre Julliard
Mar 18, 2003
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Tests for _itoa, _ltoa, _ultoa, _i64toa, _ui64toa, _itow, _ltow,
_ultow, _i64tow, _ui64tow, _atoi64, _wtoi, _wtol, _wtoi64.
parent
6dcc1af7
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
1085 additions
and
1 deletion
+1085
-1
.cvsignore
dlls/ntdll/tests/.cvsignore
+1
-0
Makefile.in
dlls/ntdll/tests/Makefile.in
+2
-1
string.c
dlls/ntdll/tests/string.c
+1082
-0
No files found.
dlls/ntdll/tests/.cvsignore
View file @
93189f23
...
...
@@ -5,4 +5,5 @@ large_int.ok
ntdll_test.exe.spec.c
rtlbitmap.ok
rtlstr.ok
string.ok
testlist.c
dlls/ntdll/tests/Makefile.in
View file @
93189f23
...
...
@@ -10,7 +10,8 @@ CTESTS = \
generated.c
\
large_int.c
\
rtlbitmap.c
\
rtlstr.c
rtlstr.c
\
string.c
@MAKE_TEST_RULES@
...
...
dlls/ntdll/tests/string.c
0 → 100644
View file @
93189f23
/* Unit test suite for string functions and some wcstring functions
*
* Copyright 2003 Thomas Mertes
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* NOTES
* We use function pointers here as there is no import library for NTDLL on
* windows.
*/
#include <stdlib.h>
#include "winbase.h"
#include "wine/test.h"
#include "winnt.h"
#include "winnls.h"
#include "winternl.h"
/* Function ptrs for ntdll calls */
static
HMODULE
hntdll
=
0
;
static
NTSTATUS
(
WINAPI
*
pRtlUnicodeStringToAnsiString
)(
STRING
*
,
const
UNICODE_STRING
*
,
BOOLEAN
);
static
VOID
(
WINAPI
*
pRtlFreeAnsiString
)(
PSTRING
);
static
BOOLEAN
(
WINAPI
*
pRtlCreateUnicodeStringFromAsciiz
)(
PUNICODE_STRING
,
LPCSTR
);
static
VOID
(
WINAPI
*
pRtlFreeUnicodeString
)(
PUNICODE_STRING
);
static
int
(
WINAPIV
*
patoi
)(
const
char
*
);
static
long
(
WINAPIV
*
patol
)(
const
char
*
);
static
LONGLONG
(
WINAPIV
*
p_atoi64
)(
const
char
*
);
static
LPSTR
(
WINAPIV
*
p_itoa
)(
int
,
LPSTR
,
INT
);
static
LPSTR
(
WINAPIV
*
p_ltoa
)(
long
,
LPSTR
,
INT
);
static
LPSTR
(
WINAPIV
*
p_ultoa
)(
unsigned
long
,
LPSTR
,
INT
);
static
LPSTR
(
WINAPIV
*
p_i64toa
)(
LONGLONG
,
LPSTR
,
INT
);
static
LPSTR
(
WINAPIV
*
p_ui64toa
)(
ULONGLONG
,
LPSTR
,
INT
);
static
int
(
WINAPIV
*
p_wtoi
)(
LPWSTR
);
static
long
(
WINAPIV
*
p_wtol
)(
LPWSTR
);
static
LONGLONG
(
WINAPIV
*
p_wtoi64
)(
LPWSTR
);
static
LPWSTR
(
WINAPIV
*
p_itow
)(
int
,
LPWSTR
,
int
);
static
LPWSTR
(
WINAPIV
*
p_ltow
)(
long
,
LPWSTR
,
INT
);
static
LPWSTR
(
WINAPIV
*
p_ultow
)(
unsigned
long
,
LPWSTR
,
INT
);
static
LPWSTR
(
WINAPIV
*
p_i64tow
)(
LONGLONG
,
LPWSTR
,
INT
);
static
LPWSTR
(
WINAPIV
*
p_ui64tow
)(
ULONGLONG
,
LPWSTR
,
INT
);
static
long
(
WINAPIV
*
pwcstol
)(
LPCWSTR
,
LPWSTR
*
,
INT
);
static
ULONG
(
WINAPIV
*
pwcstoul
)(
LPCWSTR
,
LPWSTR
*
,
INT
);
static
void
InitFunctionPtrs
()
{
hntdll
=
LoadLibraryA
(
"ntdll.dll"
);
ok
(
hntdll
!=
0
,
"LoadLibrary failed"
);
if
(
hntdll
)
{
pRtlUnicodeStringToAnsiString
=
(
void
*
)
GetProcAddress
(
hntdll
,
"RtlUnicodeStringToAnsiString"
);
pRtlFreeAnsiString
=
(
void
*
)
GetProcAddress
(
hntdll
,
"RtlFreeAnsiString"
);
pRtlCreateUnicodeStringFromAsciiz
=
(
void
*
)
GetProcAddress
(
hntdll
,
"RtlCreateUnicodeStringFromAsciiz"
);
pRtlFreeUnicodeString
=
(
void
*
)
GetProcAddress
(
hntdll
,
"RtlFreeUnicodeString"
);
patoi
=
(
void
*
)
GetProcAddress
(
hntdll
,
"atoi"
);
patol
=
(
void
*
)
GetProcAddress
(
hntdll
,
"atol"
);
p_atoi64
=
(
void
*
)
GetProcAddress
(
hntdll
,
"_atoi64"
);
p_itoa
=
(
void
*
)
GetProcAddress
(
hntdll
,
"_itoa"
);
p_ltoa
=
(
void
*
)
GetProcAddress
(
hntdll
,
"_ltoa"
);
p_ultoa
=
(
void
*
)
GetProcAddress
(
hntdll
,
"_ultoa"
);
p_i64toa
=
(
void
*
)
GetProcAddress
(
hntdll
,
"_i64toa"
);
p_ui64toa
=
(
void
*
)
GetProcAddress
(
hntdll
,
"_ui64toa"
);
p_wtoi
=
(
void
*
)
GetProcAddress
(
hntdll
,
"_wtoi"
);
p_wtol
=
(
void
*
)
GetProcAddress
(
hntdll
,
"_wtol"
);
p_wtoi64
=
(
void
*
)
GetProcAddress
(
hntdll
,
"_wtoi64"
);
p_itow
=
(
void
*
)
GetProcAddress
(
hntdll
,
"_itow"
);
p_ltow
=
(
void
*
)
GetProcAddress
(
hntdll
,
"_ltow"
);
p_ultow
=
(
void
*
)
GetProcAddress
(
hntdll
,
"_ultow"
);
p_i64tow
=
(
void
*
)
GetProcAddress
(
hntdll
,
"_i64tow"
);
p_ui64tow
=
(
void
*
)
GetProcAddress
(
hntdll
,
"_ui64tow"
);
pwcstol
=
(
void
*
)
GetProcAddress
(
hntdll
,
"wcstol"
);
pwcstoul
=
(
void
*
)
GetProcAddress
(
hntdll
,
"wcstoul"
);
}
/* if */
}
#define LARGE_STRI_BUFFER_LENGTH 67
typedef
struct
{
int
base
;
ULONG
value
;
char
*
Buffer
;
int
mask
;
/* ntdll/msvcrt: 0x01=itoa, 0x02=ltoa, 0x04=ultoa */
/* 0x10=itow, 0x20=ltow, 0x40=ultow */
}
ulong2str_t
;
static
const
ulong2str_t
ulong2str
[]
=
{
{
10
,
123
,
"123
\0
---------------------------------------------------------------"
,
0x77
},
{
2
,
0x80000000U
,
"10000000000000000000000000000000
\0
----------------------------------"
,
0x67
},
{
2
,
-
2147483647
,
"10000000000000000000000000000001
\0
----------------------------------"
,
0x67
},
{
2
,
-
65537
,
"11111111111111101111111111111111
\0
----------------------------------"
,
0x67
},
{
2
,
-
65536
,
"11111111111111110000000000000000
\0
----------------------------------"
,
0x67
},
{
2
,
-
65535
,
"11111111111111110000000000000001
\0
----------------------------------"
,
0x67
},
{
2
,
-
32768
,
"11111111111111111000000000000000
\0
----------------------------------"
,
0x67
},
{
2
,
-
32767
,
"11111111111111111000000000000001
\0
----------------------------------"
,
0x67
},
{
2
,
-
2
,
"11111111111111111111111111111110
\0
----------------------------------"
,
0x67
},
{
2
,
-
1
,
"11111111111111111111111111111111
\0
----------------------------------"
,
0x67
},
{
2
,
0
,
"0
\0
-----------------------------------------------------------------"
,
0x77
},
{
2
,
1
,
"1
\0
-----------------------------------------------------------------"
,
0x77
},
{
2
,
10
,
"1010
\0
--------------------------------------------------------------"
,
0x77
},
{
2
,
100
,
"1100100
\0
-----------------------------------------------------------"
,
0x77
},
{
2
,
1000
,
"1111101000
\0
--------------------------------------------------------"
,
0x77
},
{
2
,
10000
,
"10011100010000
\0
----------------------------------------------------"
,
0x77
},
{
2
,
32767
,
"111111111111111
\0
---------------------------------------------------"
,
0x77
},
{
2
,
32768
,
"1000000000000000
\0
--------------------------------------------------"
,
0x77
},
{
2
,
65535
,
"1111111111111111
\0
--------------------------------------------------"
,
0x77
},
{
2
,
100000
,
"11000011010100000
\0
-------------------------------------------------"
,
0x77
},
{
2
,
234567
,
"111001010001000111
\0
------------------------------------------------"
,
0x77
},
{
2
,
300000
,
"1001001001111100000
\0
-----------------------------------------------"
,
0x77
},
{
2
,
524287
,
"1111111111111111111
\0
-----------------------------------------------"
,
0x77
},
{
2
,
524288
,
"10000000000000000000
\0
----------------------------------------------"
,
0x67
},
{
2
,
1000000
,
"11110100001001000000
\0
----------------------------------------------"
,
0x67
},
{
2
,
10000000
,
"100110001001011010000000
\0
------------------------------------------"
,
0x67
},
{
2
,
100000000
,
"101111101011110000100000000
\0
---------------------------------------"
,
0x67
},
{
2
,
1000000000
,
"111011100110101100101000000000
\0
------------------------------------"
,
0x67
},
{
2
,
1073741823
,
"111111111111111111111111111111
\0
------------------------------------"
,
0x67
},
{
2
,
2147483646
,
"1111111111111111111111111111110
\0
-----------------------------------"
,
0x67
},
{
2
,
2147483647
,
"1111111111111111111111111111111
\0
-----------------------------------"
,
0x67
},
{
2
,
2147483648U
,
"10000000000000000000000000000000
\0
----------------------------------"
,
0x67
},
{
2
,
2147483649U
,
"10000000000000000000000000000001
\0
----------------------------------"
,
0x67
},
{
2
,
4294967294U
,
"11111111111111111111111111111110
\0
----------------------------------"
,
0x67
},
{
2
,
0xFFFFFFFF
,
"11111111111111111111111111111111
\0
----------------------------------"
,
0x67
},
{
8
,
0x80000000U
,
"20000000000
\0
-------------------------------------------------------"
,
0x77
},
{
8
,
-
2147483647
,
"20000000001
\0
-------------------------------------------------------"
,
0x77
},
{
8
,
-
2
,
"37777777776
\0
-------------------------------------------------------"
,
0x77
},
{
8
,
-
1
,
"37777777777
\0
-------------------------------------------------------"
,
0x77
},
{
8
,
0
,
"0
\0
-----------------------------------------------------------------"
,
0x77
},
{
8
,
1
,
"1
\0
-----------------------------------------------------------------"
,
0x77
},
{
8
,
2147483646
,
"17777777776
\0
-------------------------------------------------------"
,
0x77
},
{
8
,
2147483647
,
"17777777777
\0
-------------------------------------------------------"
,
0x77
},
{
8
,
2147483648U
,
"20000000000
\0
-------------------------------------------------------"
,
0x77
},
{
8
,
2147483649U
,
"20000000001
\0
-------------------------------------------------------"
,
0x77
},
{
8
,
4294967294U
,
"37777777776
\0
-------------------------------------------------------"
,
0x77
},
{
8
,
4294967295U
,
"37777777777
\0
-------------------------------------------------------"
,
0x77
},
{
10
,
0x80000000U
,
"-2147483648
\0
-------------------------------------------------------"
,
0x33
},
{
10
,
0x80000000U
,
"2147483648
\0
--------------------------------------------------------"
,
0x44
},
{
10
,
-
2147483647
,
"-2147483647
\0
-------------------------------------------------------"
,
0x33
},
{
10
,
-
2147483647
,
"2147483649
\0
--------------------------------------------------------"
,
0x44
},
{
10
,
-
2
,
"-2
\0
----------------------------------------------------------------"
,
0x33
},
{
10
,
-
2
,
"4294967294
\0
--------------------------------------------------------"
,
0x44
},
{
10
,
-
1
,
"-1
\0
----------------------------------------------------------------"
,
0x33
},
{
10
,
-
1
,
"4294967295
\0
--------------------------------------------------------"
,
0x44
},
{
10
,
0
,
"0
\0
-----------------------------------------------------------------"
,
0x77
},
{
10
,
1
,
"1
\0
-----------------------------------------------------------------"
,
0x77
},
{
10
,
12
,
"12
\0
----------------------------------------------------------------"
,
0x77
},
{
10
,
123
,
"123
\0
---------------------------------------------------------------"
,
0x77
},
{
10
,
1234
,
"1234
\0
--------------------------------------------------------------"
,
0x77
},
{
10
,
12345
,
"12345
\0
-------------------------------------------------------------"
,
0x77
},
{
10
,
123456
,
"123456
\0
------------------------------------------------------------"
,
0x77
},
{
10
,
1234567
,
"1234567
\0
-----------------------------------------------------------"
,
0x77
},
{
10
,
12345678
,
"12345678
\0
----------------------------------------------------------"
,
0x77
},
{
10
,
123456789
,
"123456789
\0
---------------------------------------------------------"
,
0x77
},
{
10
,
2147483646
,
"2147483646
\0
--------------------------------------------------------"
,
0x77
},
{
10
,
2147483647
,
"2147483647
\0
--------------------------------------------------------"
,
0x77
},
{
10
,
2147483648U
,
"-2147483648
\0
-------------------------------------------------------"
,
0x33
},
{
10
,
2147483648U
,
"2147483648
\0
--------------------------------------------------------"
,
0x44
},
{
10
,
2147483649U
,
"-2147483647
\0
-------------------------------------------------------"
,
0x33
},
{
10
,
2147483649U
,
"2147483649
\0
--------------------------------------------------------"
,
0x44
},
{
10
,
4294967294U
,
"-2
\0
----------------------------------------------------------------"
,
0x33
},
{
10
,
4294967294U
,
"4294967294
\0
--------------------------------------------------------"
,
0x44
},
{
10
,
4294967295U
,
"-1
\0
----------------------------------------------------------------"
,
0x33
},
{
10
,
4294967295U
,
"4294967295
\0
--------------------------------------------------------"
,
0x44
},
{
16
,
0
,
"0
\0
-----------------------------------------------------------------"
,
0x77
},
{
16
,
1
,
"1
\0
-----------------------------------------------------------------"
,
0x77
},
{
16
,
2147483646
,
"7ffffffe
\0
----------------------------------------------------------"
,
0x77
},
{
16
,
2147483647
,
"7fffffff
\0
----------------------------------------------------------"
,
0x77
},
{
16
,
0x80000000
,
"80000000
\0
----------------------------------------------------------"
,
0x77
},
{
16
,
0x80000001
,
"80000001
\0
----------------------------------------------------------"
,
0x77
},
{
16
,
0xFFFFFFFE
,
"fffffffe
\0
----------------------------------------------------------"
,
0x77
},
{
16
,
0xFFFFFFFF
,
"ffffffff
\0
----------------------------------------------------------"
,
0x77
},
{
2
,
32768
,
"1000000000000000
\0
--------------------------------------------------"
,
0x77
},
{
2
,
65536
,
"10000000000000000
\0
-------------------------------------------------"
,
0x77
},
{
2
,
131072
,
"100000000000000000
\0
------------------------------------------------"
,
0x77
},
{
16
,
0xffffffff
,
"ffffffff
\0
----------------------------------------------------------"
,
0x77
},
{
16
,
0xa
,
"a
\0
-----------------------------------------------------------------"
,
0x77
},
{
16
,
0
,
"0
\0
-----------------------------------------------------------------"
,
0x77
},
{
20
,
3368421
,
"111111
\0
------------------------------------------------------------"
,
0x77
},
{
36
,
62193781
,
"111111
\0
------------------------------------------------------------"
,
0x77
},
{
37
,
71270178
,
"111111
\0
------------------------------------------------------------"
,
0x77
},
};
#define NB_ULONG2STR (sizeof(ulong2str)/sizeof(*ulong2str))
static
void
one_itoa_test
(
int
test_num
,
const
ulong2str_t
*
ulong2str
)
{
char
dest_str
[
LARGE_STRI_BUFFER_LENGTH
+
1
];
int
value
;
LPSTR
result
;
memset
(
dest_str
,
'-'
,
LARGE_STRI_BUFFER_LENGTH
);
dest_str
[
LARGE_STRI_BUFFER_LENGTH
]
=
'\0'
;
value
=
ulong2str
->
value
;
result
=
p_itoa
(
value
,
dest_str
,
ulong2str
->
base
);
ok
(
result
==
dest_str
,
"(test %d): _itoa(%d, [out], %d) has result %p, expected: %p"
,
test_num
,
value
,
ulong2str
->
base
,
result
,
dest_str
);
ok
(
memcmp
(
dest_str
,
ulong2str
->
Buffer
,
LARGE_STRI_BUFFER_LENGTH
)
==
0
,
"(test %d): _itoa(%d, [out], %d) assigns string
\"
%s
\"
, expected:
\"
%s
\"
"
,
test_num
,
value
,
ulong2str
->
base
,
dest_str
,
ulong2str
->
Buffer
);
}
static
void
one_ltoa_test
(
int
test_num
,
const
ulong2str_t
*
ulong2str
)
{
char
dest_str
[
LARGE_STRI_BUFFER_LENGTH
+
1
];
long
value
;
LPSTR
result
;
memset
(
dest_str
,
'-'
,
LARGE_STRI_BUFFER_LENGTH
);
dest_str
[
LARGE_STRI_BUFFER_LENGTH
]
=
'\0'
;
value
=
ulong2str
->
value
;
result
=
p_ltoa
(
ulong2str
->
value
,
dest_str
,
ulong2str
->
base
);
ok
(
result
==
dest_str
,
"(test %d): _ltoa(%ld, [out], %d) has result %p, expected: %p"
,
test_num
,
value
,
ulong2str
->
base
,
result
,
dest_str
);
ok
(
memcmp
(
dest_str
,
ulong2str
->
Buffer
,
LARGE_STRI_BUFFER_LENGTH
)
==
0
,
"(test %d): _ltoa(%ld, [out], %d) assigns string
\"
%s
\"
, expected:
\"
%s
\"
"
,
test_num
,
value
,
ulong2str
->
base
,
dest_str
,
ulong2str
->
Buffer
);
}
static
void
one_ultoa_test
(
int
test_num
,
const
ulong2str_t
*
ulong2str
)
{
char
dest_str
[
LARGE_STRI_BUFFER_LENGTH
+
1
];
unsigned
long
value
;
LPSTR
result
;
memset
(
dest_str
,
'-'
,
LARGE_STRI_BUFFER_LENGTH
);
dest_str
[
LARGE_STRI_BUFFER_LENGTH
]
=
'\0'
;
value
=
ulong2str
->
value
;
result
=
p_ultoa
(
ulong2str
->
value
,
dest_str
,
ulong2str
->
base
);
ok
(
result
==
dest_str
,
"(test %d): _ultoa(%lu, [out], %d) has result %p, expected: %p"
,
test_num
,
value
,
ulong2str
->
base
,
result
,
dest_str
);
ok
(
memcmp
(
dest_str
,
ulong2str
->
Buffer
,
LARGE_STRI_BUFFER_LENGTH
)
==
0
,
"(test %d): _ultoa(%lu, [out], %d) assigns string
\"
%s
\"
, expected:
\"
%s
\"
"
,
test_num
,
value
,
ulong2str
->
base
,
dest_str
,
ulong2str
->
Buffer
);
}
static
void
test_ulongtoa
(
void
)
{
int
test_num
;
for
(
test_num
=
0
;
test_num
<
NB_ULONG2STR
;
test_num
++
)
{
if
(
ulong2str
[
test_num
].
mask
&
0x01
)
{
one_itoa_test
(
test_num
,
&
ulong2str
[
test_num
]);
}
/* if */
if
(
ulong2str
[
test_num
].
mask
&
0x02
)
{
one_ltoa_test
(
test_num
,
&
ulong2str
[
test_num
]);
}
/* if */
if
(
ulong2str
[
test_num
].
mask
&
0x04
)
{
one_ultoa_test
(
test_num
,
&
ulong2str
[
test_num
]);
}
/* if */
}
/* for */
}
static
void
one_itow_test
(
int
test_num
,
const
ulong2str_t
*
ulong2str
)
{
int
pos
;
WCHAR
expected_wstr
[
LARGE_STRI_BUFFER_LENGTH
+
1
];
WCHAR
dest_wstr
[
LARGE_STRI_BUFFER_LENGTH
+
1
];
UNICODE_STRING
unicode_string
;
STRING
ansi_str
;
int
value
;
LPWSTR
result
;
for
(
pos
=
0
;
pos
<
LARGE_STRI_BUFFER_LENGTH
;
pos
++
)
{
expected_wstr
[
pos
]
=
ulong2str
->
Buffer
[
pos
];
}
/* for */
expected_wstr
[
LARGE_STRI_BUFFER_LENGTH
]
=
'\0'
;
for
(
pos
=
0
;
pos
<
LARGE_STRI_BUFFER_LENGTH
;
pos
++
)
{
dest_wstr
[
pos
]
=
'-'
;
}
/* for */
dest_wstr
[
LARGE_STRI_BUFFER_LENGTH
]
=
'\0'
;
unicode_string
.
Length
=
LARGE_STRI_BUFFER_LENGTH
*
sizeof
(
WCHAR
);
unicode_string
.
MaximumLength
=
unicode_string
.
Length
+
sizeof
(
WCHAR
);
unicode_string
.
Buffer
=
dest_wstr
;
value
=
ulong2str
->
value
;
result
=
p_itow
(
value
,
dest_wstr
,
ulong2str
->
base
);
pRtlUnicodeStringToAnsiString
(
&
ansi_str
,
&
unicode_string
,
1
);
ok
(
result
==
dest_wstr
,
"(test %d): _itow(%d, [out], %d) has result %p, expected: %p"
,
test_num
,
value
,
ulong2str
->
base
,
result
,
dest_wstr
);
ok
(
memcmp
(
dest_wstr
,
expected_wstr
,
LARGE_STRI_BUFFER_LENGTH
*
sizeof
(
WCHAR
))
==
0
,
"(test %d): _itow(%d, [out], %d) assigns string
\"
%s
\"
, expected:
\"
%s
\"
"
,
test_num
,
value
,
ulong2str
->
base
,
ansi_str
.
Buffer
,
ulong2str
->
Buffer
);
pRtlFreeAnsiString
(
&
ansi_str
);
}
static
void
one_ltow_test
(
int
test_num
,
const
ulong2str_t
*
ulong2str
)
{
int
pos
;
WCHAR
expected_wstr
[
LARGE_STRI_BUFFER_LENGTH
+
1
];
WCHAR
dest_wstr
[
LARGE_STRI_BUFFER_LENGTH
+
1
];
UNICODE_STRING
unicode_string
;
STRING
ansi_str
;
long
value
;
LPWSTR
result
;
for
(
pos
=
0
;
pos
<
LARGE_STRI_BUFFER_LENGTH
;
pos
++
)
{
expected_wstr
[
pos
]
=
ulong2str
->
Buffer
[
pos
];
}
/* for */
expected_wstr
[
LARGE_STRI_BUFFER_LENGTH
]
=
'\0'
;
for
(
pos
=
0
;
pos
<
LARGE_STRI_BUFFER_LENGTH
;
pos
++
)
{
dest_wstr
[
pos
]
=
'-'
;
}
/* for */
dest_wstr
[
LARGE_STRI_BUFFER_LENGTH
]
=
'\0'
;
unicode_string
.
Length
=
LARGE_STRI_BUFFER_LENGTH
*
sizeof
(
WCHAR
);
unicode_string
.
MaximumLength
=
unicode_string
.
Length
+
sizeof
(
WCHAR
);
unicode_string
.
Buffer
=
dest_wstr
;
value
=
ulong2str
->
value
;
result
=
p_ltow
(
value
,
dest_wstr
,
ulong2str
->
base
);
pRtlUnicodeStringToAnsiString
(
&
ansi_str
,
&
unicode_string
,
1
);
ok
(
result
==
dest_wstr
,
"(test %d): _ltow(%ld, [out], %d) has result %p, expected: %p"
,
test_num
,
value
,
ulong2str
->
base
,
result
,
dest_wstr
);
ok
(
memcmp
(
dest_wstr
,
expected_wstr
,
LARGE_STRI_BUFFER_LENGTH
*
sizeof
(
WCHAR
))
==
0
,
"(test %d): _ltow(%ld, [out], %d) assigns string
\"
%s
\"
, expected:
\"
%s
\"
"
,
test_num
,
value
,
ulong2str
->
base
,
ansi_str
.
Buffer
,
ulong2str
->
Buffer
);
pRtlFreeAnsiString
(
&
ansi_str
);
}
static
void
one_ultow_test
(
int
test_num
,
const
ulong2str_t
*
ulong2str
)
{
int
pos
;
WCHAR
expected_wstr
[
LARGE_STRI_BUFFER_LENGTH
+
1
];
WCHAR
dest_wstr
[
LARGE_STRI_BUFFER_LENGTH
+
1
];
UNICODE_STRING
unicode_string
;
STRING
ansi_str
;
unsigned
long
value
;
LPWSTR
result
;
for
(
pos
=
0
;
pos
<
LARGE_STRI_BUFFER_LENGTH
;
pos
++
)
{
expected_wstr
[
pos
]
=
ulong2str
->
Buffer
[
pos
];
}
/* for */
expected_wstr
[
LARGE_STRI_BUFFER_LENGTH
]
=
'\0'
;
for
(
pos
=
0
;
pos
<
LARGE_STRI_BUFFER_LENGTH
;
pos
++
)
{
dest_wstr
[
pos
]
=
'-'
;
}
/* for */
dest_wstr
[
LARGE_STRI_BUFFER_LENGTH
]
=
'\0'
;
unicode_string
.
Length
=
LARGE_STRI_BUFFER_LENGTH
*
sizeof
(
WCHAR
);
unicode_string
.
MaximumLength
=
unicode_string
.
Length
+
sizeof
(
WCHAR
);
unicode_string
.
Buffer
=
dest_wstr
;
value
=
ulong2str
->
value
;
result
=
p_ultow
(
value
,
dest_wstr
,
ulong2str
->
base
);
pRtlUnicodeStringToAnsiString
(
&
ansi_str
,
&
unicode_string
,
1
);
ok
(
result
==
dest_wstr
,
"(test %d): _ultow(%lu, [out], %d) has result %p, expected: %p"
,
test_num
,
value
,
ulong2str
->
base
,
result
,
dest_wstr
);
ok
(
memcmp
(
dest_wstr
,
expected_wstr
,
LARGE_STRI_BUFFER_LENGTH
*
sizeof
(
WCHAR
))
==
0
,
"(test %d): _ultow(%lu, [out], %d) assigns string
\"
%s
\"
, expected:
\"
%s
\"
"
,
test_num
,
value
,
ulong2str
->
base
,
ansi_str
.
Buffer
,
ulong2str
->
Buffer
);
pRtlFreeAnsiString
(
&
ansi_str
);
}
static
void
test_ulongtow
(
void
)
{
int
test_num
;
int
pos
;
WCHAR
expected_wstr
[
LARGE_STRI_BUFFER_LENGTH
+
1
];
LPWSTR
result
;
for
(
test_num
=
0
;
test_num
<
NB_ULONG2STR
;
test_num
++
)
{
if
(
ulong2str
[
test_num
].
mask
&
0x10
)
{
one_itow_test
(
test_num
,
&
ulong2str
[
test_num
]);
}
/* if */
if
(
ulong2str
[
test_num
].
mask
&
0x20
)
{
one_ltow_test
(
test_num
,
&
ulong2str
[
test_num
]);
}
/* if */
if
(
ulong2str
[
test_num
].
mask
&
0x40
)
{
one_ultow_test
(
test_num
,
&
ulong2str
[
test_num
]);
}
/* if */
}
/* for */
for
(
pos
=
0
;
pos
<
LARGE_STRI_BUFFER_LENGTH
;
pos
++
)
{
expected_wstr
[
pos
]
=
ulong2str
[
0
].
Buffer
[
pos
];
}
/* for */
expected_wstr
[
LARGE_STRI_BUFFER_LENGTH
]
=
'\0'
;
result
=
p_itow
(
ulong2str
[
0
].
value
,
NULL
,
10
);
ok
(
result
==
NULL
,
"(test a): _itow(%ld, NULL, 10) has result %p, expected: NULL"
,
ulong2str
[
0
].
value
,
result
);
for
(
pos
=
0
;
pos
<
LARGE_STRI_BUFFER_LENGTH
;
pos
++
)
{
expected_wstr
[
pos
]
=
ulong2str
[
0
].
Buffer
[
pos
];
}
/* for */
expected_wstr
[
LARGE_STRI_BUFFER_LENGTH
]
=
'\0'
;
result
=
p_ltow
(
ulong2str
[
0
].
value
,
NULL
,
10
);
ok
(
result
==
NULL
,
"(test b): _ltow(%ld, NULL, 10) has result %p, expected: NULL"
,
ulong2str
[
0
].
value
,
result
);
for
(
pos
=
0
;
pos
<
LARGE_STRI_BUFFER_LENGTH
;
pos
++
)
{
expected_wstr
[
pos
]
=
ulong2str
[
0
].
Buffer
[
pos
];
}
/* for */
expected_wstr
[
LARGE_STRI_BUFFER_LENGTH
]
=
'\0'
;
result
=
p_ultow
(
ulong2str
[
0
].
value
,
NULL
,
10
);
ok
(
result
==
NULL
,
"(test c): _ultow(%ld, NULL, 10) has result %p, expected: NULL"
,
ulong2str
[
0
].
value
,
result
);
}
typedef
struct
{
int
base
;
ULONGLONG
value
;
char
*
Buffer
;
int
mask
;
/* ntdll/msvcrt: 0x01=i64toa, 0x02=ui64toa, 0x04=wrong _i64toa try next example */
/* 0x10=i64tow, 0x20=ui64tow, 0x40=wrong _i64tow try next example */
}
ulonglong2str_t
;
static
const
ulonglong2str_t
ulonglong2str
[]
=
{
{
10
,
123
,
"123
\0
---------------------------------------------------------------"
,
0x33
},
{
2
,
0x80000000U
,
"10000000000000000000000000000000
\0
----------------------------------"
,
0x33
},
{
2
,
-
2147483647
,
"1111111111111111111111111111111110000000000000000000000000000001
\0
--"
,
0x33
},
{
2
,
-
65537
,
"1111111111111111111111111111111111111111111111101111111111111111
\0
--"
,
0x33
},
{
2
,
-
65536
,
"1111111111111111111111111111111111111111111111110000000000000000
\0
--"
,
0x33
},
{
2
,
-
65535
,
"1111111111111111111111111111111111111111111111110000000000000001
\0
--"
,
0x33
},
{
2
,
-
32768
,
"1111111111111111111111111111111111111111111111111000000000000000
\0
--"
,
0x33
},
{
2
,
-
32767
,
"1111111111111111111111111111111111111111111111111000000000000001
\0
--"
,
0x33
},
{
2
,
-
2
,
"1111111111111111111111111111111111111111111111111111111111111110
\0
--"
,
0x33
},
{
2
,
-
1
,
"1111111111111111111111111111111111111111111111111111111111111111
\0
--"
,
0x33
},
{
2
,
0
,
"0
\0
-----------------------------------------------------------------"
,
0x33
},
{
2
,
1
,
"1
\0
-----------------------------------------------------------------"
,
0x33
},
{
2
,
10
,
"1010
\0
--------------------------------------------------------------"
,
0x33
},
{
2
,
100
,
"1100100
\0
-----------------------------------------------------------"
,
0x33
},
{
2
,
1000
,
"1111101000
\0
--------------------------------------------------------"
,
0x33
},
{
2
,
10000
,
"10011100010000
\0
----------------------------------------------------"
,
0x33
},
{
2
,
32767
,
"111111111111111
\0
---------------------------------------------------"
,
0x33
},
{
2
,
32768
,
"1000000000000000
\0
--------------------------------------------------"
,
0x33
},
{
2
,
65535
,
"1111111111111111
\0
--------------------------------------------------"
,
0x33
},
{
2
,
100000
,
"11000011010100000
\0
-------------------------------------------------"
,
0x33
},
{
2
,
234567
,
"111001010001000111
\0
------------------------------------------------"
,
0x33
},
{
2
,
300000
,
"1001001001111100000
\0
-----------------------------------------------"
,
0x33
},
{
2
,
524287
,
"1111111111111111111
\0
-----------------------------------------------"
,
0x33
},
{
2
,
524288
,
"10000000000000000000
\0
----------------------------------------------"
,
0x33
},
{
2
,
1000000
,
"11110100001001000000
\0
----------------------------------------------"
,
0x33
},
{
2
,
10000000
,
"100110001001011010000000
\0
------------------------------------------"
,
0x33
},
{
2
,
100000000
,
"101111101011110000100000000
\0
---------------------------------------"
,
0x33
},
{
2
,
1000000000
,
"111011100110101100101000000000
\0
------------------------------------"
,
0x33
},
{
2
,
1073741823
,
"111111111111111111111111111111
\0
------------------------------------"
,
0x33
},
{
2
,
2147483646
,
"1111111111111111111111111111110
\0
-----------------------------------"
,
0x33
},
{
2
,
2147483647
,
"1111111111111111111111111111111
\0
-----------------------------------"
,
0x33
},
{
2
,
2147483648U
,
"10000000000000000000000000000000
\0
----------------------------------"
,
0x33
},
{
2
,
2147483649U
,
"10000000000000000000000000000001
\0
----------------------------------"
,
0x33
},
{
2
,
4294967294U
,
"11111111111111111111111111111110
\0
----------------------------------"
,
0x33
},
{
2
,
0xFFFFFFFF
,
"11111111111111111111111111111111
\0
----------------------------------"
,
0x33
},
{
2
,
0x1FFFFFFFF
,
"111111111111111111111111111111111
\0
---------------------------------"
,
0x33
},
{
2
,
10000000000
,
"1001010100000010111110010000000000
\0
--------------------------------"
,
0x33
},
{
2
,
0x3FFFFFFFF
,
"1111111111111111111111111111111111
\0
--------------------------------"
,
0x33
},
{
2
,
0x7FFFFFFFF
,
"11111111111111111111111111111111111
\0
-------------------------------"
,
0x33
},
{
2
,
0xFFFFFFFFF
,
"111111111111111111111111111111111111
\0
------------------------------"
,
0x33
},
{
2
,
100000000000
,
"1011101001000011101101110100000000000
\0
-----------------------------"
,
0x33
},
{
2
,
0x1FFFFFFFFF
,
"1111111111111111111111111111111111111
\0
-----------------------------"
,
0x33
},
{
2
,
0x3FFFFFFFFF
,
"11111111111111111111111111111111111111
\0
----------------------------"
,
0x33
},
{
2
,
0x7FFFFFFFFF
,
"111111111111111111111111111111111111111
\0
---------------------------"
,
0x33
},
{
2
,
0xFFFFFFFFFF
,
"1111111111111111111111111111111111111111
\0
--------------------------"
,
0x33
},
{
8
,
0x80000000U
,
"20000000000
\0
-------------------------------------------------------"
,
0x33
},
{
8
,
-
2147483647
,
"1777777777760000000001
\0
--------------------------------------------"
,
0x33
},
{
8
,
-
2
,
"1777777777777777777776
\0
--------------------------------------------"
,
0x33
},
{
8
,
-
1
,
"1777777777777777777777
\0
--------------------------------------------"
,
0x33
},
{
8
,
0
,
"0
\0
-----------------------------------------------------------------"
,
0x33
},
{
8
,
1
,
"1
\0
-----------------------------------------------------------------"
,
0x33
},
{
8
,
2147483646
,
"17777777776
\0
-------------------------------------------------------"
,
0x33
},
{
8
,
2147483647
,
"17777777777
\0
-------------------------------------------------------"
,
0x33
},
{
8
,
2147483648U
,
"20000000000
\0
-------------------------------------------------------"
,
0x33
},
{
8
,
2147483649U
,
"20000000001
\0
-------------------------------------------------------"
,
0x33
},
{
8
,
4294967294U
,
"37777777776
\0
-------------------------------------------------------"
,
0x33
},
{
8
,
4294967295U
,
"37777777777
\0
-------------------------------------------------------"
,
0x33
},
{
10
,
0x80000000U
,
"2147483648
\0
--------------------------------------------------------"
,
0x33
},
{
10
,
-
2147483647
,
"-2147483647
\0
-------------------------------------------------------"
,
0x55
},
{
10
,
-
2147483647
,
"-18446744071562067969
\0
---------------------------------------------"
,
0x00
},
{
10
,
-
2147483647
,
"18446744071562067969
\0
----------------------------------------------"
,
0x22
},
{
10
,
-
2
,
"-2
\0
----------------------------------------------------------------"
,
0x55
},
{
10
,
-
2
,
"-18446744073709551614
\0
---------------------------------------------"
,
0x00
},
{
10
,
-
2
,
"18446744073709551614
\0
----------------------------------------------"
,
0x22
},
{
10
,
-
1
,
"-1
\0
----------------------------------------------------------------"
,
0x55
},
{
10
,
-
1
,
"-18446744073709551615
\0
---------------------------------------------"
,
0x00
},
{
10
,
-
1
,
"18446744073709551615
\0
----------------------------------------------"
,
0x22
},
{
10
,
0
,
"0
\0
-----------------------------------------------------------------"
,
0x33
},
{
10
,
1
,
"1
\0
-----------------------------------------------------------------"
,
0x33
},
{
10
,
12
,
"12
\0
----------------------------------------------------------------"
,
0x33
},
{
10
,
123
,
"123
\0
---------------------------------------------------------------"
,
0x33
},
{
10
,
1234
,
"1234
\0
--------------------------------------------------------------"
,
0x33
},
{
10
,
12345
,
"12345
\0
-------------------------------------------------------------"
,
0x33
},
{
10
,
123456
,
"123456
\0
------------------------------------------------------------"
,
0x33
},
{
10
,
1234567
,
"1234567
\0
-----------------------------------------------------------"
,
0x33
},
{
10
,
12345678
,
"12345678
\0
----------------------------------------------------------"
,
0x33
},
{
10
,
123456789
,
"123456789
\0
---------------------------------------------------------"
,
0x33
},
{
10
,
2147483646
,
"2147483646
\0
--------------------------------------------------------"
,
0x33
},
{
10
,
2147483647
,
"2147483647
\0
--------------------------------------------------------"
,
0x33
},
{
10
,
2147483648U
,
"2147483648
\0
--------------------------------------------------------"
,
0x33
},
{
10
,
2147483649U
,
"2147483649
\0
--------------------------------------------------------"
,
0x33
},
{
10
,
4294967294U
,
"4294967294
\0
--------------------------------------------------------"
,
0x33
},
{
10
,
4294967295U
,
"4294967295
\0
--------------------------------------------------------"
,
0x33
},
{
10
,
12345678901U
,
"12345678901
\0
-------------------------------------------------------"
,
0x33
},
{
10
,
987654321012U
,
"987654321012
\0
------------------------------------------------------"
,
0x33
},
{
10
,
1928374656574U
,
"1928374656574
\0
-----------------------------------------------------"
,
0x33
},
{
10
,
0xBADCAFEFACE
,
"12841062955726
\0
----------------------------------------------------"
,
0x33
},
{
10
,
0x5BADCAFEFACE
,
"100801993177806
\0
---------------------------------------------------"
,
0x33
},
{
10
,
0xAFACEBEEFCAFE
,
"3090515640699646
\0
--------------------------------------------------"
,
0x33
},
{
10
,
0xA5BEEFABCDCAFE
,
"46653307746110206
\0
-------------------------------------------------"
,
0x33
},
{
10
,
0x1F8CF9BF2DF3AF1
,
"142091656963767025
\0
------------------------------------------------"
,
0x33
},
{
10
,
0xFFFFFFFFFFFFFFF
,
"1152921504606846975
\0
-----------------------------------------------"
,
0x33
},
{
10
,
0x7FFFFFFFFFFFFFFF
,
"9223372036854775807
\0
-----------------------------------------------"
,
0x33
},
{
10
,
0x8000000000000000
,
"-9223372036854775808
\0
----------------------------------------------"
,
0x11
},
{
10
,
0x8000000000000000
,
"9223372036854775808
\0
-----------------------------------------------"
,
0x22
},
{
10
,
0x8000000000000001
,
"-9223372036854775807
\0
----------------------------------------------"
,
0x55
},
{
10
,
0x8000000000000001
,
"-9223372036854775809
\0
----------------------------------------------"
,
0x00
},
{
10
,
0x8000000000000001
,
"9223372036854775809
\0
-----------------------------------------------"
,
0x22
},
{
10
,
0x8000000000000002
,
"-9223372036854775806
\0
----------------------------------------------"
,
0x55
},
{
10
,
0x8000000000000002
,
"-9223372036854775810
\0
----------------------------------------------"
,
0x00
},
{
10
,
0x8000000000000002
,
"9223372036854775810
\0
-----------------------------------------------"
,
0x22
},
{
10
,
0xFFFFFFFFFFFFFFFE
,
"-2
\0
----------------------------------------------------------------"
,
0x55
},
{
10
,
0xFFFFFFFFFFFFFFFE
,
"-18446744073709551614
\0
---------------------------------------------"
,
0x00
},
{
10
,
0xFFFFFFFFFFFFFFFE
,
"18446744073709551614
\0
----------------------------------------------"
,
0x22
},
{
10
,
0xFFFFFFFFFFFFFFFF
,
"-1
\0
----------------------------------------------------------------"
,
0x55
},
{
10
,
0xFFFFFFFFFFFFFFFF
,
"-18446744073709551615
\0
---------------------------------------------"
,
0x00
},
{
10
,
0xFFFFFFFFFFFFFFFF
,
"18446744073709551615
\0
----------------------------------------------"
,
0x22
},
{
16
,
0
,
"0
\0
-----------------------------------------------------------------"
,
0x33
},
{
16
,
1
,
"1
\0
-----------------------------------------------------------------"
,
0x33
},
{
16
,
2147483646
,
"7ffffffe
\0
----------------------------------------------------------"
,
0x33
},
{
16
,
2147483647
,
"7fffffff
\0
----------------------------------------------------------"
,
0x33
},
{
16
,
0x80000000
,
"80000000
\0
----------------------------------------------------------"
,
0x33
},
{
16
,
0x80000001
,
"80000001
\0
----------------------------------------------------------"
,
0x33
},
{
16
,
0xFFFFFFFE
,
"fffffffe
\0
----------------------------------------------------------"
,
0x33
},
{
16
,
0xFFFFFFFF
,
"ffffffff
\0
----------------------------------------------------------"
,
0x33
},
{
16
,
0x100000000
,
"100000000
\0
---------------------------------------------------------"
,
0x33
},
{
16
,
0xBADDEADBEEF
,
"baddeadbeef
\0
-------------------------------------------------------"
,
0x33
},
{
16
,
0x8000000000000000
,
"8000000000000000
\0
--------------------------------------------------"
,
0x33
},
{
16
,
0xFEDCBA9876543210
,
"fedcba9876543210
\0
--------------------------------------------------"
,
0x33
},
{
16
,
0xFFFFFFFF80000001
,
"ffffffff80000001
\0
--------------------------------------------------"
,
0x33
},
{
16
,
0xFFFFFFFFFFFFFFFE
,
"fffffffffffffffe
\0
--------------------------------------------------"
,
0x33
},
{
16
,
0xFFFFFFFFFFFFFFFF
,
"ffffffffffffffff
\0
--------------------------------------------------"
,
0x33
},
{
2
,
32768
,
"1000000000000000
\0
--------------------------------------------------"
,
0x33
},
{
2
,
65536
,
"10000000000000000
\0
-------------------------------------------------"
,
0x33
},
{
2
,
131072
,
"100000000000000000
\0
------------------------------------------------"
,
0x33
},
{
16
,
0xffffffff
,
"ffffffff
\0
----------------------------------------------------------"
,
0x33
},
{
16
,
0xa
,
"a
\0
-----------------------------------------------------------------"
,
0x33
},
{
16
,
0
,
"0
\0
-----------------------------------------------------------------"
,
0x33
},
{
20
,
3368421
,
"111111
\0
------------------------------------------------------------"
,
0x33
},
{
36
,
62193781
,
"111111
\0
------------------------------------------------------------"
,
0x33
},
{
37
,
71270178
,
"111111
\0
------------------------------------------------------------"
,
0x33
},
{
99
,
9606940300
,
"111111
\0
------------------------------------------------------------"
,
0x33
},
};
#define NB_ULONGLONG2STR (sizeof(ulonglong2str)/sizeof(*ulonglong2str))
static
void
one_i64toa_test
(
int
test_num
,
const
ulonglong2str_t
*
ulonglong2str
)
{
LPSTR
result
;
char
dest_str
[
LARGE_STRI_BUFFER_LENGTH
+
1
];
memset
(
dest_str
,
'-'
,
LARGE_STRI_BUFFER_LENGTH
);
dest_str
[
LARGE_STRI_BUFFER_LENGTH
]
=
'\0'
;
result
=
p_i64toa
(
ulonglong2str
->
value
,
dest_str
,
ulonglong2str
->
base
);
ok
(
result
==
dest_str
,
"(test %d): _i64toa(%Lu, [out], %d) has result %p, expected: %p"
,
test_num
,
ulonglong2str
->
value
,
ulonglong2str
->
base
,
result
,
dest_str
);
if
(
ulonglong2str
->
mask
&
0x04
)
{
if
(
memcmp
(
dest_str
,
ulonglong2str
->
Buffer
,
LARGE_STRI_BUFFER_LENGTH
)
!=
0
)
{
if
(
memcmp
(
dest_str
,
ulonglong2str
[
1
].
Buffer
,
LARGE_STRI_BUFFER_LENGTH
)
!=
0
)
{
ok
(
memcmp
(
dest_str
,
ulonglong2str
->
Buffer
,
LARGE_STRI_BUFFER_LENGTH
)
==
0
,
"(test %d): _i64toa(%Lu, [out], %d) assigns string
\"
%s
\"
, expected:
\"
%s
\"
"
,
test_num
,
ulonglong2str
->
value
,
ulonglong2str
->
base
,
dest_str
,
ulonglong2str
->
Buffer
);
}
/* if */
}
/* if */
}
else
{
ok
(
memcmp
(
dest_str
,
ulonglong2str
->
Buffer
,
LARGE_STRI_BUFFER_LENGTH
)
==
0
,
"(test %d): _i64toa(%Lu, [out], %d) assigns string
\"
%s
\"
, expected:
\"
%s
\"
"
,
test_num
,
ulonglong2str
->
value
,
ulonglong2str
->
base
,
dest_str
,
ulonglong2str
->
Buffer
);
}
/* if */
}
static
void
one_ui64toa_test
(
int
test_num
,
const
ulonglong2str_t
*
ulonglong2str
)
{
LPSTR
result
;
char
dest_str
[
LARGE_STRI_BUFFER_LENGTH
+
1
];
memset
(
dest_str
,
'-'
,
LARGE_STRI_BUFFER_LENGTH
);
dest_str
[
LARGE_STRI_BUFFER_LENGTH
]
=
'\0'
;
result
=
p_ui64toa
(
ulonglong2str
->
value
,
dest_str
,
ulonglong2str
->
base
);
ok
(
result
==
dest_str
,
"(test %d): _ui64toa(%Lu, [out], %d) has result %p, expected: %p"
,
test_num
,
ulonglong2str
->
value
,
ulonglong2str
->
base
,
result
,
dest_str
);
ok
(
memcmp
(
dest_str
,
ulonglong2str
->
Buffer
,
LARGE_STRI_BUFFER_LENGTH
)
==
0
,
"(test %d): _ui64toa(%Lu, [out], %d) assigns string
\"
%s
\"
, expected:
\"
%s
\"
"
,
test_num
,
ulonglong2str
->
value
,
ulonglong2str
->
base
,
dest_str
,
ulonglong2str
->
Buffer
);
}
static
void
test_ulonglongtoa
(
void
)
{
int
test_num
;
for
(
test_num
=
0
;
test_num
<
NB_ULONGLONG2STR
;
test_num
++
)
{
if
(
ulonglong2str
[
test_num
].
mask
&
0x01
)
{
one_i64toa_test
(
test_num
,
&
ulonglong2str
[
test_num
]);
}
/* if */
if
(
p_ui64toa
!=
NULL
)
{
if
(
ulonglong2str
[
test_num
].
mask
&
0x02
)
{
one_ui64toa_test
(
test_num
,
&
ulonglong2str
[
test_num
]);
}
/* if */
}
/* if */
}
/* for */
}
static
void
one_i64tow_test
(
int
test_num
,
const
ulonglong2str_t
*
ulonglong2str
)
{
int
pos
;
WCHAR
expected_wstr
[
LARGE_STRI_BUFFER_LENGTH
+
1
];
WCHAR
dest_wstr
[
LARGE_STRI_BUFFER_LENGTH
+
1
];
UNICODE_STRING
unicode_string
;
STRING
ansi_str
;
LPWSTR
result
;
for
(
pos
=
0
;
pos
<
LARGE_STRI_BUFFER_LENGTH
;
pos
++
)
{
expected_wstr
[
pos
]
=
ulonglong2str
->
Buffer
[
pos
];
}
/* for */
expected_wstr
[
LARGE_STRI_BUFFER_LENGTH
]
=
'\0'
;
for
(
pos
=
0
;
pos
<
LARGE_STRI_BUFFER_LENGTH
;
pos
++
)
{
dest_wstr
[
pos
]
=
'-'
;
}
/* for */
dest_wstr
[
LARGE_STRI_BUFFER_LENGTH
]
=
'\0'
;
unicode_string
.
Length
=
LARGE_STRI_BUFFER_LENGTH
*
sizeof
(
WCHAR
);
unicode_string
.
MaximumLength
=
unicode_string
.
Length
+
sizeof
(
WCHAR
);
unicode_string
.
Buffer
=
dest_wstr
;
result
=
p_i64tow
(
ulonglong2str
->
value
,
dest_wstr
,
ulonglong2str
->
base
);
pRtlUnicodeStringToAnsiString
(
&
ansi_str
,
&
unicode_string
,
1
);
ok
(
result
==
dest_wstr
,
"(test %d): _i64tow(%llu, [out], %d) has result %p, expected: %p"
,
test_num
,
ulonglong2str
->
value
,
ulonglong2str
->
base
,
result
,
dest_wstr
);
if
(
ulonglong2str
->
mask
&
0x04
)
{
if
(
memcmp
(
dest_wstr
,
expected_wstr
,
LARGE_STRI_BUFFER_LENGTH
*
sizeof
(
WCHAR
))
!=
0
)
{
for
(
pos
=
0
;
pos
<
LARGE_STRI_BUFFER_LENGTH
;
pos
++
)
{
expected_wstr
[
pos
]
=
ulonglong2str
[
1
].
Buffer
[
pos
];
}
/* for */
expected_wstr
[
LARGE_STRI_BUFFER_LENGTH
]
=
'\0'
;
if
(
memcmp
(
dest_wstr
,
expected_wstr
,
LARGE_STRI_BUFFER_LENGTH
*
sizeof
(
WCHAR
))
!=
0
)
{
ok
(
memcmp
(
dest_wstr
,
expected_wstr
,
LARGE_STRI_BUFFER_LENGTH
*
sizeof
(
WCHAR
))
==
0
,
"(test %d): _i64tow(%llu, [out], %d) assigns string
\"
%s
\"
, expected:
\"
%s
\"
"
,
test_num
,
ulonglong2str
->
value
,
ulonglong2str
->
base
,
ansi_str
.
Buffer
,
ulonglong2str
->
Buffer
);
}
/* if */
}
/* if */
}
else
{
ok
(
memcmp
(
dest_wstr
,
expected_wstr
,
LARGE_STRI_BUFFER_LENGTH
*
sizeof
(
WCHAR
))
==
0
,
"(test %d): _i64tow(%llu, [out], %d) assigns string
\"
%s
\"
, expected:
\"
%s
\"
"
,
test_num
,
ulonglong2str
->
value
,
ulonglong2str
->
base
,
ansi_str
.
Buffer
,
ulonglong2str
->
Buffer
);
}
/* if */
pRtlFreeAnsiString
(
&
ansi_str
);
}
static
void
one_ui64tow_test
(
int
test_num
,
const
ulonglong2str_t
*
ulonglong2str
)
{
int
pos
;
WCHAR
expected_wstr
[
LARGE_STRI_BUFFER_LENGTH
+
1
];
WCHAR
dest_wstr
[
LARGE_STRI_BUFFER_LENGTH
+
1
];
UNICODE_STRING
unicode_string
;
STRING
ansi_str
;
LPWSTR
result
;
for
(
pos
=
0
;
pos
<
LARGE_STRI_BUFFER_LENGTH
;
pos
++
)
{
expected_wstr
[
pos
]
=
ulonglong2str
->
Buffer
[
pos
];
}
/* for */
expected_wstr
[
LARGE_STRI_BUFFER_LENGTH
]
=
'\0'
;
for
(
pos
=
0
;
pos
<
LARGE_STRI_BUFFER_LENGTH
;
pos
++
)
{
dest_wstr
[
pos
]
=
'-'
;
}
/* for */
dest_wstr
[
LARGE_STRI_BUFFER_LENGTH
]
=
'\0'
;
unicode_string
.
Length
=
LARGE_STRI_BUFFER_LENGTH
*
sizeof
(
WCHAR
);
unicode_string
.
MaximumLength
=
unicode_string
.
Length
+
sizeof
(
WCHAR
);
unicode_string
.
Buffer
=
dest_wstr
;
result
=
p_ui64tow
(
ulonglong2str
->
value
,
dest_wstr
,
ulonglong2str
->
base
);
pRtlUnicodeStringToAnsiString
(
&
ansi_str
,
&
unicode_string
,
1
);
ok
(
result
==
dest_wstr
,
"(test %d): _ui64tow(%llu, [out], %d) has result %p, expected: %p"
,
test_num
,
ulonglong2str
->
value
,
ulonglong2str
->
base
,
result
,
dest_wstr
);
ok
(
memcmp
(
dest_wstr
,
expected_wstr
,
LARGE_STRI_BUFFER_LENGTH
*
sizeof
(
WCHAR
))
==
0
,
"(test %d): _ui64tow(%llu, [out], %d) assigns string
\"
%s
\"
, expected:
\"
%s
\"
"
,
test_num
,
ulonglong2str
->
value
,
ulonglong2str
->
base
,
ansi_str
.
Buffer
,
ulonglong2str
->
Buffer
);
pRtlFreeAnsiString
(
&
ansi_str
);
}
static
void
test_ulonglongtow
(
void
)
{
int
test_num
;
int
pos
;
WCHAR
expected_wstr
[
LARGE_STRI_BUFFER_LENGTH
+
1
];
LPWSTR
result
;
for
(
test_num
=
0
;
test_num
<
NB_ULONGLONG2STR
;
test_num
++
)
{
if
(
ulonglong2str
[
test_num
].
mask
&
0x10
)
{
one_i64tow_test
(
test_num
,
&
ulonglong2str
[
test_num
]);
}
/* if */
if
(
p_ui64tow
)
{
if
(
ulonglong2str
[
test_num
].
mask
&
0x20
)
{
one_ui64tow_test
(
test_num
,
&
ulonglong2str
[
test_num
]);
}
/* if */
}
/* if */
}
/* for */
for
(
pos
=
0
;
pos
<
LARGE_STRI_BUFFER_LENGTH
;
pos
++
)
{
expected_wstr
[
pos
]
=
ulong2str
[
0
].
Buffer
[
pos
];
}
/* for */
expected_wstr
[
LARGE_STRI_BUFFER_LENGTH
]
=
'\0'
;
result
=
p_i64tow
(
ulong2str
[
0
].
value
,
NULL
,
10
);
ok
(
result
==
NULL
,
"(test d): _i64tow(%llu, NULL, 10) has result %p, expected: NULL"
,
ulonglong2str
[
0
].
value
,
result
);
if
(
p_ui64tow
)
{
for
(
pos
=
0
;
pos
<
LARGE_STRI_BUFFER_LENGTH
;
pos
++
)
{
expected_wstr
[
pos
]
=
ulong2str
[
0
].
Buffer
[
pos
];
}
/* for */
expected_wstr
[
LARGE_STRI_BUFFER_LENGTH
]
=
'\0'
;
result
=
p_ui64tow
(
ulong2str
[
0
].
value
,
NULL
,
10
);
ok
(
result
==
NULL
,
"(test e): _ui64tow(%llu, NULL, 10) has result %p, expected: NULL"
,
ulonglong2str
[
0
].
value
,
result
);
}
/* if */
}
typedef
struct
{
char
*
str
;
LONG
value
;
}
str2long_t
;
static
const
str2long_t
str2long
[]
=
{
{
"1011101100"
,
1011101100
},
{
"1234567"
,
1234567
},
{
"-214"
,
-
214
},
{
"+214"
,
214
},
/* The + sign is allowed also */
{
"--214"
,
0
},
/* Do not accept more than one sign */
{
"-+214"
,
0
},
{
"++214"
,
0
},
{
"+-214"
,
0
},
{
"
\001
41"
,
0
},
/* not whitespace char 1 */
{
"
\002
42"
,
0
},
/* not whitespace char 2 */
{
"
\003
43"
,
0
},
/* not whitespace char 3 */
{
"
\004
44"
,
0
},
/* not whitespace char 4 */
{
"
\005
45"
,
0
},
/* not whitespace char 5 */
{
"
\006
46"
,
0
},
/* not whitespace char 6 */
{
"
\007
47"
,
0
},
/* not whitespace char 7 */
{
"
\010
50"
,
0
},
/* not whitespace char 8 */
{
"
\011
51"
,
51
},
/* is whitespace char 9 (tab) */
{
"
\012
52"
,
52
},
/* is whitespace char 10 (lf) */
{
"
\013
53"
,
53
},
/* is whitespace char 11 (vt) */
{
"
\014
54"
,
54
},
/* is whitespace char 12 (ff) */
{
"
\015
55"
,
55
},
/* is whitespace char 13 (cr) */
{
"
\016
56"
,
0
},
/* not whitespace char 14 */
{
"
\017
57"
,
0
},
/* not whitespace char 15 */
{
"
\020
60"
,
0
},
/* not whitespace char 16 */
{
"
\021
61"
,
0
},
/* not whitespace char 17 */
{
"
\022
62"
,
0
},
/* not whitespace char 18 */
{
"
\023
63"
,
0
},
/* not whitespace char 19 */
{
"
\024
64"
,
0
},
/* not whitespace char 20 */
{
"
\025
65"
,
0
},
/* not whitespace char 21 */
{
"
\026
66"
,
0
},
/* not whitespace char 22 */
{
"
\027
67"
,
0
},
/* not whitespace char 23 */
{
"
\030
70"
,
0
},
/* not whitespace char 24 */
{
"
\031
71"
,
0
},
/* not whitespace char 25 */
{
"
\032
72"
,
0
},
/* not whitespace char 26 */
{
"
\033
73"
,
0
},
/* not whitespace char 27 */
{
"
\034
74"
,
0
},
/* not whitespace char 28 */
{
"
\035
75"
,
0
},
/* not whitespace char 29 */
{
"
\036
76"
,
0
},
/* not whitespace char 30 */
{
"
\037
77"
,
0
},
/* not whitespace char 31 */
{
"
\040
80"
,
80
},
/* is whitespace char 32 (space) */
{
"
\n
\r
\t
214"
,
214
},
{
"
\n
\r
\t
+214"
,
214
},
/* Signs can be used after whitespace */
{
"
\n
\r
\t
-214"
,
-
214
},
{
"+214 0"
,
214
},
/* Space terminates the number */
{
" 214.01"
,
214
},
/* Decimal point not accepted */
{
" 214,01"
,
214
},
/* Decimal comma not accepted */
{
"f81"
,
0
},
{
"0x12345"
,
0
},
/* Hex not accepted */
{
"00x12345"
,
0
},
{
"0xx12345"
,
0
},
{
"1x34"
,
1
},
{
"-9999999999"
,
-
1410065407
},
/* Big negative integer */
{
"-2147483649"
,
2147483647
},
/* Too small to fit in 32 Bits */
{
"-2147483648"
,
0x80000000
},
/* Smallest negative integer */
{
"-2147483647"
,
-
2147483647
},
{
"-1"
,
-
1
},
{
"0"
,
0
},
{
"1"
,
1
},
{
"2147483646"
,
2147483646
},
{
"2147483647"
,
2147483647
},
/* Largest signed positive integer */
{
"2147483648"
,
2147483648UL
},
/* Positive int equal to smallest negative int */
{
"2147483649"
,
2147483649UL
},
{
"4294967294"
,
4294967294UL
},
{
"4294967295"
,
4294967295UL
},
/* Largest unsigned integer */
{
"4294967296"
,
0
},
/* Too big to fit in 32 Bits */
{
"9999999999"
,
1410065407
},
/* Big positive integer */
{
"056789"
,
56789
},
/* Leading zero and still decimal */
{
"b1011101100"
,
0
},
/* Binary (b-notation) */
{
"-b1011101100"
,
0
},
/* Negative Binary (b-notation) */
{
"b10123456789"
,
0
},
/* Binary with nonbinary digits (2-9) */
{
"0b1011101100"
,
0
},
/* Binary (0b-notation) */
{
"-0b1011101100"
,
0
},
/* Negative binary (0b-notation) */
{
"0b10123456789"
,
0
},
/* Binary with nonbinary digits (2-9) */
{
"-0b10123456789"
,
0
},
/* Negative binary with nonbinary digits (2-9) */
{
"0b1"
,
0
},
/* one digit binary */
{
"0b2"
,
0
},
/* empty binary */
{
"0b"
,
0
},
/* empty binary */
{
"o1234567"
,
0
},
/* Octal (o-notation) */
{
"-o1234567"
,
0
},
/* Negative Octal (o-notation) */
{
"o56789"
,
0
},
/* Octal with nonoctal digits (8 and 9) */
{
"0o1234567"
,
0
},
/* Octal (0o-notation) */
{
"-0o1234567"
,
0
},
/* Negative octal (0o-notation) */
{
"0o56789"
,
0
},
/* Octal with nonoctal digits (8 and 9) */
{
"-0o56789"
,
0
},
/* Negative octal with nonoctal digits (8 and 9) */
{
"0o7"
,
0
},
/* one digit octal */
{
"0o8"
,
0
},
/* empty octal */
{
"0o"
,
0
},
/* empty octal */
{
"0d1011101100"
,
0
},
/* explizit decimal with 0d */
{
"x89abcdef"
,
0
},
/* Hex with lower case digits a-f (x-notation) */
{
"xFEDCBA00"
,
0
},
/* Hex with upper case digits A-F (x-notation) */
{
"-xFEDCBA00"
,
0
},
/* Negative Hexadecimal (x-notation) */
{
"0x89abcdef"
,
0
},
/* Hex with lower case digits a-f (0x-notation) */
{
"0xFEDCBA00"
,
0
},
/* Hex with upper case digits A-F (0x-notation) */
{
"-0xFEDCBA00"
,
0
},
/* Negative Hexadecimal (0x-notation) */
{
"0xabcdefgh"
,
0
},
/* Hex with illegal lower case digits (g-z) */
{
"0xABCDEFGH"
,
0
},
/* Hex with illegal upper case digits (G-Z) */
{
"0xF"
,
0
},
/* one digit hexadecimal */
{
"0xG"
,
0
},
/* empty hexadecimal */
{
"0x"
,
0
},
/* empty hexadecimal */
{
""
,
0
},
/* empty string */
/* { NULL, 0 }, */
/* NULL as string */
};
#define NB_STR2LONG (sizeof(str2long)/sizeof(*str2long))
static
void
test_wtoi
(
void
)
{
int
test_num
;
UNICODE_STRING
uni
;
int
result
;
for
(
test_num
=
0
;
test_num
<
NB_STR2LONG
;
test_num
++
)
{
pRtlCreateUnicodeStringFromAsciiz
(
&
uni
,
str2long
[
test_num
].
str
);
result
=
p_wtoi
(
uni
.
Buffer
);
ok
(
result
==
str2long
[
test_num
].
value
,
"(test %d): call failed: _wtoi(
\"
%s
\"
) has result %d, expected: %ld"
,
test_num
,
str2long
[
test_num
].
str
,
result
,
str2long
[
test_num
].
value
);
pRtlFreeUnicodeString
(
&
uni
);
}
/* for */
}
static
void
test_wtol
(
void
)
{
int
test_num
;
UNICODE_STRING
uni
;
LONG
result
;
for
(
test_num
=
0
;
test_num
<
NB_STR2LONG
;
test_num
++
)
{
pRtlCreateUnicodeStringFromAsciiz
(
&
uni
,
str2long
[
test_num
].
str
);
result
=
p_wtol
(
uni
.
Buffer
);
ok
(
result
==
str2long
[
test_num
].
value
,
"(test %d): call failed: _wtol(
\"
%s
\"
) has result %ld, expected: %ld"
,
test_num
,
str2long
[
test_num
].
str
,
result
,
str2long
[
test_num
].
value
);
pRtlFreeUnicodeString
(
&
uni
);
}
/* for */
}
typedef
struct
{
char
*
str
;
LONGLONG
value
;
}
str2longlong_t
;
static
const
str2longlong_t
str2longlong
[]
=
{
{
"1011101100"
,
1011101100
},
{
"1234567"
,
1234567
},
{
"-214"
,
-
214
},
{
"+214"
,
214
},
/* The + sign is allowed also */
{
"--214"
,
0
},
/* Do not accept more than one sign */
{
"-+214"
,
0
},
{
"++214"
,
0
},
{
"+-214"
,
0
},
{
"
\001
41"
,
0
},
/* not whitespace char 1 */
{
"
\002
42"
,
0
},
/* not whitespace char 2 */
{
"
\003
43"
,
0
},
/* not whitespace char 3 */
{
"
\004
44"
,
0
},
/* not whitespace char 4 */
{
"
\005
45"
,
0
},
/* not whitespace char 5 */
{
"
\006
46"
,
0
},
/* not whitespace char 6 */
{
"
\007
47"
,
0
},
/* not whitespace char 7 */
{
"
\010
50"
,
0
},
/* not whitespace char 8 */
{
"
\011
51"
,
51
},
/* is whitespace char 9 (tab) */
{
"
\012
52"
,
52
},
/* is whitespace char 10 (lf) */
{
"
\013
53"
,
53
},
/* is whitespace char 11 (vt) */
{
"
\014
54"
,
54
},
/* is whitespace char 12 (ff) */
{
"
\015
55"
,
55
},
/* is whitespace char 13 (cr) */
{
"
\016
56"
,
0
},
/* not whitespace char 14 */
{
"
\017
57"
,
0
},
/* not whitespace char 15 */
{
"
\020
60"
,
0
},
/* not whitespace char 16 */
{
"
\021
61"
,
0
},
/* not whitespace char 17 */
{
"
\022
62"
,
0
},
/* not whitespace char 18 */
{
"
\023
63"
,
0
},
/* not whitespace char 19 */
{
"
\024
64"
,
0
},
/* not whitespace char 20 */
{
"
\025
65"
,
0
},
/* not whitespace char 21 */
{
"
\026
66"
,
0
},
/* not whitespace char 22 */
{
"
\027
67"
,
0
},
/* not whitespace char 23 */
{
"
\030
70"
,
0
},
/* not whitespace char 24 */
{
"
\031
71"
,
0
},
/* not whitespace char 25 */
{
"
\032
72"
,
0
},
/* not whitespace char 26 */
{
"
\033
73"
,
0
},
/* not whitespace char 27 */
{
"
\034
74"
,
0
},
/* not whitespace char 28 */
{
"
\035
75"
,
0
},
/* not whitespace char 29 */
{
"
\036
76"
,
0
},
/* not whitespace char 30 */
{
"
\037
77"
,
0
},
/* not whitespace char 31 */
{
"
\040
80"
,
80
},
/* is whitespace char 32 (space) */
{
"
\n
\r
\t
214"
,
214
},
{
"
\n
\r
\t
+214"
,
214
},
/* Signs can be used after whitespace */
{
"
\n
\r
\t
-214"
,
-
214
},
{
"+214 0"
,
214
},
/* Space terminates the number */
{
" 214.01"
,
214
},
/* Decimal point not accepted */
{
" 214,01"
,
214
},
/* Decimal comma not accepted */
{
"f81"
,
0
},
{
"0x12345"
,
0
},
/* Hex not accepted */
{
"00x12345"
,
0
},
{
"0xx12345"
,
0
},
{
"1x34"
,
1
},
{
"-99999999999999999999"
,
-
7766279631452241919
},
/* Big negative integer */
{
"-9223372036854775809"
,
9223372036854775807
},
/* Too small to fit in 64 bits */
{
"-9223372036854775808"
,
0x8000000000000000
},
/* Smallest negativ 64 bit integer */
{
"-9223372036854775807"
,
-
9223372036854775807
},
{
"-9999999999"
,
-
9999999999
},
{
"-2147483649"
,
-
2147483649LL
},
/* Too small to fit in 32 bits */
{
"-2147483648"
,
-
2147483648LL
},
/* Smallest 32 bits negative integer */
{
"-2147483647"
,
-
2147483647
},
{
"-1"
,
-
1
},
{
"0"
,
0
},
{
"1"
,
1
},
{
"2147483646"
,
2147483646
},
{
"2147483647"
,
2147483647
},
/* Largest signed positive 32 bit integer */
{
"2147483648"
,
2147483648LL
},
/* Pos int equal to smallest neg 32 bit int */
{
"2147483649"
,
2147483649LL
},
{
"4294967294"
,
4294967294LL
},
{
"4294967295"
,
4294967295LL
},
/* Largest unsigned 32 bit integer */
{
"4294967296"
,
4294967296
},
/* Too big to fit in 32 Bits */
{
"9999999999"
,
9999999999
},
{
"9223372036854775806"
,
9223372036854775806
},
{
"9223372036854775807"
,
9223372036854775807
},
/* Largest signed positive 64 bit integer */
{
"9223372036854775808"
,
9223372036854775808ULL
},
/* Pos int equal to smallest neg 64 bit int */
{
"9223372036854775809"
,
9223372036854775809ULL
},
{
"18446744073709551614"
,
18446744073709551614ULL
},
{
"18446744073709551615"
,
18446744073709551615ULL
},
/* Largest unsigned 64 bit integer */
{
"18446744073709551616"
,
0
},
/* Too big to fit in 64 bits */
{
"99999999999999999999"
,
7766279631452241919
},
/* Big positive integer */
{
"056789"
,
56789
},
/* Leading zero and still decimal */
{
"b1011101100"
,
0
},
/* Binary (b-notation) */
{
"-b1011101100"
,
0
},
/* Negative Binary (b-notation) */
{
"b10123456789"
,
0
},
/* Binary with nonbinary digits (2-9) */
{
"0b1011101100"
,
0
},
/* Binary (0b-notation) */
{
"-0b1011101100"
,
0
},
/* Negative binary (0b-notation) */
{
"0b10123456789"
,
0
},
/* Binary with nonbinary digits (2-9) */
{
"-0b10123456789"
,
0
},
/* Negative binary with nonbinary digits (2-9) */
{
"0b1"
,
0
},
/* one digit binary */
{
"0b2"
,
0
},
/* empty binary */
{
"0b"
,
0
},
/* empty binary */
{
"o1234567"
,
0
},
/* Octal (o-notation) */
{
"-o1234567"
,
0
},
/* Negative Octal (o-notation) */
{
"o56789"
,
0
},
/* Octal with nonoctal digits (8 and 9) */
{
"0o1234567"
,
0
},
/* Octal (0o-notation) */
{
"-0o1234567"
,
0
},
/* Negative octal (0o-notation) */
{
"0o56789"
,
0
},
/* Octal with nonoctal digits (8 and 9) */
{
"-0o56789"
,
0
},
/* Negative octal with nonoctal digits (8 and 9) */
{
"0o7"
,
0
},
/* one digit octal */
{
"0o8"
,
0
},
/* empty octal */
{
"0o"
,
0
},
/* empty octal */
{
"0d1011101100"
,
0
},
/* explizit decimal with 0d */
{
"x89abcdef"
,
0
},
/* Hex with lower case digits a-f (x-notation) */
{
"xFEDCBA00"
,
0
},
/* Hex with upper case digits A-F (x-notation) */
{
"-xFEDCBA00"
,
0
},
/* Negative Hexadecimal (x-notation) */
{
"0x89abcdef"
,
0
},
/* Hex with lower case digits a-f (0x-notation) */
{
"0xFEDCBA00"
,
0
},
/* Hex with upper case digits A-F (0x-notation) */
{
"-0xFEDCBA00"
,
0
},
/* Negative Hexadecimal (0x-notation) */
{
"0xabcdefgh"
,
0
},
/* Hex with illegal lower case digits (g-z) */
{
"0xABCDEFGH"
,
0
},
/* Hex with illegal upper case digits (G-Z) */
{
"0xF"
,
0
},
/* one digit hexadecimal */
{
"0xG"
,
0
},
/* empty hexadecimal */
{
"0x"
,
0
},
/* empty hexadecimal */
{
""
,
0
},
/* empty string */
/* { NULL, 0 }, */
/* NULL as string */
};
#define NB_STR2LONGLONG (sizeof(str2longlong)/sizeof(*str2longlong))
static
void
test_atoi64
(
void
)
{
int
test_num
;
LONGLONG
result
;
for
(
test_num
=
0
;
test_num
<
NB_STR2LONGLONG
;
test_num
++
)
{
result
=
p_atoi64
(
str2longlong
[
test_num
].
str
);
ok
(
result
==
str2longlong
[
test_num
].
value
,
"(test %d): call failed: _atoi64(
\"
%s
\"
) has result %lld, expected: %lld"
,
test_num
,
str2longlong
[
test_num
].
str
,
result
,
str2longlong
[
test_num
].
value
);
}
/* for */
}
static
void
test_wtoi64
(
void
)
{
int
test_num
;
UNICODE_STRING
uni
;
LONGLONG
result
;
for
(
test_num
=
0
;
test_num
<
NB_STR2LONGLONG
;
test_num
++
)
{
pRtlCreateUnicodeStringFromAsciiz
(
&
uni
,
str2longlong
[
test_num
].
str
);
result
=
p_wtoi64
(
uni
.
Buffer
);
ok
(
result
==
str2longlong
[
test_num
].
value
,
"(test %d): call failed: _wtoi64(
\"
%s
\"
) has result %lld, expected: %lld"
,
test_num
,
str2longlong
[
test_num
].
str
,
result
,
str2longlong
[
test_num
].
value
);
pRtlFreeUnicodeString
(
&
uni
);
}
/* for */
}
START_TEST
(
string
)
{
InitFunctionPtrs
();
test_ulongtoa
();
test_ulonglongtoa
();
test_atoi64
();
test_ulongtow
();
test_ulonglongtow
();
test_wtoi
();
test_wtol
();
test_wtoi64
();
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment