tizen 2.3.1 release
[framework/base/tizen-locale.git] / localedata / tests-mbwc / tst_wcsncpy.c
1 /*
2   WCSNCPY: wchar_t *wcsncpy (wchar_t *ws1, const wchar_t *ws2, size_t n);
3 */
4
5 #define TST_FUNCTION wcsncpy
6
7 #include "tsp_common.c"
8 #include "dat_wcsncpy.c"
9
10 #define WCSNUM_NCPY 7
11
12 int
13 tst_wcsncpy (FILE *fp, int debug_flg)
14 {
15   TST_DECL_VARS (wchar_t *);
16   wchar_t ws1[WCSSIZE] =
17     { 0x9999, 0x9999, 0x9999, 0x9999, 0x9999, 0x9999, 0x0000 };
18   wchar_t *ws2, *ws_ex;
19   int err, i;
20   size_t n;
21
22   TST_DO_TEST (wcsncpy)
23   {
24     TST_HEAD_LOCALE (wcsncpy, S_WCSNCPY);
25     TST_DO_REC (wcsncpy)
26     {
27       TST_GET_ERRET (wcsncpy);
28
29       for (n = 0; n < WCSNUM_NCPY - 1; ++n)
30         {
31           ws1[n] = 0x9999;
32         }
33
34       ws1[n] = 0;
35       ws2 = TST_INPUT (wcsncpy).ws;     /* external value: size WCSSIZE */
36       n = TST_INPUT (wcsncpy).n;
37       ret = wcsncpy (ws1, ws2, n);
38
39       TST_IF_RETURN (S_WCSNCPY)
40       {
41         if (ret == ws1)
42           {
43             Result (C_SUCCESS, S_WCSNCPY, CASE_3, MS_PASSED);
44           }
45         else
46           {
47             err_count++;
48             Result (C_FAILURE, S_WCSNCPY, CASE_3,
49                     "the return address may not be correct");
50           }
51       }
52
53       if (ret == ws1)
54         {
55           if (debug_flg)
56             {
57               fprintf (stderr, "\nwcsncpy: n = %zu\n\n", n);
58             }
59
60           ws_ex = TST_EXPECT (wcsncpy).ws;
61
62           for (err = 0, i = 0; i < WCSNUM_NCPY && i < WCSSIZE; i++)
63             {
64               if (debug_flg)
65                 fprintf (stderr,
66                          "wcsncpy: ws1[ %d ] = 0x%lx <-> wx_ex[ %d ] = 0x%lx\n",
67                          i, (unsigned long int) ws1[i], i,
68                          (unsigned long int) ws_ex[i]);
69
70               if (ws1[i] != ws_ex[i])
71                 {
72                   err++;
73                   err_count++;
74                   Result (C_FAILURE, S_WCSNCPY, CASE_4,
75                           "copied string is different from an "
76                           "expected string");
77                   break;
78                 }
79             }
80
81           if (!err)
82             {
83               Result (C_SUCCESS, S_WCSNCPY, CASE_4, MS_PASSED);
84             }
85
86           /* A null terminate character is not supposed to be copied
87              unless (num chars of ws2)<n. */
88         }
89     }
90   }
91
92   return err_count;
93 }