about summary refs log tree commit diff
path: root/localedata/tests-mbwc/tst_strfmon.c
diff options
context:
space:
mode:
Diffstat (limited to 'localedata/tests-mbwc/tst_strfmon.c')
-rw-r--r--localedata/tests-mbwc/tst_strfmon.c68
1 files changed, 68 insertions, 0 deletions
diff --git a/localedata/tests-mbwc/tst_strfmon.c b/localedata/tests-mbwc/tst_strfmon.c
new file mode 100644
index 0000000000..8413f2cc51
--- /dev/null
+++ b/localedata/tests-mbwc/tst_strfmon.c
@@ -0,0 +1,68 @@
+/*
+  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);
+
+      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 = %d; \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;
+}