1 /* Test of ulc_vasnprintf() function in an ISO-8859-1 locale.
2 Copyright (C) 2007 Free Software Foundation, Inc.
4 This program is free software: you can redistribute it and/or modify
5 it under the terms of the GNU General Public License as published by
6 the Free Software Foundation; either version 3 of the License, or
7 (at your option) any later version.
9 This program 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
12 GNU General Public License for more details.
14 You should have received a copy of the GNU General Public License
15 along with this program. If not, see <http://www.gnu.org/licenses/>. */
17 /* Written by Bruno Haible <bruno@clisp.org>, 2007. */
30 #define SIZEOF(array) (sizeof (array) / sizeof (array[0]))
31 #define ASSERT(expr) \
36 fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \
43 test_function (char * (*my_asnprintf) (char *, size_t *, const char *, ...))
45 /* Test the support of the 'U' conversion specifier for Unicode strings. */
48 static const uint8_t unicode_string[] = "Rafa\305\202 Maszkowski"; /* Rafał Maszkowski */
52 my_asnprintf (NULL, &length, "%U %d", unicode_string, 33, 44, 55);
53 ASSERT (result != NULL);
54 ASSERT (strcmp (result, "Rafa? Maszkowski 33") == 0
55 || strcmp (result, "Rafal Maszkowski 33") == 0);
56 ASSERT (length == strlen (result));
62 my_asnprintf (NULL, &length, "%20U %d", unicode_string, 33, 44, 55);
63 ASSERT (result != NULL);
64 ASSERT (strcmp (result, " Rafa? Maszkowski 33") == 0
65 || strcmp (result, " Rafal Maszkowski 33") == 0);
66 ASSERT (length == strlen (result));
72 my_asnprintf (NULL, &length, "%-20U %d", unicode_string, 33, 44, 55);
73 ASSERT (result != NULL);
74 ASSERT (strcmp (result, "Rafa? Maszkowski 33") == 0
75 || strcmp (result, "Rafal Maszkowski 33") == 0);
76 ASSERT (length == strlen (result));
79 { /* FLAG_ZERO: no effect. */
82 my_asnprintf (NULL, &length, "%020U %d", unicode_string, 33, 44, 55);
83 ASSERT (result != NULL);
84 ASSERT (strcmp (result, " Rafa? Maszkowski 33") == 0
85 || strcmp (result, " Rafal Maszkowski 33") == 0);
86 ASSERT (length == strlen (result));
92 static const uint16_t unicode_string[] = /* Rafał Maszkowski */
94 'R', 'a', 'f', 'a', 0x0142, ' ', 'M', 'a', 's', 'z', 'k', 'o', 'w',
100 my_asnprintf (NULL, &length, "%lU %d", unicode_string, 33, 44, 55);
101 ASSERT (result != NULL);
102 ASSERT (strcmp (result, "Rafa? Maszkowski 33") == 0
103 || strcmp (result, "Rafal Maszkowski 33") == 0);
104 ASSERT (length == strlen (result));
110 my_asnprintf (NULL, &length, "%20lU %d", unicode_string, 33, 44, 55);
111 ASSERT (result != NULL);
112 ASSERT (strcmp (result, " Rafa? Maszkowski 33") == 0
113 || strcmp (result, " Rafal Maszkowski 33") == 0);
114 ASSERT (length == strlen (result));
120 my_asnprintf (NULL, &length, "%-20lU %d", unicode_string, 33, 44, 55);
121 ASSERT (result != NULL);
122 ASSERT (strcmp (result, "Rafa? Maszkowski 33") == 0
123 || strcmp (result, "Rafal Maszkowski 33") == 0);
124 ASSERT (length == strlen (result));
127 { /* FLAG_ZERO: no effect. */
130 my_asnprintf (NULL, &length, "%020lU %d", unicode_string, 33, 44, 55);
131 ASSERT (result != NULL);
132 ASSERT (strcmp (result, " Rafa? Maszkowski 33") == 0
133 || strcmp (result, " Rafal Maszkowski 33") == 0);
134 ASSERT (length == strlen (result));
140 static const uint32_t unicode_string[] = /* Rafał Maszkowski */
142 'R', 'a', 'f', 'a', 0x0142, ' ', 'M', 'a', 's', 'z', 'k', 'o', 'w',
148 my_asnprintf (NULL, &length, "%llU %d", unicode_string, 33, 44, 55);
149 ASSERT (result != NULL);
150 ASSERT (strcmp (result, "Rafa? Maszkowski 33") == 0
151 || strcmp (result, "Rafal Maszkowski 33") == 0);
152 ASSERT (length == strlen (result));
158 my_asnprintf (NULL, &length, "%20llU %d", unicode_string, 33, 44, 55);
159 ASSERT (result != NULL);
160 ASSERT (strcmp (result, " Rafa? Maszkowski 33") == 0
161 || strcmp (result, " Rafal Maszkowski 33") == 0);
162 ASSERT (length == strlen (result));
168 my_asnprintf (NULL, &length, "%-20llU %d", unicode_string, 33, 44, 55);
169 ASSERT (result != NULL);
170 ASSERT (strcmp (result, "Rafa? Maszkowski 33") == 0
171 || strcmp (result, "Rafal Maszkowski 33") == 0);
172 ASSERT (length == strlen (result));
175 { /* FLAG_ZERO: no effect. */
178 my_asnprintf (NULL, &length, "%020llU %d", unicode_string, 33, 44, 55);
179 ASSERT (result != NULL);
180 ASSERT (strcmp (result, " Rafa? Maszkowski 33") == 0
181 || strcmp (result, " Rafal Maszkowski 33") == 0);
182 ASSERT (length == strlen (result));
187 /* Test the support of the 's' conversion specifier for strings. */
190 const char *locale_string = "\304rger"; /* Ärger */
194 my_asnprintf (NULL, &length, "%s %d", locale_string, 33, 44, 55);
195 ASSERT (result != NULL);
196 ASSERT (strcmp (result, "\304rger 33") == 0);
197 ASSERT (length == strlen (result));
203 my_asnprintf (NULL, &length, "%10s %d", locale_string, 33, 44, 55);
204 ASSERT (result != NULL);
205 ASSERT (strcmp (result, " \304rger 33") == 0);
206 ASSERT (length == strlen (result));
212 my_asnprintf (NULL, &length, "%-10s %d", locale_string, 33, 44, 55);
213 ASSERT (result != NULL);
214 ASSERT (strcmp (result, "\304rger 33") == 0);
215 ASSERT (length == strlen (result));
218 { /* FLAG_ZERO: no effect. */
221 my_asnprintf (NULL, &length, "%010s %d", locale_string, 33, 44, 55);
222 ASSERT (result != NULL);
223 ASSERT (strcmp (result, " \304rger 33") == 0);
224 ASSERT (length == strlen (result));
231 my_asnprintf (char *resultbuf, size_t *lengthp, const char *format, ...)
236 va_start (args, format);
237 ret = ulc_vasnprintf (resultbuf, lengthp, format, args);
245 test_function (my_asnprintf);
249 main (int argc, char *argv[])
251 /* configure should already have checked that the locale is supported. */
252 if (setlocale (LC_ALL, "") == NULL)