]> git.ipfire.org Git - thirdparty/glibc.git/blame - wcsmbs/tst-btowc.c
Update copyright dates with scripts/update-copyrights.
[thirdparty/glibc.git] / wcsmbs / tst-btowc.c
CommitLineData
b168057a 1/* Copyright (C) 2000-2015 Free Software Foundation, Inc.
0d69b1ac
UD
2 This file is part of the GNU C Library.
3 Contributed by Ulrich Drepper <drepper@redhat.com>, 2000.
4
5 The GNU C Library is free software; you can redistribute it and/or
41bdb6e2
AJ
6 modify it under the terms of the GNU Lesser General Public
7 License as published by the Free Software Foundation; either
8 version 2.1 of the License, or (at your option) any later version.
0d69b1ac
UD
9
10 The GNU C Library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
41bdb6e2 13 Lesser General Public License for more details.
0d69b1ac 14
41bdb6e2 15 You should have received a copy of the GNU Lesser General Public
59ba27a6
PE
16 License along with the GNU C Library; if not, see
17 <http://www.gnu.org/licenses/>. */
0d69b1ac
UD
18
19#include <locale.h>
20#include <stdio.h>
21#include <wchar.h>
22
23
24/* Currently selected locale. */
25static const char *current_locale;
26
27
28/* Test which should succeed. */
29static int
30ok_test (int c, wint_t expwc)
31{
32 wint_t wc = btowc (c);
33
34 if (wc != expwc)
35 {
36 printf ("%s: btowc('%c') failed, returned L'\\x%x' instead of L'\\x%x'\n",
37 current_locale, c, wc, expwc);
38 return 1;
39 }
40
41 return 0;
42}
43
44/* Test which should fail. */
45static int
46fail_test (int c)
47{
48 wint_t wc = btowc (c);
49
50 if (wc != WEOF)
51 {
52 printf ("%s: btowc('%c') succeded, returned L'\\x%x' instead of WEOF\n",
53 current_locale, c, wc);
54 return 1;
55 }
56
57 return 0;
58}
59
60
61/* Test EOF handling. */
62static int
63eof_test (void)
64{
65 wint_t wc = btowc (EOF);
66 if (wc != WEOF)
67 {
68 printf ("%s: btowc(EOF) returned L'\\x%x', not WEOF\n",
69 current_locale, wc);
70 }
71
72 return 0;
73}
74
75
76/* Test the btowc() function for a few locales with known character sets. */
29955b5d
AS
77static int
78do_test (void)
0d69b1ac
UD
79{
80 int result = 0;
81
82 current_locale = setlocale (LC_ALL, "en_US.ANSI_X3.4-1968");
83 if (current_locale == NULL)
84 {
85 puts ("cannot set locale \"en_US.ANSI_X3.4-1968\"");
86 result = 1;
87 }
88 else
89 {
90 int c;
91
92 for (c = 0; c < 128; ++c)
93 result |= ok_test (c, c);
94
95 for (c = 128; c < 256; ++c)
96 result |= fail_test (c);
97
98 result |= eof_test ();
99 }
100
101 current_locale = setlocale (LC_ALL, "de_DE.ISO-8859-1");
102 if (current_locale == NULL)
103 {
104 puts ("cannot set locale \"de_DE.ISO-8859-1\"");
105 result = 1;
106 }
107 else
108 {
109 int c;
110
111 for (c = 0; c < 256; ++c)
112 result |= ok_test (c, c);
113
114 result |= eof_test ();
115 }
116
117 current_locale = setlocale (LC_ALL, "de_DE.UTF-8");
118 if (current_locale == NULL)
119 {
120 puts ("cannot set locale \"de_DE.UTF-8\"");
121 result = 1;
122 }
123 else
124 {
125 int c;
126
127 for (c = 0; c < 128; ++c)
128 result |= ok_test (c, c);
129
130 for (c = 128; c < 256; ++c)
131 result |= fail_test (c);
132
133 result |= eof_test ();
134 }
135
136 current_locale = setlocale (LC_ALL, "hr_HR.ISO-8859-2");
137 if (current_locale == NULL)
138 {
139 puts ("cannot set locale \"hr_HR.ISO-8859-2\"");
140 result = 1;
141 }
142 else
143 {
144 static const wint_t upper_half[] =
145 {
146 0x0104, 0x02D8, 0x0141, 0x00A4, 0x013D, 0x015A, 0x00A7, 0x00A8,
147 0x0160, 0x015E, 0x0164, 0x0179, 0x00AD, 0x017D, 0x017B, 0x00B0,
148 0x0105, 0x02DB, 0x0142, 0x00B4, 0x013E, 0x015B, 0x02C7, 0x00B8,
149 0x0161, 0x015F, 0x0165, 0x017A, 0x02DD, 0x017E, 0x017C, 0x0154,
150 0x00C1, 0x00C2, 0x0102, 0x00C4, 0x0139, 0x0106, 0x00C7, 0x010C,
151 0x00C9, 0x0118, 0x00CB, 0x011A, 0x00CD, 0x00CE, 0x010E, 0x0110,
152 0x0143, 0x0147, 0x00D3, 0x00D4, 0x0150, 0x00D6, 0x00D7, 0x0158,
153 0x016E, 0x00DA, 0x0170, 0x00DC, 0x00DD, 0x0162, 0x00DF, 0x0155,
154 0x00E1, 0x00E2, 0x0103, 0x00E4, 0x013A, 0x0107, 0x00E7, 0x010D,
155 0x00E9, 0x0119, 0x00EB, 0x011B, 0x00ED, 0x00EE, 0x010F, 0x0111,
156 0x0144, 0x0148, 0x00F3, 0x00F4, 0x0151, 0x00F6, 0x00F7, 0x0159,
157 0x016F, 0x00FA, 0x0171, 0x00FC, 0x00FD, 0x0163, 0x02D9
158 };
159 int c;
160
161 for (c = 0; c < 161; ++c)
162 result |= ok_test (c, c);
163
164 for (c = 161; c < 256; ++c)
165 result |= ok_test (c, upper_half[c - 161]);
166
167 result |= eof_test ();
168 }
169
170 if (result == 0)
171 puts ("all OK");
172
173 return result;
174}
29955b5d
AS
175
176#define TEST_FUNCTION do_test ()
177#include "../test-skeleton.c"