mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-19 19:40:06 +00:00
ec7956d922
(TST_DECL_VARS): Don't declare err_flg. (TST_GET_ERRET): Don't set err_flg. (TST_GET_ERRET_SEQ): Likewise. (TST_IF_RETURN): Don't use err_flg, check err_exp directly. * tests-mbwc/dat_swscanf.c: Don't set err_flg. * tests-mbwc/dat_iswalnum.c: Likewise. * tests-mbwc/dat_iswalpha.c: Likewise. * tests-mbwc/dat_iswcntrl.c: Likewise. * tests-mbwc/dat_iswctype.c: Likewise. * tests-mbwc/dat_iswdigit.c: Likewise. * tests-mbwc/dat_iswgraph.c: Likewise. * tests-mbwc/dat_iswlower.c: Likewise. * tests-mbwc/dat_iswprint.c: Likewise. * tests-mbwc/dat_iswpunct.c: Likewise. * tests-mbwc/dat_iswspace.c: Likewise. * tests-mbwc/dat_iswupper.c: Likewise. * tests-mbwc/dat_iswxdigit.c: Likewise. * tests-mbwc/dat_mblen.c: Likewise. * tests-mbwc/dat_mbrlen.c: Likewise. * tests-mbwc/dat_mbrtowc.c: Likewise. * tests-mbwc/dat_mbsrtowcs.c: Likewise. * tests-mbwc/dat_mbstowcs.c: Likewise. * tests-mbwc/dat_mbtowc.c: Likewise. * tests-mbwc/dat_strcoll.c: Likewise. * tests-mbwc/dat_strfmon.c: Likewise. * tests-mbwc/dat_strxfrm.c: Likewise. * tests-mbwc/dat_swscanf.c: Likewise. * tests-mbwc/dat_towctrans.c: Likewise. * tests-mbwc/dat_towlower.c: Likewise. * tests-mbwc/dat_towupper.c: Likewise. * tests-mbwc/dat_wcrtomb.c: Likewise. * tests-mbwc/dat_wcscat.c: Likewise. * tests-mbwc/dat_wcschr.c: Likewise. * tests-mbwc/dat_wcscmp.c: Likewise. * tests-mbwc/dat_wcscoll.c: Likewise. * tests-mbwc/dat_wcscpy.c: Likewise. * tests-mbwc/dat_wcscspn.c: Likewise. * tests-mbwc/dat_wcslen.c: Likewise. * tests-mbwc/dat_wcsncat.c: Likewise. * tests-mbwc/dat_wcsncmp.c: Likewise. * tests-mbwc/dat_wcsncpy.c: Likewise. * tests-mbwc/dat_wcspbrk.c: Likewise. * tests-mbwc/dat_wcsrtombs.c: Likewise. * tests-mbwc/dat_wcsspn.c: Likewise. * tests-mbwc/dat_wcsstr.c: Likewise. * tests-mbwc/dat_wcstod.c: Likewise. * tests-mbwc/dat_wcstok.c: Likewise. * tests-mbwc/dat_wcstombs.c: Likewise. * tests-mbwc/dat_wcswidth.c: Likewise. * tests-mbwc/dat_wcsxfrm.c: Likewise. * tests-mbwc/dat_wctob.c: Likewise. * tests-mbwc/dat_wctomb.c: Likewise. * tests-mbwc/dat_wctrans.c: Likewise. * tests-mbwc/dat_wctype.c: Likewise. * tests-mbwc/dat_wcwidth.c: Likewise. * tests-mbwc/dat_isw-funcs.h: Fix comment. 2000-08-18 Andreas Jaeger <aj@suse.de> * tests-mbwc/tst_funcs.h (TMD_ERRET): Don't declare err_flg. (TST_DECL_VARS): Don't declare err_flg. (TST_GET_ERRET): Don't set err_flg. (TST_GET_ERRET_SEQ): Likewise. (TST_IF_RETURN): Don't use err_flg, check err_exp directly. * tests-mbwc/dat_swscanf.c: Don't set err_flg. * tests-mbwc/dat_iswalnum.c: Likewise. * tests-mbwc/dat_iswalpha.c: Likewise. * tests-mbwc/dat_iswcntrl.c: Likewise. * tests-mbwc/dat_iswctype.c: Likewise. * tests-mbwc/dat_iswdigit.c: Likewise. * tests-mbwc/dat_iswgraph.c: Likewise. * tests-mbwc/dat_iswlower.c: Likewise. * tests-mbwc/dat_iswprint.c: Likewise. * tests-mbwc/dat_iswpunct.c: Likewise. * tests-mbwc/dat_iswspace.c: Likewise. * tests-mbwc/dat_iswupper.c: Likewise. * tests-mbwc/dat_iswxdigit.c: Likewise. * tests-mbwc/dat_mblen.c: Likewise. * tests-mbwc/dat_mbrlen.c: Likewise. * tests-mbwc/dat_mbrtowc.c: Likewise. * tests-mbwc/dat_mbsrtowcs.c: Likewise. * tests-mbwc/dat_mbstowcs.c: Likewise. * tests-mbwc/dat_mbtowc.c: Likewise. * tests-mbwc/dat_strcoll.c: Likewise. * tests-mbwc/dat_strfmon.c: Likewise. * tests-mbwc/dat_strxfrm.c: Likewise. * tests-mbwc/dat_swscanf.c: Likewise. * tests-mbwc/dat_towctrans.c: Likewise. * tests-mbwc/dat_towlower.c: Likewise. * tests-mbwc/dat_towupper.c: Likewise. * tests-mbwc/dat_wcrtomb.c: Likewise. * tests-mbwc/dat_wcscat.c: Likewise. * tests-mbwc/dat_wcschr.c: Likewise. * tests-mbwc/dat_wcscmp.c: Likewise. * tests-mbwc/dat_wcscoll.c: Likewise. * tests-mbwc/dat_wcscpy.c: Likewise. * tests-mbwc/dat_wcscspn.c: Likewise. * tests-mbwc/dat_wcslen.c: Likewise. * tests-mbwc/dat_wcsncat.c: Likewise. * tests-mbwc/dat_wcsncmp.c: Likewise. * tests-mbwc/dat_wcsncpy.c: Likewise. * tests-mbwc/dat_wcspbrk.c: Likewise. * tests-mbwc/dat_wcsrtombs.c: Likewise. * tests-mbwc/dat_wcsspn.c: Likewise. * tests-mbwc/dat_wcsstr.c: Likewise. * tests-mbwc/dat_wcstod.c: Likewise. * tests-mbwc/dat_wcstok.c: Likewise. * tests-mbwc/dat_wcstombs.c: Likewise. * tests-mbwc/dat_wcswidth.c: Likewise. * tests-mbwc/dat_wcsxfrm.c: Likewise. * tests-mbwc/dat_wctob.c: Likewise. * tests-mbwc/dat_wctomb.c: Likewise. * tests-mbwc/dat_wctrans.c: Likewise. * tests-mbwc/dat_wctype.c: Likewise. * tests-mbwc/dat_wcwidth.c: Likewise. * tests-mbwc/dat_isw-funcs.h: Fix comment.
272 lines
7.3 KiB
C
272 lines
7.3 KiB
C
/*
|
|
* TEST SUITE FOR MB/WC FUNCTIONS IN C LIBRARY
|
|
*
|
|
* FILE: tst_funcs.h
|
|
*
|
|
* Definitions of macros
|
|
*/
|
|
|
|
|
|
#ifndef TST_FUNCS_H
|
|
#define TST_FUNCS_H
|
|
|
|
#define C_SUCCESS 'S' /* test case test passed */
|
|
#define C_FAILURE 'F' /* test case failed */
|
|
#define C_IGNORED 'I' /* test case/result ignored (not tested) */
|
|
#define C_INVALID 'D' /* test data may be wrong */
|
|
#define C_LOCALES 'L' /* can't set locale (skip) */
|
|
|
|
|
|
extern int result (FILE * fp, char res, const char *func, const char *loc,
|
|
int rec_no, int seq_num, int case_no, const char *msg);
|
|
|
|
#define Result(C, S, E, M) \
|
|
result (fp, (C), (S), locale, rec+1, seq_num+1, (E), (M))
|
|
|
|
#define CASE_0 0
|
|
#define CASE_1 1
|
|
#define CASE_2 2
|
|
#define CASE_3 3
|
|
#define CASE_4 4
|
|
#define CASE_5 5
|
|
#define CASE_6 6
|
|
#define CASE_7 7
|
|
#define CASE_8 8
|
|
#define CASE_9 9
|
|
|
|
#define MS_PASSED "PASSED"
|
|
#define MS_SPACE " "
|
|
#define MS_FAILED " "
|
|
#define MS_NOTEST "NOTEST"
|
|
#define MS_ABORTU "ABEND0"
|
|
#define MS_ABORT "ABEND1"
|
|
|
|
#define MK_PASSED 0x00
|
|
#define MK_SPACE 0x01
|
|
#define MK_NOTEST 0x02
|
|
#define MK_ABORTU 0x04
|
|
#define MK_ABORT 0x08
|
|
|
|
|
|
|
|
/* ------------------ COMMON MACROS ------------------ */
|
|
|
|
#define TST_ABS(x) (((x) > 0) ? (x) : -(x))
|
|
|
|
#define TMD_ERRET(_type_) int err_val; \
|
|
int ret_flg; \
|
|
_type_ ret_val
|
|
|
|
#define TMD_RECHEAD(_FUNC_) \
|
|
\
|
|
typedef struct { \
|
|
TIN_##_FUNC_##_REC input; \
|
|
TEX_##_FUNC_##_REC expect; \
|
|
int is_last; \
|
|
} TST_##_FUNC_##_REC; \
|
|
typedef struct { \
|
|
TST_HEAD hd; \
|
|
TST_##_FUNC_##_REC rec[ MAX_LOC_TEST ]; \
|
|
} TST_##_FUNC_
|
|
|
|
#define TST_FTYP(func) tst_##func##_loc
|
|
#define TST_HEAD(func) tst_##func##_loc[ loc ].hd
|
|
#define TST_INPUT(func) tst_##func##_loc[ loc ].rec[ rec ].input
|
|
#define TST_EXPECT(func) tst_##func##_loc[ loc ].rec[ rec ].expect
|
|
#define TST_INPUT_SEQ(func) \
|
|
tst_##func##_loc[ loc ].rec[ rec ].input.seq[ seq_num ]
|
|
#define TST_EXPECT_SEQ(func) \
|
|
tst_##func##_loc[ loc ].rec[ rec ].expect.seq[ seq_num ]
|
|
#define TST_IS_LAST(func) \
|
|
tst_##func##_loc[ loc ].rec[ rec ].is_last
|
|
|
|
|
|
#define TST_DECL_VARS(_type_) \
|
|
int loc, rec, err_count = 0; \
|
|
int warn_count __attribute__ ((unused)); \
|
|
int func_id, seq_num = 0; \
|
|
const char *locale; \
|
|
int err_exp, ret_flg; \
|
|
int errno_save = 0; \
|
|
_type_ ret_exp; \
|
|
_type_ ret
|
|
|
|
#define TST_DO_TEST(o_func) \
|
|
for (loc = 0; strcmp (TST_HEAD (o_func).locale, TST_LOC_end); ++loc)
|
|
|
|
|
|
#define TST_HEAD_LOCALE(ofunc, s_func) \
|
|
func_id = TST_HEAD (ofunc).func_id; \
|
|
locale = TST_HEAD (ofunc).locale; \
|
|
if (setlocale (LC_ALL, locale) == NULL) \
|
|
{ \
|
|
fprintf (stderr, "Warning : can't set locale: %s\nskipping ...\n", \
|
|
locale); \
|
|
result (fp, C_LOCALES, s_func, locale, 0, 0, 0, "can't set locale"); \
|
|
continue; \
|
|
}
|
|
|
|
#define TST_DO_REC(ofunc) \
|
|
for (rec=0; !TST_IS_LAST (ofunc); ++rec)
|
|
|
|
#define TST_DO_SEQ(_count_) \
|
|
for (seq_num=0; seq_num < _count_; seq_num++)
|
|
|
|
#define TST_GET_ERRET(_ofunc_) \
|
|
err_exp = TST_EXPECT (_ofunc_).err_val; \
|
|
ret_flg = TST_EXPECT (_ofunc_).ret_flg; \
|
|
ret_exp = TST_EXPECT (_ofunc_).ret_val
|
|
|
|
#define TST_GET_ERRET_SEQ(_ofunc_) \
|
|
err_exp = TST_EXPECT_SEQ (_ofunc_).err_val; \
|
|
ret_flg = TST_EXPECT_SEQ (_ofunc_).ret_flg; \
|
|
ret_exp = TST_EXPECT_SEQ (_ofunc_).ret_val
|
|
|
|
#define TST_CLEAR_ERRNO \
|
|
errno = 0
|
|
|
|
#define TST_SAVE_ERRNO \
|
|
errno_save = errno
|
|
|
|
/* Test value of ret and of errno if it should have a value. */
|
|
#define TST_IF_RETURN(_s_func_) \
|
|
if (err_exp != 0) \
|
|
{ \
|
|
if (errno_save == err_exp) \
|
|
{ \
|
|
result (fp, C_SUCCESS, _s_func_, locale, rec+1, seq_num+1, 1, \
|
|
MS_PASSED); \
|
|
} \
|
|
else \
|
|
{ \
|
|
err_count++; \
|
|
result (fp, C_FAILURE, _s_func_, locale, rec+1, seq_num+1, 1, \
|
|
"the value of errno is different from an expected value"); \
|
|
} \
|
|
} \
|
|
\
|
|
if (ret_flg == 1) \
|
|
{ \
|
|
if (ret == ret_exp) \
|
|
{ \
|
|
result (fp, C_SUCCESS, _s_func_, locale, rec+1, seq_num+1, 2, \
|
|
MS_PASSED); \
|
|
} \
|
|
else \
|
|
{ \
|
|
err_count++; \
|
|
result (fp, C_FAILURE, _s_func_, locale, rec+1, seq_num+1, 2, \
|
|
"the return value is different from an expected value"); \
|
|
} \
|
|
} \
|
|
else
|
|
|
|
#define TEX_ERRET_REC(_type_) \
|
|
struct { \
|
|
TMD_ERRET (_type_); \
|
|
}
|
|
|
|
#define TEX_ERRET_REC_SEQ(_type_, _count_) \
|
|
struct { \
|
|
struct { \
|
|
TMD_ERRET (_type_); \
|
|
} seq[ _count_ ]; \
|
|
}
|
|
|
|
|
|
|
|
/* ------------------ FUNCTION: ISW*() ------------------- */
|
|
|
|
#define TST_ISW_STRUCT(_FUNC_, _func_) \
|
|
typedef \
|
|
struct { \
|
|
wint_t wc; \
|
|
} TIN_ISW##_FUNC_##_REC; \
|
|
typedef \
|
|
TEX_ERRET_REC (int) TEX_ISW##_FUNC_##_REC; \
|
|
TMD_RECHEAD (ISW##_FUNC_)
|
|
|
|
#define TST_FUNC_ISW(_FUNC_, _func_) \
|
|
int \
|
|
tst_isw##_func_ (FILE *fp, int debug_flg) \
|
|
{ \
|
|
TST_DECL_VARS(int); \
|
|
wint_t wc; \
|
|
TST_DO_TEST (isw##_func_) \
|
|
{ \
|
|
TST_HEAD_LOCALE (isw##_func_, S_ISW##_FUNC_); \
|
|
TST_DO_REC(isw##_func_) \
|
|
{ \
|
|
TST_GET_ERRET (isw##_func_); \
|
|
wc = TST_INPUT (isw##_func_).wc; \
|
|
ret = isw##_func_ (wc); \
|
|
if (debug_flg) \
|
|
{ \
|
|
fprintf (stdout, "isw*() [ %s : %d ] ret = %d\n", locale, \
|
|
rec+1, ret); \
|
|
} \
|
|
\
|
|
TST_IF_RETURN (S_ISW##_FUNC_) \
|
|
{ \
|
|
if (ret != 0) \
|
|
{ \
|
|
result (fp, C_SUCCESS, S_ISW##_FUNC_, locale, rec+1, \
|
|
seq_num+1, 3, MS_PASSED); \
|
|
} \
|
|
else \
|
|
{ \
|
|
err_count++; \
|
|
result (fp, C_FAILURE, S_ISW##_FUNC_, locale, rec+1, \
|
|
seq_num+1, 3, \
|
|
"the function returned 0, but should be non-zero"); \
|
|
} \
|
|
} \
|
|
} \
|
|
} \
|
|
\
|
|
return err_count; \
|
|
}
|
|
|
|
|
|
|
|
/* ------------------ FUNCTION: TOW*() ------------------ */
|
|
|
|
#define TST_TOW_STRUCT(_FUNC_, _func_) \
|
|
typedef \
|
|
struct { \
|
|
wint_t wc; \
|
|
} TIN_TOW##_FUNC_##_REC; \
|
|
typedef \
|
|
TEX_ERRET_REC (wint_t) TEX_TOW##_FUNC_##_REC; \
|
|
TMD_RECHEAD (TOW##_FUNC_)
|
|
|
|
#define TST_FUNC_TOW(_FUNC_, _func_) \
|
|
int \
|
|
tst_tow##_func_ (FILE *fp, int debug_flg) \
|
|
{ \
|
|
TST_DECL_VARS (wint_t); \
|
|
wint_t wc; \
|
|
TST_DO_TEST (tow##_func_) \
|
|
{ \
|
|
TST_HEAD_LOCALE (tow##_func_, S_TOW##_FUNC_); \
|
|
TST_DO_REC (tow##_func_) \
|
|
{ \
|
|
TST_GET_ERRET (tow##_func_); \
|
|
wc = TST_INPUT (tow##_func_).wc; \
|
|
ret = tow##_func_ (wc); \
|
|
if (debug_flg) \
|
|
{ \
|
|
fprintf (stdout, "tow*() [ %s : %d ] ret = 0x%x\n", \
|
|
locale, rec+1, ret); \
|
|
} \
|
|
\
|
|
TST_IF_RETURN (S_TOW##_FUNC_) { }; \
|
|
} \
|
|
} \
|
|
\
|
|
return err_count; \
|
|
}
|
|
|
|
|
|
#endif /* TST_FUNCS_H */
|