about summary refs log tree commit diff
path: root/stdio-common
diff options
context:
space:
mode:
Diffstat (limited to 'stdio-common')
-rw-r--r--stdio-common/Makefile2
-rw-r--r--stdio-common/tst-fphex-wide.c30
-rw-r--r--stdio-common/tst-fphex.c60
3 files changed, 73 insertions, 19 deletions
diff --git a/stdio-common/Makefile b/stdio-common/Makefile
index c8a136539a..266147e713 100644
--- a/stdio-common/Makefile
+++ b/stdio-common/Makefile
@@ -58,7 +58,7 @@ tests := tstscanf test_rdwr test-popen tstgetln test-fseek \
 	 tst-fwrite bug16 bug17 tst-swscanf tst-sprintf2 bug18 bug18a \
 	 bug19 bug19a tst-popen2 scanf13 scanf14 scanf15 bug20 bug21 bug22 \
 	 scanf16 scanf17 tst-setvbuf1 tst-grouping bug23 bug24 \
-	 bug-vfprintf-nargs tst-long-dbl-fphex
+	 bug-vfprintf-nargs tst-long-dbl-fphex tst-fphex-wide
 
 test-srcs = tst-unbputc tst-printf
 
diff --git a/stdio-common/tst-fphex-wide.c b/stdio-common/tst-fphex-wide.c
new file mode 100644
index 0000000000..2fd9f6ae3e
--- /dev/null
+++ b/stdio-common/tst-fphex-wide.c
@@ -0,0 +1,30 @@
+/* Test program for %a wprintf formats.
+   This file is part of the GNU C Library.
+   Copyright (C) 2012 Free Software Foundation, Inc.
+   Contributed by Marek Polacek <polacek@redhat.com>, 2012.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <wchar.h>
+
+#define STR_LEN wcslen
+#define SPRINT swprintf
+#define STR_CMP wcscmp
+#define CHAR_T wchar_t
+#define PRINT wprintf
+#define L_(Str)        L##Str
+#define L "l"
+
+#include "tst-fphex.c"
diff --git a/stdio-common/tst-fphex.c b/stdio-common/tst-fphex.c
index 212e4ed9ec..4465bfb81a 100644
--- a/stdio-common/tst-fphex.c
+++ b/stdio-common/tst-fphex.c
@@ -3,30 +3,52 @@
 #include <stdio.h>
 #include <string.h>
 
+#ifndef STR_LEN
+# define STR_LEN strlen
+#endif
+#ifndef STR_CMP
+# define STR_CMP strcmp
+#endif
+#ifndef SPRINT
+# define SPRINT snprintf
+#endif
+#ifndef CHAR_T
+# define CHAR_T char
+#endif
+#ifndef PRINT
+# define PRINT printf
+#endif
+#ifndef L_
+# define L_(Str) Str
+#endif
+#ifndef L
+# define L
+#endif
+
 struct testcase
 {
   double value;
-  const char *fmt;
-  const char *expect;
+  const CHAR_T *fmt;
+  const CHAR_T *expect;
 };
 
 static const struct testcase testcases[] =
   {
-    { 0x0.0030p+0, "%a",	"0x1.8p-11" },
-    { 0x0.0040p+0, "%a",	"0x1p-10" },
-    { 0x0.0030p+0, "%040a",	"0x00000000000000000000000000000001.8p-11" },
-    { 0x0.0040p+0, "%040a",	"0x0000000000000000000000000000000001p-10" },
-    { 0x0.0040p+0, "%40a",	"                                 0x1p-10" },
-    { 0x0.0040p+0, "%#40a",	"                                0x1.p-10" },
-    { 0x0.0040p+0, "%-40a",	"0x1p-10                                 " },
-    { 0x0.0040p+0, "%#-40a",	"0x1.p-10                                " },
-    { 0x0.0030p+0, "%040e",	"00000000000000000000000000007.324219e-04" },
-    { 0x0.0040p+0, "%040e",	"00000000000000000000000000009.765625e-04" },
+    { 0x0.0030p+0, L_("%a"),		L_("0x1.8p-11") },
+    { 0x0.0040p+0, L_("%a"),		L_("0x1p-10") },
+    { 0x0.0030p+0, L_("%040a"),		L_("0x00000000000000000000000000000001.8p-11") },
+    { 0x0.0040p+0, L_("%040a"),		L_("0x0000000000000000000000000000000001p-10") },
+    { 0x0.0040p+0, L_("%40a"),		L_("                                 0x1p-10") },
+    { 0x0.0040p+0, L_("%#40a"),		L_("                                0x1.p-10") },
+    { 0x0.0040p+0, L_("%-40a"),		L_("0x1p-10                                 ") },
+    { 0x0.0040p+0, L_("%#-40a"),	L_("0x1.p-10                                ") },
+    { 0x0.0030p+0, L_("%040e"),		L_("00000000000000000000000000007.324219e-04") },
+    { 0x0.0040p+0, L_("%040e"),		L_("00000000000000000000000000009.765625e-04") },
   };
 
 
 static int
-do_test (int argc, char **argv)
+do_test (void)
 {
   const struct testcase *t;
   int result = 0;
@@ -35,12 +57,13 @@ do_test (int argc, char **argv)
        t < &testcases[sizeof testcases / sizeof testcases[0]];
        ++t)
     {
-      char buf[1024];
-      int n = snprintf (buf, sizeof buf, t->fmt, t->value);
-      if (n != strlen (t->expect) || strcmp (buf, t->expect) != 0)
+      CHAR_T buf[1024];
+      int n = SPRINT (buf, sizeof buf / sizeof (buf[0]), t->fmt, t->value);
+      if (n != STR_LEN (t->expect) || STR_CMP (buf, t->expect) != 0)
 	{
-	  printf ("%s\tExpected \"%s\" (%Zu)\n\tGot      \"%s\" (%d, %Zu)\n",
-		  t->fmt, t->expect, strlen (t->expect), buf, n, strlen (buf));
+	  PRINT (L_("%" L "s\tExpected \"%" L "s\" (%Zu)\n\tGot      \"%" L
+		 "s\" (%d, %Zu)\n"), t->fmt, t->expect, STR_LEN (t->expect),
+		 buf, n, STR_LEN (buf));
 	  result = 1;
 	}
     }
@@ -48,4 +71,5 @@ do_test (int argc, char **argv)
   return result;
 }
 
+#define TEST_FUNCTION do_test ()
 #include "../test-skeleton.c"