Tests for mbrtowc.
authoraj <aj>
Thu, 29 Jun 2000 09:53:58 +0000 (09:53 +0000)
committeraj <aj>
Thu, 29 Jun 2000 09:53:58 +0000 (09:53 +0000)
localedata/tests-mbwc/dat_mbrtowc.c [new file with mode: 0644]
localedata/tests-mbwc/tst_mbrtowc.c [new file with mode: 0644]

diff --git a/localedata/tests-mbwc/dat_mbrtowc.c b/localedata/tests-mbwc/dat_mbrtowc.c
new file mode 100644 (file)
index 0000000..e879482
--- /dev/null
@@ -0,0 +1,140 @@
+/*
+ *  TEST SUITE FOR MB/WC FUNCTIONS IN C LIBRARY
+ *
+ *      FILE:  dat_mbrtowc.c
+ *
+ *      MBTOWC:  size_t mbrtowc (wchar_t *pwc, char *s, size_t n,
+ *                               mbstate_t *ps);
+ */
+
+#include <limits.h>
+
+/* Note:
+       assumes  en_US = en_US.ascii
+*/
+
+
+
+
+TST_MBRTOWC tst_mbrtowc_loc [] = {
+  {
+    { Tmbrtowc, TST_LOC_de },
+    {
+      { /*----------------- #01 -----------------*/
+       {
+         {
+           { 1, 1, "ÄÖÜ",         1,            0, 0 },
+           { 1, 1, "ÄÖÜ",         2,            0, 0 },
+           { 1, 1, "ÄÖÜ",         USE_MBCURMAX, 0, 0 },
+         }
+       },
+       {
+         {
+           { 0,          0,  1,  1,   0x00C4 },
+           { 0,          0,  1,  1,   0x00C4 },
+           { 0,          0,  1,  1,   0x00C4 },
+         }
+       }
+      },
+      { /*----------------- #02 -----------------*/
+       {
+         {
+           { 1, 1, "ÄÖÜ",          1,            0, 0 },
+           { 1, 1, "ÄÖÜ",          2,            0, 0 },
+           { 1, 1, "ÄÖÜ",          USE_MBCURMAX, 0, 0 },
+         }
+       },
+       {
+         {
+           { 0,          0,  1,  1,   0x00C4 },
+           { 0,          0,  1,  1,   0x00C4 },
+           { 0,          0,  1,  1,   0x00C4 },
+         }
+       }
+      },
+      { is_last: 1 }
+    }
+  },
+#if 0
+  /* XXX: These tests don't make sense to me.  */
+  {
+    { Tmbrtowc, TST_LOC_enUS },
+    {
+      { /*----------------- #01 -----------------*/
+       {
+         {
+           { 1, 1, "ÄÖÜ",          1,            0, 0 },
+           { 1, 1, "ÄÖÜ",          2,            0, 0 },
+           { 1, 1, "ÄÖÜ",          USE_MBCURMAX, 0, 0 },
+         }
+       },
+       {
+         {
+           { 0,          0,  1,  1,   0x00C4 },
+           { 0,          0,  1,  1,   0x00C4 },
+           { 0,          0,  1,  1,   0x00C4 },
+         }
+       }
+      },
+      { /*----------------- #02 -----------------*/
+       {
+         {
+           { 1, 1, "ÄÖÜ",          1,            0, 0 },
+           { 1, 1, "ÄÖÜ",          2,            0, 0 },
+           { 1, 1, "ÄÖÜ",          USE_MBCURMAX, 0, 0 },
+         }
+       },
+       {
+         {
+           { 0,          0,  1,  1,   0x00C4 },
+           { 0,          0,  1,  1,   0x00C4 },
+           { 0,          0,  1,  1,   0x00C4 },
+         }
+       }
+      },
+      { is_last: 1 }
+    }
+  },
+  {
+    { Tmbrtowc, TST_LOC_eucJP },
+    {
+      { /*----------------- #01 -----------------*/
+       {
+         {
+           { 1, 1, "ÄÖÜ",          1,            0, 0 },
+           { 1, 1, "ÄÖÜ",          2,            0, 0 },
+           { 1, 1, "ÄÖÜ",          USE_MBCURMAX, 0, 0 },
+         }
+       },
+       {
+         {
+           { 0,          0,  1,  1,   0x00C4 },
+           { 0,          0,  1,  1,   0x00C4 },
+           { 0,          0,  1,  1,   0x00C4 },
+         }
+       }
+      },
+      { /*----------------- #02 -----------------*/
+       {
+         {
+           { 1, 1, "ÄÖÜ",          1,            0, 0 },
+           { 1, 1, "ÄÖÜ",          2,            0, 0 },
+           { 1, 1, "ÄÖÜ",          USE_MBCURMAX, 0, 0 },
+         }
+       },
+       {
+         {
+           { 0,          0,  1,  1,   0x00C4 },
+           { 0,          0,  1,  1,   0x00C4 },
+           { 0,          0,  1,  1,   0x00C4 },
+         }
+       }
+      },
+      { is_last: 1 }
+    }
+  },
+#endif
+  {
+    { Tmbrtowc, TST_LOC_end }
+  }
+};
diff --git a/localedata/tests-mbwc/tst_mbrtowc.c b/localedata/tests-mbwc/tst_mbrtowc.c
new file mode 100644 (file)
index 0000000..8b8c07f
--- /dev/null
@@ -0,0 +1,103 @@
+/*
+  MBRTOWC: size_t mbrtowc (wchar_t *pwc, const char *s, size_t n,
+                          mbstate_t *ps)
+*/
+
+#define TST_FUNCTION mbrtowc
+
+#include "tsp_common.c"
+#include "dat_mbrtowc.c"
+
+
+int
+tst_mbrtowc (FILE * fp, int debug_flg)
+{
+  TST_DECL_VARS (size_t);
+  char w_flg, s_flg;
+  char *s;
+  size_t n;
+  char t_flg, t_ini;
+  static mbstate_t t = { 0 };
+  mbstate_t *pt;
+  wchar_t wc, *pwc, wc_ex;
+
+  TST_DO_TEST (mbrtowc)
+  {
+    TST_HEAD_LOCALE (mbrtowc, S_MBRTOWC);
+    TST_DO_REC (mbrtowc)
+    {
+      if (mbrtowc (NULL, "", 0, &t) != 0)
+       {
+         err_count++;
+         Result (C_FAILURE, S_MBRTOWC, CASE_3,
+                 "Initialization failed - skipping this test case.");
+         continue;
+       }
+
+      TST_DO_SEQ (MBRTOWC_SEQNUM)
+      {
+       TST_GET_ERRET_SEQ (mbrtowc);
+       w_flg = TST_INPUT_SEQ (mbrtowc).w_flg;
+       s_flg = TST_INPUT_SEQ (mbrtowc).s_flg;
+       s = TST_INPUT_SEQ (mbrtowc).s;
+       n = TST_INPUT_SEQ (mbrtowc).n;
+       t_flg = TST_INPUT_SEQ (mbrtowc).t_flg;
+       t_ini = TST_INPUT_SEQ (mbrtowc).t_init;
+       pwc = (w_flg == 0) ? NULL : &wc;
+
+       if (s_flg == 0)
+         {
+           s = NULL;
+         }
+
+       if (n == USE_MBCURMAX)
+         {
+           n = MB_CUR_MAX;
+         }
+
+       pt = (t_flg == 0) ? NULL : &t;
+#if 0
+       if (t_ini != 0)
+         {
+           memset (&t, 0, sizeof (t));
+         }
+#endif
+       TST_CLEAR_ERRNO;
+       ret = mbrtowc (pwc, s, n, pt);
+       TST_SAVE_ERRNO;
+
+       if (debug_flg)
+         {
+           fprintf (stdout, "mbrtowc() [ %s : %d : %d ] ret = %d\n",
+                    locale, rec + 1, seq_num + 1, ret);
+           fprintf (stdout, "                      errno = %hd\n",
+                    errno_save);
+         }
+
+       TST_IF_RETURN (S_MBRTOWC)
+       {
+       };
+
+       if (pwc == NULL || s == NULL || ret == (size_t) - 1
+           || ret == (size_t) - 2)
+         {
+           continue;
+         }
+
+       wc_ex = TST_EXPECT_SEQ (mbrtowc).wc;
+       if (wc_ex == wc)
+         {
+           Result (C_SUCCESS, S_MBRTOWC, CASE_4, MS_PASSED);
+         }
+       else
+         {
+           err_count++;
+           Result (C_FAILURE, S_MBRTOWC, CASE_4,
+                   "converted wc is different from an expected wc");
+         }
+      }
+    }
+  }
+
+  return err_count;
+}