39static const WCHAR upper_case[] = {
'\t',
'J',
'U',
'S',
'T',
'!',
' ',
'A',
',',
' ',
'T',
'E',
'S',
'T',
';',
' ',
'S',
'T',
'R',
'I',
'N',
'G',
' ',
'1',
'/',
'*',
'+',
'-',
'.',
'\r',
'\n',0};
40static const WCHAR lower_case[] = {
'\t',
'j',
'u',
's',
't',
'!',
' ',
'a',
',',
' ',
't',
'e',
's',
't',
';',
' ',
's',
't',
'r',
'i',
'n',
'g',
' ',
'1',
'/',
'*',
'+',
'-',
'.',
'\r',
'\n',0};
41static const WCHAR title_case[] = {
'\t',
'J',
'u',
's',
't',
'!',
' ',
'A',
',',
' ',
'T',
'e',
's',
't',
';',
' ',
'S',
't',
'r',
'i',
'n',
'g',
' ',
'1',
'/',
'*',
'+',
'-',
'.',
'\r',
'\n',0};
42static const WCHAR symbols_stripped[] = {
'j',
'u',
's',
't',
'a',
't',
'e',
's',
't',
's',
't',
'r',
'i',
'n',
'g',
'1',0};
58 while ((--
n > 0) && *str1 && (*str1 == *str2)) { str1++; str2++; }
111#define X(f) p##f = (void*)GetProcAddress(mod, #f)
129 X(CompareStringOrdinal);
137 X(GetNumberFormatEx);
144#define eq(received, expected, label, type) \
145 ok((received) == (expected), "%s: got " type " instead of " type "\n", \
146 (label), (received), (expected))
148#define BUFFER_SIZE 128
149#define COUNTOF(x) (sizeof(x)/sizeof(x)[0])
151#define STRINGSA(x,y) strcpy(input, x); strcpy(Expected, y); SetLastError(0xdeadbeef); buffer[0] = '\0'
152#define EXPECT_LENA ok(ret == lstrlenA(Expected)+1, "Expected len %d, got %d\n", lstrlenA(Expected)+1, ret)
153#define EXPECT_EQA ok(strncmp(buffer, Expected, strlen(Expected)) == 0, \
154 "Expected '%s', got '%s'\n", Expected, buffer)
156#define STRINGSW(x,y) MultiByteToWideChar(CP_ACP,0,x,-1,input,COUNTOF(input)); \
157 MultiByteToWideChar(CP_ACP,0,y,-1,Expected,COUNTOF(Expected)); \
158 SetLastError(0xdeadbeef); buffer[0] = '\0'
159#define EXPECT_LENW ok(ret == lstrlenW(Expected)+1, "Expected Len %d, got %d\n", lstrlenW(Expected)+1, ret)
160#define EXPECT_EQW ok(strncmpW(buffer, Expected, strlenW(Expected)) == 0, "Bad conversion\n")
162#define NUO LOCALE_NOUSEROVERRIDE
173 ok(lcid == 0x409,
"wrong LCID calculated - %d\n", lcid);
177 ok(
val == lcid,
"got 0x%08x\n",
val);
188 "got %d with '%s' (expected %d with '%s')\n",
198 "got %d with '%s' (expected %d with '%s')\n",
202 win_skip(
"LANG_ARABIC not installed\n");
211 "got %d with '%s' (expected %d with '%s')\n",
227 "Expected ERROR_INSUFFICIENT_BUFFER, got %d\n",
GetLastError());
247 { {
'a',
'r',0}, {
'a',
'r',
'-',
'S',
'A',0},
249 { {
'a',
'z',0}, {
'a',
'z',
'-',
'L',
'a',
't',
'n',
'-',
'A',
'Z',0},
251 { {
'd',
'e',0}, {
'd',
'e',
'-',
'D',
'E',0},
253 { {
'e',
'n',0}, {
'e',
'n',
'-',
'U',
'S',0},
255 { {
'e',
's',0}, {
'e',
's',
'-',
'E',
'S',0},
258 {
'e',
's',
'-',
'E',
'S',
'_',
't',
'r',
'a',
'd',
'n',
'l',0} },
259 { {
'g',
'a',0}, {
'g',
'a',
'-',
'I',
'E',0},
261 { {
'i',
't',0}, {
'i',
't',
'-',
'I',
'T',0},
263 { {
'm',
's',0}, {
'm',
's',
'-',
'M',
'Y',0},
265 { {
'n',
'l',0}, {
'n',
'l',
'-',
'N',
'L',0},
267 { {
'p',
't',0}, {
'p',
't',
'-',
'B',
'R',0},
269 { {
's',
'r',0}, {
'h',
'r',
'-',
'H',
'R',0},
271 { {
's',
'v',0}, {
's',
'v',
'-',
'S',
'E',0},
273 { {
'u',
'z',0}, {
'u',
'z',
'-',
'L',
'a',
't',
'n',
'-',
'U',
'Z',0},
275 { {
'z',
'h',0}, {
'z',
'h',
'-',
'C',
'N',0},
285 WCHAR bufferW[80], buffer2W[80];
293 win_skip(
"GetLocaleInfoW() isn't implemented\n");
299 ok(
val == lcid_en,
"got 0x%08x\n",
val);
304 static const WCHAR slangW[] = {
'E',
'n',
'g',
'l',
'i',
's',
'h',
' ',
'(',
'U',
'n',
'i',
't',
'e',
'd',
' ',
305 'S',
't',
'a',
't',
'e',
's',
')',0};
306 static const WCHAR statesW[] = {
'U',
'n',
'i',
't',
'e',
'd',
' ',
'S',
't',
'a',
't',
'e',
's',0};
307 static const WCHAR enW[] = {
'e',
'n',
'-',
'U',
'S',0};
317 skip(
"Non-English locale\n");
327 skip(
"Non-English locale\n");
344 ok(
val ==
ptr->lcid || (
val &&
broken(
val ==
ptr->lcid_broken)),
"%s: got wrong lcid 0x%04x, expected 0x%04x\n",
357 win_skip(
"English neutral locale not supported\n");
361 win_skip(
"LANG_RUSSIAN locale data unavailable\n");
367 win_skip(
"LOCALE_RETURN_GENITIVE_NAMES isn't supported\n");
376 ok(
ret == 0,
"LOCALE_RETURN_GENITIVE_NAMES should fail with GetLocaleInfoA\n");
377 ok(bufferA[0] ==
'a',
"Expected buffer to be untouched\n");
379 "Expected ERROR_INVALID_FLAGS, got %x\n",
GetLastError());
386 "LOCALE_RETURN_GENITIVE_NAMES itself doesn't return anything, got %d\n",
ret);
387 ok(bufferW[0] ==
'a',
"Expected buffer to be untouched\n");
389 "Expected ERROR_INVALID_FLAGS, got %x\n",
GetLastError());
392 for (
i = 0;
i < 12;
i++) {
396 ok(
ret,
"Expected non zero result\n");
397 ok(
ret ==
lstrlenW(bufferW)+1,
"Expected actual length, got %d, length %d\n",
402 ok(
ret,
"Expected non zero result\n");
403 ok(
ret ==
lstrlenW(buffer2W)+1,
"Expected actual length, got %d, length %d\n",
407 "Expected genitive name to differ, got the same for month %d\n",
i+1);
413 ok(
ret,
"Expected non zero result\n");
414 ok(
ret ==
lstrlenW(bufferW)+1,
"Expected actual length, got %d, length %d\n",
419 ok(
ret,
"Expected non zero result\n");
420 ok(
ret ==
lstrlenW(buffer2W)+1,
"Expected actual length, got %d, length %d\n",
424 "Expected same names, got different for month %d\n",
i+1);
440 "Expected ERROR_INVALID_PARAMETER, got %d\n",
GetLastError());
446 STRINGSA(
"tt HH':'mm'@'ss",
"AM 08:56@13");
456 "Expected ERROR_INVALID_FLAGS, got %d\n",
GetLastError());
462 "Expected ERROR_INSUFFICIENT_BUFFER, got %d\n",
GetLastError());
464 STRINGSA(
"tt HH':'mm'@'ss",
"AM 08:56@13");
478 "Expected '', got '%s'\n",
buffer );
491 STRINGSA(
"h.@:m.@:s.@:tt",
"8.@:56AM");
495 "Expected '8.@:56AM', got '%s'\n",
buffer );
501 "Expected '', got '%s'\n",
buffer );
519 STRINGSA(
"h:m:s tt",
"13:56:13 PM");
532 STRINGSA(
"h hh H HH m mm s ss t tt",
"2 02 14 14 5 05 3 03 P PM");
538 STRINGSA(
"h/H/hh/HH",
"12/0/12/00");
558 STRINGSA(
"h:hh:hhh H:HH:HHH m:mm:mmm M:MM:MMM s:ss:sss S:SS:SSS",
559 "8:08:08 8:08:08 56:56:56 M:MM:MMM 13:13:13 S:SS:SSS");
570 STRINGSA(
"h 'h' H 'H' HH 'HH' m 'm' s 's' t 't' tt 'tt'",
571 "8 h 8 H 08 HH 56 m 13 s A t AM tt");
613 "Expected ERROR_INVALID_PARAMETER, got %d\n",
GetLastError());
629 if (!pGetTimeFormatEx)
631 win_skip(
"GetTimeFormatEx not supported\n");
640 "Expected ERROR_INVALID_PARAMETER, got %d\n",
GetLastError());
646 STRINGSW(
"tt HH':'mm'@'ss",
"AM 08:56@13");
656 "Expected ERROR_INVALID_FLAGS, got %d\n",
GetLastError());
662 "Expected ERROR_INSUFFICIENT_BUFFER, got %d\n",
GetLastError());
664 STRINGSW(
"tt HH':'mm'@'ss",
"AM 08:56@13");
689 STRINGSW(
"h.@:m.@:s.@:tt",
"8.@:56AM");
715 STRINGSW(
"h:m:s tt",
"13:56:13 PM");
728 STRINGSW(
"h hh H HH m mm s ss t tt",
"2 02 14 14 5 05 3 03 P PM");
734 STRINGSW(
"h/H/hh/HH",
"12/0/12/00");
754 STRINGSW(
"h:hh:hhh H:HH:HHH m:mm:mmm M:MM:MMM s:ss:sss S:SS:SSS",
755 "8:08:08 8:08:08 56:56:56 M:MM:MMM 13:13:13 S:SS:SSS");
766 STRINGSW(
"h 'h' H 'H' HH 'HH' m 'm' s 's' t 't' tt 'tt'",
767 "8 h 8 H 08 HH 56 m 13 s A t AM tt");
809 "Expected ERROR_INVALID_PARAMETER, got %d\n",
GetLastError());
827 char short_day[10],
month[10], genitive_month[10];
834 "Expected ERROR_INVALID_PARAMETER, got %d\n",
GetLastError());
836 curtime.
wYear = 2002;
840 STRINGSA(
"ddd',' MMM dd yy",
"Sat, May 04 02");
850 "Expected ERROR_INVALID_FLAGS, got %d\n",
GetLastError());
853 STRINGSA(
"ddd',' MMM dd yy",
"Sat, May 04 02");
859 STRINGSA(
"ddd',' MMM dd ''''yy",
"Sat, May 04 '02");
864 STRINGSA(
"ddd',' MMM dd ''''yy",
"");
869 STRINGSA(
"ddd',' MMM dd ''''yy",
"");
873 "Expected ERROR_INSUFFICIENT_BUFFER, got %d\n",
GetLastError());
875 STRINGSA(
"ddd',' MMM dd ''''yy",
"5/4/2002");
886 "got an unexpected date string '%s'\n",
buffer);
890 STRINGSA(
"ddd',' MMM dd ''''yy",
"");
894 "Expected ERROR_INVALID_FLAGS, got %d\n",
GetLastError());
904 "Expected ERROR_INVALID_FLAGS, got %d\n",
GetLastError());
909 win_skip(
"LANG_RUSSIAN locale data unavailable\n");
918 ok(
strcmp(genitive_month,
month) != 0,
"Expected different month forms\n");
966 STRINGSA(
"dd dddMMMM ddd MMMMdd",
"");
992 if (!pGetDateFormatEx)
994 win_skip(
"GetDateFormatEx not supported\n");
1003 "Expected ERROR_INVALID_FLAGS, got %d\n",
GetLastError());
1010 "Expected ERROR_INVALID_PARAMETER, got %d\n",
GetLastError());
1022 "Expected ERROR_INVALID_FLAGS, got %d\n",
GetLastError());
1025 curtime.
wYear = 2002;
1029 curtime.
wHour = 65432;
1033 STRINGSW(
"dddd d MMMM yyyy",
"Wednesday 23 October 2002");
1038 curtime.
wYear = 2002;
1042 curtime.
wHour = 65432;
1046 STRINGSW(
"dddd d MMMM yyyy",
"Wednesday 23 October 2002");
1049 "Expected ERROR_INVALID_PARAMETER, got %d\n",
GetLastError());
1053 curtime.
wYear = 1601;
1061 STRINGSW(
"dddd d MMMM yyyy",
"Monday 1 January 1601");
1067 curtime.
wYear = 1600;
1075 STRINGSW(
"dddd d MMMM yyyy",
"Friday 31 December 1600");
1079 "Expected ERROR_INVALID_PARAMETER, got %d\n",
GetLastError());
1094 win_skip(
"GetDateFormatW is not implemented\n");
1098 "Expected ERROR_INVALID_FLAGS, got %d\n",
GetLastError());
1105 "Expected ERROR_INVALID_PARAMETER, got %d\n",
GetLastError());
1112 curtime.
wYear = 2002;
1116 curtime.
wHour = 65432;
1120 STRINGSW(
"dddd d MMMM yyyy",
"Wednesday 23 October 2002");
1127 curtime.
wYear = 1601;
1135 STRINGSW(
"dddd d MMMM yyyy",
"Monday 1 January 1601");
1141 curtime.
wYear = 1600;
1149 STRINGSW(
"dddd d MMMM yyyy",
"Friday 31 December 1600");
1153 "Expected ERROR_INVALID_PARAMETER, got %d\n",
GetLastError());
1157#define CY_POS_LEFT 0
1158#define CY_POS_RIGHT 1
1159#define CY_POS_LEFT_SPACE 2
1160#define CY_POS_RIGHT_SPACE 3
1164 static char szDot[] = {
'.',
'\0' };
1165 static char szComma[] = {
',',
'\0' };
1166 static char szDollar[] = {
'$',
'\0' };
1178 "Expected ERROR_INVALID_PARAMETER, got %d\n",
GetLastError());
1184 "Expected ERROR_INVALID_PARAMETER, got %d\n",
GetLastError());
1190 "Expected ERROR_INVALID_PARAMETER, got %d\n",
GetLastError());
1196 "Expected ERROR_INVALID_PARAMETER, got %d\n",
GetLastError());
1202 "Expected ERROR_INVALID_PARAMETER, got %d\n",
GetLastError());
1208 "Expected ERROR_INVALID_PARAMETER, got %d\n",
GetLastError());
1214 "Expected ERROR_INSUFFICIENT_BUFFER, got %d\n",
GetLastError());
1219 ok( !
ret,
"Expected ret == 0, got %d\n",
ret);
1221 "Expected ERROR_INVALID_FLAGS, got %d\n",
GetLastError());
1227 "Expected ERROR_INVALID_PARAMETER, got %d\n",
GetLastError());
1257 format.NegativeOrder = 0;
1259 format.lpDecimalSep = szDot;
1260 format.lpThousandSep = szComma;
1261 format.lpCurrencySymbol = szDollar;
1287 format.NegativeOrder = 2;
1316 format.NegativeOrder = 0;
1322 format.NegativeOrder = 1;
1328 format.NegativeOrder = 2;
1334 format.NegativeOrder = 3;
1340 format.NegativeOrder = 4;
1346 format.NegativeOrder = 5;
1352 format.NegativeOrder = 6;
1358 format.NegativeOrder = 7;
1364 format.NegativeOrder = 8;
1370 format.NegativeOrder = 9;
1376 format.NegativeOrder = 10;
1382 format.NegativeOrder = 11;
1388 format.NegativeOrder = 12;
1394 format.NegativeOrder = 13;
1400 format.NegativeOrder = 14;
1406 format.NegativeOrder = 15;
1415#define NEG_LEFT_SPACE 2
1417#define NEG_RIGHT_SPACE 4
1421 static char szDot[] = {
'.',
'\0' };
1422 static char szComma[] = {
',',
'\0' };
1434 "Expected ERROR_INVALID_PARAMETER, got %d\n",
GetLastError());
1440 "Expected ERROR_INVALID_PARAMETER, got %d\n",
GetLastError());
1446 "Expected ERROR_INVALID_PARAMETER, got %d\n",
GetLastError());
1452 "Expected ERROR_INVALID_PARAMETER, got %d\n",
GetLastError());
1458 "Expected ERROR_INVALID_PARAMETER, got %d\n",
GetLastError());
1464 "Expected ERROR_INVALID_PARAMETER, got %d\n",
GetLastError());
1470 "Expected ERROR_INSUFFICIENT_BUFFER, got %d\n",
GetLastError());
1475 ok( !
ret,
"Expected ret == 0, got %d\n",
ret);
1477 "Expected ERROR_INVALID_FLAGS, got %d\n",
GetLastError());
1483 "Expected ERROR_INVALID_PARAMETER, got %d\n",
GetLastError());
1518 format.NegativeOrder = 0;
1519 format.lpDecimalSep = szDot;
1520 format.lpThousandSep = szComma;
1604 static WCHAR commaW[] = {
',',0};
1605 static const WCHAR enW[] = {
'e',
'n',
'-',
'U',
'S',0};
1606 static const WCHAR frW[] = {
'f',
'r',
'-',
'F',
'R',0};
1607 static const WCHAR bogusW[] = {
'b',
'o',
'g',
'u',
's',0};
1610 if (!pGetNumberFormatEx)
1612 win_skip(
"GetNumberFormatEx is not available.\n");
1619 "Expected ERROR_INVALID_PARAMETER, got %d\n",
GetLastError());
1624 "Expected ERROR_INVALID_PARAMETER, got %d\n",
GetLastError());
1629 "Expected ERROR_INVALID_PARAMETER, got %d\n",
GetLastError());
1634 "Expected ERROR_INVALID_PARAMETER, got %d\n",
GetLastError());
1639 "Expected ERROR_INVALID_PARAMETER, got %d\n",
GetLastError());
1644 "Expected ERROR_INVALID_PARAMETER, got %d\n",
GetLastError());
1649 "Expected ERROR_INSUFFICIENT_BUFFER, got %d\n",
GetLastError());
1654 "Expected ERROR_INVALID_PARAMETER, got %d\n",
GetLastError());
1660 ok( !
ret,
"Expected ret == 0, got %d\n",
ret);
1662 "Expected ERROR_INVALID_FLAGS, got %d\n",
GetLastError());
1667 "Expected ERROR_INVALID_PARAMETER, got %d\n",
GetLastError());
1702 format.NegativeOrder = 0;
1704 format.lpThousandSep = commaW;
1771 if (pIsValidLocaleName(frW))
1881 ok(!
ret,
"CompareStringA must fail with invalid flag\n");
1890 ok (
ret == 0,
"lstrcmpA(\"\", \"\") should return 0, got %d\n",
ret);
1893 ok (
ret == 0 ||
broken(
ret == -2) ,
"lstrcmpA(NULL, NULL) should return 0, got %d\n",
ret);
1896 ok (
ret == 1 ||
broken(
ret == -2) ,
"lstrcmpA(\"\", NULL) should return 1, got %d\n",
ret);
1899 ok (
ret == -1 ||
broken(
ret == -2) ,
"lstrcmpA(NULL, \"\") should return -1, got %d\n",
ret);
1954 "a\\0b vs a expected CSTR_EQUAL or CSTR_GREATER_THAN, got %d\n",
ret);
1966 ok(
ret == -1,
"\"#\" vs \".\" expected -1, got %d\n",
ret);
2178 const char *
op[] = {
"ERROR",
"CSTR_LESS_THAN",
"CSTR_EQUAL",
"CSTR_GREATER_THAN"};
2183 if (!pCompareStringEx)
2185 win_skip(
"CompareStringEx not supported\n");
2197 "%d: got %s, expected %s\n",
i,
op[
ret],
op[
e->ret]);
2233 char buf[256], buf2[256];
2234 static const char upper_case[] =
"\tJUST! A, TEST; STRING 1/*+-.\r\n";
2235 static const char lower_case[] =
"\tjust! a, test; string 1/*+-.\r\n";
2242 "ret %d, error %d, expected value %d\n",
2248 ok(!
ret,
"LCMAP_LOWERCASE and LCMAP_UPPERCASE are mutually exclusive\n");
2259 "LCMapStringA (flag %08x) unexpected error code %d\n",
2261 ok(!
ret,
"LCMapStringA (flag %08x) should return 0, got %d\n",
2269 "ret %d, error %d, expected value %d\n",
2277 "ret %d, error %d, expected value %d\n",
2286 "should return 0 and ERROR_INSUFFICIENT_BUFFER, got %d\n",
ret);
2293 trace(
"Ignoring LCMapStringA(LCMAP_UPPERCASE, buf, buf) error on Win9x\n");
2297 "ret %d, error %d, expected value %d\n",
2305 trace(
"Ignoring LCMapStringA(LCMAP_LOWERCASE, buf, buf) error on Win9x\n");
2309 "ret %d, error %d, expected value %d\n",
2321 ok(!
ret,
"src == dst without LCMAP_UPPERCASE or LCMAP_LOWERCASE must fail\n");
2326 ok(
ret,
"LCMapStringA must succeed\n");
2327 ok(
buf[
ret-1] == 0,
"LCMapStringA not null-terminated\n");
2330 ok(ret2,
"LCMapStringA must succeed\n");
2331 ok(buf2[ret2-1] == 0,
"LCMapStringA not null-terminated\n" );
2332 ok(
ret == ret2,
"lengths of sort keys must be equal\n");
2338 ok(
ret,
"LCMapStringA must succeed\n");
2341 ok(ret2,
"LCMapStringA must succeed\n");
2342 ok(
ret == ret2,
"lengths of sort keys must be equal\n");
2351 ok(
ret,
"LCMapStringA must succeed\n");
2354 ok(ret2,
"LCMapStringA must succeed\n");
2355 ok(
ret == ret2,
"lengths of sort keys must be equal\n");
2385 ok(!
ret,
"LCMapStringA should fail with srclen = 0\n");
2394 static const WCHAR japanese_text[] = {
2395 0x3044, 0x309d, 0x3084, 0x3001, 0x30a4, 0x30fc, 0x30cf,
2396 0x30c8, 0x30fc, 0x30f4, 0x30a9, 0x306e, 0x2026, 0
2398 static const WCHAR hiragana_text[] = {
2399 0x3044, 0x309d, 0x3084, 0x3001, 0x3044, 0x30fc, 0x306f,
2400 0x3068, 0x30fc, 0x3094, 0x3049, 0x306e, 0x2026, 0
2402 static const WCHAR katakana_text[] = {
2403 0x30a4, 0x30fd, 0x30e4, 0x3001, 0x30a4, 0x30fc, 0x30cf,
2404 0x30c8, 0x30fc, 0x30f4, 0x30a9, 0x30ce, 0x2026, 0
2406 static const WCHAR halfwidth_text[] = {
2407 0x3044, 0x309d, 0x3084, 0xff64, 0xff72, 0xff70, 0xff8a,
2408 0xff84, 0xff70, 0xff73, 0xff9e, 0xff6b, 0x306e, 0x2026, 0
2412 char *p_buf = (
char *)
buf, *p_buf2 = (
char *)buf2;
2418 "%s ret %d, error %d, expected value %d\n",
func_name,
2421 "Expected title case string\n");
2430 "%s (flag %08x) unexpected error code %d\n",
2432 ok(!
ret,
"%s (flag %08x) should return 0, got %d\n",
2452 japanese_text, -1,
buf,
sizeof(
buf)/
sizeof(
WCHAR));
2459 ok(
ret == 1,
"%s ret %d, error %d, expected value 1\n",
func_name,
2462 ok(buf2[0] == 0x3095 ||
broken(buf2[0] == 0x30f5 ),
2463 "%s expected %04x, got %04x\n",
func_name, 0x3095, buf2[0]);
2467 japanese_text, -1,
buf,
sizeof(
buf)/
sizeof(
WCHAR));
2474 halfwidth_text, -1,
buf,
sizeof(
buf)/
sizeof(
WCHAR));
2485 halfwidth_text, -1,
buf,
sizeof(
buf)/
sizeof(
WCHAR));
2495 japanese_text, -1,
buf,
sizeof(
buf)/
sizeof(
WCHAR));
2508 "%s should return 0 and ERROR_INSUFFICIENT_BUFFER, got %d\n",
func_name,
ret);
2516 "%s should return 0 and ERROR_INSUFFICIENT_BUFFER, got %d\n",
func_name,
ret);
2540 ok(!
ret,
"%s src == dst without LCMAP_UPPERCASE or LCMAP_LOWERCASE must fail\n",
func_name);
2549 ok(
ret == ret2,
"%s lengths of sort keys must be equal\n",
func_name);