blob: 7a5db4f75efb48acc767910c5fc22204ae9e0aad [file] [log] [blame]
/*
* TEST SUITE FOR MB/WC FUNCTIONS IN C LIBRARY
*
* FILE: tst_types.h
*
* Definitions of data types for each test function
*/
#ifndef TST_TYPES_H
#define TST_TYPES_H
#include <stdio.h>
#include <wchar.h>
#include <wctype.h>
#include "tst_funcs.h"
#include "tgn_funcdef.h"
#define MBSSIZE 24
#define WCSSIZE 12
#define MONFMTSIZE 16
#define MONSIZE 64
#define USE_MBCURMAX 99 /* well, but ... */
#define TST_DBL_EPS 2.22153e-16
#define WCSTOK_SEQNUM 3
#define MBLEN_SEQNUM 3
#define MBTOWC_SEQNUM 3
#define MBSTOWCS_SEQNUM 3
#define WCTOMB_SEQNUM 3
#define WCSTOMBS_SEQNUM 3
#define MBRLEN_SEQNUM 3
#define MBRTOWC_SEQNUM 3
#define MBSRTOWCS_SEQNUM 3
#define WCRTOMB_SEQNUM 3
#define WCSRTOMBS_SEQNUM 3
/* Maximum numbers of test in one of the _loc arrays. */
#define MAX_LOC_TEST 300
/*----------------------------------------------------------------------*/
/* FUNCTION */
/*----------------------------------------------------------------------*/
typedef struct
{
char *func_str;
int func_id;
}
TST_FID;
typedef struct
{
int func_id;
const char *locale;
}
TST_HEAD;
typedef struct
{
TST_HEAD *head;
}
TST_FUNCS;
/*----------------------------------------------------------------------*/
/* ISW*: int isw* (wchar_t wc) */
/*----------------------------------------------------------------------*/
TST_ISW_STRUCT (ALNUM, alnum);
TST_ISW_STRUCT (ALPHA, alpha);
TST_ISW_STRUCT (CNTRL, cntrl);
TST_ISW_STRUCT (DIGIT, digit);
TST_ISW_STRUCT (GRAPH, graph);
TST_ISW_STRUCT (LOWER, lower);
TST_ISW_STRUCT (PRINT, print);
TST_ISW_STRUCT (PUNCT, punct);
TST_ISW_STRUCT (SPACE, space);
TST_ISW_STRUCT (UPPER, upper);
TST_ISW_STRUCT (XDIGIT, xdigit);
typedef struct
{
wint_t wc;
const char *ts;
}
TIN_ISWCTYPE_REC;
typedef
TEX_ERRET_REC (int)
TEX_ISWCTYPE_REC;
TMD_RECHEAD (ISWCTYPE);
/*----------------------------------------------------------------------*/
/* MBLEN: int mblen (const char *s, size_t n) */
/*----------------------------------------------------------------------*/
typedef struct
{
char s_flg;
char s[MBSSIZE];
size_t n;
}
TIN_MBLEN_REC;
typedef TEX_ERRET_REC (int) TEX_MBLEN_REC;
TMD_RECHEAD (MBLEN);
/*----------------------------------------------------------------------*/
/* MBRLEN: size_t mbrlen (const char *s, size_t n, mbstate_t *ps) */
/*----------------------------------------------------------------------*/
typedef struct
{
struct
{
int s_flg;
char s[MBSSIZE];
size_t n;
int t_flg;
int t_init;
}
seq[MBRLEN_SEQNUM];
}
TIN_MBRLEN_REC;
typedef TEX_ERRET_REC_SEQ (size_t, MBRLEN_SEQNUM) TEX_MBRLEN_REC;
TMD_RECHEAD (MBRLEN);
/*----------------------------------------------------------------------*/
/* MBRTOWC: size_t mbrtowc (wchar_t *pwc, const char *s, size_t n, */
/* mbstate_t *ps) */
/*----------------------------------------------------------------------*/
typedef struct
{
struct
{
int w_flg;
int s_flg;
char s[MBSSIZE];
size_t n;
int t_flg;
int t_init;
}
seq[MBRTOWC_SEQNUM];
}
TIN_MBRTOWC_REC;
typedef struct
{
struct
{
TMD_ERRET (size_t);
wchar_t wc;
}
seq[MBRTOWC_SEQNUM];
}
TEX_MBRTOWC_REC;
TMD_RECHEAD (MBRTOWC);
/*----------------------------------------------------------------------*/
/* MBSRTOWCS: size_t mbsrtowcs (wchar_t *ws, const char **s, size_t n, */
/* mbstate_t *ps ) */
/*----------------------------------------------------------------------*/
typedef struct
{
struct
{
int w_flg;
char s[MBSSIZE];
size_t n;
int t_flg;
int t_init;
}
seq[MBSRTOWCS_SEQNUM];
}
TIN_MBSRTOWCS_REC;
typedef struct
{
struct
{
TMD_ERRET (size_t);
wchar_t ws[WCSSIZE];
}
seq[MBSRTOWCS_SEQNUM];
}
TEX_MBSRTOWCS_REC;
TMD_RECHEAD (MBSRTOWCS);
/*----------------------------------------------------------------------*/
/* MBSTOWCS: size_t mbstowcs (wchar_t *ws, const char *s, size_t n) */
/*----------------------------------------------------------------------*/
typedef struct
{
struct
{
int w_flg;
int s_flg;
const char *s;
size_t n;
}
seq[MBSTOWCS_SEQNUM];
}
TIN_MBSTOWCS_REC;
typedef TEX_MBSRTOWCS_REC TEX_MBSTOWCS_REC;
/* MBSRTOWCS_SEQNUM == MBSTOWCS_SEQNUM */
TMD_RECHEAD (MBSTOWCS);
/*----------------------------------------------------------------------*/
/* MBTOWC: int mbtowc (wchar_t *wc, const char *s, size_t n) */
/*----------------------------------------------------------------------*/
typedef TIN_MBSTOWCS_REC TIN_MBTOWC_REC;
/* MBTOWC_SEQNUM == MBSTOWCS_SEQNUM */
typedef struct
{
struct
{
TMD_ERRET (int);
wchar_t wc;
}
seq[MBTOWC_SEQNUM];
}
TEX_MBTOWC_REC;
TMD_RECHEAD (MBTOWC);
/*----------------------------------------------------------------------*/
/* STRCOLL: int strcoll (const char *s1, const char *s2) */
/*----------------------------------------------------------------------*/
typedef struct
{
char s1[MBSSIZE];
char s2[MBSSIZE];
}
TIN_STRCOLL_REC;
typedef TEX_ERRET_REC (int) TEX_STRCOLL_REC;
TMD_RECHEAD (STRCOLL);
/*----------------------------------------------------------------------*/
/* STRFMON: size_t strfmon (char *buf, size_t nbytes, */
/* const char *fmt, ... ) */
/*----------------------------------------------------------------------*/
typedef struct
{
int nbytes;
char fmt[MONFMTSIZE];
double val;
}
TIN_STRFMON_REC;
typedef struct
{
TMD_ERRET (size_t);
char mon[MONSIZE];
}
TEX_STRFMON_REC;
TMD_RECHEAD (STRFMON);
/*----------------------------------------------------------------------*/
/* STRXFRM: size_t strxfrm (char *s1, const char *s2, size_t n) */
/*----------------------------------------------------------------------*/
typedef struct
{
char org1[MBSSIZE];
char org2[MBSSIZE];
size_t n1, n2;
}
TIN_STRXFRM_REC;
typedef TEX_ERRET_REC (size_t) TEX_STRXFRM_REC; /* only for org2[] */
TMD_RECHEAD (STRXFRM);
/*----------------------------------------------------------------------*/
/* SWSCANF: int swscanf (const wchar_t *ws, const wchar_t *fmt, ...) */
/*----------------------------------------------------------------------*/
typedef struct
{
wchar_t ws[WCSSIZE * 3];
wchar_t fmt[WCSSIZE * 3];
int wch;
}
TIN_SWSCANF_REC;
typedef struct
{
TMD_ERRET (int);
int val_int; /* %d */
unsigned val_uns; /* %u */
float val_flt; /* %f */
int val_c; /* %c */
char val_s[MBSSIZE * 2]; /* %s */
wchar_t val_S[WCSSIZE * 2]; /* %lc, %ls, %C, %S */
}
TEX_SWSCANF_REC;
TMD_RECHEAD (SWSCANF);
/*----------------------------------------------------------------------*/
/* TOWCTRANS: wint_t towctrans (wint_t wc, wctrans_t desc) */
/*----------------------------------------------------------------------*/
typedef TIN_ISWCTYPE_REC TIN_TOWCTRANS_REC;
typedef TEX_ERRET_REC (wint_t) TEX_TOWCTRANS_REC;
TMD_RECHEAD (TOWCTRANS);
/*----------------------------------------------------------------------*/
/* TOW*ER: wint_t tow*er (wint_t wc) */
/*----------------------------------------------------------------------*/
TST_TOW_STRUCT (LOWER, lower);
TST_TOW_STRUCT (UPPER, upper);
/*----------------------------------------------------------------------*/
/* WCRTOMB: wchar_t wcrtomb (char *s, wchar_t wc, mbstate_t *ps) */
/*----------------------------------------------------------------------*/
typedef struct
{
int s_flg;
wchar_t wc;
int t_flg;
int t_init;
}
TIN_WCRTOMB_REC;
typedef struct
{
TMD_ERRET (wchar_t);
char s[MBSSIZE];
}
TEX_WCRTOMB_REC;
TMD_RECHEAD (WCRTOMB);
/*----------------------------------------------------------------------*/
/* WCSCAT: wchar_t *wcscat (wchar_t *ws1, wchar_t *ws2) */
/*----------------------------------------------------------------------*/
typedef struct
{
wchar_t ws1[WCSSIZE];
wchar_t ws2[WCSSIZE];
}
TIN_WCSCAT_REC;
typedef struct
{
TMD_ERRET (wchar_t *);
wchar_t ws[WCSSIZE];
}
TEX_WCSCAT_REC;
TMD_RECHEAD (WCSCAT);
/*----------------------------------------------------------------------*/
/* WCSCHR: wchar_t *wcschr (wchar_t *ws, wchar_t wc); */
/*----------------------------------------------------------------------*/
typedef struct
{
wchar_t ws[WCSSIZE];
wchar_t wc;
}
TIN_WCSCHR_REC;
typedef TEX_ERRET_REC (wchar_t *) TEX_WCSCHR_REC;
TMD_RECHEAD (WCSCHR);
/*----------------------------------------------------------------------*/
/* WCSCMP: int wcscmp (const wchar_t *ws1, const wchar_t *ws2) */
/*----------------------------------------------------------------------*/
typedef TIN_WCSCAT_REC TIN_WCSCMP_REC;
typedef TEX_ERRET_REC (int) TEX_WCSCMP_REC;
TMD_RECHEAD (WCSCMP);
/*----------------------------------------------------------------------*/
/* WCSCOLL: int wcscoll (const wchar_t *ws1, const wchar_t *ws2) */
/*----------------------------------------------------------------------*/
typedef TIN_WCSCMP_REC TIN_WCSCOLL_REC;
typedef struct
{
TMD_ERRET (int);
int cmp_flg;
}
TEX_WCSCOLL_REC;
TMD_RECHEAD (WCSCOLL);
/*----------------------------------------------------------------------*/
/* WCSCPY: wchar_t *wcscpy (wchar_t *ws1, const wchar_t *ws2) */
/*----------------------------------------------------------------------*/
typedef struct
{
wchar_t ws[WCSSIZE]; /* ws2: original string */
}
TIN_WCSCPY_REC;
typedef TEX_WCSCAT_REC TEX_WCSCPY_REC;
TMD_RECHEAD (WCSCPY);
/*----------------------------------------------------------------------*/
/* WCSCSPN: size_t wcscspn (const wchar_t *ws1, const wchar_t *ws2) */
/*----------------------------------------------------------------------*/
typedef TIN_WCSCAT_REC TIN_WCSCSPN_REC;
typedef TEX_ERRET_REC (size_t) TEX_WCSCSPN_REC;
TMD_RECHEAD (WCSCSPN);
/*----------------------------------------------------------------------*/
/* WCSLEN: size_t wcslen (const wchar_t *ws) */
/*----------------------------------------------------------------------*/
typedef TIN_WCSCPY_REC TIN_WCSLEN_REC;
typedef TEX_ERRET_REC (size_t) TEX_WCSLEN_REC;
TMD_RECHEAD (WCSLEN);
/*----------------------------------------------------------------------*/
/* WCSNCAT: wchar_t *wcsncat (wchar_t *ws1, const wchar_t *ws2, */
/* size_t n) */
/*----------------------------------------------------------------------*/
typedef struct
{
wchar_t ws1[WCSSIZE];
wchar_t ws2[WCSSIZE];
size_t n;
}
TIN_WCSNCAT_REC;
typedef TEX_WCSCAT_REC TEX_WCSNCAT_REC;
TMD_RECHEAD (WCSNCAT);
/*----------------------------------------------------------------------*/
/* WCSNCMP: int *wcsncmp (const wchar_t *ws1, const wchar_t *ws2, */
/* size_t n) */
/*----------------------------------------------------------------------*/
typedef TIN_WCSNCAT_REC TIN_WCSNCMP_REC;
typedef TEX_ERRET_REC (int) TEX_WCSNCMP_REC;
TMD_RECHEAD (WCSNCMP);
/*----------------------------------------------------------------------*/
/* WCSNCPY: wchar_t *wcsncpy (wchar_t *ws1, const wchar_t *ws2, */
/* size_t n) */
/*----------------------------------------------------------------------*/
typedef struct
{
wchar_t ws[WCSSIZE]; /* ws2: original string */
size_t n;
}
TIN_WCSNCPY_REC;
typedef TEX_WCSCPY_REC TEX_WCSNCPY_REC;
TMD_RECHEAD (WCSNCPY);
/*----------------------------------------------------------------------*/
/* WCSPBRK: wchar_t *wcspbrk (const wchar_t *ws1, const wchar_t *ws2) */
/*----------------------------------------------------------------------*/
typedef TIN_WCSCSPN_REC TIN_WCSPBRK_REC;
typedef struct
{
TMD_ERRET (wchar_t *);
wchar_t wc;
}
TEX_WCSPBRK_REC;
TMD_RECHEAD (WCSPBRK);
/*----------------------------------------------------------------------*/
/* WCSRTOMBS: size_t wcsrtombs (char *s, const wchar_t **ws, size_t n, */
/* mbstate_t *ps) */
/*----------------------------------------------------------------------*/
typedef struct
{
int s_flg;
int w_flg; /* don't need this */
wchar_t ws[WCSSIZE];
size_t n;
int t_flg;
int t_init;
}
TIN_WCSRTOMBS_REC;
typedef struct
{
TMD_ERRET (size_t);
char s[MBSSIZE];
}
TEX_WCSRTOMBS_REC;
TMD_RECHEAD (WCSRTOMBS);
/*----------------------------------------------------------------------*/
/* WCSSPN: size_t wcsspn (const wchar_t *ws1, const wchar_t *ws2) */
/*----------------------------------------------------------------------*/
typedef TIN_WCSCSPN_REC TIN_WCSSPN_REC;
typedef TEX_WCSCSPN_REC TEX_WCSSPN_REC;
TMD_RECHEAD (WCSSPN);
/*----------------------------------------------------------------------*/
/* WCSSTR: wchar_t *wcsstr (const wchar_t *ws1, const wchar_t *ws2) */
/*----------------------------------------------------------------------*/
typedef TIN_WCSCSPN_REC TIN_WCSSTR_REC;
typedef TEX_ERRET_REC (wchar_t *) TEX_WCSSTR_REC;
TMD_RECHEAD (WCSSTR);
/*----------------------------------------------------------------------*/
/* WCSTOD: double wcstod (const wchar_t *np, wchar_t **endp) */
/*----------------------------------------------------------------------*/
typedef struct
{
wchar_t np[WCSSIZE];
}
TIN_WCSTOD_REC;
typedef struct
{
TMD_ERRET (double);
double val;
wchar_t fwc;
}
TEX_WCSTOD_REC;
TMD_RECHEAD (WCSTOD);
/*----------------------------------------------------------------------*/
/* WCSTOK: wchar_t *wcstok (wchar_t *ws, const wchar_t *dlm, */
/* wchar_t **pt) */
/*----------------------------------------------------------------------*/
typedef struct
{
struct
{
int w_flg;
wchar_t ws[WCSSIZE];
wchar_t dt[WCSSIZE]; /* delimiter */
}
seq[WCSTOK_SEQNUM];
}
TIN_WCSTOK_REC;
typedef struct
{
struct
{
TMD_ERRET (wchar_t *);
wchar_t ws[WCSSIZE];
}
seq[WCSTOK_SEQNUM];
}
TEX_WCSTOK_REC;
TMD_RECHEAD (WCSTOK);
/*----------------------------------------------------------------------*/
/* WCSTOMBS: size_t wcstombs (char s, const wchar_t *ws, size_t n) */
/*----------------------------------------------------------------------*/
typedef struct
{
int s_flg;
int w_flg; /* currently we don't need it. */
wchar_t ws[WCSSIZE];
size_t n;
}
TIN_WCSTOMBS_REC;
typedef struct
{
TMD_ERRET (size_t);
char s[MBSSIZE];
}
TEX_WCSTOMBS_REC;
TMD_RECHEAD (WCSTOMBS);
/*----------------------------------------------------------------------*/
/* WCSWIDTH: int wcswidth (const wchar_t *ws, size_t n) */
/*----------------------------------------------------------------------*/
typedef TIN_WCSNCPY_REC TIN_WCSWIDTH_REC;
typedef TEX_ERRET_REC (int) TEX_WCSWIDTH_REC;
TMD_RECHEAD (WCSWIDTH);
/*----------------------------------------------------------------------*/
/* WCSXFRM: size_t wcsxfrm (wchar_t *ws1, const wchar_t *ws2, size_t n)*/
/*----------------------------------------------------------------------*/
typedef struct
{
wchar_t org1[WCSSIZE];
wchar_t org2[WCSSIZE];
int n1, n2;
}
TIN_WCSXFRM_REC;
typedef TEX_ERRET_REC (size_t) TEX_WCSXFRM_REC; /* only for org2[] */
TMD_RECHEAD (WCSXFRM);
/*----------------------------------------------------------------------*/
/* WCTOB: int wctob (wint_t wc) */
/*----------------------------------------------------------------------*/
typedef struct
{
wint_t wc;
}
TIN_WCTOB_REC;
typedef TEX_ERRET_REC (int) TEX_WCTOB_REC;
TMD_RECHEAD (WCTOB);
/*----------------------------------------------------------------------*/
/* WCTOMB: int wctomb (char *s, wchar_t wc) */
/*----------------------------------------------------------------------*/
typedef struct
{
int s_flg;
wchar_t wc;
}
TIN_WCTOMB_REC;
typedef struct
{
TMD_ERRET (int);
char s[MBSSIZE];
}
TEX_WCTOMB_REC;
TMD_RECHEAD (WCTOMB);
/*----------------------------------------------------------------------*/
/* WCTRANS: wctrans_t wctrans (const char *charclass) */
/*----------------------------------------------------------------------*/
typedef struct
{
char class[MBSSIZE];
}
TIN_WCTRANS_REC;
typedef TEX_ERRET_REC (wctrans_t) TEX_WCTRANS_REC;
TMD_RECHEAD (WCTRANS);
/*----------------------------------------------------------------------*/
/* WCTYPE: wctype_t wctype (const char *class) */
/*----------------------------------------------------------------------*/
typedef TIN_WCTRANS_REC TIN_WCTYPE_REC;
typedef TEX_ERRET_REC (wctype_t) TEX_WCTYPE_REC;
TMD_RECHEAD (WCTYPE);
/*----------------------------------------------------------------------*/
/* WCWIDTH: int wcwidth (wchar_t wc) */
/*----------------------------------------------------------------------*/
typedef struct
{
wchar_t wc;
}
TIN_WCWIDTH_REC;
typedef TEX_ERRET_REC (int) TEX_WCWIDTH_REC;
TMD_RECHEAD (WCWIDTH);
#endif /* TST_TYPES_H */