summaryrefslogtreecommitdiff
path: root/test/locale-mbwc/tst_strfmon.c
diff options
context:
space:
mode:
Diffstat (limited to 'test/locale-mbwc/tst_strfmon.c')
-rw-r--r--test/locale-mbwc/tst_strfmon.c74
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;
+}