diff options
-rw-r--r-- | localedata/tests-mbwc/dat_mbrlen.c | 158 | ||||
-rw-r--r-- | localedata/tests-mbwc/tst_mbrlen.c | 81 |
2 files changed, 239 insertions, 0 deletions
diff --git a/localedata/tests-mbwc/dat_mbrlen.c b/localedata/tests-mbwc/dat_mbrlen.c new file mode 100644 index 0000000000..f1f9e15294 --- /dev/null +++ b/localedata/tests-mbwc/dat_mbrlen.c @@ -0,0 +1,158 @@ +/* + * TEST SUITE FOR MB/WC FUNCTIONS IN C LIBRARY + * + * FILE: dat_mbrlen.c + * + * MBRLEN: size_t mbrlen (const char *s, size_t n, mbstate_t *ps); + */ + +/* + * NOTE: + * (1) A mbstate object is initialized for + * every new data record by the test program. + * + * (2) USE_MBCURMAX is defined as a value of 99. + * + */ + + +TST_MBRLEN tst_mbrlen_loc [] = { + { + { Tmbrlen, TST_LOC_de }, + { + { /*----------------- #01 -----------------*/ + { + { + { 1, "", 0, 0, 0 }, + { 1, "", 1, 0, 0 }, + { 1, "\300", USE_MBCURMAX, 0, 0 }, + } + }, + { + { + { 1, 0, 1, 0, }, + { 1, 0, 1, 0, }, + { 1, 0, 1, 1, }, + } + } + }, + { /*----------------- #02 -----------------*/ + { + { + { 1, "\300\001", 0, 0, 0 }, + { 1, "\300\001", 1, 0, 0 }, + { 1, "\317\001", USE_MBCURMAX, 0, 0 }, + } + }, + { + { + { 1, 0, 1, 0, }, + { 1, 0, 1, 1, }, + { 1, 0, 1, 1, }, + } + } + }, + { is_last: 1 } + } + }, + { + { Tmbrlen, TST_LOC_enUS }, + { + { /*----------------- #01 -----------------*/ + { + { + { 1, "A", 0, 0, 0 }, + { 1, "A", 1, 0, 0 }, + { 1, "A", USE_MBCURMAX, 0, 0 }, + } + }, + { + { + { 1, 0, 1, 0, }, + { 1, 0, 1, 1, }, + { 1, 0, 1, 1, }, + } + } + }, + { /*----------------- #02 -----------------*/ + { + { + { 1, "\317\001", 0, 1, 0 }, + { 1, "\317\001", 1, 1, 0 }, + { 1, "\317\001", USE_MBCURMAX, 1, 0 }, + } + }, + { + { + { 1, 0, 1, 0, }, + /* <WAIVER_? x 2> assuming ascii */ + { 1, EILSEQ, 1, -1, }, + /* <WAIVER_? x 2> assuming ascii */ + { 1, EILSEQ, 1, -1, }, + } + } + }, + { is_last: 1 } + } + }, + { + { Tmbrlen, TST_LOC_eucJP }, + { + { /*----------------- #01 -----------------*/ + { + { + { 1, "\317\302", 1, 0, 0 }, + { 0, "", 0, 0, 0 }, + { 1, "\317\302", USE_MBCURMAX, 0, 0 }, + } + }, + { + { + { 1, 0, 1, -2, }, + /* <WAIVER_?> returned -2 */ + { 1, 0, 1, 0, }, + /* <WAIVER_?> returned 1 */ + { 1, 0, 1, 2, }, + } + } + }, + { /*----------------- #02 -----------------*/ + { + { + { 1, "\317", 1, 1, 0 }, + { 1, "\302", 1, 1, 0 }, + { 1, "\317\302", USE_MBCURMAX, 0, 0 }, + } + }, + { + { + { 1, 0, 1, -2, }, + /* <WAIVER_?> returned -2 */ + { 1, 0, 1, +2, }, + { 1, 0, 1, 2, }, + } + } + }, + { /*----------------- #03 -----------------*/ + { + { + { 1, "\216\217", 0, 0, 0 }, + { 1, "\216\217", 1, 0, 0 }, + { 1, "\216\217", USE_MBCURMAX, 0, 0 }, + } + }, + { + { + { 1, 0, 1, 0, }, + { 1, 0, 1, -2, }, + { 1, EILSEQ, 1, -1, }, + } + } + }, + { is_last: 1 } + } + }, + { + { Tmbrlen, TST_LOC_end } + } +}; diff --git a/localedata/tests-mbwc/tst_mbrlen.c b/localedata/tests-mbwc/tst_mbrlen.c new file mode 100644 index 0000000000..a067acb266 --- /dev/null +++ b/localedata/tests-mbwc/tst_mbrlen.c @@ -0,0 +1,81 @@ +/* + MBRLEN: size_t mbrlen (char *s, size_t n, mbstate_t *ps) +*/ + +#define TST_FUNCTION mbrlen + +#include "tsp_common.c" +#include "dat_mbrlen.c" + + +int +tst_mbrlen (FILE * fp, int debug_flg) +{ + TST_DECL_VARS (size_t); + char s_flg; + const char *s_in; + size_t n; + char t_flg; + char t_ini; + static mbstate_t s = { 0 }; + mbstate_t *ps; + + TST_DO_TEST (mbrlen) + { + TST_HEAD_LOCALE (mbrlen, S_MBRLEN); + TST_DO_REC (mbrlen) + { + if (mbrlen (NULL, 0, &s) != 0) + { + err_count++; + Result (C_FAILURE, S_MBRLEN, CASE_3, + "Initialization (external mbstate object) failed " + "- skipped this test case."); + continue; + } + + TST_DO_SEQ (MBRLEN_SEQNUM) + { + TST_GET_ERRET_SEQ (mbrlen); + s_flg = TST_INPUT_SEQ (mbrlen).s_flg; + s_in = TST_INPUT_SEQ (mbrlen).s; + n = TST_INPUT_SEQ (mbrlen).n; + t_flg = TST_INPUT_SEQ (mbrlen).t_flg; + t_ini = TST_INPUT_SEQ (mbrlen).t_init; + if (s_flg == 0) + { + s_in = NULL; + } + + if (n == USE_MBCURMAX) /* rewrite tst_mblen() like this */ + { + n = MB_CUR_MAX; + } + + ps = (t_flg == 0) ? NULL : &s; +#if 0 + if (t_ini != 0) + { + memset (&s, 0, sizeof (s)); + } +#endif + TST_CLEAR_ERRNO; + ret = mbrlen (s_in, n, ps); + TST_SAVE_ERRNO; + + if (debug_flg) + { + fprintf (stdout, "mbrlen() [ %s : %d : %d ] ret = %d\n", + locale, rec + 1, seq_num + 1, ret); + fprintf (stdout, " errno = %d\n", errno_save); + } + + TST_IF_RETURN (S_MBRLEN) + { + }; + } + } + } + + return err_count; +} |