diff options
Diffstat (limited to 'test/locale-mbwc/tst_strfmon.c')
-rw-r--r-- | test/locale-mbwc/tst_strfmon.c | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/test/locale-mbwc/tst_strfmon.c b/test/locale-mbwc/tst_strfmon.c new file mode 100644 index 000000000..88e93167d --- /dev/null +++ b/test/locale-mbwc/tst_strfmon.c @@ -0,0 +1,74 @@ +/* + STRFMON: size_t strfmon (char *buf, size_t nbyte, const char *fmt, ...) +*/ + +#define TST_FUNCTION strfmon + +#include "tsp_common.c" +#include "dat_strfmon.c" +#include <monetary.h> + +int +tst_strfmon (FILE * fp, int debug_flg) +{ + TST_DECL_VARS (size_t); + char buf[MONSIZE], *mon; + size_t nbt; + char *fmt; + double val; + + TST_DO_TEST (strfmon) + { + TST_HEAD_LOCALE (strfmon, S_STRFMON); + TST_DO_REC (strfmon) + { + TST_GET_ERRET (strfmon); + nbt = TST_INPUT (strfmon).nbytes; + fmt = TST_INPUT (strfmon).fmt; + val = TST_INPUT (strfmon).val; + memset (buf, 0, MONSIZE); + if (nbt > MONSIZE) + { + err_count++; + Result (C_FAILURE, S_STRFMON, CASE_3, "buffer too small in test"); + continue; + } + + TST_CLEAR_ERRNO; + ret = strfmon (buf, nbt, fmt, val, val, val); + TST_SAVE_ERRNO; + + if (debug_flg) /* seems fprintf doesn't update the errno */ + { + fprintf (stdout, "strfmon() [ %s : %d ]\n", locale, rec + 1); + fprintf (stdout, " : err = %d | %s\n", errno_save, + strerror (errno)); + fprintf (stdout, " : ret = %zd; \t fmt = |%s|\n", ret, fmt); + fprintf (stdout, " : buf = |%s|\n\n", buf); + } + + TST_IF_RETURN (S_STRFMON) + { + }; + if (errno != 0 || ret == -1) + { + continue; + } + + mon = TST_EXPECT (strfmon).mon; + + if (!strcmp (buf, mon)) + { + Result (C_SUCCESS, S_STRFMON, CASE_3, MS_PASSED); + } + else + { + err_count++; + Result (C_FAILURE, S_STRFMON, CASE_3, "the formatted string is " + "different from an expected result"); + } + } + } + + return err_count; +} |