diff options
Diffstat (limited to 'stdio-common')
-rw-r--r-- | stdio-common/Makefile | 2 | ||||
-rw-r--r-- | stdio-common/tst-fphex-wide.c | 30 | ||||
-rw-r--r-- | stdio-common/tst-fphex.c | 60 |
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" |