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
65TST_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};
330

source code of glibc/localedata/tests-mbwc/dat_mbtowc.c