]> git.ipfire.org Git - thirdparty/glibc.git/blame - localedata/tst-digits.c
x86_64: Fix missing wcsncat function definition without multiarch (x86-64-v4)
[thirdparty/glibc.git] / localedata / tst-digits.c
CommitLineData
dff8da6b 1/* Copyright (C) 2000-2024 Free Software Foundation, Inc.
c1d835ce 2 This file is part of the GNU C Library.
c1d835ce
UD
3
4 The GNU C Library is free software; you can redistribute it and/or
41bdb6e2
AJ
5 modify it under the terms of the GNU Lesser General Public
6 License as published by the Free Software Foundation; either
7 version 2.1 of the License, or (at your option) any later version.
c1d835ce
UD
8
9 The GNU C Library is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
41bdb6e2 12 Lesser General Public License for more details.
c1d835ce 13
41bdb6e2 14 You should have received a copy of the GNU Lesser General Public
59ba27a6 15 License along with the GNU C Library; if not, see
5a82c748 16 <https://www.gnu.org/licenses/>. */
c1d835ce
UD
17
18#include <ctype.h>
2da34564 19#include <langinfo.h>
69c69fe1
UD
20#include <locale.h>
21#include <stdio.h>
03ae3c1e
AJ
22#include <stdlib.h>
23#include <string.h>
2da34564
UD
24#include <unistd.h>
25#include <wchar.h>
c1d835ce 26#include <wctype.h>
69c69fe1
UD
27#include <sys/types.h>
28
29
30#define ZERO "\xe2\x82\x80"
31#define ONE "\xe2\x82\x81"
32#define TWO "\xe2\x82\x82"
33#define THREE "\xe2\x82\x83"
34#define FOUR "\xe2\x82\x84"
35#define FIVE "\xe2\x82\x85"
36#define SIX "\xe2\x82\x86"
37#define SEVEN "\xe2\x82\x87"
38#define EIGHT "\xe2\x82\x88"
39#define NINE "\xe2\x82\x89"
40
41static struct printf_int_test
42{
43 int n;
44 const char *format;
45 const char *expected;
46} printf_int_tests[] =
47{
48 { 0, "%I'10d", " " ZERO },
49 { 1, "%I'10d", " " ONE },
50 { 2, "%I'10d", " " TWO },
51 { 3, "%I'10d", " " THREE },
52 { 4, "%I'10d", " " FOUR },
53 { 5, "%I'10d", " " FIVE },
54 { 6, "%I'10d", " " SIX },
55 { 7, "%I'10d", " " SEVEN },
56 { 8, "%I'10d", " " EIGHT },
57 { 9, "%I'10d", " " NINE },
58 { 11, "%I'10d", " " ONE ONE },
59 { 12, "%I'10d", " " ONE TWO },
60 { 123, "%I10d", " " ONE TWO THREE },
61 { 123, "%I'10d", " " ONE TWO THREE },
62 { 1234, "%I10d", ONE TWO THREE FOUR },
63 { 1234, "%I'10d", ONE "," TWO THREE FOUR },
64 { 12345, "%I'10d", ONE TWO "," THREE FOUR FIVE },
65 { 123456, "%I'10d", ONE TWO THREE "," FOUR FIVE SIX },
66 { 1234567, "%I'10d", ONE "," TWO THREE FOUR "," FIVE SIX SEVEN }
67};
d64a397a
UD
68#define nprintf_int_tests \
69 (sizeof (printf_int_tests) / sizeof (printf_int_tests[0]))
69c69fe1 70
2da34564
UD
71#define WZERO L"\x2080"
72#define WONE L"\x2081"
73#define WTWO L"\x2082"
74#define WTHREE L"\x2083"
75#define WFOUR L"\x2084"
76#define WFIVE L"\x2085"
77#define WSIX L"\x2086"
78#define WSEVEN L"\x2087"
79#define WEIGHT L"\x2088"
80#define WNINE L"\x2089"
81
82static struct wprintf_int_test
83{
84 int n;
85 const wchar_t *format;
86 const wchar_t *expected;
87} wprintf_int_tests[] =
88{
89 { 0, L"%I'10d", L" " WZERO },
90 { 1, L"%I'10d", L" " WONE },
91 { 2, L"%I'10d", L" " WTWO },
92 { 3, L"%I'10d", L" " WTHREE },
93 { 4, L"%I'10d", L" " WFOUR },
94 { 5, L"%I'10d", L" " WFIVE },
95 { 6, L"%I'10d", L" " WSIX },
96 { 7, L"%I'10d", L" " WSEVEN },
97 { 8, L"%I'10d", L" " WEIGHT },
98 { 9, L"%I'10d", L" " WNINE },
99 { 11, L"%I'10d", L" " WONE WONE },
100 { 12, L"%I'10d", L" " WONE WTWO },
101 { 123, L"%I10d", L" " WONE WTWO WTHREE },
102 { 123, L"%I'10d", L" " WONE WTWO WTHREE },
103 { 1234, L"%I10d", L" " WONE WTWO WTHREE WFOUR },
104 { 1234, L"%I'10d", L" " WONE L"," WTWO WTHREE WFOUR },
105 { 12345, L"%I'10d", L" " WONE WTWO L"," WTHREE WFOUR WFIVE },
106 { 123456, L"%I'10d", L" " WONE WTWO WTHREE L"," WFOUR WFIVE WSIX },
107 { 1234567, L"%I'10d", L" " WONE L"," WTWO WTHREE WFOUR L"," WFIVE WSIX WSEVEN }
108};
d64a397a
UD
109#define nwprintf_int_tests \
110 (sizeof (wprintf_int_tests) / sizeof (wprintf_int_tests[0]))
69c69fe1
UD
111
112
29955b5d
AS
113static int
114do_test (void)
69c69fe1
UD
115{
116 int cnt;
2da34564 117 int failures;
c1d835ce 118 int status;
69c69fe1
UD
119
120 if (setlocale (LC_ALL, "test7") == NULL)
121 {
122 puts ("cannot set locale `test7'");
123 exit (1);
124 }
2da34564 125 printf ("CODESET = \"%s\"\n", nl_langinfo (CODESET));
69c69fe1
UD
126
127 /* First: printf tests. */
2da34564 128 failures = 0;
d64a397a 129 for (cnt = 0; cnt < (int) nprintf_int_tests; ++cnt)
69c69fe1
UD
130 {
131 char buf[100];
132 ssize_t n;
133
134 n = snprintf (buf, sizeof buf, printf_int_tests[cnt].format,
135 printf_int_tests[cnt].n);
136
2da34564
UD
137 printf ("%3d: got \"%s\", expected \"%s\"",
138 cnt, buf, printf_int_tests[cnt].expected);
139
d64a397a 140 if (n != (ssize_t) strlen (printf_int_tests[cnt].expected)
69c69fe1
UD
141 || strcmp (buf, printf_int_tests[cnt].expected) != 0)
142 {
2da34564
UD
143 puts (" -> FAILED");
144 ++failures;
145 }
146 else
147 puts (" -> OK");
148 }
149
150 printf ("%d failures in printf tests\n", failures);
151 status = failures != 0;
152
153 /* wprintf tests. */
154 failures = 0;
d64a397a 155 for (cnt = 0; cnt < (int) nwprintf_int_tests; ++cnt)
2da34564
UD
156 {
157 wchar_t buf[100];
158 ssize_t n;
159
160 n = swprintf (buf, sizeof buf / sizeof (buf[0]),
161 wprintf_int_tests[cnt].format,
162 wprintf_int_tests[cnt].n);
163
164 printf ("%3d: got \"%ls\", expected \"%ls\"",
165 cnt, buf, wprintf_int_tests[cnt].expected);
166
d64a397a 167 if (n != (ssize_t) wcslen (wprintf_int_tests[cnt].expected)
2da34564
UD
168 || wcscmp (buf, wprintf_int_tests[cnt].expected) != 0)
169 {
170 puts (" -> FAILED");
c1d835ce 171 ++failures;
69c69fe1 172 }
2da34564
UD
173 else
174 puts (" -> OK");
69c69fe1
UD
175 }
176
2da34564 177 printf ("%d failures in wprintf tests\n", failures);
c1d835ce
UD
178 status = failures != 0;
179
382466e0 180 /* ctype tests. This makes sure that the multibyte character digit
c1d835ce 181 representations are not handle in this table. */
2da34564 182 failures = 0;
c1d835ce
UD
183 for (cnt = 0; cnt < 256; ++cnt)
184 if (cnt >= '0' && cnt <= '9')
185 {
186 if (! isdigit (cnt))
187 {
188 printf ("isdigit ('%c') == 0\n", cnt);
189 ++failures;
190 }
191 }
192 else
193 {
194 if (isdigit (cnt))
195 {
196 printf ("isdigit (%d) != 0\n", cnt);
197 ++failures;
198 }
199 }
200
2da34564 201 printf ("%d failures in ctype tests\n", failures);
c1d835ce
UD
202 status = failures != 0;
203
204 /* wctype tests. This makes sure the second set of digits is also
205 recorded. */
2da34564 206 failures = 0;
c1d835ce
UD
207 for (cnt = 0; cnt < 256; ++cnt)
208 if (cnt >= '0' && cnt <= '9')
209 {
210 if (! iswdigit (cnt))
211 {
212 printf ("iswdigit (L'%c') == 0\n", cnt);
213 ++failures;
214 }
215 }
216 else
217 {
218 if (iswdigit (cnt))
219 {
220 printf ("iswdigit (%d) != 0\n", cnt);
221 ++failures;
222 }
223 }
224
225 for (cnt = 0x2070; cnt < 0x2090; ++cnt)
226 if (cnt >= 0x2080 && cnt <= 0x2089)
227 {
228 if (! iswdigit (cnt))
229 {
230 printf ("iswdigit (U%04X) == 0\n", cnt);
231 ++failures;
232 }
233 }
234 else
235 {
236 if (iswdigit (cnt))
237 {
238 printf ("iswdigit (U%04X) != 0\n", cnt);
239 ++failures;
240 }
241 }
242
2da34564 243 printf ("%d failures in wctype tests\n", failures);
c1d835ce 244 status = failures != 0;
69c69fe1 245
c1d835ce 246 return status;
69c69fe1 247}
29955b5d
AS
248
249#define TEST_FUNCTION do_test ()
250#include "../test-skeleton.c"