repository_infos: Enable automatic updates on the main Haiku repostiory.
[haiku.git] / src / tests / system / libroot / posix / wcs_test.cpp
blob75ecd3bed5ebf499c9e498922123932d1d1667cd
1 /*
2 * Copyright 2011, Oliver Tappe, zooey@hirschkaefer.de
3 * Distributed under the terms of the MIT License.
4 */
6 #define _GNU_SOURCE
7 // for wmempcpy() and wcschrnul()
9 #include <errno.h>
10 #include <locale.h>
11 #include <stdio.h>
12 #include <stdlib.h>
13 #include <string.h>
14 #include <time.h>
15 #include <wchar.h>
18 static int sign (int a)
20 if (a < 0)
21 return -1;
22 if (a > 0)
23 return 1;
24 return 0;
28 // #pragma mark - wcslen -------------------------------------------------------
31 void
32 test_wcslen()
34 printf("wcslen()/wcsnlen()\n");
36 int problemCount = 0;
37 errno = 0;
40 const wchar_t* string = L"";
41 size_t result = wcslen(string);
42 size_t expected = 0;
43 if (result != expected || errno != 0) {
44 printf("\tPROBLEM: result for wcslen(\"%ls\") = %lu (expected %lu),"
45 " errno = %x (expected %x)\n", string, result, expected,
46 errno, 0);
47 problemCount++;
52 const wchar_t* string = L"test";
53 size_t result = wcslen(string);
54 size_t expected = 4;
55 if (result != expected || errno != 0) {
56 printf("\tPROBLEM: result for wcslen(\"%ls\") = %lu (expected %lu),"
57 " errno = %x (expected %x)\n", string, result, expected,
58 errno, 0);
59 problemCount++;
64 const wchar_t* string = L"t\xE4st";
65 size_t result = wcslen(string);
66 size_t expected = 4;
67 if (result != expected || errno != 0) {
68 printf("\tPROBLEM: result for wcslen(\"%ls\") = %lu (expected %lu),"
69 " errno = %x (expected %x)\n", string, result, expected,
70 errno, 0);
71 problemCount++;
76 const wchar_t* string = L"te\x00st";
77 size_t result = wcslen(string);
78 size_t expected = 2;
79 if (result != expected || errno != 0) {
80 printf("\tPROBLEM: result for wcslen(\"%ls\") = %lu (expected %lu),"
81 " errno = %x (expected %x)\n", string, result, expected,
82 errno, 0);
83 problemCount++;
88 const wchar_t* string = L"test";
89 size_t result = wcsnlen(string, 0);
90 size_t expected = 0;
91 if (result != expected || errno != 0) {
92 printf("\tPROBLEM: result for wcsnlen(\"%ls\", 0) = %lu "
93 "(expected %lu), errno = %x (expected %x)\n",
94 string, result, expected, errno, 0);
95 problemCount++;
100 const wchar_t* string = L"test";
101 size_t result = wcsnlen(string, 4);
102 size_t expected = 4;
103 if (result != expected || errno != 0) {
104 printf("\tPROBLEM: result for wcsnlen(\"%ls\", 4) = %lu "
105 "(expected %lu), errno = %x (expected %x)\n",
106 string, result, expected, errno, 0);
107 problemCount++;
112 const wchar_t* string = L"test";
113 size_t result = wcsnlen(string, 6);
114 size_t expected = 4;
115 if (result != expected || errno != 0) {
116 printf("\tPROBLEM: result for wcsnlen(\"%ls\", 6) = %lu "
117 "(expected %lu), errno = %x (expected %x)\n",
118 string, result, expected, errno, 0);
119 problemCount++;
123 if (problemCount)
124 printf("\t%d problem(s) found!\n", problemCount);
125 else
126 printf("\tall fine\n");
130 // #pragma mark - wcscmp -------------------------------------------------------
133 void
134 test_wcscmp()
136 printf("wcscmp()/wcsncmp()\n");
138 int problemCount = 0;
139 errno = 0;
142 const wchar_t* a = L"";
143 const wchar_t* b = L"";
144 int result = sign(wcscmp(a, b));
145 int expected = 0;
146 if (result != expected || errno != 0) {
147 printf("\tPROBLEM: result for wcscmp(\"%ls\", \"%ls\") = %d "
148 "(expected %d), errno = %x (expected 0)\n", a, b, result,
149 expected, errno);
150 problemCount++;
155 const wchar_t* a = L"a";
156 const wchar_t* b = L"b";
157 int result = sign(wcscmp(a, b));
158 int expected = -1;
159 if (result != expected || errno != 0) {
160 printf("\tPROBLEM: result for wcscmp(\"%ls\", \"%ls\") = %d "
161 "(expected %d), errno = %x (expected 0)\n", a, b, result,
162 expected, errno);
163 problemCount++;
168 const wchar_t* a = L"b";
169 const wchar_t* b = L"a";
170 int result = sign(wcscmp(a, b));
171 int expected = 1;
172 if (result != expected || errno != 0) {
173 printf("\tPROBLEM: result for wcscmp(\"%ls\", \"%ls\") = %d "
174 "(expected %d), errno = %x (expected 0)\n", a, b, result,
175 expected, errno);
176 problemCount++;
181 const wchar_t* a = L"a";
182 const wchar_t* b = L"A";
183 int result = sign(wcscmp(a, b));
184 int expected = 1;
185 if (result != expected || errno != 0) {
186 printf("\tPROBLEM: result for wcscmp(\"%ls\", \"%ls\") = %d "
187 "(expected %d), errno = %x (expected 0)\n", a, b, result,
188 expected, errno);
189 problemCount++;
194 const wchar_t* a = L"täst";
195 const wchar_t* b = L"täst";
196 int result = sign(wcscmp(a, b));
197 int expected = 0;
198 if (result != expected || errno != 0) {
199 printf("\tPROBLEM: result for wcscmp(\"%ls\", \"%ls\") = %d "
200 "(expected %d), errno = %x (expected 0)\n", a, b, result,
201 expected, errno);
202 problemCount++;
207 const wchar_t* a = L"täst";
208 const wchar_t* b = L"täst ";
209 int result = sign(wcscmp(a, b));
210 int expected = -1;
211 if (result != expected || errno != 0) {
212 printf("\tPROBLEM: result for wcscmp(\"%ls\", \"%ls\") = %d "
213 "(expected %d), errno = %x (expected 0)\n", a, b, result,
214 expected, errno);
215 problemCount++;
220 const wchar_t* a = L"täSt";
221 const wchar_t* b = L"täs";
222 int result = sign(wcscmp(a, b));
223 int expected = -1;
224 if (result != expected || errno != 0) {
225 printf("\tPROBLEM: result for wcscmp(\"%ls\", \"%ls\") = %d "
226 "(expected %d), errno = %x (expected 0)\n", a, b, result,
227 expected, errno);
228 problemCount++;
233 const wchar_t* a = L"täst1";
234 const wchar_t* b = L"täst0";
235 int result = sign(wcsncmp(a, b, 0));
236 int expected = 0;
237 if (result != expected || errno != 0) {
238 printf("\tPROBLEM: result for wcsncmp(\"%ls\", \"%ls\", 0) = %d "
239 "(expected %d), errno = %x (expected 0)\n", a, b, result,
240 expected, errno);
241 problemCount++;
246 const wchar_t* a = L"täst1";
247 const wchar_t* b = L"täst0";
248 int result = sign(wcsncmp(a, b, 4));
249 int expected = 0;
250 if (result != expected || errno != 0) {
251 printf("\tPROBLEM: result for wcsncmp(\"%ls\", \"%ls\", 4) = %d "
252 "(expected %d), errno = %x (expected 0)\n", a, b, result,
253 expected, errno);
254 problemCount++;
259 const wchar_t* a = L"täst1";
260 const wchar_t* b = L"täst0";
261 int result = sign(wcsncmp(a, b, 5));
262 int expected = 1;
263 if (result != expected || errno != 0) {
264 printf("\tPROBLEM: result for wcsncmp(\"%ls\", \"%ls\", 5) = %d "
265 "(expected %d), errno = %x (expected 0)\n", a, b, result,
266 expected, errno);
267 problemCount++;
272 const wchar_t* a = L"täs";
273 const wchar_t* b = L"täst123";
274 int result = sign(wcsncmp(a, b, (size_t)-1));
275 int expected = -1;
276 if (result != expected || errno != 0) {
277 printf("\tPROBLEM: result for wcsncmp(\"%ls\", \"%ls\", -1) = %d "
278 "(expected %d), errno = %x (expected 0)\n", a, b, result,
279 expected, errno);
280 problemCount++;
284 if (problemCount)
285 printf("\t%d problem(s) found!\n", problemCount);
286 else
287 printf("\tall fine\n");
291 // #pragma mark - wcscasecmp ---------------------------------------------------
294 void
295 test_wcscasecmp()
297 printf("wcscasecmp()/wcsncasecmp()\n");
299 int problemCount = 0;
300 errno = 0;
303 const wchar_t* a = L"";
304 const wchar_t* b = L"";
305 int result = sign(wcscasecmp(a, b));
306 int expected = 0;
307 if (result != expected || errno != 0) {
308 printf("\tPROBLEM: result for wcscasecmp(\"%ls\", \"%ls\") = %d "
309 "(expected %d), errno = %x (expected 0)\n", a, b, result,
310 expected, errno);
311 problemCount++;
316 const wchar_t* a = L"a";
317 const wchar_t* b = L"b";
318 int result = sign(wcscasecmp(a, b));
319 int expected = -1;
320 if (result != expected || errno != 0) {
321 printf("\tPROBLEM: result for wcscasecmp(\"%ls\", \"%ls\") = %d "
322 "(expected %d), errno = %x (expected 0)\n", a, b, result,
323 expected, errno);
324 problemCount++;
329 const wchar_t* a = L"B";
330 const wchar_t* b = L"a";
331 int result = sign(wcscasecmp(a, b));
332 int expected = 1;
333 if (result != expected || errno != 0) {
334 printf("\tPROBLEM: result for wcscasecmp(\"%ls\", \"%ls\") = %d "
335 "(expected %d), errno = %x (expected 0)\n", a, b, result,
336 expected, errno);
337 problemCount++;
342 const wchar_t* a = L"a";
343 const wchar_t* b = L"A";
344 int result = sign(wcscasecmp(a, b));
345 int expected = 0;
346 if (result != expected || errno != 0) {
347 printf("\tPROBLEM: result for wcscasecmp(\"%ls\", \"%ls\") = %d "
348 "(expected %d), errno = %x (expected 0)\n", a, b, result,
349 expected, errno);
350 problemCount++;
355 const wchar_t* a = L"TÄST";
356 const wchar_t* b = L"täst";
357 int result = sign(wcscasecmp(a, b));
358 int expected = 0;
359 if (result != expected || errno != 0) {
360 printf("\tPROBLEM: result for wcscasecmp(\"%ls\", \"%ls\") = %d "
361 "(expected %d), errno = %x (expected 0)\n", a, b, result,
362 expected, errno);
363 problemCount++;
368 const wchar_t* a = L"tÄst";
369 const wchar_t* b = L"täst ";
370 int result = sign(wcscasecmp(a, b));
371 int expected = -1;
372 if (result != expected || errno != 0) {
373 printf("\tPROBLEM: result for wcscasecmp(\"%ls\", \"%ls\") = %d "
374 "(expected %d), errno = %x (expected 0)\n", a, b, result,
375 expected, errno);
376 problemCount++;
381 const wchar_t* a = L"TäSt";
382 const wchar_t* b = L"täs";
383 int result = sign(wcscasecmp(a, b));
384 int expected = 1;
385 if (result != expected || errno != 0) {
386 printf("\tPROBLEM: result for wcscasecmp(\"%ls\", \"%ls\") = %d "
387 "(expected %d), errno = %x (expected 0)\n", a, b, result,
388 expected, errno);
389 problemCount++;
394 const wchar_t* a = L"tÄst1";
395 const wchar_t* b = L"täst0";
396 int result = sign(wcsncasecmp(a, b, 0));
397 int expected = 0;
398 if (result != expected || errno != 0) {
399 printf("\tPROBLEM: result for wcscasencmp(\"%ls\", \"%ls\", 0) = %d"
400 " (expected %d), errno = %x (expected 0)\n", a, b, result,
401 expected, errno);
402 problemCount++;
407 const wchar_t* a = L"täst1";
408 const wchar_t* b = L"täSt0";
409 int result = sign(wcsncasecmp(a, b, 4));
410 int expected = 0;
411 if (result != expected || errno != 0) {
412 printf("\tPROBLEM: result for wcsncasecmp(\"%ls\", \"%ls\", 4) = %d"
413 " (expected %d), errno = %x (expected 0)\n", a, b, result,
414 expected, errno);
415 problemCount++;
420 const wchar_t* a = L"täsT1";
421 const wchar_t* b = L"täst0";
422 int result = sign(wcsncasecmp(a, b, 5));
423 int expected = 1;
424 if (result != expected || errno != 0) {
425 printf("\tPROBLEM: result for wcsncasecmp(\"%ls\", \"%ls\", 5) = %d"
426 " (expected %d), errno = %x (expected 0)\n", a, b, result,
427 expected, errno);
428 problemCount++;
433 const wchar_t* a = L"täs";
434 const wchar_t* b = L"täSt123";
435 int result = sign(wcsncasecmp(a, b, (size_t)-1));
436 int expected = -1;
437 if (result != expected || errno != 0) {
438 printf("\tPROBLEM: result for wcsncasecmp(\"%ls\", \"%ls\", -1) = "
439 "%d (expected %d), errno = %x (expected 0)\n", a, b, result,
440 expected, errno);
441 problemCount++;
445 if (problemCount)
446 printf("\t%d problem(s) found!\n", problemCount);
447 else
448 printf("\tall fine\n");
452 // #pragma mark - wcschr -------------------------------------------------------
455 void
456 test_wcschr()
458 printf("wcschr()/wcschrnul()/wcsrchr()\n");
460 int problemCount = 0;
461 errno = 0;
464 const wchar_t* string = L"";
465 const wchar_t ch = L' ';
466 const wchar_t* result = wcschr(string, ch);
467 const wchar_t* expected = NULL;
468 if (result != expected || errno != 0) {
469 printf("\tPROBLEM: result for wcschr(\"%ls\", '%lc') = %p "
470 "(expected %p), errno = %x (expected 0)\n", string, ch,
471 result, expected, errno);
472 problemCount++;
477 const wchar_t* string = L"";
478 const wchar_t ch = L'\0';
479 const wchar_t* result = wcschr(string, ch);
480 const wchar_t* expected = string;
481 if (result != expected || errno != 0) {
482 printf("\tPROBLEM: result for wcschr(\"%ls\", '%lc') = %p "
483 "(expected %p), errno = %x (expected 0)\n", string, ch,
484 result, expected, errno);
485 problemCount++;
490 const wchar_t* string = L"sometext";
491 const wchar_t ch = L' ';
492 const wchar_t* result = wcschr(string, ch);
493 const wchar_t* expected = NULL;
494 if (result != expected || errno != 0) {
495 printf("\tPROBLEM: result for wcschr(\"%ls\", '%lc') = %p "
496 "(expected %p), errno = %x (expected 0)\n", string, ch,
497 result, expected, errno);
498 problemCount++;
503 const wchar_t* string = L"some more text";
504 const wchar_t ch = L' ';
505 const wchar_t* result = wcschr(string, ch);
506 const wchar_t* expected = string + 4;
507 if (result != expected || errno != 0) {
508 printf("\tPROBLEM: result for wcschr(\"%ls\", '%lc') = %p "
509 "(expected %p), errno = %x (expected 0)\n", string, ch,
510 result, expected, errno);
511 problemCount++;
516 const wchar_t* string = L"some more text";
517 const wchar_t ch = L's';
518 const wchar_t* result = wcschr(string, ch);
519 const wchar_t* expected = string;
520 if (result != expected || errno != 0) {
521 printf("\tPROBLEM: result for wcschr(\"%ls\", '%lc') = %p "
522 "(expected %p), errno = %x (expected 0)\n", string, ch,
523 result, expected, errno);
524 problemCount++;
529 const wchar_t* string = L"some more text";
530 const wchar_t ch = L'S';
531 const wchar_t* result = wcschr(string, ch);
532 const wchar_t* expected = NULL;
533 if (result != expected || errno != 0) {
534 printf("\tPROBLEM: result for wcschr(\"%ls\", '%lc') = %p "
535 "(expected %p), errno = %x (expected 0)\n", string, ch,
536 result, expected, errno);
537 problemCount++;
542 const wchar_t* string = L"some more text";
543 const wchar_t ch = L'\0';
544 const wchar_t* result = wcschr(string, ch);
545 const wchar_t* expected = string + 14;
546 if (result != expected || errno != 0) {
547 printf("\tPROBLEM: result for wcschr(\"%ls\", '%lc') = %p "
548 "(expected %p), errno = %x (expected 0)\n", string, ch,
549 result, expected, errno);
550 problemCount++;
555 const wchar_t* string = L"";
556 const wchar_t ch = L' ';
557 const wchar_t* result = wcschrnul(string, ch);
558 const wchar_t* expected = string;
559 if (result != expected || errno != 0) {
560 printf("\tPROBLEM: result for wcschrnul(\"%ls\", '%lc') = %p "
561 "(expected %p), errno = %x (expected 0)\n", string, ch,
562 result, expected, errno);
563 problemCount++;
568 const wchar_t* string = L"";
569 const wchar_t ch = L'\0';
570 const wchar_t* result = wcschrnul(string, ch);
571 const wchar_t* expected = string;
572 if (result != expected || errno != 0) {
573 printf("\tPROBLEM: result for wcschrnul(\"%ls\", '%lc') = %p "
574 "(expected %p), errno = %x (expected 0)\n", string, ch,
575 result, expected, errno);
576 problemCount++;
581 const wchar_t* string = L"sometext";
582 const wchar_t ch = L' ';
583 const wchar_t* result = wcschrnul(string, ch);
584 const wchar_t* expected = string + wcslen(string);
585 if (result != expected || errno != 0) {
586 printf("\tPROBLEM: result for wcschrnul(\"%ls\", '%lc') = %p "
587 "(expected %p), errno = %x (expected 0)\n", string, ch,
588 result, expected, errno);
589 problemCount++;
594 const wchar_t* string = L"some more text";
595 const wchar_t ch = L' ';
596 const wchar_t* result = wcschrnul(string, ch);
597 const wchar_t* expected = string + 4;
598 if (result != expected || errno != 0) {
599 printf("\tPROBLEM: result for wcschrnul(\"%ls\", '%lc') = %p "
600 "(expected %p), errno = %x (expected 0)\n", string, ch,
601 result, expected, errno);
602 problemCount++;
607 const wchar_t* string = L"some more text";
608 const wchar_t ch = L's';
609 const wchar_t* result = wcschrnul(string, ch);
610 const wchar_t* expected = string;
611 if (result != expected || errno != 0) {
612 printf("\tPROBLEM: result for wcschrnul(\"%ls\", '%lc') = %p "
613 "(expected %p), errno = %x (expected 0)\n", string, ch,
614 result, expected, errno);
615 problemCount++;
620 const wchar_t* string = L"some more text";
621 const wchar_t ch = L'S';
622 const wchar_t* result = wcschrnul(string, ch);
623 const wchar_t* expected = string + wcslen(string);
624 if (result != expected || errno != 0) {
625 printf("\tPROBLEM: result for wcschrnul(\"%ls\", '%lc') = %p "
626 "(expected %p), errno = %x (expected 0)\n", string, ch,
627 result, expected, errno);
628 problemCount++;
633 const wchar_t* string = L"some more text";
634 const wchar_t ch = L'\0';
635 const wchar_t* result = wcschrnul(string, ch);
636 const wchar_t* expected = string + 14;
637 if (result != expected || errno != 0) {
638 printf("\tPROBLEM: result for wcschrnul(\"%ls\", '%lc') = %p "
639 "(expected %p), errno = %x (expected 0)\n", string, ch,
640 result, expected, errno);
641 problemCount++;
646 const wchar_t* string = L"";
647 const wchar_t ch = L' ';
648 const wchar_t* result = wcsrchr(string, ch);
649 const wchar_t* expected = NULL;
650 if (result != expected || errno != 0) {
651 printf("\tPROBLEM: result for wcsrchr(\"%ls\", '%lc') = %p "
652 "(expected %p), errno = %x (expected 0)\n", string, ch,
653 result, expected, errno);
654 problemCount++;
659 const wchar_t* string = L"";
660 const wchar_t ch = L'\0';
661 const wchar_t* result = wcsrchr(string, ch);
662 const wchar_t* expected = string;
663 if (result != expected || errno != 0) {
664 printf("\tPROBLEM: result for wcsrchr(\"%ls\", '%lc') = %p "
665 "(expected %p), errno = %x (expected 0)\n", string, ch,
666 result, expected, errno);
667 problemCount++;
672 const wchar_t* string = L"sometext";
673 const wchar_t ch = L' ';
674 const wchar_t* result = wcsrchr(string, ch);
675 const wchar_t* expected = NULL;
676 if (result != expected || errno != 0) {
677 printf("\tPROBLEM: result for wcsrchr(\"%ls\", '%lc') = %p "
678 "(expected %p), errno = %x (expected 0)\n", string, ch,
679 result, expected, errno);
680 problemCount++;
685 const wchar_t* string = L"some more text";
686 const wchar_t ch = L' ';
687 const wchar_t* result = wcsrchr(string, ch);
688 const wchar_t* expected = string + 9;
689 if (result != expected || errno != 0) {
690 printf("\tPROBLEM: result for wcsrchr(\"%ls\", '%lc') = %p "
691 "(expected %p), errno = %x (expected 0)\n", string, ch,
692 result, expected, errno);
693 problemCount++;
698 const wchar_t* string = L"some more text";
699 const wchar_t ch = L's';
700 const wchar_t* result = wcsrchr(string, ch);
701 const wchar_t* expected = string;
702 if (result != expected || errno != 0) {
703 printf("\tPROBLEM: result for wcsrchr(\"%ls\", '%lc') = %p "
704 "(expected %p), errno = %x (expected 0)\n", string, ch,
705 result, expected, errno);
706 problemCount++;
711 const wchar_t* string = L"some more text";
712 const wchar_t ch = L'S';
713 const wchar_t* result = wcsrchr(string, ch);
714 const wchar_t* expected = NULL;
715 if (result != expected || errno != 0) {
716 printf("\tPROBLEM: result for wcsrchr(\"%ls\", '%lc') = %p "
717 "(expected %p), errno = %x (expected 0)\n", string, ch,
718 result, expected, errno);
719 problemCount++;
724 const wchar_t* string = L"some more text";
725 const wchar_t ch = L'\0';
726 const wchar_t* result = wcsrchr(string, ch);
727 const wchar_t* expected = string + 14;
728 if (result != expected || errno != 0) {
729 printf("\tPROBLEM: result for wcsrchr(\"%ls\", '%lc') = %p "
730 "(expected %p), errno = %x (expected 0)\n", string, ch,
731 result, expected, errno);
732 problemCount++;
736 if (problemCount)
737 printf("\t%d problem(s) found!\n", problemCount);
738 else
739 printf("\tall fine\n");
743 // #pragma mark - wcsdup -------------------------------------------------------
746 void
747 test_wcsdup()
749 printf("wcsdup()\n");
751 int problemCount = 0;
752 errno = 0;
754 #ifdef __HAIKU__
756 const wchar_t* string = NULL;
757 wchar_t* result = wcsdup(string);
758 if (result != NULL || errno != 0) {
759 printf("\tPROBLEM: result for wcsdup(%p) = \"%ls\", errno = %x"
760 " (expected 0)\n", string, result, errno);
761 problemCount++;
764 #endif
767 const wchar_t* string = L"";
768 wchar_t* result = wcsdup(string);
769 if (result == NULL || wcscmp(result, string) != 0 || errno != 0) {
770 printf("\tPROBLEM: result for wcsdup(\"%ls\") = \"%ls\", errno = %x"
771 " (expected 0)\n", string, result, errno);
772 problemCount++;
777 const wchar_t* string = L"tÄstdata with some charäcters";
778 wchar_t* result = wcsdup(string);
779 if (result == NULL || wcscmp(result, string) != 0 || errno != 0) {
780 printf("\tPROBLEM: result for wcsdup(\"%ls\") = \"%ls\", errno = %x"
781 " (expected 0)\n", string, result, errno);
782 problemCount++;
786 if (problemCount)
787 printf("\t%d problem(s) found!\n", problemCount);
788 else
789 printf("\tall fine\n");
793 // #pragma mark - wcscpy -------------------------------------------------------
796 void
797 test_wcscpy()
799 printf("wcscpy()/wcsncpy()\n");
801 int problemCount = 0;
802 errno = 0;
805 const wchar_t* source = L"";
806 wchar_t destination[] = L"XXXXXXXXXXXXXXXX";
807 wchar_t* result = wcscpy(destination, source);
808 if (result != destination) {
809 printf("\tPROBLEM: wcscpy(destination, \"%ls\") -> result=%p, "
810 "expected %p\n", source, result, destination);
811 problemCount++;
813 if (errno != 0) {
814 printf("\tPROBLEM: wcscpy(destination, \"%ls\") -> errno=%d, "
815 "expected 0\n", source, errno);
816 problemCount++;
818 if (wcslen(destination) != 0) {
819 printf("\tPROBLEM: wcscpy(destination, \"%ls\") -> "
820 "wcslen(destination)=%lu, expected 0\n", source,
821 wcslen(destination));
822 problemCount++;
824 if (destination[0] != L'\0') {
825 printf("\tPROBLEM: wcscpy(destination, \"%ls\") -> "
826 "destination[0]=%x, expected %x\n", source, destination[0],
827 L'\0');
828 problemCount++;
830 if (destination[1] != L'X') {
831 printf("\tPROBLEM: wcscpy(destination, \"%ls\") -> "
832 "destination[1]=%x, expected %x\n", source, destination[1],
833 L'X');
834 problemCount++;
839 const wchar_t* source = L"test";
840 wchar_t destination[] = L"XXXXXXXXXXXXXXXX";
841 wchar_t* result = wcscpy(destination, source);
842 if (result != destination) {
843 printf("\tPROBLEM: wcscpy(destination, \"%ls\") -> result=%p, "
844 "expected %p\n", source, result, destination);
845 problemCount++;
847 if (errno != 0) {
848 printf("\tPROBLEM: wcscpy(destination, \"%ls\") -> errno=%d, "
849 "expected 0\n", source, errno);
850 problemCount++;
852 if (wcslen(destination) != 4) {
853 printf("\tPROBLEM: wcscpy(destination, \"%ls\") -> "
854 "wcslen(destination)=%lu, expected 4\n", source,
855 wcslen(destination));
856 problemCount++;
858 if (destination[0] != L't') {
859 printf("\tPROBLEM: wcscpy(destination, \"%ls\") -> "
860 "destination[0]=%x, expected %x\n", source, destination[0],
861 L't');
862 problemCount++;
864 if (destination[1] != L'e') {
865 printf("\tPROBLEM: wcscpy(destination, \"%ls\") -> "
866 "destination[1]=%x, expected %x\n", source, destination[1],
867 L'e');
868 problemCount++;
870 if (destination[2] != L's') {
871 printf("\tPROBLEM: wcscpy(destination, \"%ls\") -> "
872 "destination[2]=%x, expected %x\n", source, destination[2],
873 L's');
874 problemCount++;
876 if (destination[3] != L't') {
877 printf("\tPROBLEM: wcscpy(destination, \"%ls\") -> "
878 "destination[3]=%x, expected %x\n", source, destination[3],
879 L't');
880 problemCount++;
882 if (destination[4] != L'\0') {
883 printf("\tPROBLEM: wcscpy(destination, \"%ls\") -> "
884 "destination[4]=%x, expected %x\n", source, destination[4],
885 L'\0');
886 problemCount++;
888 if (destination[5] != L'X') {
889 printf("\tPROBLEM: wcscpy(destination, \"%ls\") -> "
890 "destination[5]=%x, expected %x\n", source, destination[5],
891 L'X');
892 problemCount++;
897 const wchar_t* source = L"t\xE4st";
898 wchar_t destination[] = L"XXXXXXXXXXXXXXXX";
899 wchar_t* result = wcscpy(destination, source);
900 if (result != destination) {
901 printf("\tPROBLEM: wcscpy(destination, \"%ls\") -> result=%p, "
902 "expected %p\n", source, result, destination);
903 problemCount++;
905 if (errno != 0) {
906 printf("\tPROBLEM: wcscpy(destination, \"%ls\") -> errno=%d, "
907 "expected 0\n", source, errno);
908 problemCount++;
910 if (wcslen(destination) != 4) {
911 printf("\tPROBLEM: wcscpy(destination, \"%ls\") -> "
912 "wcslen(destination)=%lu, expected 4\n", source,
913 wcslen(destination));
914 problemCount++;
916 if (destination[0] != L't') {
917 printf("\tPROBLEM: wcscpy(destination, \"%ls\") -> "
918 "destination[0]=%x, expected %x\n", source, destination[0],
919 L't');
920 problemCount++;
922 if (destination[1] != L'\xE4') {
923 printf("\tPROBLEM: wcscpy(destination, \"%ls\") -> "
924 "destination[1]=%x, expected %x\n", source, destination[1],
925 L'\xE4');
926 problemCount++;
928 if (destination[2] != L's') {
929 printf("\tPROBLEM: wcscpy(destination, \"%ls\") -> "
930 "destination[2]=%x, expected %x\n", source, destination[2],
931 L's');
932 problemCount++;
934 if (destination[3] != L't') {
935 printf("\tPROBLEM: wcscpy(destination, \"%ls\") -> "
936 "destination[3]=%x, expected %x\n", source, destination[3],
937 L't');
938 problemCount++;
940 if (destination[4] != L'\0') {
941 printf("\tPROBLEM: wcscpy(destination, \"%ls\") -> "
942 "destination[4]=%x, expected %x\n", source, destination[4],
943 L'\0');
944 problemCount++;
946 if (destination[5] != L'X') {
947 printf("\tPROBLEM: wcscpy(destination, \"%ls\") -> "
948 "destination[5]=%x, expected %x\n", source, destination[5],
949 L'X');
950 problemCount++;
955 const wchar_t* source = L"te\x00st";
956 wchar_t destination[] = L"XXXXXXXXXXXXXXXX";
957 wchar_t* result = wcscpy(destination, source);
958 if (result != destination) {
959 printf("\tPROBLEM: wcscpy(destination, \"%ls\") -> result=%p, "
960 "expected %p\n", source, result, destination);
961 problemCount++;
963 if (errno != 0) {
964 printf("\tPROBLEM: wcscpy(destination, \"%ls\") -> errno=%d, "
965 "expected 0\n", source, errno);
966 problemCount++;
968 if (wcslen(destination) != 2) {
969 printf("\tPROBLEM: wcscpy(destination, \"%ls\") -> "
970 "wcslen(destination)=%lu, expected 2\n", source,
971 wcslen(destination));
972 problemCount++;
974 if (destination[0] != L't') {
975 printf("\tPROBLEM: wcscpy(destination, \"%ls\") -> "
976 "destination[0]=%x, expected %x\n", source, destination[0],
977 L't');
978 problemCount++;
980 if (destination[1] != L'e') {
981 printf("\tPROBLEM: wcscpy(destination, \"%ls\") -> "
982 "destination[1]=%x, expected %x\n", source, destination[1],
983 L'e');
984 problemCount++;
986 if (destination[2] != L'\0') {
987 printf("\tPROBLEM: wcscpy(destination, \"%ls\") -> "
988 "destination[2]=%x, expected %x\n", source, destination[2],
989 L'\0');
990 problemCount++;
992 if (destination[3] != L'X') {
993 printf("\tPROBLEM: wcscpy(destination, \"%ls\") -> "
994 "destination[3]=%x, expected %x\n", source, destination[3],
995 L'X');
996 problemCount++;
1001 const wchar_t* source = L"t\xE4st";
1002 wchar_t destination[] = L"XXXXXXXXXXXXXXXX";
1003 wchar_t* result = wcsncpy(destination, source, 0);
1004 if (result != destination) {
1005 printf("\tPROBLEM: wcsncpy(destination, \"%ls\", 0) -> result=%p, "
1006 "expected %p\n", source, result, destination);
1007 problemCount++;
1009 if (errno != 0) {
1010 printf("\tPROBLEM: wcsncpy(destination, \"%ls\", 0) -> errno=%d, "
1011 "expected 0\n", source, errno);
1012 problemCount++;
1014 if (destination[0] != L'X') {
1015 printf("\tPROBLEM: wcsncpy(destination, \"%ls\", 0) -> "
1016 "destination[0]=%x, expected %x\n", source, destination[0],
1017 L'X');
1018 problemCount++;
1023 const wchar_t* source = L"t\xE4st";
1024 wchar_t destination[] = L"XXXXXXXXXXXXXXXX";
1025 wchar_t* result = wcsncpy(destination, source, 2);
1026 if (result != destination) {
1027 printf("\tPROBLEM: wcsncpy(destination, \"%ls\", 2) -> result=%p, "
1028 "expected %p\n", source, result, destination);
1029 problemCount++;
1031 if (errno != 0) {
1032 printf("\tPROBLEM: wcsncpy(destination, \"%ls\", 2) -> errno=%d, "
1033 "expected 0\n", source, errno);
1034 problemCount++;
1036 if (destination[0] != L't') {
1037 printf("\tPROBLEM: wcsncpy(destination, \"%ls\", 2) -> "
1038 "destination[0]=%x, expected %x\n", source, destination[0],
1039 L't');
1040 problemCount++;
1042 if (destination[1] != L'\xE4') {
1043 printf("\tPROBLEM: wcsncpy(destination, \"%ls\", 2) -> "
1044 "destination[1]=%x, expected %x\n", source, destination[1],
1045 L'\xE4');
1046 problemCount++;
1048 if (destination[2] != L'X') {
1049 printf("\tPROBLEM: wcsncpy(destination, \"%ls\", 2) -> "
1050 "destination[2]=%x, expected %x\n", source, destination[2],
1051 L'X');
1052 problemCount++;
1057 const wchar_t* source = L"t\xE4st";
1058 wchar_t destination[] = L"XXXXXXXXXXXXXXXX";
1059 wchar_t* result = wcsncpy(destination, source, 4);
1060 if (result != destination) {
1061 printf("\tPROBLEM: wcsncpy(destination, \"%ls\", 4) -> result=%p, "
1062 "expected %p\n", source, result, destination);
1063 problemCount++;
1065 if (errno != 0) {
1066 printf("\tPROBLEM: wcsncpy(destination, \"%ls\", 4) -> errno=%d, "
1067 "expected 0\n", source, errno);
1068 problemCount++;
1070 if (destination[0] != L't') {
1071 printf("\tPROBLEM: wcsncpy(destination, \"%ls\", 4) -> "
1072 "destination[0]=%x, expected %x\n", source, destination[0],
1073 L't');
1074 problemCount++;
1076 if (destination[1] != L'\xE4') {
1077 printf("\tPROBLEM: wcsncpy(destination, \"%ls\", 4) -> "
1078 "destination[1]=%x, expected %x\n", source, destination[1],
1079 L'\xE4');
1080 problemCount++;
1082 if (destination[2] != L's') {
1083 printf("\tPROBLEM: wcsncpy(destination, \"%ls\", 4) -> "
1084 "destination[2]=%x, expected %x\n", source, destination[2],
1085 L's');
1086 problemCount++;
1088 if (destination[3] != L't') {
1089 printf("\tPROBLEM: wcsncpy(destination, \"%ls\", 4) -> "
1090 "destination[3]=%x, expected %x\n", source, destination[3],
1091 L't');
1092 problemCount++;
1094 if (destination[4] != L'X') {
1095 printf("\tPROBLEM: wcsncpy(destination, \"%ls\", 4) -> "
1096 "destination[4]=%x, expected %x\n", source, destination[4],
1097 L'X');
1098 problemCount++;
1103 const wchar_t* source = L"t\xE4st";
1104 wchar_t destination[] = L"XXXXXXXXXXXXXXXX";
1105 wchar_t* result = wcsncpy(destination, source, 8);
1106 if (result != destination) {
1107 printf("\tPROBLEM: wcsncpy(destination, \"%ls\", 8) -> result=%p, "
1108 "expected %p\n", source, result, destination);
1109 problemCount++;
1111 if (errno != 0) {
1112 printf("\tPROBLEM: wcsncpy(destination, \"%ls\", 8) -> errno=%d, "
1113 "expected 0\n", source, errno);
1114 problemCount++;
1116 if (wcslen(destination) != 4) {
1117 printf("\tPROBLEM: wcsncpy(destination, \"%ls\", 8) -> "
1118 "wcslen(destination)=%lu, expected 4\n", source,
1119 wcslen(destination));
1120 problemCount++;
1122 if (destination[0] != L't') {
1123 printf("\tPROBLEM: wcsncpy(destination, \"%ls\", 8) -> "
1124 "destination[0]=%x, expected %x\n", source, destination[0],
1125 L't');
1126 problemCount++;
1128 if (destination[1] != L'\xE4') {
1129 printf("\tPROBLEM: wcsncpy(destination, \"%ls\", 8) -> "
1130 "destination[1]=%x, expected %x\n", source, destination[1],
1131 L'\xE4');
1132 problemCount++;
1134 if (destination[2] != L's') {
1135 printf("\tPROBLEM: wcsncpy(destination, \"%ls\", 8) -> "
1136 "destination[2]=%x, expected %x\n", source, destination[2],
1137 L's');
1138 problemCount++;
1140 if (destination[3] != L't') {
1141 printf("\tPROBLEM: wcsncpy(destination, \"%ls\", 8) -> "
1142 "destination[3]=%x, expected %x\n", source, destination[3],
1143 L't');
1144 problemCount++;
1146 if (destination[4] != L'\0') {
1147 printf("\tPROBLEM: wcsncpy(destination, \"%ls\", 8) -> "
1148 "destination[4]=%x, expected %x\n", source, destination[4],
1149 L'\0');
1150 problemCount++;
1152 if (destination[5] != L'\0') {
1153 printf("\tPROBLEM: wcsncpy(destination, \"%ls\", 8) -> "
1154 "destination[5]=%x, expected %x\n", source, destination[5],
1155 L'\0');
1156 problemCount++;
1158 if (destination[6] != L'\0') {
1159 printf("\tPROBLEM: wcsncpy(destination, \"%ls\", 8) -> "
1160 "destination[6]=%x, expected %x\n", source, destination[6],
1161 L'\0');
1162 problemCount++;
1164 if (destination[7] != L'\0') {
1165 printf("\tPROBLEM: wcsncpy(destination, \"%ls\", 8) -> "
1166 "destination[7]=%x, expected %x\n", source, destination[7],
1167 L'\0');
1168 problemCount++;
1170 if (destination[8] != L'X') {
1171 printf("\tPROBLEM: wcsncpy(destination, \"%ls\", 8) -> "
1172 "destination[8]=%x, expected %x\n", source, destination[8],
1173 L'X');
1174 problemCount++;
1178 if (problemCount)
1179 printf("\t%d problem(s) found!\n", problemCount);
1180 else
1181 printf("\tall fine\n");
1185 // #pragma mark - wcpcpy -------------------------------------------------------
1188 void
1189 test_wcpcpy()
1191 printf("wcpcpy()/wcpncpy()\n");
1193 int problemCount = 0;
1194 errno = 0;
1197 const wchar_t* source = L"";
1198 wchar_t destination[] = L"XXXXXXXXXXXXXXXX";
1199 wchar_t* result = wcpcpy(destination, source);
1200 if (result != destination) {
1201 printf("\tPROBLEM: wcpcpy(destination, \"%ls\") -> result=%p, "
1202 "expected %p\n", source, result, destination);
1203 problemCount++;
1205 if (errno != 0) {
1206 printf("\tPROBLEM: wcpcpy(destination, \"%ls\") -> errno=%d, "
1207 "expected 0\n", source, errno);
1208 problemCount++;
1210 if (wcslen(destination) != 0) {
1211 printf("\tPROBLEM: wcpcpy(destination, \"%ls\") -> "
1212 "wcslen(destination)=%lu, expected 0\n", source,
1213 wcslen(destination));
1214 problemCount++;
1216 if (destination[0] != L'\0') {
1217 printf("\tPROBLEM: wcpcpy(destination, \"%ls\") -> "
1218 "destination[0]=%x, expected %x\n", source, destination[0],
1219 L'\0');
1220 problemCount++;
1222 if (destination[1] != L'X') {
1223 printf("\tPROBLEM: wcpcpy(destination, \"%ls\") -> "
1224 "destination[1]=%x, expected %x\n", source, destination[1],
1225 L'X');
1226 problemCount++;
1231 const wchar_t* source = L"test";
1232 wchar_t destination[] = L"XXXXXXXXXXXXXXXX";
1233 wchar_t* result = wcpcpy(destination, source);
1234 if (result != destination + 4) {
1235 printf("\tPROBLEM: wcpcpy(destination, \"%ls\") -> result=%p, "
1236 "expected %p\n", source, result, destination + 4);
1237 problemCount++;
1239 if (errno != 0) {
1240 printf("\tPROBLEM: wcpcpy(destination, \"%ls\") -> errno=%d, "
1241 "expected 0\n", source, errno);
1242 problemCount++;
1244 if (wcslen(destination) != 4) {
1245 printf("\tPROBLEM: wcpcpy(destination, \"%ls\") -> "
1246 "wcslen(destination)=%lu, expected 4\n", source,
1247 wcslen(destination));
1248 problemCount++;
1250 if (destination[0] != L't') {
1251 printf("\tPROBLEM: wcpcpy(destination, \"%ls\") -> "
1252 "destination[0]=%x, expected %x\n", source, destination[0],
1253 L't');
1254 problemCount++;
1256 if (destination[1] != L'e') {
1257 printf("\tPROBLEM: wcpcpy(destination, \"%ls\") -> "
1258 "destination[1]=%x, expected %x\n", source, destination[1],
1259 L'e');
1260 problemCount++;
1262 if (destination[2] != L's') {
1263 printf("\tPROBLEM: wcpcpy(destination, \"%ls\") -> "
1264 "destination[2]=%x, expected %x\n", source, destination[2],
1265 L's');
1266 problemCount++;
1268 if (destination[3] != L't') {
1269 printf("\tPROBLEM: wcpcpy(destination, \"%ls\") -> "
1270 "destination[3]=%x, expected %x\n", source, destination[3],
1271 L't');
1272 problemCount++;
1274 if (destination[4] != L'\0') {
1275 printf("\tPROBLEM: wcpcpy(destination, \"%ls\") -> "
1276 "destination[4]=%x, expected %x\n", source, destination[4],
1277 L'\0');
1278 problemCount++;
1280 if (destination[5] != L'X') {
1281 printf("\tPROBLEM: wcpcpy(destination, \"%ls\") -> "
1282 "destination[5]=%x, expected %x\n", source, destination[5],
1283 L'X');
1284 problemCount++;
1289 const wchar_t* source = L"t\xE4st";
1290 wchar_t destination[] = L"XXXXXXXXXXXXXXXX";
1291 wchar_t* result = wcpcpy(destination, source);
1292 if (result != destination + 4) {
1293 printf("\tPROBLEM: wcpcpy(destination, \"%ls\") -> result=%p, "
1294 "expected %p\n", source, result, destination + 4);
1295 problemCount++;
1297 if (errno != 0) {
1298 printf("\tPROBLEM: wcpcpy(destination, \"%ls\") -> errno=%d, "
1299 "expected 0\n", source, errno);
1300 problemCount++;
1302 if (wcslen(destination) != 4) {
1303 printf("\tPROBLEM: wcpcpy(destination, \"%ls\") -> "
1304 "wcslen(destination)=%lu, expected 4\n", source,
1305 wcslen(destination));
1306 problemCount++;
1308 if (destination[0] != L't') {
1309 printf("\tPROBLEM: wcpcpy(destination, \"%ls\") -> "
1310 "destination[0]=%x, expected %x\n", source, destination[0],
1311 L't');
1312 problemCount++;
1314 if (destination[1] != L'\xE4') {
1315 printf("\tPROBLEM: wcpcpy(destination, \"%ls\") -> "
1316 "destination[1]=%x, expected %x\n", source, destination[1],
1317 L'\xE4');
1318 problemCount++;
1320 if (destination[2] != L's') {
1321 printf("\tPROBLEM: wcpcpy(destination, \"%ls\") -> "
1322 "destination[2]=%x, expected %x\n", source, destination[2],
1323 L's');
1324 problemCount++;
1326 if (destination[3] != L't') {
1327 printf("\tPROBLEM: wcpcpy(destination, \"%ls\") -> "
1328 "destination[3]=%x, expected %x\n", source, destination[3],
1329 L't');
1330 problemCount++;
1332 if (destination[4] != L'\0') {
1333 printf("\tPROBLEM: wcpcpy(destination, \"%ls\") -> "
1334 "destination[4]=%x, expected %x\n", source, destination[4],
1335 L'\0');
1336 problemCount++;
1338 if (destination[5] != L'X') {
1339 printf("\tPROBLEM: wcpcpy(destination, \"%ls\") -> "
1340 "destination[5]=%x, expected %x\n", source, destination[5],
1341 L'X');
1342 problemCount++;
1347 const wchar_t* source = L"te\x00st";
1348 wchar_t destination[] = L"XXXXXXXXXXXXXXXX";
1349 wchar_t* result = wcpcpy(destination, source);
1350 if (result != destination + 2) {
1351 printf("\tPROBLEM: wcpcpy(destination, \"%ls\") -> result=%p, "
1352 "expected %p\n", source, result, destination + 2);
1353 problemCount++;
1355 if (errno != 0) {
1356 printf("\tPROBLEM: wcpcpy(destination, \"%ls\") -> errno=%d, "
1357 "expected 0\n", source, errno);
1358 problemCount++;
1360 if (wcslen(destination) != 2) {
1361 printf("\tPROBLEM: wcpcpy(destination, \"%ls\") -> "
1362 "wcslen(destination)=%lu, expected 2\n", source,
1363 wcslen(destination));
1364 problemCount++;
1366 if (destination[0] != L't') {
1367 printf("\tPROBLEM: wcpcpy(destination, \"%ls\") -> "
1368 "destination[0]=%x, expected %x\n", source, destination[0],
1369 L't');
1370 problemCount++;
1372 if (destination[1] != L'e') {
1373 printf("\tPROBLEM: wcpcpy(destination, \"%ls\") -> "
1374 "destination[1]=%x, expected %x\n", source, destination[1],
1375 L'e');
1376 problemCount++;
1378 if (destination[2] != L'\0') {
1379 printf("\tPROBLEM: wcpcpy(destination, \"%ls\") -> "
1380 "destination[2]=%x, expected %x\n", source, destination[2],
1381 L'\0');
1382 problemCount++;
1384 if (destination[3] != L'X') {
1385 printf("\tPROBLEM: wcpcpy(destination, \"%ls\") -> "
1386 "destination[3]=%x, expected %x\n", source, destination[3],
1387 L'X');
1388 problemCount++;
1393 const wchar_t* source = L"t\xE4st";
1394 wchar_t destination[] = L"XXXXXXXXXXXXXXXX";
1395 wchar_t* result = wcpncpy(destination, source, 0);
1396 if (result != destination) {
1397 printf("\tPROBLEM: wcpncpy(destination, \"%ls\", 0) -> result=%p, "
1398 "expected %p\n", source, result, destination);
1399 problemCount++;
1401 if (errno != 0) {
1402 printf("\tPROBLEM: wcpncpy(destination, \"%ls\", 0) -> errno=%d, "
1403 "expected 0\n", source, errno);
1404 problemCount++;
1406 if (destination[0] != L'X') {
1407 printf("\tPROBLEM: wcpncpy(destination, \"%ls\", 0) -> "
1408 "destination[0]=%x, expected %x\n", source, destination[0],
1409 L'X');
1410 problemCount++;
1415 const wchar_t* source = L"t\xE4st";
1416 wchar_t destination[] = L"XXXXXXXXXXXXXXXX";
1417 wchar_t* result = wcpncpy(destination, source, 2);
1418 if (result != destination + 2) {
1419 printf("\tPROBLEM: wcpncpy(destination, \"%ls\", 2) -> result=%p, "
1420 "expected %p\n", source, result, destination + 2);
1421 problemCount++;
1423 if (errno != 0) {
1424 printf("\tPROBLEM: wcpncpy(destination, \"%ls\", 2) -> errno=%d, "
1425 "expected 0\n", source, errno);
1426 problemCount++;
1428 if (destination[0] != L't') {
1429 printf("\tPROBLEM: wcpncpy(destination, \"%ls\", 2) -> "
1430 "destination[0]=%x, expected %x\n", source, destination[0],
1431 L't');
1432 problemCount++;
1434 if (destination[1] != L'\xE4') {
1435 printf("\tPROBLEM: wcpncpy(destination, \"%ls\", 2) -> "
1436 "destination[1]=%x, expected %x\n", source, destination[1],
1437 L'\xE4');
1438 problemCount++;
1440 if (destination[2] != L'X') {
1441 printf("\tPROBLEM: wcpncpy(destination, \"%ls\", 2) -> "
1442 "destination[2]=%x, expected %x\n", source, destination[2],
1443 L'X');
1444 problemCount++;
1449 const wchar_t* source = L"t\xE4st";
1450 wchar_t destination[] = L"XXXXXXXXXXXXXXXX";
1451 wchar_t* result = wcpncpy(destination, source, 4);
1452 if (result != destination + 4) {
1453 printf("\tPROBLEM: wcpncpy(destination, \"%ls\", 4) -> result=%p, "
1454 "expected %p\n", source, result, destination + 4);
1455 problemCount++;
1457 if (errno != 0) {
1458 printf("\tPROBLEM: wcpncpy(destination, \"%ls\", 4) -> errno=%d, "
1459 "expected 0\n", source, errno);
1460 problemCount++;
1462 if (destination[0] != L't') {
1463 printf("\tPROBLEM: wcpncpy(destination, \"%ls\", 4) -> "
1464 "destination[0]=%x, expected %x\n", source, destination[0],
1465 L't');
1466 problemCount++;
1468 if (destination[1] != L'\xE4') {
1469 printf("\tPROBLEM: wcpncpy(destination, \"%ls\", 4) -> "
1470 "destination[1]=%x, expected %x\n", source, destination[1],
1471 L'\xE4');
1472 problemCount++;
1474 if (destination[2] != L's') {
1475 printf("\tPROBLEM: wcpncpy(destination, \"%ls\", 4) -> "
1476 "destination[2]=%x, expected %x\n", source, destination[2],
1477 L's');
1478 problemCount++;
1480 if (destination[3] != L't') {
1481 printf("\tPROBLEM: wcpncpy(destination, \"%ls\", 4) -> "
1482 "destination[3]=%x, expected %x\n", source, destination[3],
1483 L't');
1484 problemCount++;
1486 if (destination[4] != L'X') {
1487 printf("\tPROBLEM: wcpncpy(destination, \"%ls\", 4) -> "
1488 "destination[4]=%x, expected %x\n", source, destination[4],
1489 L'X');
1490 problemCount++;
1495 const wchar_t* source = L"t\xE4st";
1496 wchar_t destination[] = L"XXXXXXXXXXXXXXXX";
1497 wchar_t* result = wcpncpy(destination, source, 8);
1498 if (result != destination + 4) {
1499 printf("\tPROBLEM: wcpncpy(destination, \"%ls\", 8) -> result=%p, "
1500 "expected %p\n", source, result, destination + 4);
1501 problemCount++;
1503 if (errno != 0) {
1504 printf("\tPROBLEM: wcpncpy(destination, \"%ls\", 8) -> errno=%d, "
1505 "expected 0\n", source, errno);
1506 problemCount++;
1508 if (wcslen(destination) != 4) {
1509 printf("\tPROBLEM: wcpncpy(destination, \"%ls\", 8) -> "
1510 "wcslen(destination)=%lu, expected 4\n", source,
1511 wcslen(destination));
1512 problemCount++;
1514 if (destination[0] != L't') {
1515 printf("\tPROBLEM: wcpncpy(destination, \"%ls\", 8) -> "
1516 "destination[0]=%x, expected %x\n", source, destination[0],
1517 L't');
1518 problemCount++;
1520 if (destination[1] != L'\xE4') {
1521 printf("\tPROBLEM: wcpncpy(destination, \"%ls\", 8) -> "
1522 "destination[1]=%x, expected %x\n", source, destination[1],
1523 L'\xE4');
1524 problemCount++;
1526 if (destination[2] != L's') {
1527 printf("\tPROBLEM: wcpncpy(destination, \"%ls\", 8) -> "
1528 "destination[2]=%x, expected %x\n", source, destination[2],
1529 L's');
1530 problemCount++;
1532 if (destination[3] != L't') {
1533 printf("\tPROBLEM: wcpncpy(destination, \"%ls\", 8) -> "
1534 "destination[3]=%x, expected %x\n", source, destination[3],
1535 L't');
1536 problemCount++;
1538 if (destination[4] != L'\0') {
1539 printf("\tPROBLEM: wcpncpy(destination, \"%ls\", 8) -> "
1540 "destination[4]=%x, expected %x\n", source, destination[4],
1541 L'\0');
1542 problemCount++;
1544 if (destination[5] != L'\0') {
1545 printf("\tPROBLEM: wcpncpy(destination, \"%ls\", 8) -> "
1546 "destination[5]=%x, expected %x\n", source, destination[5],
1547 L'\0');
1548 problemCount++;
1550 if (destination[6] != L'\0') {
1551 printf("\tPROBLEM: wcpncpy(destination, \"%ls\", 8) -> "
1552 "destination[6]=%x, expected %x\n", source, destination[6],
1553 L'\0');
1554 problemCount++;
1556 if (destination[7] != L'\0') {
1557 printf("\tPROBLEM: wcpncpy(destination, \"%ls\", 8) -> "
1558 "destination[7]=%x, expected %x\n", source, destination[7],
1559 L'\0');
1560 problemCount++;
1562 if (destination[8] != L'X') {
1563 printf("\tPROBLEM: wcpncpy(destination, \"%ls\", 8) -> "
1564 "destination[8]=%x, expected %x\n", source, destination[8],
1565 L'X');
1566 problemCount++;
1570 if (problemCount)
1571 printf("\t%d problem(s) found!\n", problemCount);
1572 else
1573 printf("\tall fine\n");
1577 // #pragma mark - wcscat -------------------------------------------------------
1580 void
1581 test_wcscat()
1583 printf("wcscat()/wcsncat()\n");
1585 int problemCount = 0;
1586 errno = 0;
1587 wchar_t destination[] = L"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
1588 destination[0] = L'\0';
1589 wchar_t backup[33];
1592 wcscpy(backup, destination);
1593 const wchar_t* source = L"";
1594 wchar_t* result = wcscat(destination, source);
1595 if (result != destination) {
1596 printf("\tPROBLEM: wcscat(\"%ls\", \"%ls\") -> result=%p, "
1597 "expected %p\n", backup, source, result, destination);
1598 problemCount++;
1600 if (errno != 0) {
1601 printf("\tPROBLEM: wcscat(\"%ls\", \"%ls\") -> errno=%d, "
1602 "expected 0\n", backup, source, errno);
1603 problemCount++;
1605 if (wcslen(destination) != 0) {
1606 printf("\tPROBLEM: wcscat(\"%ls\", \"%ls\") -> "
1607 "wcslen(destination)=%lu, expected 0\n", backup, source,
1608 wcslen(destination));
1609 problemCount++;
1611 if (destination[0] != L'\0') {
1612 printf("\tPROBLEM: wcscat(\"%ls\", \"%ls\") -> destination[0]=%x, "
1613 "expected %x\n", backup, source, destination[0], L'\0');
1614 problemCount++;
1616 if (destination[1] != L'X') {
1617 printf("\tPROBLEM: wcscat(\"%ls\", \"%ls\") -> destination[1]=%x, "
1618 "expected %x\n", backup, source, destination[1], L'X');
1619 problemCount++;
1624 wcscpy(backup, destination);
1625 const wchar_t* source = L"test";
1626 wchar_t* result = wcscat(destination, source);
1627 if (result != destination) {
1628 printf("\tPROBLEM: wcscat(\"%ls\", \"%ls\") -> result=%p, "
1629 "expected %p\n", backup, source, result, destination);
1630 problemCount++;
1632 if (errno != 0) {
1633 printf("\tPROBLEM: wcscat(\"%ls\", \"%ls\") -> errno=%d, "
1634 "expected 0\n", backup, source, errno);
1635 problemCount++;
1637 if (wcslen(destination) != 4) {
1638 printf("\tPROBLEM: wcscat(\"%ls\", \"%ls\") -> "
1639 "wcslen(destination)=%lu, expected 4\n", backup, source,
1640 wcslen(destination));
1641 problemCount++;
1643 if (destination[0] != L't') {
1644 printf("\tPROBLEM: wcscat(\"%ls\", \"%ls\") -> destination[0]=%x, "
1645 "expected %x\n", backup, source, destination[0], L't');
1646 problemCount++;
1648 if (destination[1] != L'e') {
1649 printf("\tPROBLEM: wcscat(\"%ls\", \"%ls\") -> destination[1]=%x, "
1650 "expected %x\n", backup, source, destination[1], L'e');
1651 problemCount++;
1653 if (destination[2] != L's') {
1654 printf("\tPROBLEM: wcscat(\"%ls\", \"%ls\") -> destination[2]=%x, "
1655 "expected %x\n", backup, source, destination[2], L's');
1656 problemCount++;
1658 if (destination[3] != L't') {
1659 printf("\tPROBLEM: wcscat(\"%ls\", \"%ls\") -> destination[3]=%x, "
1660 "expected %x\n", backup, source, destination[3], L't');
1661 problemCount++;
1663 if (destination[4] != L'\0') {
1664 printf("\tPROBLEM: wcscat(\"%ls\", \"%ls\") -> destination[4]=%x, "
1665 "expected %x\n", backup, source, destination[4], L'\0');
1666 problemCount++;
1668 if (destination[5] != L'X') {
1669 printf("\tPROBLEM: wcscat(\"%ls\", \"%ls\") -> destination[5]=%x, "
1670 "expected %x\n", backup, source, destination[5], L'X');
1671 problemCount++;
1676 wcscpy(backup, destination);
1677 const wchar_t* source = L"t\xE4st";
1678 wchar_t* result = wcscat(destination, source);
1679 if (result != destination) {
1680 printf("\tPROBLEM: wcscat(\"%ls\", \"%ls\") -> result=%p, "
1681 "expected %p\n", backup, source, result, destination);
1682 problemCount++;
1684 if (errno != 0) {
1685 printf("\tPROBLEM: wcscat(\"%ls\", \"%ls\") -> errno=%d, "
1686 "expected 0\n", backup, source, errno);
1687 problemCount++;
1689 if (wcslen(destination) != 8) {
1690 printf("\tPROBLEM: wcscat(\"%ls\", \"%ls\") -> "
1691 "wcslen(destination)=%lu, expected 8\n", backup, source,
1692 wcslen(destination));
1693 problemCount++;
1695 if (destination[0] != L't') {
1696 printf("\tPROBLEM: wcscat(\"%ls\", \"%ls\") -> destination[0]=%x, "
1697 "expected %x\n", backup, source, destination[0], L't');
1698 problemCount++;
1700 if (destination[1] != L'e') {
1701 printf("\tPROBLEM: wcscat(\"%ls\", \"%ls\") -> destination[1]=%x, "
1702 "expected %x\n", backup, source, destination[1], L'e');
1703 problemCount++;
1705 if (destination[2] != L's') {
1706 printf("\tPROBLEM: wcscat(\"%ls\", \"%ls\") -> destination[2]=%x, "
1707 "expected %x\n", backup, source, destination[2], L's');
1708 problemCount++;
1710 if (destination[3] != L't') {
1711 printf("\tPROBLEM: wcscat(\"%ls\", \"%ls\") -> destination[3]=%x, "
1712 "expected %x\n", backup, source, destination[3], L't');
1713 problemCount++;
1715 if (destination[4] != L't') {
1716 printf("\tPROBLEM: wcscat(\"%ls\", \"%ls\") -> destination[4]=%x, "
1717 "expected %x\n", backup, source, destination[4], L't');
1718 problemCount++;
1720 if (destination[5] != L'\xE4') {
1721 printf("\tPROBLEM: wcscat(\"%ls\", \"%ls\") -> destination[5]=%x, "
1722 "expected %x\n", backup, source, destination[5], L'\xE4');
1723 problemCount++;
1725 if (destination[6] != L's') {
1726 printf("\tPROBLEM: wcscat(\"%ls\", \"%ls\") -> destination[6]=%x, "
1727 "expected %x\n", backup, source, destination[6], L's');
1728 problemCount++;
1730 if (destination[7] != L't') {
1731 printf("\tPROBLEM: wcscat(\"%ls\", \"%ls\") -> destination[7]=%x, "
1732 "expected %x\n", backup, source, destination[7], L't');
1733 problemCount++;
1735 if (destination[8] != L'\0') {
1736 printf("\tPROBLEM: wcscat(\"%ls\", \"%ls\") -> destination[8]=%x, "
1737 "expected %x\n", backup, source, destination[8], L'\0');
1738 problemCount++;
1740 if (destination[9] != L'X') {
1741 printf("\tPROBLEM: wcscat(\"%ls\", \"%ls\") -> destination[9]=%x, "
1742 "expected %x\n", backup, source, destination[9], L'X');
1743 problemCount++;
1748 wcscpy(backup, destination);
1749 const wchar_t* source = L"te\x00st";
1750 wchar_t* result = wcscat(destination, source);
1751 if (result != destination) {
1752 printf("\tPROBLEM: wcscat(\"%ls\", \"%ls\") -> result=%p, "
1753 "expected %p\n", backup, source, result, destination);
1754 problemCount++;
1756 if (errno != 0) {
1757 printf("\tPROBLEM: wcscat(\"%ls\", \"%ls\") -> errno=%d, "
1758 "expected 0\n", backup, source, errno);
1759 problemCount++;
1761 if (wcslen(destination) != 10) {
1762 printf("\tPROBLEM: wcscat(\"%ls\", \"%ls\") -> "
1763 "wcslen(destination)=%lu, expected 10\n", backup, source,
1764 wcslen(destination));
1765 problemCount++;
1767 if (destination[0] != L't') {
1768 printf("\tPROBLEM: wcscat(\"%ls\", \"%ls\") -> destination[0]=%x, "
1769 "expected %x\n", backup, source, destination[0], L't');
1770 problemCount++;
1772 if (destination[1] != L'e') {
1773 printf("\tPROBLEM: wcscat(\"%ls\", \"%ls\") -> destination[1]=%x, "
1774 "expected %x\n", backup, source, destination[1], L'e');
1775 problemCount++;
1777 if (destination[2] != L's') {
1778 printf("\tPROBLEM: wcscat(\"%ls\", \"%ls\") -> destination[2]=%x, "
1779 "expected %x\n", backup, source, destination[2], L's');
1780 problemCount++;
1782 if (destination[3] != L't') {
1783 printf("\tPROBLEM: wcscat(\"%ls\", \"%ls\") -> destination[3]=%x, "
1784 "expected %x\n", backup, source, destination[3], L't');
1785 problemCount++;
1787 if (destination[4] != L't') {
1788 printf("\tPROBLEM: wcscat(\"%ls\", \"%ls\") -> destination[4]=%x, "
1789 "expected %x\n", backup, source, destination[4], L't');
1790 problemCount++;
1792 if (destination[5] != L'\xE4') {
1793 printf("\tPROBLEM: wcscat(\"%ls\", \"%ls\") -> destination[5]=%x, "
1794 "expected %x\n", backup, source, destination[5], L'\xE4');
1795 problemCount++;
1797 if (destination[6] != L's') {
1798 printf("\tPROBLEM: wcscat(\"%ls\", \"%ls\") -> destination[6]=%x, "
1799 "expected %x\n", backup, source, destination[6], L's');
1800 problemCount++;
1802 if (destination[7] != L't') {
1803 printf("\tPROBLEM: wcscat(\"%ls\", \"%ls\") -> destination[7]=%x, "
1804 "expected %x\n", backup, source, destination[7], L't');
1805 problemCount++;
1807 if (destination[8] != L't') {
1808 printf("\tPROBLEM: wcscat(\"%ls\", \"%ls\") -> destination[8]=%x, "
1809 "expected %x\n", backup, source, destination[8], L't');
1810 problemCount++;
1812 if (destination[9] != L'e') {
1813 printf("\tPROBLEM: wcscat(\"%ls\", \"%ls\") -> destination[9]=%x, "
1814 "expected %x\n", backup, source, destination[9], L'e');
1815 problemCount++;
1817 if (destination[10] != L'\0') {
1818 printf("\tPROBLEM: wcscat(\"%ls\", \"%ls\") -> destination[10]=%x, "
1819 "expected %x\n", backup, source, destination[10], L'\0');
1820 problemCount++;
1822 if (destination[11] != L'X') {
1823 printf("\tPROBLEM: wcscat(\"%ls\", \"%ls\") -> destination[11]=%x, "
1824 "expected %x\n", backup, source, destination[11], L'X');
1825 problemCount++;
1830 wcscpy(destination, L"some");
1831 wcscpy(backup, destination);
1832 const wchar_t* source = L" other text";
1833 wchar_t* result = wcsncat(destination, source, 0);
1834 if (result != destination) {
1835 printf("\tPROBLEM: wcsncat(\"%ls\", \"%ls\", 0) -> result=%p, "
1836 "expected %p\n", backup, source, result, destination);
1837 problemCount++;
1839 if (errno != 0) {
1840 printf("\tPROBLEM: wcsncat(\"%ls\", \"%ls\", 0) -> errno=%d, "
1841 "expected 0\n", backup, source, errno);
1842 problemCount++;
1844 if (wcslen(destination) != 4) {
1845 printf("\tPROBLEM: wcsncat(\"%ls\", \"%ls\", 0) -> "
1846 "wcslen(destination)=%lu, expected 4\n", backup, source,
1847 wcslen(destination));
1848 problemCount++;
1850 if (wcscmp(destination, L"some") != 0) {
1851 printf("\tPROBLEM: wcsncat(\"%ls\", \"%ls\", 0) -> \"%ls\"\n",
1852 backup, source, destination);
1853 problemCount++;
1858 wcscpy(destination, L"some");
1859 wcscpy(backup, destination);
1860 const wchar_t* source = L" other text";
1861 wchar_t* result = wcsncat(destination, source, 6);
1862 if (result != destination) {
1863 printf("\tPROBLEM: wcsncat(\"%ls\", \"%ls\", 6) -> result=%p, "
1864 "expected %p\n", backup, source, result, destination);
1865 problemCount++;
1867 if (errno != 0) {
1868 printf("\tPROBLEM: wcsncat(\"%ls\", \"%ls\", 6) -> errno=%d, "
1869 "expected 0\n", backup, source, errno);
1870 problemCount++;
1872 if (wcslen(destination) != 10) {
1873 printf("\tPROBLEM: wcsncat(\"%ls\", \"%ls\", 6) -> "
1874 "wcslen(destination)=%lu, expected 10\n", backup, source,
1875 wcslen(destination));
1876 problemCount++;
1878 if (wcscmp(destination, L"some other") != 0) {
1879 printf("\tPROBLEM: wcsncat(\"%ls\", \"%ls\", 6) -> \"%ls\"\n",
1880 backup, source, destination);
1881 problemCount++;
1886 wcscpy(destination, L"some");
1887 wcscpy(backup, destination);
1888 const wchar_t* source = L" other text";
1889 wchar_t* result = wcsncat(destination, source, 20);
1890 if (result != destination) {
1891 printf("\tPROBLEM: wcsncat(\"%ls\", \"%ls\", 20) -> result=%p, "
1892 "expected %p\n", backup, source, result, destination);
1893 problemCount++;
1895 if (errno != 0) {
1896 printf("\tPROBLEM: wcsncat(\"%ls\", \"%ls\", 20) -> errno=%d, "
1897 "expected 0\n", backup, source, errno);
1898 problemCount++;
1900 if (wcslen(destination) != 15) {
1901 printf("\tPROBLEM: wcsncat(\"%ls\", \"%ls\", 20) -> "
1902 "wcslen(destination)=%lu, expected 15\n", backup, source,
1903 wcslen(destination));
1904 problemCount++;
1906 if (wcscmp(destination, L"some other text") != 0) {
1907 printf("\tPROBLEM: wcsncat(\"%ls\", \"%ls\", 20) -> \"%ls\"\n",
1908 backup, source, destination);
1909 problemCount++;
1913 if (problemCount)
1914 printf("\t%d problem(s) found!\n", problemCount);
1915 else
1916 printf("\tall fine\n");
1920 // #pragma mark - wcslcat ------------------------------------------------------
1923 #ifdef __HAIKU__
1925 void
1926 test_wcslcat()
1928 printf("wcslcat()\n");
1930 int problemCount = 0;
1931 errno = 0;
1932 wchar_t destination[] = L"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
1933 wchar_t backup[33];
1936 wcscpy(backup, destination);
1937 const wchar_t* source = L"";
1938 size_t result = wcslcat(destination, source, 0);
1939 size_t expectedResult = 0;
1940 if (result != expectedResult) {
1941 printf("\tPROBLEM: wcslcat(\"%ls\", \"%ls\", 0) -> result=%ld, "
1942 "expected %ld\n", backup, source, result, expectedResult);
1943 problemCount++;
1945 if (errno != 0) {
1946 printf("\tPROBLEM: wcslcat(\"%ls\", \"%ls\", 0) -> errno=%d, "
1947 "expected 0\n", backup, source, errno);
1948 problemCount++;
1950 if (wcslen(destination) != 32) {
1951 printf("\tPROBLEM: wcslcat(\"%ls\", \"%ls\", 0) -> "
1952 "wcslen(destination)=%lu, expected 32\n", backup, source,
1953 wcslen(destination));
1954 problemCount++;
1956 if (destination[0] != L'X') {
1957 printf("\tPROBLEM: wcslcat(\"%ls\", \"%ls\", 0) -> destination[0]="
1958 "%x, expected %x\n", backup, source, destination[0], L'X');
1959 problemCount++;
1964 destination[0] = L'\0';
1965 wcscpy(backup, destination);
1966 const wchar_t* source = L"";
1967 size_t result = wcslcat(destination, source, 32);
1968 size_t expectedResult = 0;
1969 if (result != expectedResult) {
1970 printf("\tPROBLEM: wcslcat(\"%ls\", \"%ls\", 32) -> result=%ld, "
1971 "expected %ld\n", backup, source, result, expectedResult);
1972 problemCount++;
1974 if (errno != 0) {
1975 printf("\tPROBLEM: wcslcat(\"%ls\", \"%ls\", 32) -> errno=%d, "
1976 "expected 0\n", backup, source, errno);
1977 problemCount++;
1979 if (wcslen(destination) != 0) {
1980 printf("\tPROBLEM: wcslcat(\"%ls\", \"%ls\", 32) -> "
1981 "wcslen(destination)=%lu, expected 0\n", backup, source,
1982 wcslen(destination));
1983 problemCount++;
1985 if (destination[0] != L'\0') {
1986 printf("\tPROBLEM: wcslcat(\"%ls\", \"%ls\", 32) -> destination[0]="
1987 "%x, expected %x\n", backup, source, destination[0], L'\0');
1988 problemCount++;
1990 if (destination[1] != L'X') {
1991 printf("\tPROBLEM: wcslcat(\"%ls\", \"%ls\", 32) -> destination[1]="
1992 "%x, expected %x\n", backup, source, destination[1], L'X');
1993 problemCount++;
1998 wcscpy(backup, destination);
1999 const wchar_t* source = L"test";
2000 size_t result = wcslcat(destination, source, 3);
2001 size_t expectedResult = 4;
2002 if (result != expectedResult) {
2003 printf("\tPROBLEM: wcslcat(\"%ls\", \"%ls\", 3) -> result=%ld, "
2004 "expected %ld\n", backup, source, result, expectedResult);
2005 problemCount++;
2007 if (errno != 0) {
2008 printf("\tPROBLEM: wcslcat(\"%ls\", \"%ls\", 3) -> errno=%d, "
2009 "expected 0\n", backup, source, errno);
2010 problemCount++;
2012 if (wcslen(destination) != 2) {
2013 printf("\tPROBLEM: wcslcat(\"%ls\", \"%ls\", 3) -> "
2014 "wcslen(destination)=%lu, expected 2\n", backup, source,
2015 wcslen(destination));
2016 problemCount++;
2018 if (destination[0] != L't') {
2019 printf("\tPROBLEM: wcslcat(\"%ls\", \"%ls\", 3) -> destination[0]="
2020 "%x, expected %x\n", backup, source, destination[0], L't');
2021 problemCount++;
2023 if (destination[1] != L'e') {
2024 printf("\tPROBLEM: wcslcat(\"%ls\", \"%ls\", 3) -> destination[1]="
2025 "%x, expected %x\n", backup, source, destination[1], L'e');
2026 problemCount++;
2028 if (destination[2] != L'\0') {
2029 printf("\tPROBLEM: wcslcat(\"%ls\", \"%ls\", 3) -> destination[2]="
2030 "%x, expected %x\n", backup, source, destination[2], L'\0');
2031 problemCount++;
2033 if (destination[3] != L'X') {
2034 printf("\tPROBLEM: wcslcat(\"%ls\", \"%ls\", 3) -> destination[3]="
2035 "%x, expected %x\n", backup, source, destination[3], L'X');
2036 problemCount++;
2041 wcscpy(backup, destination);
2042 const wchar_t* source = L"st";
2043 size_t result = wcslcat(destination, source, 4);
2044 size_t expectedResult = 4;
2045 if (result != expectedResult) {
2046 printf("\tPROBLEM: wcslcat(\"%ls\", \"%ls\", 4) -> result=%ld, "
2047 "expected %ld\n", backup, source, result, expectedResult);
2048 problemCount++;
2050 if (errno != 0) {
2051 printf("\tPROBLEM: wcslcat(\"%ls\", \"%ls\", 4) -> errno=%d, "
2052 "expected 0\n", backup, source, errno);
2053 problemCount++;
2055 if (wcslen(destination) != 3) {
2056 printf("\tPROBLEM: wcslcat(\"%ls\", \"%ls\", 4) -> "
2057 "wcslen(destination)=%lu, expected 3\n", backup, source,
2058 wcslen(destination));
2059 problemCount++;
2061 if (destination[0] != L't') {
2062 printf("\tPROBLEM: wcslcat(\"%ls\", \"%ls\", 4) -> destination[0]="
2063 "%x, expected %x\n", backup, source, destination[0], L't');
2064 problemCount++;
2066 if (destination[1] != L'e') {
2067 printf("\tPROBLEM: wcslcat(\"%ls\", \"%ls\", 4) -> destination[1]="
2068 "%x, expected %x\n", backup, source, destination[1], L'e');
2069 problemCount++;
2071 if (destination[2] != L's') {
2072 printf("\tPROBLEM: wcslcat(\"%ls\", \"%ls\", 4) -> destination[2]="
2073 "%x, expected %x\n", backup, source, destination[2], L's');
2074 problemCount++;
2076 if (destination[3] != L'\0') {
2077 printf("\tPROBLEM: wcslcat(\"%ls\", \"%ls\", 4) -> destination[3]="
2078 "%x, expected %x\n", backup, source, destination[3], L'\0');
2079 problemCount++;
2081 if (destination[4] != L'X') {
2082 printf("\tPROBLEM: wcslcat(\"%ls\", \"%ls\", 4) -> destination[4]="
2083 "%x, expected %x\n", backup, source, destination[4], L'X');
2084 problemCount++;
2089 wcscpy(backup, destination);
2090 const wchar_t* source = L"t";
2091 size_t result = wcslcat(destination, source, 5);
2092 size_t expectedResult = 4;
2093 if (result != expectedResult) {
2094 printf("\tPROBLEM: wcslcat(\"%ls\", \"%ls\", 5) -> result=%ld, "
2095 "expected %ld\n", backup, source, result, expectedResult);
2096 problemCount++;
2098 if (errno != 0) {
2099 printf("\tPROBLEM: wcslcat(\"%ls\", \"%ls\", 5) -> errno=%d, "
2100 "expected 0\n", backup, source, errno);
2101 problemCount++;
2103 if (wcslen(destination) != 4) {
2104 printf("\tPROBLEM: wcslcat(\"%ls\", \"%ls\", 5) -> "
2105 "wcslen(destination)=%lu, expected 4\n", backup, source,
2106 wcslen(destination));
2107 problemCount++;
2109 if (destination[0] != L't') {
2110 printf("\tPROBLEM: wcslcat(\"%ls\", \"%ls\", 5) -> destination[0]="
2111 "%x, expected %x\n", backup, source, destination[0], L't');
2112 problemCount++;
2114 if (destination[1] != L'e') {
2115 printf("\tPROBLEM: wcslcat(\"%ls\", \"%ls\", 5) -> destination[1]="
2116 "%x, expected %x\n", backup, source, destination[1], L'e');
2117 problemCount++;
2119 if (destination[2] != L's') {
2120 printf("\tPROBLEM: wcslcat(\"%ls\", \"%ls\", 5) -> destination[2]="
2121 "%x, expected %x\n", backup, source, destination[2], L's');
2122 problemCount++;
2124 if (destination[3] != L't') {
2125 printf("\tPROBLEM: wcslcat(\"%ls\", \"%ls\", 5) -> destination[3]="
2126 "%x, expected %x\n", backup, source, destination[3], L't');
2127 problemCount++;
2129 if (destination[4] != L'\0') {
2130 printf("\tPROBLEM: wcslcat(\"%ls\", \"%ls\", 5) -> destination[4]="
2131 "%x, expected %x\n", backup, source, destination[4], L'\0');
2132 problemCount++;
2134 if (destination[5] != L'X') {
2135 printf("\tPROBLEM: wcslcat(\"%ls\", \"%ls\", 5) -> destination[5]="
2136 "%x, expected %x\n", backup, source, destination[5], L'X');
2137 problemCount++;
2142 wcscpy(backup, destination);
2143 const wchar_t* source = L"t\xE4st";
2144 size_t result = wcslcat(destination, source, 32);
2145 size_t expectedResult = 8;
2146 if (result != expectedResult) {
2147 printf("\tPROBLEM: wcslcat(\"%ls\", \"%ls\", 32) -> result=%ld, "
2148 "expected %ld\n", backup, source, result, expectedResult);
2149 problemCount++;
2151 if (errno != 0) {
2152 printf("\tPROBLEM: wcslcat(\"%ls\", \"%ls\", 32) -> errno=%d, "
2153 "expected 0\n", backup, source, errno);
2154 problemCount++;
2156 if (wcslen(destination) != 8) {
2157 printf("\tPROBLEM: wcslcat(\"%ls\", \"%ls\", 32) -> "
2158 "wcslen(destination)=%lu, expected 8\n", backup, source,
2159 wcslen(destination));
2160 problemCount++;
2162 if (destination[0] != L't') {
2163 printf("\tPROBLEM: wcslcat(\"%ls\", \"%ls\", 32) -> destination[0]="
2164 "%x, expected %x\n", backup, source, destination[0], L't');
2165 problemCount++;
2167 if (destination[1] != L'e') {
2168 printf("\tPROBLEM: wcslcat(\"%ls\", \"%ls\", 32) -> destination[1]="
2169 "%x, expected %x\n", backup, source, destination[1], L'e');
2170 problemCount++;
2172 if (destination[2] != L's') {
2173 printf("\tPROBLEM: wcslcat(\"%ls\", \"%ls\", 32) -> destination[2]="
2174 "%x, expected %x\n", backup, source, destination[2], L's');
2175 problemCount++;
2177 if (destination[3] != L't') {
2178 printf("\tPROBLEM: wcslcat(\"%ls\", \"%ls\", 32) -> destination[3]="
2179 "%x, expected %x\n", backup, source, destination[3], L't');
2180 problemCount++;
2182 if (destination[4] != L't') {
2183 printf("\tPROBLEM: wcslcat(\"%ls\", \"%ls\", 32) -> destination[4]="
2184 "%x, expected %x\n", backup, source, destination[4], L't');
2185 problemCount++;
2187 if (destination[5] != L'\xE4') {
2188 printf("\tPROBLEM: wcslcat(\"%ls\", \"%ls\", 32) -> destination[5]="
2189 "%x, expected %x\n", backup, source, destination[5],
2190 L'\xE4');
2191 problemCount++;
2193 if (destination[6] != L's') {
2194 printf("\tPROBLEM: wcslcat(\"%ls\", \"%ls\", 32) -> destination[6]="
2195 "%x, expected %x\n", backup, source, destination[6], L's');
2196 problemCount++;
2198 if (destination[7] != L't') {
2199 printf("\tPROBLEM: wcslcat(\"%ls\", \"%ls\", 32) -> destination[7]="
2200 "%x, expected %x\n", backup, source, destination[7], L't');
2201 problemCount++;
2203 if (destination[8] != L'\0') {
2204 printf("\tPROBLEM: wcslcat(\"%ls\", \"%ls\", 32) -> destination[8]="
2205 "%x, expected %x\n", backup, source, destination[8], L'\0');
2206 problemCount++;
2208 if (destination[9] != L'X') {
2209 printf("\tPROBLEM: wcslcat(\"%ls\", \"%ls\", 32) -> destination[9]="
2210 "%x, expected %x\n", backup, source, destination[9], L'X');
2211 problemCount++;
2215 if (problemCount)
2216 printf("\t%d problem(s) found!\n", problemCount);
2217 else
2218 printf("\tall fine\n");
2221 #endif
2224 // #pragma mark - wcslcpy ------------------------------------------------------
2227 #ifdef __HAIKU__
2229 void
2230 test_wcslcpy()
2232 printf("wcslcpy()\n");
2234 int problemCount = 0;
2235 errno = 0;
2238 const wchar_t* source = L"";
2239 wchar_t destination[] = L"XXXXXXXXXXXXXXXX";
2241 size_t result = wcslcpy(destination, source, 0);
2242 size_t expectedResult = 0;
2243 if (result != expectedResult) {
2244 printf("\tPROBLEM: wcslcpy(destination, \"%ls\", 0) -> result=%ld, "
2245 "expected %ld\n", source, result, expectedResult);
2246 problemCount++;
2248 if (errno != 0) {
2249 printf("\tPROBLEM: wcslcpy(destination, \"%ls\", 0) -> errno=%d, "
2250 "expected 0\n", source, errno);
2251 problemCount++;
2253 if (wcslen(destination) != 16) {
2254 printf("\tPROBLEM: wcslcpy(destination, \"%ls\", 0) -> "
2255 "wcslen(destination)=%lu, expected 16\n", source,
2256 wcslen(destination));
2257 problemCount++;
2259 if (destination[0] != L'X') {
2260 printf("\tPROBLEM: wcslcpy(destination, \"%ls\", 0) -> "
2261 "destination[0]=%x, expected %x\n", source, destination[0],
2262 L'X');
2263 problemCount++;
2268 const wchar_t* source = L"";
2269 wchar_t destination[] = L"XXXXXXXXXXXXXXXX";
2270 size_t result = wcslcpy(destination, source, 16);
2271 size_t expectedResult = 0;
2272 if (result != expectedResult) {
2273 printf("\tPROBLEM: wcslcpy(destination, \"%ls\", 16) -> result=%ld,"
2274 " expected %ld\n", source, result, expectedResult);
2275 problemCount++;
2277 if (errno != 0) {
2278 printf("\tPROBLEM: wcslcpy(destination, \"%ls\", 16) -> errno=%d, "
2279 "expected 0\n", source, errno);
2280 problemCount++;
2282 if (wcslen(destination) != 0) {
2283 printf("\tPROBLEM: wcslcpy(destination, \"%ls\", 16) -> "
2284 "wcslen(destination)=%lu, expected 0\n", source,
2285 wcslen(destination));
2286 problemCount++;
2288 if (destination[0] != L'\0') {
2289 printf("\tPROBLEM: wcslcpy(destination, \"%ls\", 16) -> "
2290 "destination[0]=%x, expected %x\n", source, destination[0],
2291 L'\0');
2292 problemCount++;
2294 if (destination[1] != L'X') {
2295 printf("\tPROBLEM: wcslcpy(destination, \"%ls\", 16) -> "
2296 "destination[1]=%x, expected %x\n", source, destination[1],
2297 L'X');
2298 problemCount++;
2303 const wchar_t* source = L"test";
2304 wchar_t destination[] = L"XXXXXXXXXXXXXXXX";
2305 size_t result = wcslcpy(destination, source, 3);
2306 size_t expectedResult = 4;
2307 if (result != expectedResult) {
2308 printf("\tPROBLEM: wcslcpy(destination, \"%ls\", 3) -> result=%ld, "
2309 "expected %ld\n", source, result, expectedResult);
2310 problemCount++;
2312 if (errno != 0) {
2313 printf("\tPROBLEM: wcslcpy(destination, \"%ls\", 3) -> errno=%d, "
2314 "expected 0\n", source, errno);
2315 problemCount++;
2317 if (wcslen(destination) != 2) {
2318 printf("\tPROBLEM: wcslcpy(destination, \"%ls\", 2) -> "
2319 "wcslen(destination)=%lu, expected 3\n", source,
2320 wcslen(destination));
2321 problemCount++;
2323 if (destination[0] != L't') {
2324 printf("\tPROBLEM: wcslcpy(destination, \"%ls\", 3) -> "
2325 "destination[0]=%x, expected %x\n", source, destination[0],
2326 L't');
2327 problemCount++;
2329 if (destination[1] != L'e') {
2330 printf("\tPROBLEM: wcslcpy(destination, \"%ls\", 3) -> "
2331 "destination[1]=%x, expected %x\n", source, destination[1],
2332 L'e');
2333 problemCount++;
2335 if (destination[2] != L'\0') {
2336 printf("\tPROBLEM: wcslcpy(destination, \"%ls\", 3) -> "
2337 "destination[2]=%x, expected %x\n", source, destination[2],
2338 L'\0');
2339 problemCount++;
2341 if (destination[3] != L'X') {
2342 printf("\tPROBLEM: wcslcpy(destination, \"%ls\", 3) -> "
2343 "destination[3]=%x, expected %x\n", source, destination[3],
2344 L'X');
2345 problemCount++;
2350 const wchar_t* source = L"test";
2351 wchar_t destination[] = L"XXXXXXXXXXXXXXXX";
2352 size_t result = wcslcpy(destination, source, 16);
2353 size_t expectedResult = 4;
2354 if (result != expectedResult) {
2355 printf("\tPROBLEM: wcslcpy(destination, \"%ls\", 16) -> result=%ld, "
2356 "expected %ld\n", source, result, expectedResult);
2357 problemCount++;
2359 if (errno != 0) {
2360 printf("\tPROBLEM: wcslcpy(destination, \"%ls\", 16) -> errno=%d, "
2361 "expected 0\n", source, errno);
2362 problemCount++;
2364 if (wcslen(destination) != 4) {
2365 printf("\tPROBLEM: wcslcpy(destination, \"%ls\", 16) -> "
2366 "wcslen(destination)=%lu, expected 4\n", source,
2367 wcslen(destination));
2368 problemCount++;
2370 if (destination[0] != L't') {
2371 printf("\tPROBLEM: wcslcpy(destination, \"%ls\", 16) -> "
2372 "destination[0]=%x, expected %x\n", source, destination[0],
2373 L't');
2374 problemCount++;
2376 if (destination[1] != L'e') {
2377 printf("\tPROBLEM: wcslcpy(destination, \"%ls\", 16) -> "
2378 "destination[1]=%x, expected %x\n", source, destination[1],
2379 L'e');
2380 problemCount++;
2382 if (destination[2] != L's') {
2383 printf("\tPROBLEM: wcslcpy(destination, \"%ls\", 16) -> "
2384 "destination[2]=%x, expected %x\n", source, destination[2],
2385 L's');
2386 problemCount++;
2388 if (destination[3] != L't') {
2389 printf("\tPROBLEM: wcslcpy(destination, \"%ls\", 16) -> "
2390 "destination[3]=%x, expected %x\n", source, destination[3],
2391 L't');
2392 problemCount++;
2394 if (destination[4] != L'\0') {
2395 printf("\tPROBLEM: wcslcpy(destination, \"%ls\", 16) -> "
2396 "destination[4]=%x, expected %x\n", source, destination[4],
2397 L'\0');
2398 problemCount++;
2400 if (destination[5] != L'X') {
2401 printf("\tPROBLEM: wcslcpy(destination, \"%ls\", 16) -> "
2402 "destination[5]=%x, expected %x\n", source, destination[5],
2403 L'X');
2404 problemCount++;
2407 if (problemCount)
2408 printf("\t%d problem(s) found!\n", problemCount);
2409 else
2410 printf("\tall fine\n");
2413 #endif
2416 // #pragma mark - collation ----------------------------------------------------
2419 struct coll_data {
2420 const wchar_t* a;
2421 const wchar_t* b;
2422 int result;
2423 int err;
2427 void
2428 test_coll(bool useWcsxfrm, const char* locale, const coll_data coll[])
2430 setlocale(LC_COLLATE, locale);
2431 printf("%s in %s locale\n", useWcsxfrm ? "wcsxfrm" : "wcscoll", locale);
2433 int problemCount = 0;
2434 for (unsigned int i = 0; coll[i].a != NULL; ++i) {
2435 errno = 0;
2436 int result;
2437 char funcCall[256];
2438 if (useWcsxfrm) {
2439 wchar_t sortKeyA[100], sortKeyB[100];
2440 wcsxfrm(sortKeyA, coll[i].a, 100);
2441 wcsxfrm(sortKeyB, coll[i].b, 100);
2442 result = sign(wcscmp(sortKeyA, sortKeyB));
2443 sprintf(funcCall, "wcscmp(wcsxfrm(\"%ls\"), wcsxfrm(\"%ls\"))",
2444 coll[i].a, coll[i].b);
2445 } else {
2446 result = sign(wcscoll(coll[i].a, coll[i].b));
2447 sprintf(funcCall, "wcscoll(\"%ls\", \"%ls\")", coll[i].a,
2448 coll[i].b);
2451 if (result != coll[i].result || errno != coll[i].err) {
2452 printf(
2453 "\tPROBLEM: %s = %d (expected %d), errno = %x (expected %x)\n",
2454 funcCall, result, coll[i].result, errno, coll[i].err);
2455 problemCount++;
2459 if (problemCount)
2460 printf("\t%d problem(s) found!\n", problemCount);
2461 else
2462 printf("\tall fine\n");
2466 void
2467 test_collation()
2469 const coll_data coll_posix[] = {
2470 { L"", L"", 0, 0 },
2471 { L"test", L"test", 0, 0 },
2472 { L"tester", L"test", 1, 0 },
2473 { L"tEst", L"teSt", -1, 0 },
2474 { L"test", L"tester", -1, 0 },
2475 { L"tast", L"t\xE4st", -1, EINVAL },
2476 { L"t\xE6st", L"test", 1, EINVAL },
2477 { NULL, NULL, 0, 0 }
2479 test_coll(0, "POSIX", coll_posix);
2480 test_coll(1, "POSIX", coll_posix);
2482 const coll_data coll_en[] = {
2483 { L"", L"", 0, 0 },
2484 { L"test", L"test", 0, 0 },
2485 { L"tester", L"test", 1, 0 },
2486 { L"tEst", L"test", 1, 0 },
2487 { L"test", L"tester", -1, 0 },
2488 { L"t\xE4st", L"t\xE4st", 0, 0 },
2489 { L"tast", L"t\xE4st", -1, 0 },
2490 { L"tbst", L"t\xE4st", 1, 0 },
2491 { L"tbst", L"t\xE6st", 1, 0 },
2492 { L"t\xE4st", L"t\xC4st", -1, 0 },
2493 { L"tBst", L"t\xC4st", 1, 0 },
2494 { L"tBst", L"t\xE4st", 1, 0 },
2495 { L"taest", L"t\xE6st", -1, 0 },
2496 { L"tafst", L"t\xE6st", 1, 0 },
2497 { L"taa", L"t\xE4"L"a", -1, 0 },
2498 { L"tab", L"t\xE4"L"b", -1, 0 },
2499 { L"tad", L"t\xE4"L"d", -1, 0 },
2500 { L"tae", L"t\xE4"L"e", -1, 0 },
2501 { L"taf", L"t\xE4"L"f", -1, 0 },
2502 { L"cote", L"cot\xE9", -1, 0 },
2503 { L"cot\xE9", L"c\xF4te", -1, 0 },
2504 { L"c\xF4te", L"c\xF4t\xE9", -1, 0 },
2505 { NULL, NULL, 0, 0 }
2507 test_coll(0, "en_US.UTF-8", coll_en);
2508 test_coll(1, "en_US.UTF-8", coll_en);
2510 const coll_data coll_de[] = {
2511 { L"", L"", 0, 0 },
2512 { L"test", L"test", 0, 0 },
2513 { L"tester", L"test", 1, 0 },
2514 { L"tEst", L"test", 1, 0 },
2515 { L"test", L"tester", -1, 0 },
2516 { L"t\xE4st", L"t\xE4st", 0, 0 },
2517 { L"tast", L"t\xE4st", -1, 0 },
2518 { L"tbst", L"t\xE4st", 1, 0 },
2519 { L"tbst", L"t\xE6st", 1, 0 },
2520 { L"t\xE4st", L"t\xC4st", -1, 0 },
2521 { L"tBst", L"t\xC4st", 1, 0 },
2522 { L"tBst", L"t\xE4st", 1, 0 },
2523 { L"taest", L"t\xE6st", -1, 0 },
2524 { L"tafst", L"t\xE6st", 1, 0 },
2525 { L"taa", L"t\xE4", 1, 0 },
2526 { L"tab", L"t\xE4", 1, 0 },
2527 { L"tad", L"t\xE4", 1, 0 },
2528 { L"tae", L"t\xE4", 1, 0 },
2529 { L"taf", L"t\xE4", 1, 0 },
2530 { L"cote", L"cot\xE9", -1, 0 },
2531 { L"cot\xE9", L"c\xF4te", -1, 0 },
2532 { L"c\xF4te", L"c\xF4t\xE9", -1, 0 },
2533 { NULL, NULL, 0, 0 }
2535 test_coll(0, "de_DE.UTF-8", coll_de);
2536 test_coll(1, "de_DE.UTF-8", coll_de);
2538 const coll_data coll_de_phonebook[] = {
2539 { L"", L"", 0, 0 },
2540 { L"test", L"test", 0, 0 },
2541 { L"tester", L"test", 1, 0 },
2542 { L"tEst", L"test", 1, 0 },
2543 { L"test", L"tester", -1, 0 },
2544 { L"t\xE4st", L"t\xE4st", 0, 0 },
2545 { L"tast", L"t\xE4st", 1, 0 },
2546 { L"tbst", L"t\xE4st", 1, 0 },
2547 { L"tbst", L"t\xE6st", 1, 0 },
2548 { L"t\xE4st", L"t\xC4st", -1, 0 },
2549 { L"tBst", L"t\xC4st", 1, 0 },
2550 { L"tBst", L"t\xE4st", 1, 0 },
2551 { L"taest", L"t\xE6st", -1, 0 },
2552 { L"tafst", L"t\xE6st", 1, 0 },
2553 { L"taa", L"t\xE4", -1, 0 },
2554 { L"tab", L"t\xE4", -1, 0 },
2555 { L"tad", L"t\xE4", -1, 0 },
2556 { L"tae", L"t\xE4", -1, 0 },
2557 { L"taf", L"t\xE4", 1, 0 },
2558 { L"cote", L"cot\xE9", -1, 0 },
2559 { L"cot\xE9", L"c\xF4te", -1, 0 },
2560 { L"c\xF4te", L"c\xF4t\xE9", -1, 0 },
2561 { NULL, NULL, 0, 0 }
2563 test_coll(0, "de_DE.UTF-8@collation=phonebook", coll_de_phonebook);
2564 test_coll(1, "de_DE.UTF-8@collation=phonebook", coll_de_phonebook);
2566 const coll_data coll_fr[] = {
2567 { L"", L"", 0, 0 },
2568 { L"test", L"test", 0, 0 },
2569 { L"tester", L"test", 1, 0 },
2570 { L"tEst", L"test", 1, 0 },
2571 { L"test", L"tester", -1, 0 },
2572 { L"t\xE4st", L"t\xE4st", 0, 0 },
2573 { L"tast", L"t\xE4st", -1, 0 },
2574 { L"tbst", L"t\xE4st", 1, 0 },
2575 { L"tbst", L"t\xE6st", 1, 0 },
2576 { L"t\xE4st", L"t\xC4st", -1, 0 },
2577 { L"tBst", L"t\xC4st", 1, 0 },
2578 { L"tBst", L"t\xE4st", 1, 0 },
2579 { L"taest", L"t\xE6st", -1, 0 },
2580 { L"tafst", L"t\xE6st", 1, 0 },
2581 { L"taa", L"t\xE4", 1, 0 },
2582 { L"tab", L"t\xE4", 1, 0 },
2583 { L"tad", L"t\xE4", 1, 0 },
2584 { L"tae", L"t\xE4", 1, 0 },
2585 { L"taf", L"t\xE4", 1, 0 },
2586 { L"cote", L"cot\xE9", -1, 0 },
2587 { L"cot\xE9", L"c\xF4te", 1, 0 },
2588 { L"c\xF4te", L"c\xF4t\xE9", -1, 0 },
2589 { NULL, NULL, 0, 0 }
2591 // CLDR-1.9 has adjusted the defaults of fr_FR to no longer do reverse
2592 // ordering of secondary differences (accents), but fr_CA still does that
2593 // by default
2594 test_coll(0, "fr_CA.UTF-8", coll_fr);
2595 test_coll(1, "fr_CA.UTF-8", coll_fr);
2599 // #pragma mark - wcsftime -----------------------------------------------------
2602 struct wcsftime_data {
2603 const wchar_t* format;
2604 const wchar_t* result;
2608 void
2609 test_wcsftime(const char* locale, const wcsftime_data data[])
2611 setlocale(LC_TIME, locale);
2612 setlocale(LC_CTYPE, locale);
2613 printf("wcsftime for '%s'\n", locale);
2615 time_t nowSecs = 1279391169; // pure magic
2616 tm* now = localtime(&nowSecs);
2617 int problemCount = 0;
2618 for (int i = 0; data[i].format != NULL; ++i) {
2619 wchar_t buf[100];
2620 wcsftime(buf, 100, data[i].format, now);
2621 if (wcscmp(buf, data[i].result) != 0) {
2622 printf(
2623 "\tPROBLEM: wcsftime(\"%ls\") = \"%ls\" (expected \"%ls\")\n",
2624 data[i].format, buf, data[i].result);
2625 problemCount++;
2628 if (problemCount)
2629 printf("\t%d problem(s) found!\n", problemCount);
2630 else
2631 printf("\tall fine\n");
2635 void
2636 test_wcsftime()
2638 setenv("TZ", "GMT", 1);
2640 const wcsftime_data wcsftime_posix[] = {
2641 { L"%c", L"Sat Jul 17 18:26:09 2010" },
2642 { L"%x", L"07/17/10" },
2643 { L"%X", L"18:26:09" },
2644 { L"%a", L"Sat" },
2645 { L"%A", L"Saturday" },
2646 { L"%b", L"Jul" },
2647 { L"%B", L"July" },
2648 { NULL, NULL }
2650 test_wcsftime("POSIX", wcsftime_posix);
2652 const wcsftime_data wcsftime_de[] = {
2653 { L"%c", L"Samstag, 17. Juli 2010 18:26:09 GMT" },
2654 { L"%x", L"17.07.2010" },
2655 { L"%X", L"18:26:09" },
2656 { L"%a", L"Sa." },
2657 { L"%A", L"Samstag" },
2658 { L"%b", L"Jul" },
2659 { L"%B", L"Juli" },
2660 { NULL, NULL }
2662 test_wcsftime("de_DE.UTF-8", wcsftime_de);
2664 const wcsftime_data wcsftime_hr[] = {
2665 { L"%c", L"subota, 17. srpnja 2010. 18:26:09 GMT" },
2666 { L"%x", L"17. 07. 2010." },
2667 { L"%X", L"18:26:09" },
2668 { L"%a", L"sub" },
2669 { L"%A", L"subota" },
2670 { L"%b", L"srp" },
2671 { L"%B", L"srpnja" },
2672 { NULL, NULL }
2674 test_wcsftime("hr_HR.ISO8859-2", wcsftime_hr);
2676 const wcsftime_data wcsftime_gu[] = {
2677 { L"%c", L"શનિવાર, 17 જુલાઈ, 2010 06:26:09 PM GMT" },
2678 { L"%x", L"17 જુલાઈ, 2010" },
2679 { L"%X", L"06:26:09 PM" },
2680 { L"%a", L"શનિ" },
2681 { L"%A", L"શનિવાર" },
2682 { L"%b", L"જુલાઈ" },
2683 { L"%B", L"જુલાઈ" },
2684 { NULL, NULL }
2686 test_wcsftime("gu_IN", wcsftime_gu);
2688 const wcsftime_data wcsftime_it[] = {
2689 { L"%c", L"sabato 17 luglio 2010 18:26:09 GMT" },
2690 { L"%x", L"17/lug/2010" },
2691 { L"%X", L"18:26:09" },
2692 { L"%a", L"sab" },
2693 { L"%A", L"sabato" },
2694 { L"%b", L"lug" },
2695 { L"%B", L"luglio" },
2696 { NULL, NULL }
2698 test_wcsftime("it_IT", wcsftime_it);
2700 const wcsftime_data wcsftime_nl[] = {
2701 { L"%c", L"zaterdag 17 juli 2010 18:26:09 GMT" },
2702 { L"%x", L"17 jul. 2010" },
2703 { L"%X", L"18:26:09" },
2704 { L"%a", L"za" },
2705 { L"%A", L"zaterdag" },
2706 { L"%b", L"jul." },
2707 { L"%B", L"juli" },
2708 { NULL, NULL }
2710 test_wcsftime("nl_NL", wcsftime_nl);
2712 const wcsftime_data wcsftime_nb[] = {
2713 { L"%c", L"kl. 18:26:09 GMT l\xF8rdag 17. juli 2010" },
2714 { L"%x", L"17. juli 2010" },
2715 { L"%X", L"18:26:09" },
2716 { L"%a", L"lør." },
2717 { L"%A", L"lørdag" },
2718 { L"%b", L"juli" },
2719 { L"%B", L"juli" },
2720 { NULL, NULL }
2722 test_wcsftime("nb_NO", wcsftime_nb);
2726 // #pragma mark - wcspbrk ------------------------------------------------------
2729 void
2730 test_wcspbrk()
2732 printf("wcspbrk()\n");
2734 int problemCount = 0;
2735 errno = 0;
2738 const wchar_t* string = L"";
2739 const wchar_t* accept = L" ";
2740 const wchar_t* result = wcspbrk(string, accept);
2741 const wchar_t* expected = NULL;
2742 if (result != expected || errno != 0) {
2743 printf("\tPROBLEM: result for wcspbrk(\"%ls\", \"%ls\") = %p "
2744 "(expected %p), errno = %x (expected 0)\n", string, accept,
2745 result, expected, errno);
2746 problemCount++;
2751 const wchar_t* string = L"sometext";
2752 const wchar_t* accept = L" ";
2753 const wchar_t* result = wcspbrk(string, accept);
2754 const wchar_t* expected = NULL;
2755 if (result != expected || errno != 0) {
2756 printf("\tPROBLEM: result for wcspbrk(\"%ls\", \"%ls\") = %p "
2757 "(expected %p), errno = %x (expected 0)\n", string, accept,
2758 result, expected, errno);
2759 problemCount++;
2764 const wchar_t* string = L"some more text";
2765 const wchar_t* accept = L" ";
2766 const wchar_t* result = wcspbrk(string, accept);
2767 const wchar_t* expected = string + 4;
2768 if (result != expected || errno != 0) {
2769 printf("\tPROBLEM: result for wcspbrk(\"%ls\", \"%ls\") = %p "
2770 "(expected %p), errno = %x (expected 0)\n", string, accept,
2771 result, expected, errno);
2772 problemCount++;
2777 const wchar_t* string = L"some more text";
2778 const wchar_t* accept = L"UY\xE4 ";
2779 const wchar_t* result = wcspbrk(string, accept);
2780 const wchar_t* expected = string + 4;
2781 if (result != expected || errno != 0) {
2782 printf("\tPROBLEM: result for wcspbrk(\"%ls\", \"%ls\") = %p "
2783 "(expected %p), errno = %x (expected 0)\n", string, accept,
2784 result, expected, errno);
2785 problemCount++;
2790 const wchar_t* string = L"some more text";
2791 const wchar_t* accept = L" emorstx";
2792 const wchar_t* result = wcspbrk(string, accept);
2793 const wchar_t* expected = string;
2794 if (result != expected || errno != 0) {
2795 printf("\tPROBLEM: result for wcspbrk(\"%ls\", \"%ls\") = %p "
2796 "(expected %p), errno = %x (expected 0)\n", string, accept,
2797 result, expected, errno);
2798 problemCount++;
2803 const wchar_t* string = L"some more text";
2804 const wchar_t* accept = L"EMORSTX\xA0";
2805 const wchar_t* result = wcspbrk(string, accept);
2806 const wchar_t* expected = NULL;
2807 if (result != expected || errno != 0) {
2808 printf("\tPROBLEM: result for wcspbrk(\"%ls\", \"%ls\") = %p "
2809 "(expected %p), errno = %x (expected 0)\n", string, accept,
2810 result, expected, errno);
2811 problemCount++;
2815 if (problemCount)
2816 printf("\t%d problem(s) found!\n", problemCount);
2817 else
2818 printf("\tall fine\n");
2822 // #pragma mark - wcscspn -------------------------------------------------------
2825 void
2826 test_wcscspn()
2828 printf("wcscspn()\n");
2830 int problemCount = 0;
2831 errno = 0;
2834 const wchar_t* string = L"";
2835 const wchar_t* reject = L" ";
2836 size_t result = wcscspn(string, reject);
2837 size_t expected = 0;
2838 if (result != expected || errno != 0) {
2839 printf("\tPROBLEM: result for wcscspn(\"%ls\", \"%ls\") = %ld "
2840 "(expected %ld), errno = %x (expected 0)\n", string, reject,
2841 result, expected, errno);
2842 problemCount++;
2847 const wchar_t* string = L"sometext";
2848 const wchar_t* reject = L" ";
2849 size_t result = wcscspn(string, reject);
2850 size_t expected = 8;
2851 if (result != expected || errno != 0) {
2852 printf("\tPROBLEM: result for wcscspn(\"%ls\", \"%ls\") = %ld "
2853 "(expected %ld), errno = %x (expected 0)\n", string, reject,
2854 result, expected, errno);
2855 problemCount++;
2860 const wchar_t* string = L"some more text";
2861 const wchar_t* reject = L" mos";
2862 size_t result = wcscspn(string, reject);
2863 size_t expected = 0;
2864 if (result != expected || errno != 0) {
2865 printf("\tPROBLEM: result for wcscspn(\"%ls\", \"%ls\") = %ld "
2866 "(expected %ld), errno = %x (expected 0)\n", string, reject,
2867 result, expected, errno);
2868 problemCount++;
2873 const wchar_t* string = L"some more text";
2874 const wchar_t* reject = L"t";
2875 size_t result = wcscspn(string, reject);
2876 size_t expected = 10;
2877 if (result != expected || errno != 0) {
2878 printf("\tPROBLEM: result for wcscspn(\"%ls\", \"%ls\") = %ld "
2879 "(expected %ld), errno = %x (expected 0)\n", string, reject,
2880 result, expected, errno);
2881 problemCount++;
2886 const wchar_t* string = L"some more text";
2887 const wchar_t* reject = L"abcdfghijklnpquvwyz\t";
2888 size_t result = wcscspn(string, reject);
2889 size_t expected = wcslen(string);
2890 if (result != expected || errno != 0) {
2891 printf("\tPROBLEM: result for wcscspn(\"%ls\", \"%ls\") = %ld "
2892 "(expected %ld), errno = %x (expected 0)\n", string, reject,
2893 result, expected, errno);
2894 problemCount++;
2899 const wchar_t* string = L"some more text";
2900 const wchar_t* reject = L"";
2901 size_t result = wcscspn(string, reject);
2902 size_t expected = wcslen(string);
2903 if (result != expected || errno != 0) {
2904 printf("\tPROBLEM: result for wcscspn(\"%ls\", \"%ls\") = %ld "
2905 "(expected %ld), errno = %x (expected 0)\n", string, reject,
2906 result, expected, errno);
2907 problemCount++;
2911 if (problemCount)
2912 printf("\t%d problem(s) found!\n", problemCount);
2913 else
2914 printf("\tall fine\n");
2918 // #pragma mark - wcsspn -------------------------------------------------------
2921 void
2922 test_wcsspn()
2924 printf("wcsspn()\n");
2926 int problemCount = 0;
2927 errno = 0;
2930 const wchar_t* string = L"";
2931 const wchar_t* accept = L" ";
2932 size_t result = wcsspn(string, accept);
2933 size_t expected = 0;
2934 if (result != expected || errno != 0) {
2935 printf("\tPROBLEM: result for wcsspn(\"%ls\", \"%ls\") = %ld "
2936 "(expected %ld), errno = %x (expected 0)\n", string, accept,
2937 result, expected, errno);
2938 problemCount++;
2943 const wchar_t* string = L"sometext";
2944 const wchar_t* accept = L" ";
2945 size_t result = wcsspn(string, accept);
2946 size_t expected = 0;
2947 if (result != expected || errno != 0) {
2948 printf("\tPROBLEM: result for wcsspn(\"%ls\", \"%ls\") = %ld "
2949 "(expected %ld), errno = %x (expected 0)\n", string, accept,
2950 result, expected, errno);
2951 problemCount++;
2956 const wchar_t* string = L"some more text";
2957 const wchar_t* accept = L" emo";
2958 size_t result = wcsspn(string, accept);
2959 size_t expected = 0;
2960 if (result != expected || errno != 0) {
2961 printf("\tPROBLEM: result for wcsspn(\"%ls\", \"%ls\") = %ld "
2962 "(expected %ld), errno = %x (expected 0)\n", string, accept,
2963 result, expected, errno);
2964 problemCount++;
2969 const wchar_t* string = L"some more text";
2970 const wchar_t* accept = L" emorstx";
2971 size_t result = wcsspn(string, accept);
2972 size_t expected = wcslen(string);
2973 if (result != expected || errno != 0) {
2974 printf("\tPROBLEM: result for wcsspn(\"%ls\", \"%ls\") = %ld "
2975 "(expected %ld), errno = %x (expected 0)\n", string, accept,
2976 result, expected, errno);
2977 problemCount++;
2982 const wchar_t* string = L"some more text";
2983 const wchar_t* accept = L"";
2984 size_t result = wcsspn(string, accept);
2985 size_t expected = 0;
2986 if (result != expected || errno != 0) {
2987 printf("\tPROBLEM: result for wcsspn(\"%ls\", \"%ls\") = %ld "
2988 "(expected %ld), errno = %x (expected 0)\n", string, accept,
2989 result, expected, errno);
2990 problemCount++;
2994 if (problemCount)
2995 printf("\t%d problem(s) found!\n", problemCount);
2996 else
2997 printf("\tall fine\n");
3001 // #pragma mark - wcsstr ------------------------------------------------------
3004 void
3005 test_wcsstr()
3007 printf("wcsstr()\n");
3009 int problemCount = 0;
3010 errno = 0;
3013 const wchar_t* string = L"";
3014 const wchar_t* sought = L" ";
3015 const wchar_t* result = wcsstr(string, sought);
3016 const wchar_t* expected = NULL;
3017 if (result != expected || errno != 0) {
3018 printf("\tPROBLEM: result for wcsstr(\"%ls\", \"%ls\") = %p "
3019 "(expected %p), errno = %x (expected 0)\n", string, sought,
3020 result, expected, errno);
3021 problemCount++;
3026 const wchar_t* string = L"sometext";
3027 const wchar_t* sought = L"som ";
3028 const wchar_t* result = wcsstr(string, sought);
3029 const wchar_t* expected = NULL;
3030 if (result != expected || errno != 0) {
3031 printf("\tPROBLEM: result for wcsstr(\"%ls\", \"%ls\") = %p "
3032 "(expected %p), errno = %x (expected 0)\n", string, sought,
3033 result, expected, errno);
3034 problemCount++;
3039 const wchar_t* string = L"sometext";
3040 const wchar_t* sought = L"soMe";
3041 const wchar_t* result = wcsstr(string, sought);
3042 const wchar_t* expected = NULL;
3043 if (result != expected || errno != 0) {
3044 printf("\tPROBLEM: result for wcsstr(\"%ls\", \"%ls\") = %p "
3045 "(expected %p), errno = %x (expected 0)\n", string, sought,
3046 result, expected, errno);
3047 problemCount++;
3052 const wchar_t* string = L"some more text";
3053 const wchar_t* sought = L"some ";
3054 const wchar_t* result = wcsstr(string, sought);
3055 const wchar_t* expected = string;
3056 if (result != expected || errno != 0) {
3057 printf("\tPROBLEM: result for wcsstr(\"%ls\", \"%ls\") = %p "
3058 "(expected %p), errno = %x (expected 0)\n", string, sought,
3059 result, expected, errno);
3060 problemCount++;
3065 const wchar_t* string = L"some more text";
3066 const wchar_t* sought = L" more";
3067 const wchar_t* result = wcsstr(string, sought);
3068 const wchar_t* expected = string + 4;
3069 if (result != expected || errno != 0) {
3070 printf("\tPROBLEM: result for wcsstr(\"%ls\", \"%ls\") = %p "
3071 "(expected %p), errno = %x (expected 0)\n", string, sought,
3072 result, expected, errno);
3073 problemCount++;
3078 const wchar_t* string = L"some more text";
3079 const wchar_t* sought = L"some more text";
3080 const wchar_t* result = wcsstr(string, sought);
3081 const wchar_t* expected = string;
3082 if (result != expected || errno != 0) {
3083 printf("\tPROBLEM: result for wcsstr(\"%ls\", \"%ls\") = %p "
3084 "(expected %p), errno = %x (expected 0)\n", string, sought,
3085 result, expected, errno);
3086 problemCount++;
3091 const wchar_t* string = L"some more text";
3092 const wchar_t* sought = L"some more text ";
3093 const wchar_t* result = wcsstr(string, sought);
3094 const wchar_t* expected = NULL;
3095 if (result != expected || errno != 0) {
3096 printf("\tPROBLEM: result for wcsstr(\"%ls\", \"%ls\") = %p "
3097 "(expected %p), errno = %x (expected 0)\n", string, sought,
3098 result, expected, errno);
3099 problemCount++;
3103 if (problemCount)
3104 printf("\t%d problem(s) found!\n", problemCount);
3105 else
3106 printf("\tall fine\n");
3110 // #pragma mark - wcstok ------------------------------------------------------
3113 void
3114 test_wcstok()
3116 printf("wcstok()\n");
3118 int problemCount = 0;
3121 wchar_t string[] = L"";
3122 const wchar_t* delim = L" \t\n";
3123 wchar_t* state;
3124 wchar_t* result = wcstok(string, delim, &state);
3125 wchar_t* expected = NULL;
3126 wchar_t* expectedState = NULL;
3127 if (result != expected || state != expectedState) {
3128 printf("\tPROBLEM: result for wcstok(\"%ls\", \"%ls\", %p) = %p "
3129 "(expected %p), state = %p (expected %p)\n", string, delim,
3130 &state, result, expected, state, expectedState);
3131 problemCount++;
3134 result = wcstok(NULL, delim, &state);
3135 expected = NULL;
3136 expectedState = NULL;
3137 if (result != expected || state != expectedState) {
3138 printf("\tPROBLEM: result for wcstok(\"%ls\", \"%ls\", %p) = %p "
3139 "(expected %p), state = %p (expected %p)\n", string, delim,
3140 &state, result, expected, state, expectedState);
3141 problemCount++;
3146 wchar_t string[] = L"\t\t\t\n \t";
3147 const wchar_t* delim = L" \t\n";
3148 wchar_t* state;
3149 wchar_t* result = wcstok(string, delim, &state);
3150 wchar_t* expected = NULL;
3151 wchar_t* expectedState = NULL;
3152 if (result != expected || state != expectedState) {
3153 printf("\tPROBLEM: result for wcstok(\"%ls\", \"%ls\", %p) = %p "
3154 "(expected %p), state = %p (expected %p)\n", string, delim,
3155 &state, result, expected, state, expectedState);
3156 problemCount++;
3159 result = wcstok(NULL, delim, &state);
3160 expected = NULL;
3161 expectedState = NULL;
3162 if (result != expected || state != expectedState) {
3163 printf("\tPROBLEM: result for wcstok(\"%ls\", \"%ls\", %p) = %p "
3164 "(expected %p), state = %p (expected %p)\n", string, delim,
3165 &state, result, expected, state, expectedState);
3166 problemCount++;
3171 wchar_t string[] = L"just some text here!";
3172 const wchar_t* delim = L" ";
3173 wchar_t* state;
3174 wchar_t* result = wcstok(string, delim, &state);
3175 wchar_t* expected = string;
3176 wchar_t* expectedState = string + 5;
3177 if (result != expected || state != expectedState) {
3178 printf("\tPROBLEM: result for wcstok(\"%ls\", \"%ls\", %p) = %p "
3179 "(expected %p), state = %p (expected %p)\n", string, delim,
3180 &state, result, expected, state, expectedState);
3181 problemCount++;
3184 result = wcstok(NULL, delim, &state);
3185 expected = string + 5;
3186 expectedState = string + 10;
3187 if (result != expected || state != expectedState) {
3188 printf("\tPROBLEM: result for wcstok(\"%ls\", \"%ls\", %p) = %p "
3189 "(expected %p), state = %p (expected %p)\n", string, delim,
3190 &state, result, expected, state, expectedState);
3191 problemCount++;
3194 result = wcstok(NULL, delim, &state);
3195 expected = string + 10;
3196 expectedState = string + 15;
3197 if (result != expected || state != expectedState) {
3198 printf("\tPROBLEM: result for wcstok(\"%ls\", \"%ls\", %p) = %p "
3199 "(expected %p), state = %p (expected %p)\n", string, delim,
3200 &state, result, expected, state, expectedState);
3201 problemCount++;
3204 result = wcstok(NULL, delim, &state);
3205 expected = string + 15;
3206 expectedState = NULL;
3207 if (result != expected || state != expectedState) {
3208 printf("\tPROBLEM: result for wcstok(\"%ls\", \"%ls\", %p) = %p "
3209 "(expected %p), state = %p (expected %p)\n", string, delim,
3210 &state, result, expected, state, expectedState);
3211 problemCount++;
3214 result = wcstok(NULL, delim, &state);
3215 expected = NULL;
3216 expectedState = NULL;
3217 if (result != expected || state != expectedState) {
3218 printf("\tPROBLEM: result for wcstok(\"%ls\", \"%ls\", %p) = %p "
3219 "(expected %p), state = %p (expected %p)\n", string, delim,
3220 &state, result, expected, state, expectedState);
3221 problemCount++;
3226 wchar_t string[] = L" just \t\nsome\t\t\ttext\n\n\nhere!";
3227 const wchar_t* delim = L"\n\t ";
3228 wchar_t* state;
3229 wchar_t* result = wcstok(string, delim, &state);
3230 wchar_t* expected = string + 1;
3231 wchar_t* expectedState = string + 6;
3232 if (result != expected || state != expectedState) {
3233 printf("\tPROBLEM: result for wcstok(\"%ls\", \"%ls\", %p) = %p "
3234 "(expected %p), state = %p (expected %p)\n", string, delim,
3235 &state, result, expected, state, expectedState);
3236 problemCount++;
3238 if (wcscmp(result, L"just") != 0) {
3239 printf("\tPROBLEM: result for wcstok(\"%ls\", \"%ls\", %p) = %ls "
3240 "(expected %ls)\n", string, delim, &state, result, L"just");
3241 problemCount++;
3244 result = wcstok(NULL, delim, &state);
3245 expected = string + 8;
3246 expectedState = string + 13;
3247 if (result != expected || state != expectedState) {
3248 printf("\tPROBLEM: result for wcstok(\"%ls\", \"%ls\", %p) = %p "
3249 "(expected %p), state = %p (expected %p)\n", string, delim,
3250 &state, result, expected, state, expectedState);
3251 problemCount++;
3253 if (wcscmp(result, L"some") != 0) {
3254 printf("\tPROBLEM: result for wcstok(\"%ls\", \"%ls\", %p) = %ls "
3255 "(expected %ls)\n", string, delim, &state, result, L"some");
3256 problemCount++;
3259 result = wcstok(NULL, delim, &state);
3260 expected = string + 15;
3261 expectedState = string + 20;
3262 if (result != expected || state != expectedState) {
3263 printf("\tPROBLEM: result for wcstok(\"%ls\", \"%ls\", %p) = %p "
3264 "(expected %p), state = %p (expected %p)\n", string, delim,
3265 &state, result, expected, state, expectedState);
3266 problemCount++;
3268 if (wcscmp(result, L"text") != 0) {
3269 printf("\tPROBLEM: result for wcstok(\"%ls\", \"%ls\", %p) = %ls "
3270 "(expected %ls)\n", string, delim, &state, result, L"text");
3271 problemCount++;
3274 result = wcstok(NULL, delim, &state);
3275 expected = string + 22;
3276 expectedState = NULL;
3277 if (result != expected || state != expectedState) {
3278 printf("\tPROBLEM: result for wcstok(\"%ls\", \"%ls\", %p) = %p "
3279 "(expected %p), state = %p (expected %p)\n", string, delim,
3280 &state, result, expected, state, expectedState);
3281 problemCount++;
3283 if (wcscmp(result, L"here!") != 0) {
3284 printf("\tPROBLEM: result for wcstok(\"%ls\", \"%ls\", %p) = %ls "
3285 "(expected %ls)\n", string, delim, &state, result, L"here!");
3286 problemCount++;
3289 result = wcstok(NULL, delim, &state);
3290 expected = NULL;
3291 expectedState = NULL;
3292 if (result != expected || state != expectedState) {
3293 printf("\tPROBLEM: result for wcstok(\"%ls\", \"%ls\", %p) = %p "
3294 "(expected %p), state = %p (expected %p)\n", string, delim,
3295 &state, result, expected, state, expectedState);
3296 problemCount++;
3300 if (problemCount)
3301 printf("\t%d problem(s) found!\n", problemCount);
3302 else
3303 printf("\tall fine\n");
3307 // #pragma mark - wmemchr ------------------------------------------------------
3310 void
3311 test_wmemchr()
3313 printf("wmemchr()\n");
3315 int problemCount = 0;
3316 errno = 0;
3319 const wchar_t* string = L"";
3320 const wchar_t ch = L' ';
3321 const wchar_t* result = wmemchr(string, ch, 0);
3322 const wchar_t* expected = NULL;
3323 if (result != expected || errno != 0) {
3324 printf("\tPROBLEM: result for wmemchr(\"%ls\", '%lc', 0) = %p "
3325 "(expected %p), errno = %x (expected 0)\n", string, ch,
3326 result, expected, errno);
3327 problemCount++;
3332 const wchar_t* string = L"";
3333 const wchar_t ch = L'\0';
3334 const wchar_t* result = wmemchr(string, ch, 0);
3335 const wchar_t* expected = NULL;
3336 if (result != expected || errno != 0) {
3337 printf("\tPROBLEM: result for wmemchr(\"%ls\", '%lc', 0) = %p "
3338 "(expected %p), errno = %x (expected 0)\n", string, ch,
3339 result, expected, errno);
3340 problemCount++;
3345 const wchar_t* string = L"";
3346 const wchar_t ch = L'\0';
3347 const wchar_t* result = wmemchr(string, ch, 1);
3348 const wchar_t* expected = string;
3349 if (result != expected || errno != 0) {
3350 printf("\tPROBLEM: result for wmemchr(\"%ls\", '%lc', 1) = %p "
3351 "(expected %p), errno = %x (expected 0)\n", string, ch,
3352 result, expected, errno);
3353 problemCount++;
3358 const wchar_t* string = L"sometext";
3359 const wchar_t ch = L' ';
3360 const wchar_t* result = wmemchr(string, ch, 8);
3361 const wchar_t* expected = NULL;
3362 if (result != expected || errno != 0) {
3363 printf("\tPROBLEM: result for wmemchr(\"%ls\", '%lc', 1) = %p "
3364 "(expected %p), errno = %x (expected 0)\n", string, ch,
3365 result, expected, errno);
3366 problemCount++;
3371 const wchar_t* string = L"some text";
3372 const wchar_t ch = L' ';
3373 const wchar_t* result = wmemchr(string, ch, 9);
3374 const wchar_t* expected = string + 4;
3375 if (result != expected || errno != 0) {
3376 printf("\tPROBLEM: result for wmemchr(\"%ls\", '%lc', 1) = %p "
3377 "(expected %p), errno = %x (expected 0)\n", string, ch,
3378 result, expected, errno);
3379 problemCount++;
3384 const wchar_t* string = L"some text";
3385 const wchar_t ch = L'M';
3386 const wchar_t* result = wmemchr(string, ch, 9);
3387 const wchar_t* expected = NULL;
3388 if (result != expected || errno != 0) {
3389 printf("\tPROBLEM: result for wmemchr(\"%ls\", '%lc', 1) = %p "
3390 "(expected %p), errno = %x (expected 0)\n", string, ch,
3391 result, expected, errno);
3392 problemCount++;
3397 const wchar_t* string = L"some\0text";
3398 const wchar_t ch = L't';
3399 const wchar_t* result = wmemchr(string, ch, 4);
3400 const wchar_t* expected = NULL;
3401 if (result != expected || errno != 0) {
3402 printf("\tPROBLEM: result for wmemchr(\"%ls\", '%lc', 1) = %p "
3403 "(expected %p), errno = %x (expected 0)\n", string, ch,
3404 result, expected, errno);
3405 problemCount++;
3410 const wchar_t* string = L"some\0text";
3411 const wchar_t ch = L't';
3412 const wchar_t* result = wmemchr(string, ch, 9);
3413 const wchar_t* expected = string + 5;
3414 if (result != expected || errno != 0) {
3415 printf("\tPROBLEM: result for wmemchr(\"%ls\", '%lc', 1) = %p "
3416 "(expected %p), errno = %x (expected 0)\n", string, ch,
3417 result, expected, errno);
3418 problemCount++;
3422 if (problemCount)
3423 printf("\t%d problem(s) found!\n", problemCount);
3424 else
3425 printf("\tall fine\n");
3429 // #pragma mark - wmemcmp ------------------------------------------------------
3432 void
3433 test_wmemcmp()
3435 printf("wmemcmp()\n");
3437 int problemCount = 0;
3438 errno = 0;
3441 const wchar_t* a = L"";
3442 const wchar_t* b = L"";
3443 int result = sign(wmemcmp(a, b, 0));
3444 int expected = 0;
3445 if (result != expected || errno != 0) {
3446 printf("\tPROBLEM: result for wmemcmp(\"%ls\", \"%ls\", 0) = %d "
3447 "(expected %d), errno = %x (expected 0)\n", a, b, result,
3448 expected, errno);
3449 problemCount++;
3454 const wchar_t* a = L"";
3455 const wchar_t* b = L"";
3456 int result = sign(wmemcmp(a, b, 1));
3457 int expected = 0;
3458 if (result != expected || errno != 0) {
3459 printf("\tPROBLEM: result for wmemcmp(\"%ls\", \"%ls\", 0) = %d "
3460 "(expected %d), errno = %x (expected 0)\n", a, b, result,
3461 expected, errno);
3462 problemCount++;
3467 const wchar_t* a = L"a";
3468 const wchar_t* b = L"b";
3469 int result = sign(wmemcmp(a, b, 0));
3470 int expected = 0;
3471 if (result != expected || errno != 0) {
3472 printf("\tPROBLEM: result for wmemcmp(\"%ls\", \"%ls\", 0) = %d "
3473 "(expected %d), errno = %x (expected 0)\n", a, b, result,
3474 expected, errno);
3475 problemCount++;
3480 const wchar_t* a = L"a";
3481 const wchar_t* b = L"b";
3482 int result = sign(wmemcmp(a, b, 1));
3483 int expected = -1;
3484 if (result != expected || errno != 0) {
3485 printf("\tPROBLEM: result for wmemcmp(\"%ls\", \"%ls\", 1) = %d "
3486 "(expected %d), errno = %x (expected 0)\n", a, b, result,
3487 expected, errno);
3488 problemCount++;
3493 const wchar_t* a = L"b";
3494 const wchar_t* b = L"a";
3495 int result = sign(wmemcmp(a, b, 2));
3496 int expected = 1;
3497 if (result != expected || errno != 0) {
3498 printf("\tPROBLEM: result for wmemcmp(\"%ls\", \"%ls\", 2) = %d "
3499 "(expected %d), errno = %x (expected 0)\n", a, b, result,
3500 expected, errno);
3501 problemCount++;
3506 const wchar_t* a = L"a";
3507 const wchar_t* b = L"A";
3508 int result = sign(wmemcmp(a, b, 2));
3509 int expected = 1;
3510 if (result != expected || errno != 0) {
3511 printf("\tPROBLEM: result for wmemcmp(\"%ls\", \"%ls\", 2) = %d "
3512 "(expected %d), errno = %x (expected 0)\n", a, b, result,
3513 expected, errno);
3514 problemCount++;
3519 const wchar_t* a = L"täst";
3520 const wchar_t* b = L"täst";
3521 int result = sign(wmemcmp(a, b, 5));
3522 int expected = 0;
3523 if (result != expected || errno != 0) {
3524 printf("\tPROBLEM: result for wmemcmp(\"%ls\", \"%ls\", 5) = %d "
3525 "(expected %d), errno = %x (expected 0)\n", a, b, result,
3526 expected, errno);
3527 problemCount++;
3532 const wchar_t* a = L"täst";
3533 const wchar_t* b = L"täst ";
3534 int result = sign(wmemcmp(a, b, 5));
3535 int expected = -1;
3536 if (result != expected || errno != 0) {
3537 printf("\tPROBLEM: result for wmemcmp(\"%ls\", \"%ls\", 5) = %d "
3538 "(expected %d), errno = %x (expected 0)\n", a, b, result,
3539 expected, errno);
3540 problemCount++;
3545 const wchar_t* a = L"täSt";
3546 const wchar_t* b = L"täs";
3547 int result = sign(wmemcmp(a, b, 2));
3548 int expected = 0;
3549 if (result != expected || errno != 0) {
3550 printf("\tPROBLEM: result for wmemcmp(\"%ls\", \"%ls\", 2) = %d "
3551 "(expected %d), errno = %x (expected 0)\n", a, b, result,
3552 expected, errno);
3553 problemCount++;
3557 if (problemCount)
3558 printf("\t%d problem(s) found!\n", problemCount);
3559 else
3560 printf("\tall fine\n");
3564 // #pragma mark - wmemcpy ------------------------------------------------------
3567 void
3568 test_wmemcpy()
3570 printf("wmemcpy()\n");
3572 int problemCount = 0;
3573 errno = 0;
3576 const wchar_t* source = L"";
3577 wchar_t destination[] = L"XXXX";
3578 wchar_t* result = wmemcpy(destination, source, 0);
3579 if (result != destination || errno != 0) {
3580 printf("\tPROBLEM: result for wmemcpy(destination, \"%ls\", 0) = "
3581 "\"%ls\" (expected %p), errno = %x (expected 0)\n", source,
3582 result, destination, errno);
3583 problemCount++;
3585 if (destination[0] != L'X') {
3586 printf("\tPROBLEM: wmemcpy(destination, \"%ls\", 0) -> "
3587 "destination[0]=%x, expected %x\n", source, destination[0],
3588 L'X');
3589 problemCount++;
3594 const wchar_t* source = L"";
3595 wchar_t destination[] = L"XXXX";
3596 wchar_t* result = wmemcpy(destination, source, 1);
3597 if (result != destination || wmemcmp(destination, source, 1) != 0
3598 || errno != 0) {
3599 printf("\tPROBLEM: result for wmemcpy(destination, \"%ls\", 1) = "
3600 "\"%ls\" (expected %p), errno = %x (expected 0)\n", source,
3601 result, destination, errno);
3602 problemCount++;
3604 if (destination[1] != L'X') {
3605 printf("\tPROBLEM: wmemcpy(destination, \"%ls\", 1) -> "
3606 "destination[1]=%x, expected %x\n", source, destination[1],
3607 L'X');
3608 problemCount++;
3613 const wchar_t* source = L"tÄstdata \0with some charäcters";
3614 wchar_t destination[64];
3615 wchar_t* result = wmemcpy(destination, source, 31);
3616 if (result != destination || wmemcmp(destination, source, 31) != 0
3617 || errno != 0) {
3618 printf("\tPROBLEM: result for wmemcpy(destination, \"%ls\", 31) = "
3619 "\"%ls\" (expected %p), errno = %x (expected 0)\n", source,
3620 result, destination, errno);
3621 problemCount++;
3625 if (problemCount)
3626 printf("\t%d problem(s) found!\n", problemCount);
3627 else
3628 printf("\tall fine\n");
3632 // #pragma mark - wmempcpy ------------------------------------------------------
3635 void
3636 test_wmempcpy()
3638 printf("wmempcpy()\n");
3640 int problemCount = 0;
3641 errno = 0;
3644 const wchar_t* source = L"";
3645 wchar_t destination[] = L"XXXX";
3646 wchar_t* result = wmempcpy(destination, source, 0);
3647 if (result != destination || errno != 0) {
3648 printf("\tPROBLEM: result for wmempcpy(destination, \"%ls\", 0) = "
3649 "\"%ls\" (expected %p), errno = %x (expected 0)\n", source,
3650 result, destination, errno);
3651 problemCount++;
3653 if (destination[0] != L'X') {
3654 printf("\tPROBLEM: wmempcpy(destination, \"%ls\", 0) -> "
3655 "destination[0]=%x, expected %x\n", source, destination[0],
3656 L'X');
3657 problemCount++;
3662 const wchar_t* source = L"";
3663 wchar_t destination[] = L"XXXX";
3664 wchar_t* result = wmempcpy(destination, source, 1);
3665 if (result != destination + 1 || wmemcmp(destination, source, 1) != 0
3666 || errno != 0) {
3667 printf("\tPROBLEM: result for wmempcpy(destination, \"%ls\", 1) = "
3668 "\"%ls\" (expected %p), errno = %x (expected 0)\n", source,
3669 result, destination, errno);
3670 problemCount++;
3672 if (destination[1] != L'X') {
3673 printf("\tPROBLEM: wmempcpy(destination, \"%ls\", 1) -> "
3674 "destination[1]=%x, expected %x\n", source, destination[1],
3675 L'X');
3676 problemCount++;
3681 const wchar_t* source = L"tÄstdata \0with some charäcters";
3682 wchar_t destination[64];
3683 wchar_t* result = wmempcpy(destination, source, 31);
3684 if (result != destination + 31 || wmemcmp(destination, source, 31) != 0
3685 || errno != 0) {
3686 printf("\tPROBLEM: result for wmempcpy(destination, \"%ls\", 31) = "
3687 "\"%ls\" (expected %p), errno = %x (expected 0)\n", source,
3688 result, destination, errno);
3689 problemCount++;
3693 if (problemCount)
3694 printf("\t%d problem(s) found!\n", problemCount);
3695 else
3696 printf("\tall fine\n");
3700 // #pragma mark - wmemmove ------------------------------------------------------
3703 void
3704 test_wmemmove()
3706 printf("wmemmove()\n");
3708 int problemCount = 0;
3709 errno = 0;
3712 const wchar_t* source = L"";
3713 wchar_t destination[] = L"XXXX";
3714 wchar_t* result = wmemmove(destination, source, 0);
3715 if (result != destination || errno != 0) {
3716 printf("\tPROBLEM: result for wmemmove(destination, \"%ls\", 0) = "
3717 "\"%ls\" (expected %p), errno = %x (expected 0)\n", source,
3718 result, destination, errno);
3719 problemCount++;
3721 if (destination[0] != L'X') {
3722 printf("\tPROBLEM: wmemmove(destination, \"%ls\", 0) -> "
3723 "destination[0]=%x, expected %x\n", source, destination[0],
3724 L'X');
3725 problemCount++;
3730 const wchar_t* source = L"";
3731 wchar_t destination[] = L"XXXX";
3732 wchar_t* result = wmemmove(destination, source, 1);
3733 if (result != destination || wmemcmp(destination, source, 1) != 0
3734 || errno != 0) {
3735 printf("\tPROBLEM: result for wmemmove(destination, \"%ls\", 1) = "
3736 "\"%ls\" (expected %p), errno = %x (expected 0)\n", source,
3737 result, destination, errno);
3738 problemCount++;
3740 if (destination[1] != L'X') {
3741 printf("\tPROBLEM: wmemmove(destination, \"%ls\", 1) -> "
3742 "destination[1]=%x, expected %x\n", source, destination[1],
3743 L'X');
3744 problemCount++;
3749 const wchar_t* source = L"tÄstdata \0with some charäcters";
3750 wchar_t destination[64];
3751 wmemcpy(destination, source, 31);
3752 wchar_t* result = wmemmove(destination, destination + 4, 27);
3753 if (result != destination || wmemcmp(destination, source + 4, 27) != 0
3754 || errno != 0) {
3755 printf("\tPROBLEM: result for wmemmove(destination, \"%ls\", 27) = "
3756 "\"%ls\" (expected %p), errno = %x (expected 0)\n",
3757 source + 4, result, destination, errno);
3758 problemCount++;
3763 const wchar_t* source = L"tÄstdata \0with some charäcters";
3764 wchar_t destination[64];
3765 wmemcpy(destination, source, 31);
3766 wchar_t* result = wmemmove(destination + 2, destination, 8);
3767 if (result != destination + 2
3768 || wmemcmp(destination, L"tÄtÄstdatawith some charäcters", 31) != 0
3769 || errno != 0) {
3770 printf("\tPROBLEM: result for wmemmove(destination + 9, \"%ls\", 8)"
3771 " = \"%ls\" (expected %p), errno = %x (expected 0)\n",
3772 source, result, destination, errno);
3773 problemCount++;
3777 if (problemCount)
3778 printf("\t%d problem(s) found!\n", problemCount);
3779 else
3780 printf("\tall fine\n");
3784 // #pragma mark - wmemset ------------------------------------------------------
3787 void
3788 test_wmemset()
3790 printf("wmemset()\n");
3792 int problemCount = 0;
3793 errno = 0;
3796 wchar_t source = L'\0';
3797 wchar_t destination[] = L"XXXX";
3798 wchar_t* result = wmemset(destination, source, 0);
3799 if (result != destination || errno != 0) {
3800 printf("\tPROBLEM: result for wmemset(destination, '%lc', 0) = "
3801 "\"%ls\" (expected %p), errno = %x (expected 0)\n", source,
3802 result, destination, errno);
3803 problemCount++;
3805 if (destination[0] != L'X') {
3806 printf("\tPROBLEM: wmemset(destination, '%lc', 0) -> "
3807 "destination[0]=%x, expected %x\n", source, destination[0],
3808 L'X');
3809 problemCount++;
3814 wchar_t source = L'M';
3815 wchar_t destination[] = L"some text";
3816 wchar_t* result = wmemset(destination, source, 1);
3817 if (result != destination || errno != 0) {
3818 printf("\tPROBLEM: result for wmemset(destination, '%lc', 1) = "
3819 "\"%ls\" (expected %p), errno = %x (expected 0)\n", source,
3820 result, destination, errno);
3821 problemCount++;
3823 if (destination[0] != L'M') {
3824 printf("\tPROBLEM: wmemset(destination, '%lc', 1) -> "
3825 "destination[0]=%x, expected %x\n", source, destination[0],
3826 L'M');
3827 problemCount++;
3829 if (destination[1] != L'o') {
3830 printf("\tPROBLEM: wmemset(destination, '%lc', 1) -> "
3831 "destination[1]=%x, expected %x\n", source, destination[1],
3832 L'o');
3833 problemCount++;
3838 wchar_t source = L'M';
3839 wchar_t destination[] = L"some text";
3840 wchar_t* result = wmemset(destination, source, 9);
3841 if (result != destination || errno != 0) {
3842 printf("\tPROBLEM: result for wmemset(destination, '%lc', 9) = "
3843 "\"%ls\" (expected %p), errno = %x (expected 0)\n", source,
3844 result, destination, errno);
3845 problemCount++;
3847 for (int i = 0; i < 9; ++i) {
3848 if (destination[i] != L'M') {
3849 printf("\tPROBLEM: wmemset(destination, '%lc', 9) -> "
3850 "destination[%d]=%x, expected %x\n", source, i,
3851 destination[i], L'M');
3852 problemCount++;
3857 if (problemCount)
3858 printf("\t%d problem(s) found!\n", problemCount);
3859 else
3860 printf("\tall fine\n");
3864 // #pragma mark - sprintf ------------------------------------------------------
3867 struct sprintf_data {
3868 const char* format;
3869 const void* value;
3870 const char* result;
3874 void
3875 test_sprintf(const char* locale, const sprintf_data data[])
3877 setlocale(LC_ALL, locale);
3878 printf("sprintf for '%s'\n", locale);
3880 int problemCount = 0;
3881 for (int i = 0; data[i].format != NULL; ++i) {
3882 char buf[100];
3883 if (strstr(data[i].format, "%ls") != NULL)
3884 sprintf(buf, data[i].format, (wchar_t*)data[i].value);
3885 else if (strstr(data[i].format, "%s") != NULL)
3886 sprintf(buf, data[i].format, (char*)data[i].value);
3887 if (strcmp(buf, data[i].result) != 0) {
3888 printf("\tPROBLEM: sprintf(\"%s\") = \"%s\" (expected \"%s\")\n",
3889 data[i].format, buf, data[i].result);
3890 problemCount++;
3893 if (problemCount)
3894 printf("\t%d problem(s) found!\n", problemCount);
3895 else
3896 printf("\tall fine\n");
3900 void
3901 test_sprintf()
3903 const sprintf_data sprintf_posix[] = {
3904 { "%s", (const void*)"test", "test" },
3905 { "%ls", (const void*)L"test", "test" },
3906 { NULL, NULL, NULL }
3908 test_sprintf("POSIX", sprintf_posix);
3910 const sprintf_data sprintf_de[] = {
3911 { "%s", "test", "test" },
3912 { "%ls", L"test", "test" },
3913 { "%s", "t\xC3\xA4st", "t\xC3\xA4st" },
3914 { "%ls", L"t\xE4st", "t\xC3\xA4st" },
3915 { NULL, NULL, NULL }
3917 test_sprintf("de_DE.UTF-8", sprintf_de);
3919 const sprintf_data sprintf_de_iso[] = {
3920 { "%s", "test", "test" },
3921 { "%ls", L"test", "test" },
3922 { "%s", "t\xC3\xA4st", "t\xC3\xA4st" },
3923 { "%s", "t\xE4st", "t\xE4st" },
3924 { "%ls", L"t\xE4st", "t\xE4st" },
3925 { NULL, NULL, NULL }
3927 test_sprintf("de_DE.ISO8859-1", sprintf_de_iso);
3931 // #pragma mark - swprintf ----------------------------------------------------
3934 struct swprintf_data {
3935 const wchar_t* format;
3936 const void* value;
3937 const wchar_t* result;
3941 void
3942 test_swprintf(const char* locale, const swprintf_data data[])
3944 setlocale(LC_ALL, locale);
3945 printf("swprintf for '%s'\n", locale);
3947 int problemCount = 0;
3948 for (int i = 0; data[i].format != NULL; ++i) {
3949 wchar_t buf[100];
3950 if (wcsstr(data[i].format, L"%ls") != NULL)
3951 swprintf(buf, 100, data[i].format, (wchar_t*)data[i].value);
3952 else if (wcsstr(data[i].format, L"%s") != NULL)
3953 swprintf(buf, 100, data[i].format, (char*)data[i].value);
3954 if (wcscmp(buf, data[i].result) != 0) {
3955 printf("\tPROBLEM: swprintf(\"%ls\") = \"%ls\" (expected \"%ls\")\n",
3956 data[i].format, buf, data[i].result);
3957 problemCount++;
3960 if (problemCount)
3961 printf("\t%d problem(s) found!\n", problemCount);
3962 else
3963 printf("\tall fine\n");
3967 void
3968 test_swprintf()
3970 const swprintf_data swprintf_posix[] = {
3971 { L"%s", (const void*)"test", L"test" },
3972 { L"%ls", (const void*)L"test", L"test" },
3973 { NULL, NULL, NULL }
3975 test_swprintf("POSIX", swprintf_posix);
3977 const swprintf_data swprintf_de[] = {
3978 { L"%s", "test", L"test" },
3979 { L"%ls", L"test", L"test" },
3980 { L"%s", "t\xC3\xA4st", L"t\xE4st" },
3981 { L"%ls", L"t\xE4st", L"t\xE4st" },
3982 { NULL, NULL, NULL }
3984 test_swprintf("de_DE.UTF-8", swprintf_de);
3986 const swprintf_data swprintf_de_iso[] = {
3987 { L"%s", "test", L"test" },
3988 { L"%ls", L"test", L"test" },
3989 { L"%s", "t\xC3\xA4st", L"t\xC3\xA4st" },
3990 { L"%s", "t\xE4st", L"t\xE4st" },
3991 { L"%ls", L"t\xE4st", L"t\xE4st" },
3992 { NULL, NULL, NULL }
3994 test_swprintf("de_DE.ISO8859-1", swprintf_de_iso);
3998 // #pragma mark - main ---------------------------------------------------------
4002 * Test several different aspects of the wchar-string functions.
4005 main(void)
4007 setlocale(LC_ALL, "de_DE");
4009 test_collation();
4011 test_sprintf();
4012 test_swprintf();
4014 test_wcsftime();
4016 test_wcpcpy();
4017 test_wcscasecmp();
4018 test_wcscat();
4019 test_wcschr();
4020 test_wcscmp();
4021 test_wcscpy();
4022 test_wcscspn();
4023 test_wcsdup();
4024 #ifdef __HAIKU__
4025 test_wcslcat();
4026 test_wcslcpy();
4027 #endif
4028 test_wcslen();
4029 test_wcspbrk();
4030 test_wcsspn();
4031 test_wcsstr();
4032 test_wcstok();
4034 test_wmemchr();
4035 test_wmemcmp();
4036 test_wmemcpy();
4037 test_wmemmove();
4038 test_wmempcpy();
4039 test_wmemset();
4041 return 0;