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
45typedef struct
46{
47 char *func_str;
48 int func_id;
49}
50TST_FID;
51
52typedef struct
53{
54 int func_id;
55 const char *locale;
56}
57TST_HEAD;
58
59typedef struct
60{
61 TST_HEAD *head;
62}
63TST_FUNCS;
64
65
66/*----------------------------------------------------------------------*/
67/* ISW*: int isw* (wchar_t wc) */
68/*----------------------------------------------------------------------*/
69
70TST_ISW_STRUCT (ALNUM, alnum);
71TST_ISW_STRUCT (ALPHA, alpha);
72TST_ISW_STRUCT (CNTRL, cntrl);
73TST_ISW_STRUCT (DIGIT, digit);
74TST_ISW_STRUCT (GRAPH, graph);
75TST_ISW_STRUCT (LOWER, lower);
76TST_ISW_STRUCT (PRINT, print);
77TST_ISW_STRUCT (PUNCT, punct);
78TST_ISW_STRUCT (SPACE, space);
79TST_ISW_STRUCT (UPPER, upper);
80TST_ISW_STRUCT (XDIGIT, xdigit);
81
82typedef struct
83{
84 wint_t wc;
85 const char *ts;
86}
87TIN_ISWCTYPE_REC;
88
89typedef
90TEX_ERRET_REC (int)
91 TEX_ISWCTYPE_REC;
92TMD_RECHEAD (ISWCTYPE);
93
94
95/*----------------------------------------------------------------------*/
96/* MBLEN: int mblen (const char *s, size_t n) */
97/*----------------------------------------------------------------------*/
98
99typedef struct
100{
101 char s_flg;
102 char s[MBSSIZE];
103 size_t n;
104}
105TIN_MBLEN_REC;
106
107typedef TEX_ERRET_REC (int) TEX_MBLEN_REC;
108TMD_RECHEAD (MBLEN);
109
110
111/*----------------------------------------------------------------------*/
112/* MBRLEN: size_t mbrlen (const char *s, size_t n, mbstate_t *ps) */
113/*----------------------------------------------------------------------*/
114
115typedef 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}
127TIN_MBRLEN_REC;
128
129typedef TEX_ERRET_REC_SEQ (size_t, MBRLEN_SEQNUM) TEX_MBRLEN_REC;
130TMD_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
138typedef 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}
151TIN_MBRTOWC_REC;
152
153typedef struct
154{
155 struct
156 {
157 TMD_ERRET (size_t);
158 wchar_t wc;
159 }
160 seq[MBRTOWC_SEQNUM];
161}
162TEX_MBRTOWC_REC;
163
164TMD_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
172typedef 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}
184TIN_MBSRTOWCS_REC;
185
186typedef struct
187{
188 struct
189 {
190 TMD_ERRET (size_t);
191 wchar_t ws[WCSSIZE];
192 }
193 seq[MBSRTOWCS_SEQNUM];
194}
195TEX_MBSRTOWCS_REC;
196
197TMD_RECHEAD (MBSRTOWCS);
198
199
200/*----------------------------------------------------------------------*/
201/* MBSTOWCS: size_t mbstowcs (wchar_t *ws, const char *s, size_t n) */
202/*----------------------------------------------------------------------*/
203
204typedef 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}
215TIN_MBSTOWCS_REC;
216
217typedef TEX_MBSRTOWCS_REC TEX_MBSTOWCS_REC;
218/* MBSRTOWCS_SEQNUM == MBSTOWCS_SEQNUM */
219TMD_RECHEAD (MBSTOWCS);
220
221
222/*----------------------------------------------------------------------*/
223/* MBTOWC: int mbtowc (wchar_t *wc, const char *s, size_t n) */
224/*----------------------------------------------------------------------*/
225
226typedef TIN_MBSTOWCS_REC TIN_MBTOWC_REC;
227/* MBTOWC_SEQNUM == MBSTOWCS_SEQNUM */
228
229typedef struct
230{
231 struct
232 {
233 TMD_ERRET (int);
234 wchar_t wc;
235 }
236 seq[MBTOWC_SEQNUM];
237}
238TEX_MBTOWC_REC;
239
240TMD_RECHEAD (MBTOWC);
241
242
243/*----------------------------------------------------------------------*/
244/* STRCOLL: int strcoll (const char *s1, const char *s2) */
245/*----------------------------------------------------------------------*/
246
247typedef struct
248{
249 char s1[MBSSIZE];
250 char s2[MBSSIZE];
251}
252TIN_STRCOLL_REC;
253
254typedef TEX_ERRET_REC (int) TEX_STRCOLL_REC;
255TMD_RECHEAD (STRCOLL);
256
257
258/*----------------------------------------------------------------------*/
259/* STRFMON: size_t strfmon (char *buf, size_t nbytes, */
260/* const char *fmt, ... ) */
261/*----------------------------------------------------------------------*/
262
263typedef struct
264{
265 int nbytes;
266 char fmt[MONFMTSIZE];
267 double val;
268}
269TIN_STRFMON_REC;
270
271typedef struct
272{
273 TMD_ERRET (size_t);
274 char mon[MONSIZE];
275}
276TEX_STRFMON_REC;
277
278TMD_RECHEAD (STRFMON);
279
280
281/*----------------------------------------------------------------------*/
282/* STRXFRM: size_t strxfrm (char *s1, const char *s2, size_t n) */
283/*----------------------------------------------------------------------*/
284
285typedef struct
286{
287 char org1[MBSSIZE];
288 char org2[MBSSIZE];
289 size_t n1, n2;
290}
291TIN_STRXFRM_REC;
292
293typedef TEX_ERRET_REC (size_t) TEX_STRXFRM_REC; /* only for org2[] */
294TMD_RECHEAD (STRXFRM);
295
296
297/*----------------------------------------------------------------------*/
298/* SWSCANF: int swscanf (const wchar_t *ws, const wchar_t *fmt, ...) */
299/*----------------------------------------------------------------------*/
300
301typedef struct
302{
303 wchar_t ws[WCSSIZE * 3];
304 wchar_t fmt[WCSSIZE * 3];
305 int wch;
306}
307TIN_SWSCANF_REC;
308
309typedef 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}
319TEX_SWSCANF_REC;
320
321TMD_RECHEAD (SWSCANF);
322
323
324/*----------------------------------------------------------------------*/
325/* TOWCTRANS: wint_t towctrans (wint_t wc, wctrans_t desc) */
326/*----------------------------------------------------------------------*/
327
328typedef TIN_ISWCTYPE_REC TIN_TOWCTRANS_REC;
329typedef TEX_ERRET_REC (wint_t) TEX_TOWCTRANS_REC;
330TMD_RECHEAD (TOWCTRANS);
331
332
333/*----------------------------------------------------------------------*/
334/* TOW*ER: wint_t tow*er (wint_t wc) */
335/*----------------------------------------------------------------------*/
336
337TST_TOW_STRUCT (LOWER, lower);
338TST_TOW_STRUCT (UPPER, upper);
339
340
341/*----------------------------------------------------------------------*/
342/* WCRTOMB: wchar_t wcrtomb (char *s, wchar_t wc, mbstate_t *ps) */
343/*----------------------------------------------------------------------*/
344
345typedef struct
346{
347 int s_flg;
348 wchar_t wc;
349 int t_flg;
350 int t_init;
351}
352TIN_WCRTOMB_REC;
353
354typedef struct
355{
356 TMD_ERRET (wchar_t);
357 char s[MBSSIZE];
358}
359TEX_WCRTOMB_REC;
360
361TMD_RECHEAD (WCRTOMB);
362
363
364/*----------------------------------------------------------------------*/
365/* WCSCAT: wchar_t *wcscat (wchar_t *ws1, wchar_t *ws2) */
366/*----------------------------------------------------------------------*/
367
368typedef struct
369{
370 wchar_t ws1[WCSSIZE];
371 wchar_t ws2[WCSSIZE];
372}
373TIN_WCSCAT_REC;
374
375typedef struct
376{
377 TMD_ERRET (wchar_t *);
378 wchar_t ws[WCSSIZE];
379}
380TEX_WCSCAT_REC;
381
382TMD_RECHEAD (WCSCAT);
383
384
385/*----------------------------------------------------------------------*/
386/* WCSCHR: wchar_t *wcschr (wchar_t *ws, wchar_t wc); */
387/*----------------------------------------------------------------------*/
388
389typedef struct
390{
391 wchar_t ws[WCSSIZE];
392 wchar_t wc;
393}
394TIN_WCSCHR_REC;
395
396typedef TEX_ERRET_REC (wchar_t *) TEX_WCSCHR_REC;
397TMD_RECHEAD (WCSCHR);
398
399
400/*----------------------------------------------------------------------*/
401/* WCSCMP: int wcscmp (const wchar_t *ws1, const wchar_t *ws2) */
402/*----------------------------------------------------------------------*/
403
404typedef TIN_WCSCAT_REC TIN_WCSCMP_REC;
405typedef TEX_ERRET_REC (int) TEX_WCSCMP_REC;
406TMD_RECHEAD (WCSCMP);
407
408
409/*----------------------------------------------------------------------*/
410/* WCSCOLL: int wcscoll (const wchar_t *ws1, const wchar_t *ws2) */
411/*----------------------------------------------------------------------*/
412
413typedef TIN_WCSCMP_REC TIN_WCSCOLL_REC;
414typedef struct
415{
416 TMD_ERRET (int);
417 int cmp_flg;
418}
419TEX_WCSCOLL_REC;
420TMD_RECHEAD (WCSCOLL);
421
422
423/*----------------------------------------------------------------------*/
424/* WCSCPY: wchar_t *wcscpy (wchar_t *ws1, const wchar_t *ws2) */
425/*----------------------------------------------------------------------*/
426
427typedef struct
428{
429 wchar_t ws[WCSSIZE]; /* ws2: original string */
430}
431TIN_WCSCPY_REC;
432
433typedef TEX_WCSCAT_REC TEX_WCSCPY_REC;
434TMD_RECHEAD (WCSCPY);
435
436
437/*----------------------------------------------------------------------*/
438/* WCSCSPN: size_t wcscspn (const wchar_t *ws1, const wchar_t *ws2) */
439/*----------------------------------------------------------------------*/
440
441typedef TIN_WCSCAT_REC TIN_WCSCSPN_REC;
442typedef TEX_ERRET_REC (size_t) TEX_WCSCSPN_REC;
443TMD_RECHEAD (WCSCSPN);
444
445
446/*----------------------------------------------------------------------*/
447/* WCSLEN: size_t wcslen (const wchar_t *ws) */
448/*----------------------------------------------------------------------*/
449
450typedef TIN_WCSCPY_REC TIN_WCSLEN_REC;
451typedef TEX_ERRET_REC (size_t) TEX_WCSLEN_REC;
452TMD_RECHEAD (WCSLEN);
453
454
455/*----------------------------------------------------------------------*/
456/* WCSNCAT: wchar_t *wcsncat (wchar_t *ws1, const wchar_t *ws2, */
457/* size_t n) */
458/*----------------------------------------------------------------------*/
459
460typedef struct
461{
462 wchar_t ws1[WCSSIZE];
463 wchar_t ws2[WCSSIZE];
464 size_t n;
465}
466TIN_WCSNCAT_REC;
467
468typedef TEX_WCSCAT_REC TEX_WCSNCAT_REC;
469TMD_RECHEAD (WCSNCAT);
470
471
472/*----------------------------------------------------------------------*/
473/* WCSNCMP: int *wcsncmp (const wchar_t *ws1, const wchar_t *ws2, */
474/* size_t n) */
475/*----------------------------------------------------------------------*/
476
477typedef TIN_WCSNCAT_REC TIN_WCSNCMP_REC;
478typedef TEX_ERRET_REC (int) TEX_WCSNCMP_REC;
479TMD_RECHEAD (WCSNCMP);
480
481
482/*----------------------------------------------------------------------*/
483/* WCSNCPY: wchar_t *wcsncpy (wchar_t *ws1, const wchar_t *ws2, */
484/* size_t n) */
485/*----------------------------------------------------------------------*/
486
487typedef struct
488{
489 wchar_t ws[WCSSIZE]; /* ws2: original string */
490 size_t n;
491}
492TIN_WCSNCPY_REC;
493
494typedef TEX_WCSCPY_REC TEX_WCSNCPY_REC;
495TMD_RECHEAD (WCSNCPY);
496
497
498/*----------------------------------------------------------------------*/
499/* WCSPBRK: wchar_t *wcspbrk (const wchar_t *ws1, const wchar_t *ws2) */
500/*----------------------------------------------------------------------*/
501
502typedef TIN_WCSCSPN_REC TIN_WCSPBRK_REC;
503
504typedef struct
505{
506 TMD_ERRET (wchar_t *);
507 wchar_t wc;
508}
509TEX_WCSPBRK_REC;
510
511TMD_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
519typedef 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}
528TIN_WCSRTOMBS_REC;
529
530typedef struct
531{
532 TMD_ERRET (size_t);
533 char s[MBSSIZE];
534}
535TEX_WCSRTOMBS_REC;
536
537TMD_RECHEAD (WCSRTOMBS);
538
539
540/*----------------------------------------------------------------------*/
541/* WCSSPN: size_t wcsspn (const wchar_t *ws1, const wchar_t *ws2) */
542/*----------------------------------------------------------------------*/
543
544typedef TIN_WCSCSPN_REC TIN_WCSSPN_REC;
545typedef TEX_WCSCSPN_REC TEX_WCSSPN_REC;
546TMD_RECHEAD (WCSSPN);
547
548
549/*----------------------------------------------------------------------*/
550/* WCSSTR: wchar_t *wcsstr (const wchar_t *ws1, const wchar_t *ws2) */
551/*----------------------------------------------------------------------*/
552
553typedef TIN_WCSCSPN_REC TIN_WCSSTR_REC;
554typedef TEX_ERRET_REC (wchar_t *) TEX_WCSSTR_REC;
555TMD_RECHEAD (WCSSTR);
556
557
558/*----------------------------------------------------------------------*/
559/* WCSTOD: double wcstod (const wchar_t *np, wchar_t **endp) */
560/*----------------------------------------------------------------------*/
561
562typedef struct
563{
564 wchar_t np[WCSSIZE];
565}
566TIN_WCSTOD_REC;
567
568typedef struct
569{
570 TMD_ERRET (double);
571 double val;
572 wchar_t fwc;
573}
574TEX_WCSTOD_REC;
575
576TMD_RECHEAD (WCSTOD);
577
578
579/*----------------------------------------------------------------------*/
580/* WCSTOK: wchar_t *wcstok (wchar_t *ws, const wchar_t *dlm, */
581/* wchar_t **pt) */
582/*----------------------------------------------------------------------*/
583
584typedef 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}
594TIN_WCSTOK_REC;
595
596typedef struct
597{
598 struct
599 {
600 TMD_ERRET (wchar_t *);
601 wchar_t ws[WCSSIZE];
602 }
603 seq[WCSTOK_SEQNUM];
604}
605TEX_WCSTOK_REC;
606
607TMD_RECHEAD (WCSTOK);
608
609
610/*----------------------------------------------------------------------*/
611/* WCSTOMBS: size_t wcstombs (char s, const wchar_t *ws, size_t n) */
612/*----------------------------------------------------------------------*/
613
614typedef 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}
621TIN_WCSTOMBS_REC;
622
623typedef struct
624{
625 TMD_ERRET (size_t);
626 char s[MBSSIZE];
627}
628TEX_WCSTOMBS_REC;
629
630TMD_RECHEAD (WCSTOMBS);
631
632
633/*----------------------------------------------------------------------*/
634/* WCSWIDTH: int wcswidth (const wchar_t *ws, size_t n) */
635/*----------------------------------------------------------------------*/
636
637typedef TIN_WCSNCPY_REC TIN_WCSWIDTH_REC;
638typedef TEX_ERRET_REC (int) TEX_WCSWIDTH_REC;
639TMD_RECHEAD (WCSWIDTH);
640
641
642/*----------------------------------------------------------------------*/
643/* WCSXFRM: size_t wcsxfrm (wchar_t *ws1, const wchar_t *ws2, size_t n)*/
644/*----------------------------------------------------------------------*/
645
646typedef struct
647{
648 wchar_t org1[WCSSIZE];
649 wchar_t org2[WCSSIZE];
650 int n1, n2;
651}
652TIN_WCSXFRM_REC;
653
654typedef TEX_ERRET_REC (size_t) TEX_WCSXFRM_REC; /* only for org2[] */
655TMD_RECHEAD (WCSXFRM);
656
657
658/*----------------------------------------------------------------------*/
659/* WCTOB: int wctob (wint_t wc) */
660/*----------------------------------------------------------------------*/
661
662typedef struct
663{
664 wint_t wc;
665}
666TIN_WCTOB_REC;
667
668typedef TEX_ERRET_REC (int) TEX_WCTOB_REC;
669TMD_RECHEAD (WCTOB);
670
671
672/*----------------------------------------------------------------------*/
673/* WCTOMB: int wctomb (char *s, wchar_t wc) */
674/*----------------------------------------------------------------------*/
675
676typedef struct
677{
678 int s_flg;
679 wchar_t wc;
680}
681TIN_WCTOMB_REC;
682
683typedef struct
684{
685 TMD_ERRET (int);
686 char s[MBSSIZE];
687}
688TEX_WCTOMB_REC;
689
690TMD_RECHEAD (WCTOMB);
691
692
693/*----------------------------------------------------------------------*/
694/* WCTRANS: wctrans_t wctrans (const char *charclass) */
695/*----------------------------------------------------------------------*/
696
697typedef struct
698{
699 char class[MBSSIZE];
700}
701TIN_WCTRANS_REC;
702
703typedef TEX_ERRET_REC (wctrans_t) TEX_WCTRANS_REC;
704TMD_RECHEAD (WCTRANS);
705
706
707/*----------------------------------------------------------------------*/
708/* WCTYPE: wctype_t wctype (const char *class) */
709/*----------------------------------------------------------------------*/
710
711typedef TIN_WCTRANS_REC TIN_WCTYPE_REC;
712typedef TEX_ERRET_REC (wctype_t) TEX_WCTYPE_REC;
713TMD_RECHEAD (WCTYPE);
714
715
716/*----------------------------------------------------------------------*/
717/* WCWIDTH: int wcwidth (wchar_t wc) */
718/*----------------------------------------------------------------------*/
719
720typedef struct
721{
722 wchar_t wc;
723}
724TIN_WCWIDTH_REC;
725
726typedef TEX_ERRET_REC (int) TEX_WCWIDTH_REC;
727TMD_RECHEAD (WCWIDTH);
728
729#endif /* TST_TYPES_H */
730

source code of glibc/localedata/tests-mbwc/tst_types.h