1 /* 2 * TEST SUITE FOR MB/WC FUNCTIONS IN C LIBRARY 3 * 4 * FILE: tst_types.h 5 * 6 * Definitions of data types for each test function 7 */ 8 9 10 #ifndef TST_TYPES_H 11 #define TST_TYPES_H 12 13 #include <stdio.h> 14 #include <wchar.h> 15 #include <wctype.h> 16 #include "tst_funcs.h" 17 #include "tgn_funcdef.h" 18 19 #define MBSSIZE 24 20 #define WCSSIZE 12 21 #define MONFMTSIZE 16 22 #define MONSIZE 64 23 #define USE_MBCURMAX 99 /* well, but ... */ 24 #define TST_DBL_EPS 2.22153e-16 25 #define WCSTOK_SEQNUM 3 26 #define MBLEN_SEQNUM 3 27 #define MBTOWC_SEQNUM 3 28 #define MBSTOWCS_SEQNUM 3 29 #define WCTOMB_SEQNUM 3 30 #define WCSTOMBS_SEQNUM 3 31 #define MBRLEN_SEQNUM 3 32 #define MBRTOWC_SEQNUM 3 33 #define MBSRTOWCS_SEQNUM 3 34 #define WCRTOMB_SEQNUM 3 35 #define WCSRTOMBS_SEQNUM 3 36 37 /* Maximum numbers of test in one of the _loc arrays. */ 38 #define MAX_LOC_TEST 300 39 40 41 /*----------------------------------------------------------------------*/ 42 /* FUNCTION */ 43 /*----------------------------------------------------------------------*/ 44 45 typedef struct 46 { 47 char *func_str; 48 int func_id; 49 } 50 TST_FID; 51 52 typedef struct 53 { 54 int func_id; 55 const char *locale; 56 } 57 TST_HEAD; 58 59 typedef struct 60 { 61 TST_HEAD *head; 62 } 63 TST_FUNCS; 64 65 66 /*----------------------------------------------------------------------*/ 67 /* ISW*: int isw* (wchar_t wc) */ 68 /*----------------------------------------------------------------------*/ 69 70 TST_ISW_STRUCT (ALNUM, alnum); 71 TST_ISW_STRUCT (ALPHA, alpha); 72 TST_ISW_STRUCT (CNTRL, cntrl); 73 TST_ISW_STRUCT (DIGIT, digit); 74 TST_ISW_STRUCT (GRAPH, graph); 75 TST_ISW_STRUCT (LOWER, lower); 76 TST_ISW_STRUCT (PRINT, print); 77 TST_ISW_STRUCT (PUNCT, punct); 78 TST_ISW_STRUCT (SPACE, space); 79 TST_ISW_STRUCT (UPPER, upper); 80 TST_ISW_STRUCT (XDIGIT, xdigit); 81 82 typedef struct 83 { 84 wint_t wc; 85 const char *ts; 86 } 87 TIN_ISWCTYPE_REC; 88 89 typedef 90 TEX_ERRET_REC (int) 91 TEX_ISWCTYPE_REC; 92 TMD_RECHEAD (ISWCTYPE); 93 94 95 /*----------------------------------------------------------------------*/ 96 /* MBLEN: int mblen (const char *s, size_t n) */ 97 /*----------------------------------------------------------------------*/ 98 99 typedef struct 100 { 101 char s_flg; 102 char s[MBSSIZE]; 103 size_t n; 104 } 105 TIN_MBLEN_REC; 106 107 typedef TEX_ERRET_REC (int) TEX_MBLEN_REC; 108 TMD_RECHEAD (MBLEN); 109 110 111 /*----------------------------------------------------------------------*/ 112 /* MBRLEN: size_t mbrlen (const char *s, size_t n, mbstate_t *ps) */ 113 /*----------------------------------------------------------------------*/ 114 115 typedef struct 116 { 117 struct 118 { 119 int s_flg; 120 char s[MBSSIZE]; 121 size_t n; 122 int t_flg; 123 int t_init; 124 } 125 seq[MBRLEN_SEQNUM]; 126 } 127 TIN_MBRLEN_REC; 128 129 typedef TEX_ERRET_REC_SEQ (size_t, MBRLEN_SEQNUM) TEX_MBRLEN_REC; 130 TMD_RECHEAD (MBRLEN); 131 132 133 /*----------------------------------------------------------------------*/ 134 /* MBRTOWC: size_t mbrtowc (wchar_t *pwc, const char *s, size_t n, */ 135 /* mbstate_t *ps) */ 136 /*----------------------------------------------------------------------*/ 137 138 typedef struct 139 { 140 struct 141 { 142 int w_flg; 143 int s_flg; 144 char s[MBSSIZE]; 145 size_t n; 146 int t_flg; 147 int t_init; 148 } 149 seq[MBRTOWC_SEQNUM]; 150 } 151 TIN_MBRTOWC_REC; 152 153 typedef struct 154 { 155 struct 156 { 157 TMD_ERRET (size_t); 158 wchar_t wc; 159 } 160 seq[MBRTOWC_SEQNUM]; 161 } 162 TEX_MBRTOWC_REC; 163 164 TMD_RECHEAD (MBRTOWC); 165 166 167 /*----------------------------------------------------------------------*/ 168 /* MBSRTOWCS: size_t mbsrtowcs (wchar_t *ws, const char **s, size_t n, */ 169 /* mbstate_t *ps ) */ 170 /*----------------------------------------------------------------------*/ 171 172 typedef struct 173 { 174 struct 175 { 176 int w_flg; 177 char s[MBSSIZE]; 178 size_t n; 179 int t_flg; 180 int t_init; 181 } 182 seq[MBSRTOWCS_SEQNUM]; 183 } 184 TIN_MBSRTOWCS_REC; 185 186 typedef struct 187 { 188 struct 189 { 190 TMD_ERRET (size_t); 191 wchar_t ws[WCSSIZE]; 192 } 193 seq[MBSRTOWCS_SEQNUM]; 194 } 195 TEX_MBSRTOWCS_REC; 196 197 TMD_RECHEAD (MBSRTOWCS); 198 199 200 /*----------------------------------------------------------------------*/ 201 /* MBSTOWCS: size_t mbstowcs (wchar_t *ws, const char *s, size_t n) */ 202 /*----------------------------------------------------------------------*/ 203 204 typedef struct 205 { 206 struct 207 { 208 int w_flg; 209 int s_flg; 210 const char *s; 211 size_t n; 212 } 213 seq[MBSTOWCS_SEQNUM]; 214 } 215 TIN_MBSTOWCS_REC; 216 217 typedef TEX_MBSRTOWCS_REC TEX_MBSTOWCS_REC; 218 /* MBSRTOWCS_SEQNUM == MBSTOWCS_SEQNUM */ 219 TMD_RECHEAD (MBSTOWCS); 220 221 222 /*----------------------------------------------------------------------*/ 223 /* MBTOWC: int mbtowc (wchar_t *wc, const char *s, size_t n) */ 224 /*----------------------------------------------------------------------*/ 225 226 typedef TIN_MBSTOWCS_REC TIN_MBTOWC_REC; 227 /* MBTOWC_SEQNUM == MBSTOWCS_SEQNUM */ 228 229 typedef struct 230 { 231 struct 232 { 233 TMD_ERRET (int); 234 wchar_t wc; 235 } 236 seq[MBTOWC_SEQNUM]; 237 } 238 TEX_MBTOWC_REC; 239 240 TMD_RECHEAD (MBTOWC); 241 242 243 /*----------------------------------------------------------------------*/ 244 /* STRCOLL: int strcoll (const char *s1, const char *s2) */ 245 /*----------------------------------------------------------------------*/ 246 247 typedef struct 248 { 249 char s1[MBSSIZE]; 250 char s2[MBSSIZE]; 251 } 252 TIN_STRCOLL_REC; 253 254 typedef TEX_ERRET_REC (int) TEX_STRCOLL_REC; 255 TMD_RECHEAD (STRCOLL); 256 257 258 /*----------------------------------------------------------------------*/ 259 /* STRFMON: size_t strfmon (char *buf, size_t nbytes, */ 260 /* const char *fmt, ... ) */ 261 /*----------------------------------------------------------------------*/ 262 263 typedef struct 264 { 265 int nbytes; 266 char fmt[MONFMTSIZE]; 267 double val; 268 } 269 TIN_STRFMON_REC; 270 271 typedef struct 272 { 273 TMD_ERRET (size_t); 274 char mon[MONSIZE]; 275 } 276 TEX_STRFMON_REC; 277 278 TMD_RECHEAD (STRFMON); 279 280 281 /*----------------------------------------------------------------------*/ 282 /* STRXFRM: size_t strxfrm (char *s1, const char *s2, size_t n) */ 283 /*----------------------------------------------------------------------*/ 284 285 typedef struct 286 { 287 char org1[MBSSIZE]; 288 char org2[MBSSIZE]; 289 size_t n1, n2; 290 } 291 TIN_STRXFRM_REC; 292 293 typedef TEX_ERRET_REC (size_t) TEX_STRXFRM_REC; /* only for org2[] */ 294 TMD_RECHEAD (STRXFRM); 295 296 297 /*----------------------------------------------------------------------*/ 298 /* SWSCANF: int swscanf (const wchar_t *ws, const wchar_t *fmt, ...) */ 299 /*----------------------------------------------------------------------*/ 300 301 typedef struct 302 { 303 wchar_t ws[WCSSIZE * 3]; 304 wchar_t fmt[WCSSIZE * 3]; 305 int wch; 306 } 307 TIN_SWSCANF_REC; 308 309 typedef struct 310 { 311 TMD_ERRET (int); 312 int val_int; /* %d */ 313 unsigned val_uns; /* %u */ 314 float val_flt; /* %f */ 315 int val_c; /* %c */ 316 char val_s[MBSSIZE * 2]; /* %s */ 317 wchar_t val_S[WCSSIZE * 2]; /* %lc, %ls, %C, %S */ 318 } 319 TEX_SWSCANF_REC; 320 321 TMD_RECHEAD (SWSCANF); 322 323 324 /*----------------------------------------------------------------------*/ 325 /* TOWCTRANS: wint_t towctrans (wint_t wc, wctrans_t desc) */ 326 /*----------------------------------------------------------------------*/ 327 328 typedef TIN_ISWCTYPE_REC TIN_TOWCTRANS_REC; 329 typedef TEX_ERRET_REC (wint_t) TEX_TOWCTRANS_REC; 330 TMD_RECHEAD (TOWCTRANS); 331 332 333 /*----------------------------------------------------------------------*/ 334 /* TOW*ER: wint_t tow*er (wint_t wc) */ 335 /*----------------------------------------------------------------------*/ 336 337 TST_TOW_STRUCT (LOWER, lower); 338 TST_TOW_STRUCT (UPPER, upper); 339 340 341 /*----------------------------------------------------------------------*/ 342 /* WCRTOMB: wchar_t wcrtomb (char *s, wchar_t wc, mbstate_t *ps) */ 343 /*----------------------------------------------------------------------*/ 344 345 typedef struct 346 { 347 int s_flg; 348 wchar_t wc; 349 int t_flg; 350 int t_init; 351 } 352 TIN_WCRTOMB_REC; 353 354 typedef struct 355 { 356 TMD_ERRET (wchar_t); 357 char s[MBSSIZE]; 358 } 359 TEX_WCRTOMB_REC; 360 361 TMD_RECHEAD (WCRTOMB); 362 363 364 /*----------------------------------------------------------------------*/ 365 /* WCSCAT: wchar_t *wcscat (wchar_t *ws1, wchar_t *ws2) */ 366 /*----------------------------------------------------------------------*/ 367 368 typedef struct 369 { 370 wchar_t ws1[WCSSIZE]; 371 wchar_t ws2[WCSSIZE]; 372 } 373 TIN_WCSCAT_REC; 374 375 typedef struct 376 { 377 TMD_ERRET (wchar_t *); 378 wchar_t ws[WCSSIZE]; 379 } 380 TEX_WCSCAT_REC; 381 382 TMD_RECHEAD (WCSCAT); 383 384 385 /*----------------------------------------------------------------------*/ 386 /* WCSCHR: wchar_t *wcschr (wchar_t *ws, wchar_t wc); */ 387 /*----------------------------------------------------------------------*/ 388 389 typedef struct 390 { 391 wchar_t ws[WCSSIZE]; 392 wchar_t wc; 393 } 394 TIN_WCSCHR_REC; 395 396 typedef TEX_ERRET_REC (wchar_t *) TEX_WCSCHR_REC; 397 TMD_RECHEAD (WCSCHR); 398 399 400 /*----------------------------------------------------------------------*/ 401 /* WCSCMP: int wcscmp (const wchar_t *ws1, const wchar_t *ws2) */ 402 /*----------------------------------------------------------------------*/ 403 404 typedef TIN_WCSCAT_REC TIN_WCSCMP_REC; 405 typedef TEX_ERRET_REC (int) TEX_WCSCMP_REC; 406 TMD_RECHEAD (WCSCMP); 407 408 409 /*----------------------------------------------------------------------*/ 410 /* WCSCOLL: int wcscoll (const wchar_t *ws1, const wchar_t *ws2) */ 411 /*----------------------------------------------------------------------*/ 412 413 typedef TIN_WCSCMP_REC TIN_WCSCOLL_REC; 414 typedef struct 415 { 416 TMD_ERRET (int); 417 int cmp_flg; 418 } 419 TEX_WCSCOLL_REC; 420 TMD_RECHEAD (WCSCOLL); 421 422 423 /*----------------------------------------------------------------------*/ 424 /* WCSCPY: wchar_t *wcscpy (wchar_t *ws1, const wchar_t *ws2) */ 425 /*----------------------------------------------------------------------*/ 426 427 typedef struct 428 { 429 wchar_t ws[WCSSIZE]; /* ws2: original string */ 430 } 431 TIN_WCSCPY_REC; 432 433 typedef TEX_WCSCAT_REC TEX_WCSCPY_REC; 434 TMD_RECHEAD (WCSCPY); 435 436 437 /*----------------------------------------------------------------------*/ 438 /* WCSCSPN: size_t wcscspn (const wchar_t *ws1, const wchar_t *ws2) */ 439 /*----------------------------------------------------------------------*/ 440 441 typedef TIN_WCSCAT_REC TIN_WCSCSPN_REC; 442 typedef TEX_ERRET_REC (size_t) TEX_WCSCSPN_REC; 443 TMD_RECHEAD (WCSCSPN); 444 445 446 /*----------------------------------------------------------------------*/ 447 /* WCSLEN: size_t wcslen (const wchar_t *ws) */ 448 /*----------------------------------------------------------------------*/ 449 450 typedef TIN_WCSCPY_REC TIN_WCSLEN_REC; 451 typedef TEX_ERRET_REC (size_t) TEX_WCSLEN_REC; 452 TMD_RECHEAD (WCSLEN); 453 454 455 /*----------------------------------------------------------------------*/ 456 /* WCSNCAT: wchar_t *wcsncat (wchar_t *ws1, const wchar_t *ws2, */ 457 /* size_t n) */ 458 /*----------------------------------------------------------------------*/ 459 460 typedef struct 461 { 462 wchar_t ws1[WCSSIZE]; 463 wchar_t ws2[WCSSIZE]; 464 size_t n; 465 } 466 TIN_WCSNCAT_REC; 467 468 typedef TEX_WCSCAT_REC TEX_WCSNCAT_REC; 469 TMD_RECHEAD (WCSNCAT); 470 471 472 /*----------------------------------------------------------------------*/ 473 /* WCSNCMP: int *wcsncmp (const wchar_t *ws1, const wchar_t *ws2, */ 474 /* size_t n) */ 475 /*----------------------------------------------------------------------*/ 476 477 typedef TIN_WCSNCAT_REC TIN_WCSNCMP_REC; 478 typedef TEX_ERRET_REC (int) TEX_WCSNCMP_REC; 479 TMD_RECHEAD (WCSNCMP); 480 481 482 /*----------------------------------------------------------------------*/ 483 /* WCSNCPY: wchar_t *wcsncpy (wchar_t *ws1, const wchar_t *ws2, */ 484 /* size_t n) */ 485 /*----------------------------------------------------------------------*/ 486 487 typedef struct 488 { 489 wchar_t ws[WCSSIZE]; /* ws2: original string */ 490 size_t n; 491 } 492 TIN_WCSNCPY_REC; 493 494 typedef TEX_WCSCPY_REC TEX_WCSNCPY_REC; 495 TMD_RECHEAD (WCSNCPY); 496 497 498 /*----------------------------------------------------------------------*/ 499 /* WCSPBRK: wchar_t *wcspbrk (const wchar_t *ws1, const wchar_t *ws2) */ 500 /*----------------------------------------------------------------------*/ 501 502 typedef TIN_WCSCSPN_REC TIN_WCSPBRK_REC; 503 504 typedef struct 505 { 506 TMD_ERRET (wchar_t *); 507 wchar_t wc; 508 } 509 TEX_WCSPBRK_REC; 510 511 TMD_RECHEAD (WCSPBRK); 512 513 514 /*----------------------------------------------------------------------*/ 515 /* WCSRTOMBS: size_t wcsrtombs (char *s, const wchar_t **ws, size_t n, */ 516 /* mbstate_t *ps) */ 517 /*----------------------------------------------------------------------*/ 518 519 typedef struct 520 { 521 int s_flg; 522 int w_flg; /* don't need this */ 523 wchar_t ws[WCSSIZE]; 524 size_t n; 525 int t_flg; 526 int t_init; 527 } 528 TIN_WCSRTOMBS_REC; 529 530 typedef struct 531 { 532 TMD_ERRET (size_t); 533 char s[MBSSIZE]; 534 } 535 TEX_WCSRTOMBS_REC; 536 537 TMD_RECHEAD (WCSRTOMBS); 538 539 540 /*----------------------------------------------------------------------*/ 541 /* WCSSPN: size_t wcsspn (const wchar_t *ws1, const wchar_t *ws2) */ 542 /*----------------------------------------------------------------------*/ 543 544 typedef TIN_WCSCSPN_REC TIN_WCSSPN_REC; 545 typedef TEX_WCSCSPN_REC TEX_WCSSPN_REC; 546 TMD_RECHEAD (WCSSPN); 547 548 549 /*----------------------------------------------------------------------*/ 550 /* WCSSTR: wchar_t *wcsstr (const wchar_t *ws1, const wchar_t *ws2) */ 551 /*----------------------------------------------------------------------*/ 552 553 typedef TIN_WCSCSPN_REC TIN_WCSSTR_REC; 554 typedef TEX_ERRET_REC (wchar_t *) TEX_WCSSTR_REC; 555 TMD_RECHEAD (WCSSTR); 556 557 558 /*----------------------------------------------------------------------*/ 559 /* WCSTOD: double wcstod (const wchar_t *np, wchar_t **endp) */ 560 /*----------------------------------------------------------------------*/ 561 562 typedef struct 563 { 564 wchar_t np[WCSSIZE]; 565 } 566 TIN_WCSTOD_REC; 567 568 typedef struct 569 { 570 TMD_ERRET (double); 571 double val; 572 wchar_t fwc; 573 } 574 TEX_WCSTOD_REC; 575 576 TMD_RECHEAD (WCSTOD); 577 578 579 /*----------------------------------------------------------------------*/ 580 /* WCSTOK: wchar_t *wcstok (wchar_t *ws, const wchar_t *dlm, */ 581 /* wchar_t **pt) */ 582 /*----------------------------------------------------------------------*/ 583 584 typedef struct 585 { 586 struct 587 { 588 int w_flg; 589 wchar_t ws[WCSSIZE]; 590 wchar_t dt[WCSSIZE]; /* delimiter */ 591 } 592 seq[WCSTOK_SEQNUM]; 593 } 594 TIN_WCSTOK_REC; 595 596 typedef struct 597 { 598 struct 599 { 600 TMD_ERRET (wchar_t *); 601 wchar_t ws[WCSSIZE]; 602 } 603 seq[WCSTOK_SEQNUM]; 604 } 605 TEX_WCSTOK_REC; 606 607 TMD_RECHEAD (WCSTOK); 608 609 610 /*----------------------------------------------------------------------*/ 611 /* WCSTOMBS: size_t wcstombs (char s, const wchar_t *ws, size_t n) */ 612 /*----------------------------------------------------------------------*/ 613 614 typedef struct 615 { 616 int s_flg; 617 int w_flg; /* currently we don't need it. */ 618 wchar_t ws[WCSSIZE]; 619 size_t n; 620 } 621 TIN_WCSTOMBS_REC; 622 623 typedef struct 624 { 625 TMD_ERRET (size_t); 626 char s[MBSSIZE]; 627 } 628 TEX_WCSTOMBS_REC; 629 630 TMD_RECHEAD (WCSTOMBS); 631 632 633 /*----------------------------------------------------------------------*/ 634 /* WCSWIDTH: int wcswidth (const wchar_t *ws, size_t n) */ 635 /*----------------------------------------------------------------------*/ 636 637 typedef TIN_WCSNCPY_REC TIN_WCSWIDTH_REC; 638 typedef TEX_ERRET_REC (int) TEX_WCSWIDTH_REC; 639 TMD_RECHEAD (WCSWIDTH); 640 641 642 /*----------------------------------------------------------------------*/ 643 /* WCSXFRM: size_t wcsxfrm (wchar_t *ws1, const wchar_t *ws2, size_t n)*/ 644 /*----------------------------------------------------------------------*/ 645 646 typedef struct 647 { 648 wchar_t org1[WCSSIZE]; 649 wchar_t org2[WCSSIZE]; 650 int n1, n2; 651 } 652 TIN_WCSXFRM_REC; 653 654 typedef TEX_ERRET_REC (size_t) TEX_WCSXFRM_REC; /* only for org2[] */ 655 TMD_RECHEAD (WCSXFRM); 656 657 658 /*----------------------------------------------------------------------*/ 659 /* WCTOB: int wctob (wint_t wc) */ 660 /*----------------------------------------------------------------------*/ 661 662 typedef struct 663 { 664 wint_t wc; 665 } 666 TIN_WCTOB_REC; 667 668 typedef TEX_ERRET_REC (int) TEX_WCTOB_REC; 669 TMD_RECHEAD (WCTOB); 670 671 672 /*----------------------------------------------------------------------*/ 673 /* WCTOMB: int wctomb (char *s, wchar_t wc) */ 674 /*----------------------------------------------------------------------*/ 675 676 typedef struct 677 { 678 int s_flg; 679 wchar_t wc; 680 } 681 TIN_WCTOMB_REC; 682 683 typedef struct 684 { 685 TMD_ERRET (int); 686 char s[MBSSIZE]; 687 } 688 TEX_WCTOMB_REC; 689 690 TMD_RECHEAD (WCTOMB); 691 692 693 /*----------------------------------------------------------------------*/ 694 /* WCTRANS: wctrans_t wctrans (const char *charclass) */ 695 /*----------------------------------------------------------------------*/ 696 697 typedef struct 698 { 699 char class[MBSSIZE]; 700 } 701 TIN_WCTRANS_REC; 702 703 typedef TEX_ERRET_REC (wctrans_t) TEX_WCTRANS_REC; 704 TMD_RECHEAD (WCTRANS); 705 706 707 /*----------------------------------------------------------------------*/ 708 /* WCTYPE: wctype_t wctype (const char *class) */ 709 /*----------------------------------------------------------------------*/ 710 711 typedef TIN_WCTRANS_REC TIN_WCTYPE_REC; 712 typedef TEX_ERRET_REC (wctype_t) TEX_WCTYPE_REC; 713 TMD_RECHEAD (WCTYPE); 714 715 716 /*----------------------------------------------------------------------*/ 717 /* WCWIDTH: int wcwidth (wchar_t wc) */ 718 /*----------------------------------------------------------------------*/ 719 720 typedef struct 721 { 722 wchar_t wc; 723 } 724 TIN_WCWIDTH_REC; 725 726 typedef TEX_ERRET_REC (int) TEX_WCWIDTH_REC; 727 TMD_RECHEAD (WCWIDTH); 728 729 #endif /* TST_TYPES_H */ 730