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