diff options
Diffstat (limited to 'libio')
-rw-r--r-- | libio/tst-fgetwc.c | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/libio/tst-fgetwc.c b/libio/tst-fgetwc.c new file mode 100644 index 0000000000..9ccfeb1526 --- /dev/null +++ b/libio/tst-fgetwc.c @@ -0,0 +1,52 @@ +#include <locale.h> +#include <stdio.h> +#include <wchar.h> + + +static int +do_test (void) +{ + if (setlocale (LC_ALL, "de_DE.utf8") == NULL) + { + puts ("setlocale failed"); + return 1; + } + + if (setvbuf (stdin, NULL, _IONBF, 0) != 0) + { + puts ("setvbuf failed"); + return 1; + } + + wchar_t buf[100]; + size_t nbuf = 0; + wint_t c; + while ((c = fgetwc (stdin)) != WEOF) + buf[nbuf++] = c; + + if (ferror (stdin)) + { + puts ("error on stdin"); + return 1; + } + + const wchar_t expected[] = + { + 0x00000439, 0x00000446, 0x00000443, 0x0000043a, + 0x00000435, 0x0000043d, 0x0000000a, 0x00000071, + 0x00000077, 0x00000065, 0x00000072, 0x00000074, + 0x00000079, 0x0000000a + }; + + if (nbuf != sizeof (expected) / sizeof (expected[0]) + || wmemcmp (expected, buf, nbuf) != 0) + { + puts ("incorrect result"); + return 1; + } + + return 0; +} + +#define TEST_FUNCTION do_test () +#include "../test-skeleton.c" |