1 /* Test that C/POSIX and C.UTF-8 are consistent.
2 Copyright (C) 2022 Free Software Foundation, Inc.
3 This file is part of the GNU C Library.
4
5 The GNU C Library is free software; you can redistribute it and/or
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.
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
13 Lesser General Public License for more details.
14
15 You should have received a copy of the GNU Lesser General Public
16 License along with the GNU C Library; if not, see
17 <https://www.gnu.org/licenses/>. */
18
19 #include <langinfo.h>
20 #include <locale.h>
21 #include <stdbool.h>
22 #include <stdio.h>
23 #include <support/check.h>
24
25 /* Initialized by do_test using newlocale. */
26 static locale_t c_utf8;
27
28 /* Set to true for second pass. */
29 static bool use_nl_langinfo_l;
30
31 static void
switch_to_c(void)32 switch_to_c (void)
33 {
34 if (setlocale (LC_ALL, "C") == NULL)
35 FAIL_EXIT1 ("setlocale (LC_ALL, \"C\")");
36 }
37
38 static void
switch_to_c_utf8(void)39 switch_to_c_utf8 (void)
40 {
41 if (setlocale (LC_ALL, "C.UTF-8") == NULL)
42 FAIL_EXIT1 ("setlocale (LC_ALL, \"C.UTF-8\")");
43 }
44
45 static char *
str(nl_item item)46 str (nl_item item)
47 {
48 if (!use_nl_langinfo_l)
49 switch_to_c ();
50 return nl_langinfo (item);
51 }
52
53 static char *
str_utf8(nl_item item)54 str_utf8 (nl_item item)
55 {
56 if (use_nl_langinfo_l)
57 return nl_langinfo_l (item, c_utf8);
58 else
59 {
60 switch_to_c_utf8 ();
61 return nl_langinfo (item);
62 }
63 }
64
65 static wchar_t *
wstr(nl_item item)66 wstr (nl_item item)
67 {
68 return (wchar_t *) str (item);
69 }
70
71 static wchar_t *
wstr_utf8(nl_item item)72 wstr_utf8 (nl_item item)
73 {
74 return (wchar_t *) str_utf8 (item);
75 }
76
77 static int
byte(nl_item item)78 byte (nl_item item)
79 {
80 return (signed char) *str (item);
81 }
82
83 static int
byte_utf8(nl_item item)84 byte_utf8 (nl_item item)
85 {
86 return (signed char) *str_utf8 (item);
87 }
88
89 static int
word(nl_item item)90 word (nl_item item)
91 {
92 union
93 {
94 char *ptr;
95 int word;
96 } u;
97 u.ptr = str (item);
98 return u.word;
99 }
100
101 static int
word_utf8(nl_item item)102 word_utf8 (nl_item item)
103 {
104 union
105 {
106 char *ptr;
107 int word;
108 } u;
109 u.ptr = str_utf8 (item);
110 return u.word;
111 }
112
113 static void
one_pass(void)114 one_pass (void)
115 {
116 /* LC_TIME. */
117 TEST_COMPARE_STRING (str (ABDAY_1), str_utf8 (ABDAY_1));
118 TEST_COMPARE_STRING (str (ABDAY_2), str_utf8 (ABDAY_2));
119 TEST_COMPARE_STRING (str (ABDAY_3), str_utf8 (ABDAY_3));
120 TEST_COMPARE_STRING (str (ABDAY_4), str_utf8 (ABDAY_4));
121 TEST_COMPARE_STRING (str (ABDAY_5), str_utf8 (ABDAY_5));
122 TEST_COMPARE_STRING (str (ABDAY_6), str_utf8 (ABDAY_6));
123 TEST_COMPARE_STRING (str (ABDAY_7), str_utf8 (ABDAY_7));
124
125 TEST_COMPARE_STRING (str (DAY_1), str_utf8 (DAY_1));
126 TEST_COMPARE_STRING (str (DAY_2), str_utf8 (DAY_2));
127 TEST_COMPARE_STRING (str (DAY_3), str_utf8 (DAY_3));
128 TEST_COMPARE_STRING (str (DAY_4), str_utf8 (DAY_4));
129 TEST_COMPARE_STRING (str (DAY_5), str_utf8 (DAY_5));
130 TEST_COMPARE_STRING (str (DAY_6), str_utf8 (DAY_6));
131 TEST_COMPARE_STRING (str (DAY_7), str_utf8 (DAY_7));
132
133 TEST_COMPARE_STRING (str (ABMON_1), str_utf8 (ABMON_1));
134 TEST_COMPARE_STRING (str (ABMON_2), str_utf8 (ABMON_2));
135 TEST_COMPARE_STRING (str (ABMON_3), str_utf8 (ABMON_3));
136 TEST_COMPARE_STRING (str (ABMON_4), str_utf8 (ABMON_4));
137 TEST_COMPARE_STRING (str (ABMON_5), str_utf8 (ABMON_5));
138 TEST_COMPARE_STRING (str (ABMON_6), str_utf8 (ABMON_6));
139 TEST_COMPARE_STRING (str (ABMON_7), str_utf8 (ABMON_7));
140 TEST_COMPARE_STRING (str (ABMON_8), str_utf8 (ABMON_8));
141 TEST_COMPARE_STRING (str (ABMON_9), str_utf8 (ABMON_9));
142 TEST_COMPARE_STRING (str (ABMON_10), str_utf8 (ABMON_10));
143 TEST_COMPARE_STRING (str (ABMON_11), str_utf8 (ABMON_11));
144 TEST_COMPARE_STRING (str (ABMON_12), str_utf8 (ABMON_12));
145
146 TEST_COMPARE_STRING (str (MON_1), str_utf8 (MON_1));
147 TEST_COMPARE_STRING (str (MON_2), str_utf8 (MON_2));
148 TEST_COMPARE_STRING (str (MON_3), str_utf8 (MON_3));
149 TEST_COMPARE_STRING (str (MON_4), str_utf8 (MON_4));
150 TEST_COMPARE_STRING (str (MON_5), str_utf8 (MON_5));
151 TEST_COMPARE_STRING (str (MON_6), str_utf8 (MON_6));
152 TEST_COMPARE_STRING (str (MON_7), str_utf8 (MON_7));
153 TEST_COMPARE_STRING (str (MON_8), str_utf8 (MON_8));
154 TEST_COMPARE_STRING (str (MON_9), str_utf8 (MON_9));
155 TEST_COMPARE_STRING (str (MON_10), str_utf8 (MON_10));
156 TEST_COMPARE_STRING (str (MON_11), str_utf8 (MON_11));
157 TEST_COMPARE_STRING (str (MON_12), str_utf8 (MON_12));
158
159 TEST_COMPARE_STRING (str (AM_STR), str_utf8 (AM_STR));
160 TEST_COMPARE_STRING (str (PM_STR), str_utf8 (PM_STR));
161
162 TEST_COMPARE_STRING (str (D_T_FMT), str_utf8 (D_T_FMT));
163 TEST_COMPARE_STRING (str (D_FMT), str_utf8 (D_FMT));
164 TEST_COMPARE_STRING (str (T_FMT), str_utf8 (T_FMT));
165 TEST_COMPARE_STRING (str (T_FMT_AMPM),
166 str_utf8 (T_FMT_AMPM));
167
168 TEST_COMPARE_STRING (str (ERA), str_utf8 (ERA));
169 TEST_COMPARE_STRING (str (ERA_YEAR), str_utf8 (ERA_YEAR));
170 TEST_COMPARE_STRING (str (ERA_D_FMT), str_utf8 (ERA_D_FMT));
171 TEST_COMPARE_STRING (str (ALT_DIGITS), str_utf8 (ALT_DIGITS));
172 TEST_COMPARE_STRING (str (ERA_D_T_FMT), str_utf8 (ERA_D_T_FMT));
173 TEST_COMPARE_STRING (str (ERA_T_FMT), str_utf8 (ERA_T_FMT));
174 TEST_COMPARE (word (_NL_TIME_ERA_NUM_ENTRIES),
175 word_utf8 (_NL_TIME_ERA_NUM_ENTRIES));
176 /* No array elements, so nothing to compare for _NL_TIME_ERA_ENTRIES. */
177 TEST_COMPARE (word (_NL_TIME_ERA_NUM_ENTRIES), 0);
178
179 TEST_COMPARE_STRING_WIDE (wstr (_NL_WABDAY_1), wstr_utf8 (_NL_WABDAY_1));
180 TEST_COMPARE_STRING_WIDE (wstr (_NL_WABDAY_2), wstr_utf8 (_NL_WABDAY_2));
181 TEST_COMPARE_STRING_WIDE (wstr (_NL_WABDAY_3), wstr_utf8 (_NL_WABDAY_3));
182 TEST_COMPARE_STRING_WIDE (wstr (_NL_WABDAY_4), wstr_utf8 (_NL_WABDAY_4));
183 TEST_COMPARE_STRING_WIDE (wstr (_NL_WABDAY_5), wstr_utf8 (_NL_WABDAY_5));
184 TEST_COMPARE_STRING_WIDE (wstr (_NL_WABDAY_6), wstr_utf8 (_NL_WABDAY_6));
185 TEST_COMPARE_STRING_WIDE (wstr (_NL_WABDAY_7), wstr_utf8 (_NL_WABDAY_7));
186
187 TEST_COMPARE_STRING_WIDE (wstr (_NL_WDAY_1), wstr_utf8 (_NL_WDAY_1));
188 TEST_COMPARE_STRING_WIDE (wstr (_NL_WDAY_2), wstr_utf8 (_NL_WDAY_2));
189 TEST_COMPARE_STRING_WIDE (wstr (_NL_WDAY_3), wstr_utf8 (_NL_WDAY_3));
190 TEST_COMPARE_STRING_WIDE (wstr (_NL_WDAY_4), wstr_utf8 (_NL_WDAY_4));
191 TEST_COMPARE_STRING_WIDE (wstr (_NL_WDAY_5), wstr_utf8 (_NL_WDAY_5));
192 TEST_COMPARE_STRING_WIDE (wstr (_NL_WDAY_6), wstr_utf8 (_NL_WDAY_6));
193 TEST_COMPARE_STRING_WIDE (wstr (_NL_WDAY_7), wstr_utf8 (_NL_WDAY_7));
194
195 TEST_COMPARE_STRING_WIDE (wstr (_NL_WABMON_1), wstr_utf8 (_NL_WABMON_1));
196 TEST_COMPARE_STRING_WIDE (wstr (_NL_WABMON_2), wstr_utf8 (_NL_WABMON_2));
197 TEST_COMPARE_STRING_WIDE (wstr (_NL_WABMON_3), wstr_utf8 (_NL_WABMON_3));
198 TEST_COMPARE_STRING_WIDE (wstr (_NL_WABMON_4), wstr_utf8 (_NL_WABMON_4));
199 TEST_COMPARE_STRING_WIDE (wstr (_NL_WABMON_5), wstr_utf8 (_NL_WABMON_5));
200 TEST_COMPARE_STRING_WIDE (wstr (_NL_WABMON_6), wstr_utf8 (_NL_WABMON_6));
201 TEST_COMPARE_STRING_WIDE (wstr (_NL_WABMON_7), wstr_utf8 (_NL_WABMON_7));
202 TEST_COMPARE_STRING_WIDE (wstr (_NL_WABMON_8), wstr_utf8 (_NL_WABMON_8));
203 TEST_COMPARE_STRING_WIDE (wstr (_NL_WABMON_9), wstr_utf8 (_NL_WABMON_9));
204 TEST_COMPARE_STRING_WIDE (wstr (_NL_WABMON_10), wstr_utf8 (_NL_WABMON_10));
205 TEST_COMPARE_STRING_WIDE (wstr (_NL_WABMON_11), wstr_utf8 (_NL_WABMON_11));
206 TEST_COMPARE_STRING_WIDE (wstr (_NL_WABMON_12), wstr_utf8 (_NL_WABMON_12));
207
208 TEST_COMPARE_STRING_WIDE (wstr (_NL_WMON_1), wstr_utf8 (_NL_WMON_1));
209 TEST_COMPARE_STRING_WIDE (wstr (_NL_WMON_2), wstr_utf8 (_NL_WMON_2));
210 TEST_COMPARE_STRING_WIDE (wstr (_NL_WMON_3), wstr_utf8 (_NL_WMON_3));
211 TEST_COMPARE_STRING_WIDE (wstr (_NL_WMON_4), wstr_utf8 (_NL_WMON_4));
212 TEST_COMPARE_STRING_WIDE (wstr (_NL_WMON_5), wstr_utf8 (_NL_WMON_5));
213 TEST_COMPARE_STRING_WIDE (wstr (_NL_WMON_6), wstr_utf8 (_NL_WMON_6));
214 TEST_COMPARE_STRING_WIDE (wstr (_NL_WMON_7), wstr_utf8 (_NL_WMON_7));
215 TEST_COMPARE_STRING_WIDE (wstr (_NL_WMON_8), wstr_utf8 (_NL_WMON_8));
216 TEST_COMPARE_STRING_WIDE (wstr (_NL_WMON_9), wstr_utf8 (_NL_WMON_9));
217 TEST_COMPARE_STRING_WIDE (wstr (_NL_WMON_10), wstr_utf8 (_NL_WMON_10));
218 TEST_COMPARE_STRING_WIDE (wstr (_NL_WMON_11), wstr_utf8 (_NL_WMON_11));
219 TEST_COMPARE_STRING_WIDE (wstr (_NL_WMON_12), wstr_utf8 (_NL_WMON_12));
220
221 TEST_COMPARE_STRING_WIDE (wstr (_NL_WAM_STR), wstr_utf8 (_NL_WAM_STR));
222 TEST_COMPARE_STRING_WIDE (wstr (_NL_WPM_STR), wstr_utf8 (_NL_WPM_STR));
223
224 TEST_COMPARE_STRING_WIDE (wstr (_NL_WD_T_FMT), wstr_utf8 (_NL_WD_T_FMT));
225 TEST_COMPARE_STRING_WIDE (wstr (_NL_WD_FMT), wstr_utf8 (_NL_WD_FMT));
226 TEST_COMPARE_STRING_WIDE (wstr (_NL_WT_FMT), wstr_utf8 (_NL_WT_FMT));
227 TEST_COMPARE_STRING_WIDE (wstr (_NL_WT_FMT_AMPM),
228 wstr_utf8 (_NL_WT_FMT_AMPM));
229
230 TEST_COMPARE_STRING_WIDE (wstr (_NL_WERA_YEAR), wstr_utf8 (_NL_WERA_YEAR));
231 TEST_COMPARE_STRING_WIDE (wstr (_NL_WERA_D_FMT), wstr_utf8 (_NL_WERA_D_FMT));
232 TEST_COMPARE_STRING_WIDE (wstr (_NL_WALT_DIGITS),
233 wstr_utf8 (_NL_WALT_DIGITS));
234 TEST_COMPARE_STRING_WIDE (wstr (_NL_WERA_D_T_FMT),
235 wstr_utf8 (_NL_WERA_D_T_FMT));
236 TEST_COMPARE_STRING_WIDE (wstr (_NL_WERA_T_FMT), wstr_utf8 (_NL_WERA_T_FMT));
237
238 /* This is somewhat inconsistent, but see locale/categories.def. */
239 TEST_COMPARE (byte (_NL_TIME_WEEK_NDAYS), byte_utf8 (_NL_TIME_WEEK_NDAYS));
240 TEST_COMPARE (word (_NL_TIME_WEEK_1STDAY),
241 word_utf8 (_NL_TIME_WEEK_1STDAY));
242 TEST_COMPARE (byte (_NL_TIME_WEEK_1STWEEK),
243 byte_utf8 (_NL_TIME_WEEK_1STWEEK));
244 TEST_COMPARE (byte (_NL_TIME_FIRST_WEEKDAY),
245 byte_utf8 (_NL_TIME_FIRST_WEEKDAY));
246 TEST_COMPARE (byte (_NL_TIME_FIRST_WORKDAY),
247 byte_utf8 (_NL_TIME_FIRST_WORKDAY));
248 TEST_COMPARE (byte (_NL_TIME_CAL_DIRECTION),
249 byte_utf8 (_NL_TIME_CAL_DIRECTION));
250 TEST_COMPARE_STRING (str (_NL_TIME_TIMEZONE), str_utf8 (_NL_TIME_TIMEZONE));
251
252 TEST_COMPARE_STRING (str (_DATE_FMT), str_utf8 (_DATE_FMT));
253 TEST_COMPARE_STRING_WIDE (wstr (_NL_W_DATE_FMT), wstr_utf8 (_NL_W_DATE_FMT));
254
255 /* Expected difference. */
256 TEST_COMPARE_STRING (str (_NL_TIME_CODESET), "ANSI_X3.4-1968");
257 TEST_COMPARE_STRING (str_utf8 (_NL_TIME_CODESET), "UTF-8");
258
259 TEST_COMPARE_STRING (str (ALTMON_1), str_utf8 (ALTMON_1));
260 TEST_COMPARE_STRING (str (ALTMON_2), str_utf8 (ALTMON_2));
261 TEST_COMPARE_STRING (str (ALTMON_3), str_utf8 (ALTMON_3));
262 TEST_COMPARE_STRING (str (ALTMON_4), str_utf8 (ALTMON_4));
263 TEST_COMPARE_STRING (str (ALTMON_5), str_utf8 (ALTMON_5));
264 TEST_COMPARE_STRING (str (ALTMON_6), str_utf8 (ALTMON_6));
265 TEST_COMPARE_STRING (str (ALTMON_7), str_utf8 (ALTMON_7));
266 TEST_COMPARE_STRING (str (ALTMON_8), str_utf8 (ALTMON_8));
267 TEST_COMPARE_STRING (str (ALTMON_9), str_utf8 (ALTMON_9));
268 TEST_COMPARE_STRING (str (ALTMON_10), str_utf8 (ALTMON_10));
269 TEST_COMPARE_STRING (str (ALTMON_11), str_utf8 (ALTMON_11));
270 TEST_COMPARE_STRING (str (ALTMON_12), str_utf8 (ALTMON_12));
271
272 TEST_COMPARE_STRING_WIDE (wstr (_NL_WALTMON_1), wstr_utf8 (_NL_WALTMON_1));
273 TEST_COMPARE_STRING_WIDE (wstr (_NL_WALTMON_2), wstr_utf8 (_NL_WALTMON_2));
274 TEST_COMPARE_STRING_WIDE (wstr (_NL_WALTMON_3), wstr_utf8 (_NL_WALTMON_3));
275 TEST_COMPARE_STRING_WIDE (wstr (_NL_WALTMON_4), wstr_utf8 (_NL_WALTMON_4));
276 TEST_COMPARE_STRING_WIDE (wstr (_NL_WALTMON_5), wstr_utf8 (_NL_WALTMON_5));
277 TEST_COMPARE_STRING_WIDE (wstr (_NL_WALTMON_6), wstr_utf8 (_NL_WALTMON_6));
278 TEST_COMPARE_STRING_WIDE (wstr (_NL_WALTMON_7), wstr_utf8 (_NL_WALTMON_7));
279 TEST_COMPARE_STRING_WIDE (wstr (_NL_WALTMON_8), wstr_utf8 (_NL_WALTMON_8));
280 TEST_COMPARE_STRING_WIDE (wstr (_NL_WALTMON_9), wstr_utf8 (_NL_WALTMON_9));
281 TEST_COMPARE_STRING_WIDE (wstr (_NL_WALTMON_10), wstr_utf8 (_NL_WALTMON_10));
282 TEST_COMPARE_STRING_WIDE (wstr (_NL_WALTMON_11), wstr_utf8 (_NL_WALTMON_11));
283 TEST_COMPARE_STRING_WIDE (wstr (_NL_WALTMON_12), wstr_utf8 (_NL_WALTMON_12));
284
285 TEST_COMPARE_STRING (str (_NL_ABALTMON_1), str_utf8 (_NL_ABALTMON_1));
286 TEST_COMPARE_STRING (str (_NL_ABALTMON_2), str_utf8 (_NL_ABALTMON_2));
287 TEST_COMPARE_STRING (str (_NL_ABALTMON_3), str_utf8 (_NL_ABALTMON_3));
288 TEST_COMPARE_STRING (str (_NL_ABALTMON_4), str_utf8 (_NL_ABALTMON_4));
289 TEST_COMPARE_STRING (str (_NL_ABALTMON_5), str_utf8 (_NL_ABALTMON_5));
290 TEST_COMPARE_STRING (str (_NL_ABALTMON_6), str_utf8 (_NL_ABALTMON_6));
291 TEST_COMPARE_STRING (str (_NL_ABALTMON_7), str_utf8 (_NL_ABALTMON_7));
292 TEST_COMPARE_STRING (str (_NL_ABALTMON_8), str_utf8 (_NL_ABALTMON_8));
293 TEST_COMPARE_STRING (str (_NL_ABALTMON_9), str_utf8 (_NL_ABALTMON_9));
294 TEST_COMPARE_STRING (str (_NL_ABALTMON_10), str_utf8 (_NL_ABALTMON_10));
295 TEST_COMPARE_STRING (str (_NL_ABALTMON_11), str_utf8 (_NL_ABALTMON_11));
296 TEST_COMPARE_STRING (str (_NL_ABALTMON_12), str_utf8 (_NL_ABALTMON_12));
297
298 TEST_COMPARE_STRING_WIDE (wstr (_NL_WABALTMON_1),
299 wstr_utf8 (_NL_WABALTMON_1));
300 TEST_COMPARE_STRING_WIDE (wstr (_NL_WABALTMON_2),
301 wstr_utf8 (_NL_WABALTMON_2));
302 TEST_COMPARE_STRING_WIDE (wstr (_NL_WABALTMON_3),
303 wstr_utf8 (_NL_WABALTMON_3));
304 TEST_COMPARE_STRING_WIDE (wstr (_NL_WABALTMON_4),
305 wstr_utf8 (_NL_WABALTMON_4));
306 TEST_COMPARE_STRING_WIDE (wstr (_NL_WABALTMON_5),
307 wstr_utf8 (_NL_WABALTMON_5));
308 TEST_COMPARE_STRING_WIDE (wstr (_NL_WABALTMON_6),
309 wstr_utf8 (_NL_WABALTMON_6));
310 TEST_COMPARE_STRING_WIDE (wstr (_NL_WABALTMON_7),
311 wstr_utf8 (_NL_WABALTMON_7));
312 TEST_COMPARE_STRING_WIDE (wstr (_NL_WABALTMON_8),
313 wstr_utf8 (_NL_WABALTMON_8));
314 TEST_COMPARE_STRING_WIDE (wstr (_NL_WABALTMON_9),
315 wstr_utf8 (_NL_WABALTMON_9));
316 TEST_COMPARE_STRING_WIDE (wstr (_NL_WABALTMON_10),
317 wstr_utf8 (_NL_WABALTMON_10));
318 TEST_COMPARE_STRING_WIDE (wstr (_NL_WABALTMON_11),
319 wstr_utf8 (_NL_WABALTMON_11));
320 TEST_COMPARE_STRING_WIDE (wstr (_NL_WABALTMON_12),
321 wstr_utf8 (_NL_WABALTMON_12));
322
323 /* LC_COLLATE. Mostly untested, only expected differences. */
324 TEST_COMPARE_STRING (str (_NL_COLLATE_CODESET), "ANSI_X3.4-1968");
325 TEST_COMPARE_STRING (str_utf8 (_NL_COLLATE_CODESET), "UTF-8");
326
327 /* LC_CTYPE. Mostly untested, only expected differences. */
328 TEST_COMPARE_STRING (str (CODESET), "ANSI_X3.4-1968");
329 TEST_COMPARE_STRING (str_utf8 (CODESET), "UTF-8");
330
331 /* LC_MONETARY. */
332 TEST_COMPARE_STRING (str (INT_CURR_SYMBOL), str_utf8 (INT_CURR_SYMBOL));
333 TEST_COMPARE_STRING (str (CURRENCY_SYMBOL), str_utf8 (CURRENCY_SYMBOL));
334 TEST_COMPARE_STRING (str (MON_DECIMAL_POINT), str_utf8 (MON_DECIMAL_POINT));
335 TEST_COMPARE_STRING (str (MON_THOUSANDS_SEP), str_utf8 (MON_THOUSANDS_SEP));
336 TEST_COMPARE_STRING (str (MON_GROUPING), str_utf8 (MON_GROUPING));
337 TEST_COMPARE_STRING (str (POSITIVE_SIGN), str_utf8 (POSITIVE_SIGN));
338 TEST_COMPARE_STRING (str (NEGATIVE_SIGN), str_utf8 (NEGATIVE_SIGN));
339 TEST_COMPARE (byte (INT_FRAC_DIGITS), byte_utf8 (INT_FRAC_DIGITS));
340 TEST_COMPARE (byte (FRAC_DIGITS), byte_utf8 (FRAC_DIGITS));
341 TEST_COMPARE (byte (P_CS_PRECEDES), byte_utf8 (P_CS_PRECEDES));
342 TEST_COMPARE (byte (P_SEP_BY_SPACE), byte_utf8 (P_SEP_BY_SPACE));
343 TEST_COMPARE (byte (N_CS_PRECEDES), byte_utf8 (N_CS_PRECEDES));
344 TEST_COMPARE (byte (N_SEP_BY_SPACE), byte_utf8 (N_SEP_BY_SPACE));
345 TEST_COMPARE (byte (P_SIGN_POSN), byte_utf8 (P_SIGN_POSN));
346 TEST_COMPARE (byte (N_SIGN_POSN), byte_utf8 (N_SIGN_POSN));
347 TEST_COMPARE_STRING (str (CRNCYSTR), str_utf8 (CRNCYSTR));
348 TEST_COMPARE (byte (INT_P_CS_PRECEDES), byte_utf8 (INT_P_CS_PRECEDES));
349 TEST_COMPARE (byte (INT_P_SEP_BY_SPACE), byte_utf8 (INT_P_SEP_BY_SPACE));
350 TEST_COMPARE (byte (INT_N_CS_PRECEDES), byte_utf8 (INT_N_CS_PRECEDES));
351 TEST_COMPARE (byte (INT_N_SEP_BY_SPACE), byte_utf8 (INT_N_SEP_BY_SPACE));
352 TEST_COMPARE (byte (INT_P_SIGN_POSN), byte_utf8 (INT_P_SIGN_POSN));
353 TEST_COMPARE (byte (INT_N_SIGN_POSN), byte_utf8 (INT_N_SIGN_POSN));
354 TEST_COMPARE_STRING (str (_NL_MONETARY_DUO_INT_CURR_SYMBOL),
355 str_utf8 (_NL_MONETARY_DUO_INT_CURR_SYMBOL));
356 TEST_COMPARE_STRING (str (_NL_MONETARY_DUO_CURRENCY_SYMBOL),
357 str_utf8 (_NL_MONETARY_DUO_CURRENCY_SYMBOL));
358 TEST_COMPARE (byte (_NL_MONETARY_DUO_INT_FRAC_DIGITS),
359 byte_utf8 (_NL_MONETARY_DUO_INT_FRAC_DIGITS));
360 TEST_COMPARE (byte (_NL_MONETARY_DUO_FRAC_DIGITS),
361 byte_utf8 (_NL_MONETARY_DUO_FRAC_DIGITS));
362 TEST_COMPARE (byte (_NL_MONETARY_DUO_P_CS_PRECEDES),
363 byte_utf8 (_NL_MONETARY_DUO_P_CS_PRECEDES));
364 TEST_COMPARE (byte (_NL_MONETARY_DUO_P_SEP_BY_SPACE),
365 byte_utf8 (_NL_MONETARY_DUO_P_SEP_BY_SPACE));
366 TEST_COMPARE (byte (_NL_MONETARY_DUO_N_CS_PRECEDES),
367 byte_utf8 (_NL_MONETARY_DUO_N_CS_PRECEDES));
368 TEST_COMPARE (byte (_NL_MONETARY_DUO_N_SEP_BY_SPACE),
369 byte_utf8 (_NL_MONETARY_DUO_N_SEP_BY_SPACE));
370 TEST_COMPARE (byte (_NL_MONETARY_DUO_INT_P_CS_PRECEDES),
371 byte_utf8 (_NL_MONETARY_DUO_INT_P_CS_PRECEDES));
372 TEST_COMPARE (byte (_NL_MONETARY_DUO_INT_P_SEP_BY_SPACE),
373 byte_utf8 (_NL_MONETARY_DUO_INT_P_SEP_BY_SPACE));
374 TEST_COMPARE (byte (_NL_MONETARY_DUO_INT_N_CS_PRECEDES),
375 byte_utf8 (_NL_MONETARY_DUO_INT_N_CS_PRECEDES));
376 TEST_COMPARE (byte (_NL_MONETARY_DUO_INT_N_SEP_BY_SPACE),
377 byte_utf8 (_NL_MONETARY_DUO_INT_N_SEP_BY_SPACE));
378 TEST_COMPARE (byte (_NL_MONETARY_DUO_INT_P_SIGN_POSN),
379 byte_utf8 (_NL_MONETARY_DUO_INT_P_SIGN_POSN));
380 TEST_COMPARE (byte (_NL_MONETARY_DUO_INT_N_SIGN_POSN),
381 byte_utf8 (_NL_MONETARY_DUO_INT_N_SIGN_POSN));
382 TEST_COMPARE (byte (_NL_MONETARY_DUO_P_SIGN_POSN),
383 byte_utf8 (_NL_MONETARY_DUO_P_SIGN_POSN));
384 TEST_COMPARE (byte (_NL_MONETARY_DUO_N_SIGN_POSN),
385 byte_utf8 (_NL_MONETARY_DUO_N_SIGN_POSN));
386 TEST_COMPARE (byte (_NL_MONETARY_DUO_INT_P_SIGN_POSN),
387 byte_utf8 (_NL_MONETARY_DUO_INT_P_SIGN_POSN));
388 TEST_COMPARE (byte (_NL_MONETARY_DUO_INT_N_SIGN_POSN),
389 byte_utf8 (_NL_MONETARY_DUO_INT_N_SIGN_POSN));
390 TEST_COMPARE (word (_NL_MONETARY_UNO_VALID_FROM),
391 word_utf8 (_NL_MONETARY_UNO_VALID_FROM));
392 TEST_COMPARE (word (_NL_MONETARY_UNO_VALID_TO),
393 word_utf8 (_NL_MONETARY_UNO_VALID_TO));
394 TEST_COMPARE (word (_NL_MONETARY_DUO_VALID_FROM),
395 word_utf8 (_NL_MONETARY_DUO_VALID_FROM));
396 TEST_COMPARE (word (_NL_MONETARY_DUO_VALID_TO),
397 word_utf8 (_NL_MONETARY_DUO_VALID_TO));
398 /* _NL_MONETARY_CONVERSION_RATE cannot be tested (word array). */
399 TEST_COMPARE (word (_NL_MONETARY_DECIMAL_POINT_WC),
400 word_utf8 (_NL_MONETARY_DECIMAL_POINT_WC));
401 TEST_COMPARE (word (_NL_MONETARY_THOUSANDS_SEP_WC),
402 word_utf8 (_NL_MONETARY_THOUSANDS_SEP_WC));
403 /* Expected difference. */
404 TEST_COMPARE_STRING (str (_NL_MONETARY_CODESET), "ANSI_X3.4-1968");
405 TEST_COMPARE_STRING (str_utf8 (_NL_MONETARY_CODESET), "UTF-8");
406
407 /* LC_NUMERIC. */
408
409 TEST_COMPARE_STRING (str (DECIMAL_POINT), str_utf8 (DECIMAL_POINT));
410 TEST_COMPARE_STRING (str (RADIXCHAR), str_utf8 (RADIXCHAR));
411 TEST_COMPARE_STRING (str (THOUSANDS_SEP), str_utf8 (THOUSANDS_SEP));
412 TEST_COMPARE_STRING (str (THOUSEP), str_utf8 (THOUSEP));
413 TEST_COMPARE_STRING (str (GROUPING), str_utf8 (GROUPING));
414 TEST_COMPARE (word (_NL_NUMERIC_DECIMAL_POINT_WC),
415 word_utf8 (_NL_NUMERIC_DECIMAL_POINT_WC));
416 TEST_COMPARE (word (_NL_NUMERIC_THOUSANDS_SEP_WC),
417 word_utf8 (_NL_NUMERIC_THOUSANDS_SEP_WC));
418 /* Expected difference. */
419 TEST_COMPARE_STRING (str (_NL_NUMERIC_CODESET), "ANSI_X3.4-1968");
420 TEST_COMPARE_STRING (str_utf8 (_NL_NUMERIC_CODESET), "UTF-8");
421
422 /* LC_MESSAGES. */
423
424 TEST_COMPARE_STRING (str (YESEXPR), str_utf8 (YESEXPR));
425 TEST_COMPARE_STRING (str (NOEXPR), str_utf8 (NOEXPR));
426 TEST_COMPARE_STRING (str (YESSTR), str_utf8 (YESSTR));
427 TEST_COMPARE_STRING (str (NOSTR), str_utf8 (NOSTR));
428 /* Expected difference. */
429 TEST_COMPARE_STRING (str (_NL_MESSAGES_CODESET), "ANSI_X3.4-1968");
430 TEST_COMPARE_STRING (str_utf8 (_NL_MESSAGES_CODESET), "UTF-8");
431
432 /* LC_PAPER. */
433
434 TEST_COMPARE (word (_NL_PAPER_HEIGHT), word_utf8 (_NL_PAPER_HEIGHT));
435 TEST_COMPARE (word (_NL_PAPER_WIDTH), word_utf8 (_NL_PAPER_WIDTH));
436 /* Expected difference. */
437 TEST_COMPARE_STRING (str (_NL_PAPER_CODESET), "ANSI_X3.4-1968");
438 TEST_COMPARE_STRING (str_utf8 (_NL_PAPER_CODESET), "UTF-8");
439
440 /* LC_NAME. */
441
442 TEST_COMPARE_STRING (str (_NL_NAME_NAME_FMT),
443 str_utf8 (_NL_NAME_NAME_FMT));
444 TEST_COMPARE_STRING (str (_NL_NAME_NAME_GEN),
445 str_utf8 (_NL_NAME_NAME_GEN));
446 TEST_COMPARE_STRING (str (_NL_NAME_NAME_MR),
447 str_utf8 (_NL_NAME_NAME_MR));
448 TEST_COMPARE_STRING (str (_NL_NAME_NAME_MRS),
449 str_utf8 (_NL_NAME_NAME_MRS));
450 TEST_COMPARE_STRING (str (_NL_NAME_NAME_MISS),
451 str_utf8 (_NL_NAME_NAME_MISS));
452 TEST_COMPARE_STRING (str (_NL_NAME_NAME_MS),
453 str_utf8 (_NL_NAME_NAME_MS));
454 /* Expected difference. */
455 TEST_COMPARE_STRING (str (_NL_NAME_CODESET), "ANSI_X3.4-1968");
456 TEST_COMPARE_STRING (str_utf8 (_NL_NAME_CODESET), "UTF-8");
457
458 /* LC_ADDRESS. */
459
460 TEST_COMPARE_STRING (str (_NL_ADDRESS_POSTAL_FMT),
461 str_utf8 (_NL_ADDRESS_POSTAL_FMT));
462 TEST_COMPARE_STRING (str (_NL_ADDRESS_COUNTRY_NAME),
463 str_utf8 (_NL_ADDRESS_COUNTRY_NAME));
464 TEST_COMPARE_STRING (str (_NL_ADDRESS_COUNTRY_POST),
465 str_utf8 (_NL_ADDRESS_COUNTRY_POST));
466 TEST_COMPARE_STRING (str (_NL_ADDRESS_COUNTRY_AB2),
467 str_utf8 (_NL_ADDRESS_COUNTRY_AB2));
468 TEST_COMPARE_STRING (str (_NL_ADDRESS_COUNTRY_AB3),
469 str_utf8 (_NL_ADDRESS_COUNTRY_AB3));
470 TEST_COMPARE_STRING (str (_NL_ADDRESS_COUNTRY_CAR),
471 str_utf8 (_NL_ADDRESS_COUNTRY_CAR));
472 TEST_COMPARE (word (_NL_ADDRESS_COUNTRY_NUM),
473 word_utf8 (_NL_ADDRESS_COUNTRY_NUM));
474 TEST_COMPARE_STRING (str (_NL_ADDRESS_COUNTRY_ISBN),
475 str_utf8 (_NL_ADDRESS_COUNTRY_ISBN));
476 TEST_COMPARE_STRING (str (_NL_ADDRESS_LANG_NAME),
477 str_utf8 (_NL_ADDRESS_LANG_NAME));
478 TEST_COMPARE_STRING (str (_NL_ADDRESS_LANG_AB),
479 str_utf8 (_NL_ADDRESS_LANG_AB));
480 TEST_COMPARE_STRING (str (_NL_ADDRESS_LANG_TERM),
481 str_utf8 (_NL_ADDRESS_LANG_TERM));
482 TEST_COMPARE_STRING (str (_NL_ADDRESS_LANG_LIB),
483 str_utf8 (_NL_ADDRESS_LANG_LIB));
484 /* Expected difference. */
485 TEST_COMPARE_STRING (str (_NL_ADDRESS_CODESET), "ANSI_X3.4-1968");
486 TEST_COMPARE_STRING (str_utf8 (_NL_ADDRESS_CODESET), "UTF-8");
487
488 /* LC_TELEPHONE. */
489
490 TEST_COMPARE_STRING (str (_NL_TELEPHONE_TEL_INT_FMT),
491 str_utf8 (_NL_TELEPHONE_TEL_INT_FMT));
492 TEST_COMPARE_STRING (str (_NL_TELEPHONE_TEL_DOM_FMT),
493 str_utf8 (_NL_TELEPHONE_TEL_DOM_FMT));
494 TEST_COMPARE_STRING (str (_NL_TELEPHONE_INT_SELECT),
495 str_utf8 (_NL_TELEPHONE_INT_SELECT));
496 TEST_COMPARE_STRING (str (_NL_TELEPHONE_INT_PREFIX),
497 str_utf8 (_NL_TELEPHONE_INT_PREFIX));
498 /* Expected difference. */
499 TEST_COMPARE_STRING (str (_NL_TELEPHONE_CODESET), "ANSI_X3.4-1968");
500 TEST_COMPARE_STRING (str_utf8 (_NL_TELEPHONE_CODESET), "UTF-8");
501
502 /* LC_MEASUREMENT. */
503
504 TEST_COMPARE (byte (_NL_MEASUREMENT_MEASUREMENT),
505 byte_utf8 (_NL_MEASUREMENT_MEASUREMENT));
506 /* Expected difference. */
507 TEST_COMPARE_STRING (str (_NL_MEASUREMENT_CODESET), "ANSI_X3.4-1968");
508 TEST_COMPARE_STRING (str_utf8 (_NL_MEASUREMENT_CODESET), "UTF-8");
509
510 /* LC_IDENTIFICATION is skipped since C.UTF-8 is distinct from C. */
511
512 /* _NL_IDENTIFICATION_CATEGORY cannot be tested because it is a
513 string array. */
514 /* Expected difference. */
515 TEST_COMPARE_STRING (str (_NL_IDENTIFICATION_CODESET), "ANSI_X3.4-1968");
516 TEST_COMPARE_STRING (str_utf8 (_NL_IDENTIFICATION_CODESET), "UTF-8");
517 }
518
519 static int
do_test(void)520 do_test (void)
521 {
522 puts ("info: using setlocale and nl_langinfo");
523 one_pass ();
524
525 puts ("info: using nl_langinfo_l");
526
527 c_utf8 = newlocale (LC_ALL_MASK, "C.UTF-8", (locale_t) 0);
528 TEST_VERIFY_EXIT (c_utf8 != (locale_t) 0);
529
530 switch_to_c ();
531 use_nl_langinfo_l = true;
532 one_pass ();
533
534 freelocale (c_utf8);
535
536 return 0;
537 }
538
539 #include <support/test-driver.c>
540