diff options
Diffstat (limited to 'test/locale-mbwc/tst_mbrlen.c')
-rw-r--r-- | test/locale-mbwc/tst_mbrlen.c | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/test/locale-mbwc/tst_mbrlen.c b/test/locale-mbwc/tst_mbrlen.c new file mode 100644 index 000000000..b8681b721 --- /dev/null +++ b/test/locale-mbwc/tst_mbrlen.c @@ -0,0 +1,82 @@ +/* + 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 (t_ini != 0) + { + memset (&s, 0, sizeof (s)); + mbrlen (NULL, 0, NULL); + } + + TST_CLEAR_ERRNO; + ret = mbrlen (s_in, n, ps); + TST_SAVE_ERRNO; + + if (debug_flg) + { + fprintf (stdout, "mbrlen() [ %s : %d : %d ] ret = %zd\n", + locale, rec + 1, seq_num + 1, ret); + fprintf (stdout, " errno = %d\n", errno_save); + } + + TST_IF_RETURN (S_MBRLEN) + { + }; + } + } + } + + return err_count; +} |