tizen 2.4 release
[framework/base/tizen-locale.git] / localedata / tests-mbwc / dat_mbtowc.c
1 /*
2  *  TEST SUITE FOR MB/WC FUNCTIONS IN C LIBRARY
3  *
4  *       FILE:  dat_mbtowc.c
5  *
6  *       MBTOWC:  int  mbtowc (wchar_t *wp, char *s, size_t n);
7  */
8
9 /*  NOTE:
10  *
11  *       int  mbtowc (wchar_t *wp, char *s, size_t n);
12  *
13  *       where       n: a maximum number of bytes
14  *              return: the number of bytes
15  *
16  *
17  *        o When you feed a null pointer for a string (s) to the function,
18  *          set s_flg=0 instead of putting just a 'NULL' there.
19  *          Even if you put a 'NULL', it means a null string as well as "".
20  *
21  *        o When s is a null pointer, the function checks state dependency.
22  *
23  *              state-dependent encoding      - return  NON-zero
24  *              state-independent encoding    - return  0
25  *
26  *          If state-dependent encoding is expected, set
27  *
28  *              s_flg = 0,  ret_flg = 0,  ret_val = +1
29  *
30  *          If state-independent encoding is expected, set
31  *
32  *              s_flg = 0,  ret_flg = 0,  ret_val = 0
33  *
34  *
35  *          When you set ret_flg=1, the test program simply compares
36  *          an actual return value with an expected value. You can
37  *          check state-independent case (return value is 0) in that
38  *          way, but you can not check state-dependent case. So when
39  *          you check state- dependency in this test function:
40  *          tst_mbtowc(), set ret_flg=0 always. It's a special case
41  *          and the test function takes care of it.
42  *
43  *                        w_flg
44  *                        |     s: (a null string; can't be (char *)NULL)
45  *                        |     |
46  *             input.   { 1, 0, (char)NULL, MB_LEN_MAX  },
47  *                           |
48  *                           s_flg=0: makes _s_ a null pointer.
49  *
50  *             expect   { 0,0,0,x,     0x0000     },
51  *                            | |
52  *                            | ret_val: 0/+1
53  *                            ret_flg=0
54  *
55  *
56  *    Test data for State dependent encodings:
57  *
58  *        mbtowc( NULL, NULL, 0 );       ... first  data
59  *        mbtowc( &wc,  s1,  n1 );       ... second data
60  *        mbtowc( &wc,  s2,  n2 );       ... third  data
61  * */
62
63 #include <limits.h>
64
65 TST_MBTOWC tst_mbtowc_loc [] = {
66   {
67     { Tmbtowc, TST_LOC_de },
68     {
69       { /*----------------- #01 -----------------*/
70         {
71           {
72             { 1, 1, "\xfc\xe4\xf6",         1          },
73             { 1, 1, "\xfc\xe4\xf6",         2          },
74             { 1, 1, "\xfc\xe4\xf6",         MB_LEN_MAX },
75           }
76         },
77         {
78           {
79             { 0,  1,  1,   0x00FC },
80             { 0,  1,  1,   0x00FC },
81             { 0,  1,  1,   0x00FC },
82           }
83         }
84       },
85       { /*----------------- #02 -----------------*/
86         {
87           {
88             { 1, 1, "\177",         MB_LEN_MAX },
89             { 1, 1, "\200",         MB_LEN_MAX },
90             { 1, 1, "\201",         MB_LEN_MAX },
91           }
92         },
93         {
94           {
95             { 0,  1,  1,   0x007F },
96             { 0,  1,  1,   0x0080 },
97             { 0,  1,  1,   0x0081 },
98           }
99         }
100       },
101       { /*----------------- #03 -----------------*/
102         {
103           {
104             { 1, 1, "",                     MB_LEN_MAX },
105             { 0, 1, "\xfc\xe4\xf6",         1          },
106             { 0, 1, "\xfc\xe4\xf6",         2          },
107           }
108         },
109         {
110           {
111             { 0,  1,  0,   0x0000 },
112             { 0,  1,  1,   0x0000 },
113             { 0,  1,  1,   0x0000 },
114           }
115         }
116       },
117       { /*----------------- #04 -----------------*/
118         {
119           {
120             { 0, 1, "\xfc\xe4\xf6",         MB_LEN_MAX },
121             { 0, 1, "\177",                 MB_LEN_MAX },
122             { 0, 1, "",                    MB_LEN_MAX },
123           }
124         },
125         {
126           {
127             { 0,  1,  1,   0x0000 },
128             { 0,  1,  1,   0x0000 },
129             { 0,  1,  0,   0x0000 },
130           }
131         }
132       },
133       { /*----------------- #05 -----------------*/
134         {
135           {
136             { 0, 1, "\xfc\xe4\xf6",     MB_LEN_MAX },
137             { 0, 1, "\177",             MB_LEN_MAX },
138             { 0, 0, NULL,               MB_LEN_MAX },
139           }
140         },
141         {
142           {
143             { 0,  1,  1,   0x0000 },
144             { 0,  1,  1,   0x0000 },
145             { 0,  0,  0,   0x0000 },
146           }
147         }
148       },
149       { .is_last = 1 }
150     }
151   },
152   {
153     { Tmbtowc, TST_LOC_enUS },
154     {
155       { /*----------------- #01 -----------------*/
156         {
157           {
158             { 1, 1, "ABC",          1          },
159             { 1, 1, "ABC",          2          },
160             { 1, 1, "ABC",          MB_LEN_MAX },
161           }
162         },
163         {
164           {
165             { 0,  1,  1,   0x0041 },
166             { 0,  1,  1,   0x0041 },
167             { 0,  1,  1,   0x0041 },
168           }
169         }
170       },
171       { /*----------------- #02 -----------------*/
172         {
173           {
174             { 1, 1, "\177",         MB_LEN_MAX },
175             { 1, 1, "\200",         MB_LEN_MAX },
176             { 1, 1, "\201",         MB_LEN_MAX },
177           }
178         },
179         {
180           {
181             { 0,  1,  1,   0x007F },
182             { EILSEQ,  1, -1,   0x0000 },
183             { EILSEQ,  1, -1,   0x0000 },
184           }
185         }
186       },
187       { /*----------------- #03 -----------------*/
188         {
189           {
190             { 1, 1, "",     MB_LEN_MAX },
191             { 0, 1, "ABC",          1          },
192             { 0, 1, "ABC",          2          },
193           }
194         },
195         {
196           {
197             { 0,  1,  0,   0x0000 },
198             { 0,  1,  1,   0x0000 },
199             { 0,  1,  1,   0x0000 },
200           }
201         }
202       },
203       { /*----------------- #04 -----------------*/
204         {
205           {
206             { 0, 1, "ABC",          MB_LEN_MAX },
207             { 0, 1, "\177",         MB_LEN_MAX },
208             { 0, 1, "",     MB_LEN_MAX },
209           }
210         },
211         {
212           {
213             { 0,  1,  1,   0x0000 },
214             { 0,  1,  1,   0x0000 },
215             { 0,  1,  0,   0x0000 },
216           }
217         }
218       },
219       { /*----------------- #05 -----------------*/
220         {
221           {
222             { 0, 1, "ABC",          MB_LEN_MAX },
223             { 0, 1, "\177",         MB_LEN_MAX },
224             { 0, 0, NULL,           MB_LEN_MAX },
225           }
226         },
227         {
228           {
229             { 0,  1,  1,   0x0000 },
230             { 0,  1,  1,   0x0000 },
231             { 0,  0,  0,   0x0000 },
232           }
233         }
234       },
235       { .is_last = 1 }
236     }
237   },
238   {
239     { Tmbtowc, TST_LOC_eucJP },
240     {
241       { /*----------------- #01 -----------------*/
242         {
243           {
244             { 1, 1, "\244\242A",      1          },
245             { 1, 1, "\244\242A",      2          },
246             { 1, 1, "\244\242A",      MB_LEN_MAX },
247           }
248         },
249         {
250           {
251             /* XXX EILSEQ was introduced in ISO C99.  */
252             { 0,          1, -1,   0x0000 },
253             { 0,       1,  2,   0x3042 },
254             { 0,       1,  2,   0x3042 },
255           }
256         }
257       },
258       { /*----------------- #02 -----------------*/
259         {
260           {
261             { 1, 1, "\177\244\242",   MB_LEN_MAX },
262             { 1, 1, "\377\244\242",   MB_LEN_MAX },
263             { 1, 1, "\201\244\242",   MB_LEN_MAX },
264           }
265         },
266         {
267           {
268             { 0,  1, +1,   0x007F },
269             { 0,  1, -1,   0x0000 },
270             { 0,  1, +1,   0x0081 },
271           }
272         }
273       },
274       { /*----------------- #03 -----------------*/
275         {
276           {
277             { 1, 1, "",         MB_LEN_MAX },
278             { 0, 1, "\244\242A",      1          },
279             { 0, 1, "\244\242A",      2          },
280           }
281         },
282         {
283           {
284             { 0,  1,  0,   0x0000 },
285             /* XXX EILSEQ was introduced in ISO C99.  */
286             { 0,       1, -1,   0x0000 },
287             { 0,  1,  2,   0x0000 },
288           }
289         }
290       },
291       { /*----------------- #04 -----------------*/
292         {
293           {
294             { 0, 1, "\244\242A",      MB_LEN_MAX },
295             { 0, 1, "\177\244\242",   MB_LEN_MAX },
296             { 0, 1, "",               MB_LEN_MAX },
297           }
298         },
299         {
300           {
301             { 0,  1,  2,   0x0000 },
302             { 0,  1, +1,   0x0000 },
303             { 0,  1,  0,   0x0000 },
304           }
305         }
306       },
307       { /*----------------- #05 -----------------*/
308         {
309           {
310             { 0, 1, "\244\242A",      MB_LEN_MAX },
311             { 0, 1, "\177\244\242",   MB_LEN_MAX },
312             { 0, 0, NULL,             MB_LEN_MAX },
313           }
314         },
315         {
316           {
317             { 0,  1,  2,   0x0000 },
318             { 0,  1, +1,   0x0000 },
319             { 0,  0,  0,   0x0000 },
320           }
321         }
322       },
323       { .is_last = 1 }
324     }
325   },
326   {
327     { Tmbtowc, TST_LOC_end }
328   }
329 };