summaryrefslogtreecommitdiff
path: root/src/regress/lib/libc
diff options
context:
space:
mode:
authoryasuoka <>2025-05-25 05:32:45 +0000
committeryasuoka <>2025-05-25 05:32:45 +0000
commit361b515d590f3c2f44c93914f1107b897a05aa3e (patch)
tree8fa9caf9f99d527156e0ee620f5a5f198f4926b6 /src/regress/lib/libc
parent6a41ccee812146a27699cba4ac3ed640842bab01 (diff)
downloadopenbsd-361b515d590f3c2f44c93914f1107b897a05aa3e.tar.gz
openbsd-361b515d590f3c2f44c93914f1107b897a05aa3e.tar.bz2
openbsd-361b515d590f3c2f44c93914f1107b897a05aa3e.zip
Add test for ungetwc().
Diffstat (limited to 'src/regress/lib/libc')
-rw-r--r--src/regress/lib/libc/stdio/Makefile5
-rw-r--r--src/regress/lib/libc/stdio/test_ungetwc.c90
2 files changed, 94 insertions, 1 deletions
diff --git a/src/regress/lib/libc/stdio/Makefile b/src/regress/lib/libc/stdio/Makefile
index 3f2c2bab8e..fa5ebabee1 100644
--- a/src/regress/lib/libc/stdio/Makefile
+++ b/src/regress/lib/libc/stdio/Makefile
@@ -1,8 +1,11 @@
1# $OpenBSD: Makefile,v 1.2 2025/05/25 00:20:54 yasuoka Exp $ 1# $OpenBSD: Makefile,v 1.3 2025/05/25 05:32:45 yasuoka Exp $
2 2
3PROGS= test_fflush 3PROGS= test_fflush
4CLEANFILES= test_fflush.tmp 4CLEANFILES= test_fflush.tmp
5 5
6PROGS+= test_ungetwc
7CLEANFILES+= test_ungetwc.tmp
8
6PROGS+= test___freading 9PROGS+= test___freading
7CLEANFILES+= test___freading.tmp 10CLEANFILES+= test___freading.tmp
8 11
diff --git a/src/regress/lib/libc/stdio/test_ungetwc.c b/src/regress/lib/libc/stdio/test_ungetwc.c
new file mode 100644
index 0000000000..bb4e853020
--- /dev/null
+++ b/src/regress/lib/libc/stdio/test_ungetwc.c
@@ -0,0 +1,90 @@
1/* $OpenBSD: test_ungetwc.c,v 1.1 2025/05/25 05:32:45 yasuoka Exp $ */
2
3/*
4 * Copyright (c) 2025 YASUOKA Masahiko <yasuoka@yasuoka.net>
5 *
6 * Permission to use, copy, modify, and distribute this software for any
7 * purpose with or without fee is hereby granted, provided that the above
8 * copyright notice and this permission notice appear in all copies.
9 *
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17 */
18
19#include <assert.h>
20#include <stdio.h>
21#include <stdlib.h>
22#include <string.h>
23#include <unistd.h>
24#include <locale.h>
25#include <wchar.h>
26
27/* we use assert() */
28#undef NDEBUG
29
30#define TMPFILENAME "test_ungetwc.tmp"
31
32void setupw(void);
33void test_fflush_ungetwc0(void);
34
35void
36setupw(void)
37{
38 FILE *fp;
39
40 /* common setup */
41 unlink(TMPFILENAME);
42 fp = fopen(TMPFILENAME, "w+");
43 assert(fp != NULL);
44 /* Konnitiwa Sekai(in Kanji) */
45 fputws(L"\u3053\u3093\u306b\u3061\u308f \u4e16\u754c\n", fp);
46 fclose(fp);
47}
48
49/* fflush work with reading file and seekable + ungetwc */
50void
51test_fflush_ungetwc0(void)
52{
53 int r;
54 wchar_t buf[80];
55 FILE *fp;
56
57 setupw();
58
59 fp = fopen(TMPFILENAME, "r");
60
61 assert(fp != NULL);
62 assert(fgetwc(fp) == L'\u3053'); /* Ko */
63 assert(fgetwc(fp) == L'\u3093'); /* N */
64 assert(fgetwc(fp) == L'\u306b'); /* Ni */
65 assert(fgetwc(fp) == L'\u3061'); /* Ti */
66 assert(fgetwc(fp) == L'\u308f'); /* Wa */
67
68 /* push 263A(smile) back */
69 assert(ungetwc(L'\u263a', fp));
70
71 /* we support 1 push back wchar_t */
72 assert(fgetwc(fp) == L'\u263a');
73
74 /* can read reset of that */
75 fgetws(buf, sizeof(buf), fp);
76 assert(wcscmp(buf, L" \u4e16\u754c\n") == 0);
77
78 r = fclose(fp);
79 assert(r == 0);
80}
81
82int
83main(int argc, char *argv[])
84{
85 setlocale(LC_ALL, "C.UTF-8");
86
87 test_fflush_ungetwc0();
88
89 exit(0);
90}