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