]>
Commit | Line | Data |
---|---|---|
5f83b267 | 1 | /* Test printf formats for intN_t, int_leastN_t and int_fastN_t types. |
dff8da6b | 2 | Copyright (C) 2023-2024 Free Software Foundation, Inc. |
5f83b267 JM |
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 <errno.h> | |
20 | #include <inttypes.h> | |
21 | #include <limits.h> | |
22 | #include <stdio.h> | |
23 | #include <string.h> | |
24 | #include <wchar.h> | |
25 | ||
26 | #include <libc-diag.h> | |
27 | #include <support/check.h> | |
28 | ||
29 | /* GCC does not know the %wN or %wfN length modifiers before GCC 13. */ | |
30 | DIAG_PUSH_NEEDS_COMMENT; | |
31 | #if !__GNUC_PREREQ (13, 0) | |
32 | DIAG_IGNORE_NEEDS_COMMENT (12, "-Wformat"); | |
33 | DIAG_IGNORE_NEEDS_COMMENT (12, "-Wformat-extra-args"); | |
34 | #endif | |
35 | ||
36 | #define CHECK_PRINTF(EXPECTED, FMT, ...) \ | |
37 | do \ | |
38 | { \ | |
39 | int ret = SNPRINTF (buf, sizeof buf / sizeof buf[0], L_(FMT), \ | |
40 | __VA_ARGS__); \ | |
41 | TEST_COMPARE_STRING_MACRO (buf, L_(EXPECTED)); \ | |
42 | TEST_COMPARE (ret, STRLEN (L_(EXPECTED))); \ | |
43 | } \ | |
44 | while (0) | |
45 | ||
46 | #define CHECK_PRINTF_ERR(FMT, ...) \ | |
47 | do \ | |
48 | { \ | |
49 | int ret = SNPRINTF (buf, sizeof buf / sizeof buf[0], L_(FMT), \ | |
50 | __VA_ARGS__); \ | |
51 | TEST_VERIFY (ret < 0); \ | |
52 | TEST_COMPARE (errno, EINVAL); \ | |
53 | } \ | |
54 | while (0) | |
55 | ||
56 | static void | |
57 | test_w8 (void) | |
58 | { | |
59 | CHAR buf[1024]; | |
60 | CHECK_PRINTF ("123", "%w8d", (int8_t) 123); | |
61 | CHECK_PRINTF ("-123", "%w8d", (int8_t) -123); | |
62 | CHECK_PRINTF ("123", "%w8i", (int8_t) 123); | |
63 | CHECK_PRINTF ("-123", "%w8i", (int8_t) -123); | |
64 | CHECK_PRINTF ("1111011", "%w8b", (uint8_t) 123); | |
65 | CHECK_PRINTF ("1111011", "%w8B", (uint8_t) 123); | |
66 | CHECK_PRINTF ("173", "%w8o", (uint8_t) 123); | |
67 | CHECK_PRINTF ("123", "%w8u", (uint8_t) 123); | |
68 | CHECK_PRINTF ("7b", "%w8x", (uint8_t) 123); | |
69 | CHECK_PRINTF ("7B", "%w8X", (uint8_t) 123); | |
70 | CHECK_PRINTF (" 123", "%5w8d", (int8_t) 123); | |
71 | CHECK_PRINTF (" 123", "%*w8d", 5, (int8_t) 123); | |
72 | CHECK_PRINTF ("0x7b", "%#w8x", (uint8_t) 123); | |
73 | CHECK_PRINTF ("00123", "%.5w8d", (int8_t) 123); | |
74 | CHECK_PRINTF ("00123", "%.*w8d", 5, (int8_t) 123); | |
75 | CHECK_PRINTF (" 00123", "%8.5w8d", (int8_t) 123); | |
76 | CHECK_PRINTF (" 00123", "%*.5w8d", 8, (int8_t) 123); | |
77 | CHECK_PRINTF (" 00123", "%8.*w8d", 5, (int8_t) 123); | |
78 | CHECK_PRINTF (" 00123", "%*.*w8d", 8, 5, (int8_t) 123); | |
79 | CHECK_PRINTF ("00123 ", "%-8.5w8d", (int8_t) 123); | |
80 | CHECK_PRINTF ("00123 ", "%-*.5w8d", 8, (int8_t) 123); | |
81 | CHECK_PRINTF ("00123 ", "%-8.*w8d", 5, (int8_t) 123); | |
82 | CHECK_PRINTF ("00123 ", "%-*.*w8d", 8, 5, (int8_t) 123); | |
83 | { | |
84 | int8_t n = -1; | |
85 | CHECK_PRINTF ("12345", "%d%w8n", 12345, &n); | |
86 | TEST_COMPARE (n, 5); | |
87 | } | |
88 | CHECK_PRINTF ("123", "%w8d", (int_least8_t) 123); | |
89 | CHECK_PRINTF ("-123", "%w8d", (int_least8_t) -123); | |
90 | CHECK_PRINTF ("123", "%w8i", (int_least8_t) 123); | |
91 | CHECK_PRINTF ("-123", "%w8i", (int_least8_t) -123); | |
92 | CHECK_PRINTF ("1111011", "%w8b", (uint_least8_t) 123); | |
93 | CHECK_PRINTF ("1111011", "%w8B", (uint_least8_t) 123); | |
94 | CHECK_PRINTF ("173", "%w8o", (uint_least8_t) 123); | |
95 | CHECK_PRINTF ("123", "%w8u", (uint_least8_t) 123); | |
96 | CHECK_PRINTF ("7b", "%w8x", (uint_least8_t) 123); | |
97 | CHECK_PRINTF ("7B", "%w8X", (uint_least8_t) 123); | |
98 | CHECK_PRINTF (" 123", "%5w8d", (int_least8_t) 123); | |
99 | CHECK_PRINTF (" 123", "%*w8d", 5, (int_least8_t) 123); | |
100 | CHECK_PRINTF ("0x7b", "%#w8x", (uint_least8_t) 123); | |
101 | CHECK_PRINTF ("00123", "%.5w8d", (int_least8_t) 123); | |
102 | CHECK_PRINTF ("00123", "%.*w8d", 5, (int_least8_t) 123); | |
103 | CHECK_PRINTF (" 00123", "%8.5w8d", (int_least8_t) 123); | |
104 | CHECK_PRINTF (" 00123", "%*.5w8d", 8, (int_least8_t) 123); | |
105 | CHECK_PRINTF (" 00123", "%8.*w8d", 5, (int_least8_t) 123); | |
106 | CHECK_PRINTF (" 00123", "%*.*w8d", 8, 5, (int_least8_t) 123); | |
107 | CHECK_PRINTF ("00123 ", "%-8.5w8d", (int_least8_t) 123); | |
108 | CHECK_PRINTF ("00123 ", "%-*.5w8d", 8, (int_least8_t) 123); | |
109 | CHECK_PRINTF ("00123 ", "%-8.*w8d", 5, (int_least8_t) 123); | |
110 | CHECK_PRINTF ("00123 ", "%-*.*w8d", 8, 5, (int_least8_t) 123); | |
111 | { | |
112 | int_least8_t ln = -1; | |
113 | CHECK_PRINTF ("12345", "%d%w8n", 12345, &ln); | |
114 | TEST_COMPARE (ln, 5); | |
115 | } | |
116 | /* Test truncation of value in promoted type not representable in | |
117 | narrower type. */ | |
118 | CHECK_PRINTF ("57", "%w8d", 12345); | |
119 | CHECK_PRINTF ("-57", "%w8d", -12345); | |
120 | CHECK_PRINTF ("-121", "%w8d", 1234567); | |
121 | CHECK_PRINTF ("121", "%w8d", -1234567); | |
122 | CHECK_PRINTF ("135", "%w8u", 1234567); | |
123 | /* Test positional argument handling. */ | |
124 | CHECK_PRINTF ("test 10 test2 20", "%4$s %3$w8d %2$s %1$w8d", | |
125 | 276, "test2", 266, "test"); | |
126 | } | |
127 | ||
128 | static void | |
129 | test_wf8 (void) | |
130 | { | |
131 | CHAR buf[1024]; | |
132 | _Static_assert (sizeof (int_fast8_t) == sizeof (char), | |
133 | "test assumes size of int_fast8_t"); | |
134 | CHECK_PRINTF ("123", "%wf8d", (int_fast8_t) 123); | |
135 | CHECK_PRINTF ("-123", "%wf8d", (int_fast8_t) -123); | |
136 | CHECK_PRINTF ("123", "%wf8i", (int_fast8_t) 123); | |
137 | CHECK_PRINTF ("-123", "%wf8i", (int_fast8_t) -123); | |
138 | CHECK_PRINTF ("1111011", "%wf8b", (uint_fast8_t) 123); | |
139 | CHECK_PRINTF ("1111011", "%wf8B", (uint_fast8_t) 123); | |
140 | CHECK_PRINTF ("173", "%wf8o", (uint_fast8_t) 123); | |
141 | CHECK_PRINTF ("123", "%wf8u", (uint_fast8_t) 123); | |
142 | CHECK_PRINTF ("7b", "%wf8x", (uint_fast8_t) 123); | |
143 | CHECK_PRINTF ("7B", "%wf8X", (uint_fast8_t) 123); | |
144 | CHECK_PRINTF (" 123", "%5w8d", (int_fast8_t) 123); | |
145 | CHECK_PRINTF (" 123", "%*w8d", 5, (int_fast8_t) 123); | |
146 | CHECK_PRINTF ("0x7b", "%#w8x", (uint_fast8_t) 123); | |
147 | CHECK_PRINTF ("00123", "%.5w8d", (int_fast8_t) 123); | |
148 | CHECK_PRINTF ("00123", "%.*w8d", 5, (int_fast8_t) 123); | |
149 | CHECK_PRINTF (" 00123", "%8.5w8d", (int_fast8_t) 123); | |
150 | CHECK_PRINTF (" 00123", "%*.5w8d", 8, (int_fast8_t) 123); | |
151 | CHECK_PRINTF (" 00123", "%8.*w8d", 5, (int_fast8_t) 123); | |
152 | CHECK_PRINTF (" 00123", "%*.*w8d", 8, 5, (int_fast8_t) 123); | |
153 | CHECK_PRINTF ("00123 ", "%-8.5w8d", (int_fast8_t) 123); | |
154 | CHECK_PRINTF ("00123 ", "%-*.5w8d", 8, (int_fast8_t) 123); | |
155 | CHECK_PRINTF ("00123 ", "%-8.*w8d", 5, (int_fast8_t) 123); | |
156 | CHECK_PRINTF ("00123 ", "%-*.*w8d", 8, 5, (int_fast8_t) 123); | |
157 | { | |
158 | int_fast8_t n = -1; | |
159 | CHECK_PRINTF ("12345", "%d%wf8n", 12345, &n); | |
160 | TEST_COMPARE (n, 5); | |
161 | } | |
162 | /* Test truncation of value in promoted type not representable in | |
163 | narrower type. */ | |
164 | CHECK_PRINTF ("57", "%wf8d", 12345); | |
165 | CHECK_PRINTF ("-57", "%wf8d", -12345); | |
166 | CHECK_PRINTF ("-121", "%wf8d", 1234567); | |
167 | CHECK_PRINTF ("121", "%wf8d", -1234567); | |
168 | CHECK_PRINTF ("135", "%wf8u", 1234567); | |
169 | /* Test positional argument handling. */ | |
170 | CHECK_PRINTF ("test 10 test2 20", "%4$s %3$wf8d %2$s %1$wf8d", | |
171 | 276, "test2", 266, "test"); | |
172 | } | |
173 | ||
174 | static void | |
175 | test_w16 (void) | |
176 | { | |
177 | CHAR buf[1024]; | |
178 | CHECK_PRINTF ("12345", "%w16d", (int16_t) 12345); | |
179 | CHECK_PRINTF ("-12345", "%w16d", (int16_t) -12345); | |
180 | CHECK_PRINTF ("12345", "%w16i", (int16_t) 12345); | |
181 | CHECK_PRINTF ("-12345", "%w16i", (int16_t) -12345); | |
182 | CHECK_PRINTF ("11000000111001", "%w16b", (uint16_t) 12345); | |
183 | CHECK_PRINTF ("11000000111001", "%w16B", (uint16_t) 12345); | |
184 | CHECK_PRINTF ("30071", "%w16o", (uint16_t) 12345); | |
185 | CHECK_PRINTF ("12345", "%w16u", (uint16_t) 12345); | |
186 | CHECK_PRINTF ("303a", "%w16x", (uint16_t) 12346); | |
187 | CHECK_PRINTF ("303A", "%w16X", (uint16_t) 12346); | |
188 | CHECK_PRINTF (" 12345", "%7w16d", (int16_t) 12345); | |
189 | CHECK_PRINTF (" 12345", "%*w16d", 7, (int16_t) 12345); | |
190 | CHECK_PRINTF ("0x3039", "%#w16x", (uint16_t) 12345); | |
191 | CHECK_PRINTF ("0012345", "%.7w16d", (int16_t) 12345); | |
192 | CHECK_PRINTF ("0012345", "%.*w16d", 7, (int16_t) 12345); | |
193 | CHECK_PRINTF (" 0012345", "%10.7w16d", (int16_t) 12345); | |
194 | CHECK_PRINTF (" 0012345", "%*.7w16d", 10, (int16_t) 12345); | |
195 | CHECK_PRINTF (" 0012345", "%10.*w16d", 7, (int16_t) 12345); | |
196 | CHECK_PRINTF (" 0012345", "%*.*w16d", 10, 7, (int16_t) 12345); | |
197 | CHECK_PRINTF ("0012345 ", "%-10.7w16d", (int16_t) 12345); | |
198 | CHECK_PRINTF ("0012345 ", "%-*.7w16d", 10, (int16_t) 12345); | |
199 | CHECK_PRINTF ("0012345 ", "%-10.*w16d", 7, (int16_t) 12345); | |
200 | CHECK_PRINTF ("0012345 ", "%-*.*w16d", 10, 7, (int16_t) 12345); | |
201 | { | |
202 | int16_t n = -1; | |
203 | CHECK_PRINTF ("12345", "%d%w16n", 12345, &n); | |
204 | TEST_COMPARE (n, 5); | |
205 | } | |
206 | CHECK_PRINTF ("12345", "%w16d", (int_least16_t) 12345); | |
207 | CHECK_PRINTF ("-12345", "%w16d", (int_least16_t) -12345); | |
208 | CHECK_PRINTF ("12345", "%w16i", (int_least16_t) 12345); | |
209 | CHECK_PRINTF ("-12345", "%w16i", (int_least16_t) -12345); | |
210 | CHECK_PRINTF ("11000000111001", "%w16b", (uint_least16_t) 12345); | |
211 | CHECK_PRINTF ("11000000111001", "%w16B", (uint_least16_t) 12345); | |
212 | CHECK_PRINTF ("30071", "%w16o", (uint_least16_t) 12345); | |
213 | CHECK_PRINTF ("12345", "%w16u", (uint_least16_t) 12345); | |
214 | CHECK_PRINTF ("303a", "%w16x", (uint_least16_t) 12346); | |
215 | CHECK_PRINTF ("303A", "%w16X", (uint_least16_t) 12346); | |
216 | CHECK_PRINTF (" 12345", "%7w16d", (int_least16_t) 12345); | |
217 | CHECK_PRINTF (" 12345", "%*w16d", 7, (int_least16_t) 12345); | |
218 | CHECK_PRINTF ("0x3039", "%#w16x", (uint_least16_t) 12345); | |
219 | CHECK_PRINTF ("0012345", "%.7w16d", (int_least16_t) 12345); | |
220 | CHECK_PRINTF ("0012345", "%.*w16d", 7, (int_least16_t) 12345); | |
221 | CHECK_PRINTF (" 0012345", "%10.7w16d", (int_least16_t) 12345); | |
222 | CHECK_PRINTF (" 0012345", "%*.7w16d", 10, (int_least16_t) 12345); | |
223 | CHECK_PRINTF (" 0012345", "%10.*w16d", 7, (int_least16_t) 12345); | |
224 | CHECK_PRINTF (" 0012345", "%*.*w16d", 10, 7, (int_least16_t) 12345); | |
225 | CHECK_PRINTF ("0012345 ", "%-10.7w16d", (int_least16_t) 12345); | |
226 | CHECK_PRINTF ("0012345 ", "%-*.7w16d", 10, (int_least16_t) 12345); | |
227 | CHECK_PRINTF ("0012345 ", "%-10.*w16d", 7, (int_least16_t) 12345); | |
228 | CHECK_PRINTF ("0012345 ", "%-*.*w16d", 10, 7, (int_least16_t) 12345); | |
229 | { | |
230 | int_least16_t ln = -1; | |
231 | CHECK_PRINTF ("12345", "%d%w16n", 12345, &ln); | |
232 | TEST_COMPARE (ln, 5); | |
233 | } | |
234 | /* Test truncation of value in promoted type not representable in | |
235 | narrower type. */ | |
236 | CHECK_PRINTF ("4464", "%w16d", 70000); | |
237 | CHECK_PRINTF ("-4464", "%w16d", -70000); | |
238 | CHECK_PRINTF ("-7616", "%w16d", 123456); | |
239 | CHECK_PRINTF ("7616", "%w16d", -123456); | |
240 | CHECK_PRINTF ("57920", "%w16u", 123456); | |
241 | /* Test positional argument handling. */ | |
242 | CHECK_PRINTF ("test 10 test2 20", "%4$s %3$w16d %2$s %1$w16d", | |
243 | 65556, "test2", 65546, "test"); | |
244 | } | |
245 | ||
246 | static void | |
247 | test_wf16 (void) | |
248 | { | |
249 | CHAR buf[1024]; | |
250 | _Static_assert (sizeof (int_fast16_t) == sizeof (long int), | |
251 | "test assumes size of int_fast16_t"); | |
252 | CHECK_PRINTF ("1234567", "%wf16d", (int_fast16_t) 1234567); | |
253 | CHECK_PRINTF ("-1234567", "%wf16d", (int_fast16_t) -1234567); | |
254 | CHECK_PRINTF ("1234567", "%wf16i", (int_fast16_t) 1234567); | |
255 | CHECK_PRINTF ("-1234567", "%wf16i", (int_fast16_t) -1234567); | |
256 | CHECK_PRINTF ("100101101011010000111", "%wf16b", (uint_fast16_t) 1234567); | |
257 | CHECK_PRINTF ("100101101011010000111", "%wf16B", (uint_fast16_t) 1234567); | |
258 | CHECK_PRINTF ("4553207", "%wf16o", (uint_fast16_t) 1234567); | |
259 | CHECK_PRINTF ("1234567", "%wf16u", (uint_fast16_t) 1234567); | |
260 | CHECK_PRINTF ("12d687", "%wf16x", (uint_fast16_t) 1234567); | |
261 | CHECK_PRINTF ("12D687", "%wf16X", (uint_fast16_t) 1234567); | |
262 | CHECK_PRINTF (" 1234567", "%9wf16d", (int_fast16_t) 1234567); | |
263 | CHECK_PRINTF (" 1234567", "%*wf16d", 9, (int_fast16_t) 1234567); | |
264 | CHECK_PRINTF ("0x12d687", "%#wf16x", (uint_fast16_t) 1234567); | |
265 | CHECK_PRINTF ("001234567", "%.9wf16d", (int_fast16_t) 1234567); | |
266 | CHECK_PRINTF ("001234567", "%.*wf16d", 9, (int_fast16_t) 1234567); | |
267 | CHECK_PRINTF (" 001234567", "%12.9wf16d", (int_fast16_t) 1234567); | |
268 | CHECK_PRINTF (" 001234567", "%*.9wf16d", 12, (int_fast16_t) 1234567); | |
269 | CHECK_PRINTF (" 001234567", "%12.*wf16d", 9, (int_fast16_t) 1234567); | |
270 | CHECK_PRINTF (" 001234567", "%*.*wf16d", 12, 9, (int_fast16_t) 1234567); | |
271 | CHECK_PRINTF ("001234567 ", "%-12.9wf16d", (int_fast16_t) 1234567); | |
272 | CHECK_PRINTF ("001234567 ", "%-*.9wf16d", 12, (int_fast16_t) 1234567); | |
273 | CHECK_PRINTF ("001234567 ", "%-12.*wf16d", 9, (int_fast16_t) 1234567); | |
274 | CHECK_PRINTF ("001234567 ", "%-*.*wf16d", 12, 9, (int_fast16_t) 1234567); | |
275 | { | |
276 | int_fast16_t n = -1; | |
277 | CHECK_PRINTF ("12345", "%d%wf16n", 12345, &n); | |
278 | TEST_COMPARE (n, 5); | |
279 | } | |
280 | /* Test positional argument handling. */ | |
281 | CHECK_PRINTF ("test 123456 test2 234567", "%4$s %3$wf16d %2$s %1$wf16d", | |
282 | (int_fast16_t) 234567, "test2", (int_fast16_t) 123456, "test"); | |
283 | #if INT_FAST16_MAX > 0x7fffffff | |
284 | CHECK_PRINTF ("12345678901", "%wf16d", (int_fast16_t) 12345678901LL); | |
285 | CHECK_PRINTF ("-12345678901", "%wf16d", (int_fast16_t) -12345678901LL); | |
286 | CHECK_PRINTF ("12345678901", "%wf16i", (int_fast16_t) 12345678901LL); | |
287 | CHECK_PRINTF ("-12345678901", "%wf16i", (int_fast16_t) -12345678901LL); | |
288 | CHECK_PRINTF ("1011011111110111000001110000110101", "%wf16b", | |
289 | (uint_fast16_t) 12345678901LL); | |
290 | CHECK_PRINTF ("1011011111110111000001110000110101", "%wf16B", | |
291 | (uint_fast16_t) 12345678901LL); | |
292 | CHECK_PRINTF ("133767016065", "%wf16o", (uint_fast16_t) 12345678901LL); | |
293 | CHECK_PRINTF ("12345678901", "%wf16u", (uint_fast16_t) 12345678901LL); | |
294 | CHECK_PRINTF ("2dfdc1c35", "%wf16x", (uint_fast16_t) 12345678901LL); | |
295 | CHECK_PRINTF ("2DFDC1C35", "%wf16X", (uint_fast16_t) 12345678901LL); | |
296 | CHECK_PRINTF (" 12345678901", "%13wf16d", (int_fast16_t) 12345678901LL); | |
297 | CHECK_PRINTF (" 12345678901", "%*wf16d", 13, (int_fast16_t) 12345678901LL); | |
298 | CHECK_PRINTF ("0x2dfdc1c35", "%#wf16x", (uint_fast16_t) 12345678901LL); | |
299 | CHECK_PRINTF ("0012345678901", "%.13wf16d", (int_fast16_t) 12345678901LL); | |
300 | CHECK_PRINTF ("0012345678901", "%.*wf16d", 13, (int_fast16_t) 12345678901LL); | |
301 | CHECK_PRINTF (" 0012345678901", "%16.13wf16d", | |
302 | (int_fast16_t) 12345678901LL); | |
303 | CHECK_PRINTF (" 0012345678901", "%*.13wf16d", 16, | |
304 | (int_fast16_t) 12345678901LL); | |
305 | CHECK_PRINTF (" 0012345678901", "%16.*wf16d", 13, | |
306 | (int_fast16_t) 12345678901LL); | |
307 | CHECK_PRINTF (" 0012345678901", "%*.*wf16d", 16, 13, | |
308 | (int_fast16_t) 12345678901LL); | |
309 | CHECK_PRINTF ("0012345678901 ", "%-16.13wf16d", | |
310 | (int_fast16_t) 12345678901LL); | |
311 | CHECK_PRINTF ("0012345678901 ", "%-*.13wf16d", 16, | |
312 | (int_fast16_t) 12345678901LL); | |
313 | CHECK_PRINTF ("0012345678901 ", "%-16.*wf16d", 13, | |
314 | (int_fast16_t) 12345678901LL); | |
315 | CHECK_PRINTF ("0012345678901 ", "%-*.*wf16d", 16, 13, | |
316 | (int_fast16_t) 12345678901LL); | |
317 | /* Test positional argument handling. */ | |
318 | CHECK_PRINTF ("test 123456789012 test2 234567890123", | |
319 | "%4$s %3$wf16d %2$s %1$wf16d", | |
320 | (int_fast16_t) 234567890123ULL, "test2", | |
321 | (int_fast16_t) 123456789012ULL, "test"); | |
322 | #endif | |
323 | } | |
324 | ||
325 | static void | |
326 | test_w32 (void) | |
327 | { | |
328 | CHAR buf[1024]; | |
329 | CHECK_PRINTF ("1234567", "%w32d", (int32_t) 1234567); | |
330 | CHECK_PRINTF ("-1234567", "%w32d", (int32_t) -1234567); | |
331 | CHECK_PRINTF ("1234567", "%w32i", (int32_t) 1234567); | |
332 | CHECK_PRINTF ("-1234567", "%w32i", (int32_t) -1234567); | |
333 | CHECK_PRINTF ("100101101011010000111", "%w32b", (uint32_t) 1234567); | |
334 | CHECK_PRINTF ("100101101011010000111", "%w32B", (uint32_t) 1234567); | |
335 | CHECK_PRINTF ("4553207", "%w32o", (uint32_t) 1234567); | |
336 | CHECK_PRINTF ("1234567", "%w32u", (uint32_t) 1234567); | |
337 | CHECK_PRINTF ("12d687", "%w32x", (uint32_t) 1234567); | |
338 | CHECK_PRINTF ("12D687", "%w32X", (uint32_t) 1234567); | |
339 | CHECK_PRINTF (" 1234567", "%9w32d", (int32_t) 1234567); | |
340 | CHECK_PRINTF (" 1234567", "%*w32d", 9, (int32_t) 1234567); | |
341 | CHECK_PRINTF ("0x12d687", "%#w32x", (uint32_t) 1234567); | |
342 | CHECK_PRINTF ("001234567", "%.9w32d", (int32_t) 1234567); | |
343 | CHECK_PRINTF ("001234567", "%.*w32d", 9, (int32_t) 1234567); | |
344 | CHECK_PRINTF (" 001234567", "%12.9w32d", (int32_t) 1234567); | |
345 | CHECK_PRINTF (" 001234567", "%*.9w32d", 12, (int32_t) 1234567); | |
346 | CHECK_PRINTF (" 001234567", "%12.*w32d", 9, (int32_t) 1234567); | |
347 | CHECK_PRINTF (" 001234567", "%*.*w32d", 12, 9, (int32_t) 1234567); | |
348 | CHECK_PRINTF ("001234567 ", "%-12.9w32d", (int32_t) 1234567); | |
349 | CHECK_PRINTF ("001234567 ", "%-*.9w32d", 12, (int32_t) 1234567); | |
350 | CHECK_PRINTF ("001234567 ", "%-12.*w32d", 9, (int32_t) 1234567); | |
351 | CHECK_PRINTF ("001234567 ", "%-*.*w32d", 12, 9, (int32_t) 1234567); | |
352 | { | |
353 | int32_t n = -1; | |
354 | CHECK_PRINTF ("12345", "%d%w32n", 12345, &n); | |
355 | TEST_COMPARE (n, 5); | |
356 | } | |
357 | CHECK_PRINTF ("1234567", "%w32d", (int_least32_t) 1234567); | |
358 | CHECK_PRINTF ("-1234567", "%w32d", (int_least32_t) -1234567); | |
359 | CHECK_PRINTF ("1234567", "%w32i", (int_least32_t) 1234567); | |
360 | CHECK_PRINTF ("-1234567", "%w32i", (int_least32_t) -1234567); | |
361 | CHECK_PRINTF ("100101101011010000111", "%w32b", (uint_least32_t) 1234567); | |
362 | CHECK_PRINTF ("100101101011010000111", "%w32B", (uint_least32_t) 1234567); | |
363 | CHECK_PRINTF ("4553207", "%w32o", (uint_least32_t) 1234567); | |
364 | CHECK_PRINTF ("1234567", "%w32u", (uint_least32_t) 1234567); | |
365 | CHECK_PRINTF ("12d687", "%w32x", (uint_least32_t) 1234567); | |
366 | CHECK_PRINTF ("12D687", "%w32X", (uint_least32_t) 1234567); | |
367 | CHECK_PRINTF (" 1234567", "%9w32d", (int_least32_t) 1234567); | |
368 | CHECK_PRINTF (" 1234567", "%*w32d", 9, (int_least32_t) 1234567); | |
369 | CHECK_PRINTF ("0x12d687", "%#w32x", (uint_least32_t) 1234567); | |
370 | CHECK_PRINTF ("001234567", "%.9w32d", (int_least32_t) 1234567); | |
371 | CHECK_PRINTF ("001234567", "%.*w32d", 9, (int_least32_t) 1234567); | |
372 | CHECK_PRINTF (" 001234567", "%12.9w32d", (int_least32_t) 1234567); | |
373 | CHECK_PRINTF (" 001234567", "%*.9w32d", 12, (int_least32_t) 1234567); | |
374 | CHECK_PRINTF (" 001234567", "%12.*w32d", 9, (int_least32_t) 1234567); | |
375 | CHECK_PRINTF (" 001234567", "%*.*w32d", 12, 9, (int_least32_t) 1234567); | |
376 | CHECK_PRINTF ("001234567 ", "%-12.9w32d", (int_least32_t) 1234567); | |
377 | CHECK_PRINTF ("001234567 ", "%-*.9w32d", 12, (int_least32_t) 1234567); | |
378 | CHECK_PRINTF ("001234567 ", "%-12.*w32d", 9, (int_least32_t) 1234567); | |
379 | CHECK_PRINTF ("001234567 ", "%-*.*w32d", 12, 9, (int_least32_t) 1234567); | |
380 | { | |
381 | int_least32_t ln = -1; | |
382 | CHECK_PRINTF ("12345", "%d%w32n", 12345, &ln); | |
383 | TEST_COMPARE (ln, 5); | |
384 | } | |
385 | /* Test positional argument handling. */ | |
386 | CHECK_PRINTF ("test 123456 test2 234567", "%4$s %3$w32d %2$s %1$w32d", | |
387 | INT32_C (234567), "test2", INT32_C (123456), "test"); | |
388 | } | |
389 | ||
390 | static void | |
391 | test_wf32 (void) | |
392 | { | |
393 | CHAR buf[1024]; | |
394 | _Static_assert (sizeof (int_fast32_t) == sizeof (long int), | |
395 | "test assumes size of int_fast32_t"); | |
396 | CHECK_PRINTF ("1234567", "%wf32d", (int_fast32_t) 1234567); | |
397 | CHECK_PRINTF ("-1234567", "%wf32d", (int_fast32_t) -1234567); | |
398 | CHECK_PRINTF ("1234567", "%wf32i", (int_fast32_t) 1234567); | |
399 | CHECK_PRINTF ("-1234567", "%wf32i", (int_fast32_t) -1234567); | |
400 | CHECK_PRINTF ("100101101011010000111", "%wf32b", (uint_fast32_t) 1234567); | |
401 | CHECK_PRINTF ("100101101011010000111", "%wf32B", (uint_fast32_t) 1234567); | |
402 | CHECK_PRINTF ("4553207", "%wf32o", (uint_fast32_t) 1234567); | |
403 | CHECK_PRINTF ("1234567", "%wf32u", (uint_fast32_t) 1234567); | |
404 | CHECK_PRINTF ("12d687", "%wf32x", (uint_fast32_t) 1234567); | |
405 | CHECK_PRINTF ("12D687", "%wf32X", (uint_fast32_t) 1234567); | |
406 | CHECK_PRINTF (" 1234567", "%9wf32d", (int_fast32_t) 1234567); | |
407 | CHECK_PRINTF (" 1234567", "%*wf32d", 9, (int_fast32_t) 1234567); | |
408 | CHECK_PRINTF ("0x12d687", "%#wf32x", (uint_fast32_t) 1234567); | |
409 | CHECK_PRINTF ("001234567", "%.9wf32d", (int_fast32_t) 1234567); | |
410 | CHECK_PRINTF ("001234567", "%.*wf32d", 9, (int_fast32_t) 1234567); | |
411 | CHECK_PRINTF (" 001234567", "%12.9wf32d", (int_fast32_t) 1234567); | |
412 | CHECK_PRINTF (" 001234567", "%*.9wf32d", 12, (int_fast32_t) 1234567); | |
413 | CHECK_PRINTF (" 001234567", "%12.*wf32d", 9, (int_fast32_t) 1234567); | |
414 | CHECK_PRINTF (" 001234567", "%*.*wf32d", 12, 9, (int_fast32_t) 1234567); | |
415 | CHECK_PRINTF ("001234567 ", "%-12.9wf32d", (int_fast32_t) 1234567); | |
416 | CHECK_PRINTF ("001234567 ", "%-*.9wf32d", 12, (int_fast32_t) 1234567); | |
417 | CHECK_PRINTF ("001234567 ", "%-12.*wf32d", 9, (int_fast32_t) 1234567); | |
418 | CHECK_PRINTF ("001234567 ", "%-*.*wf32d", 12, 9, (int_fast32_t) 1234567); | |
419 | { | |
420 | int_fast32_t n = -1; | |
421 | CHECK_PRINTF ("12345", "%d%wf32n", 12345, &n); | |
422 | TEST_COMPARE (n, 5); | |
423 | } | |
424 | /* Test positional argument handling. */ | |
425 | CHECK_PRINTF ("test 123456 test2 234567", "%4$s %3$wf32d %2$s %1$wf32d", | |
426 | (int_fast32_t) 234567, "test2", (int_fast32_t) 123456, "test"); | |
427 | #if INT_FAST32_MAX > 0x7fffffff | |
428 | CHECK_PRINTF ("12345678901", "%wf32d", (int_fast32_t) 12345678901LL); | |
429 | CHECK_PRINTF ("-12345678901", "%wf32d", (int_fast32_t) -12345678901LL); | |
430 | CHECK_PRINTF ("12345678901", "%wf32i", (int_fast32_t) 12345678901LL); | |
431 | CHECK_PRINTF ("-12345678901", "%wf32i", (int_fast32_t) -12345678901LL); | |
432 | CHECK_PRINTF ("1011011111110111000001110000110101", "%wf32b", | |
433 | (uint_fast32_t) 12345678901LL); | |
434 | CHECK_PRINTF ("1011011111110111000001110000110101", "%wf32B", | |
435 | (uint_fast32_t) 12345678901LL); | |
436 | CHECK_PRINTF ("133767016065", "%wf32o", (uint_fast32_t) 12345678901LL); | |
437 | CHECK_PRINTF ("12345678901", "%wf32u", (uint_fast32_t) 12345678901LL); | |
438 | CHECK_PRINTF ("2dfdc1c35", "%wf32x", (uint_fast32_t) 12345678901LL); | |
439 | CHECK_PRINTF ("2DFDC1C35", "%wf32X", (uint_fast32_t) 12345678901LL); | |
440 | CHECK_PRINTF (" 12345678901", "%13wf32d", (int_fast32_t) 12345678901LL); | |
441 | CHECK_PRINTF (" 12345678901", "%*wf32d", 13, (int_fast32_t) 12345678901LL); | |
442 | CHECK_PRINTF ("0x2dfdc1c35", "%#wf32x", (uint_fast32_t) 12345678901LL); | |
443 | CHECK_PRINTF ("0012345678901", "%.13wf32d", (int_fast32_t) 12345678901LL); | |
444 | CHECK_PRINTF ("0012345678901", "%.*wf32d", 13, (int_fast32_t) 12345678901LL); | |
445 | CHECK_PRINTF (" 0012345678901", "%16.13wf32d", | |
446 | (int_fast32_t) 12345678901LL); | |
447 | CHECK_PRINTF (" 0012345678901", "%*.13wf32d", 16, | |
448 | (int_fast32_t) 12345678901LL); | |
449 | CHECK_PRINTF (" 0012345678901", "%16.*wf32d", 13, | |
450 | (int_fast32_t) 12345678901LL); | |
451 | CHECK_PRINTF (" 0012345678901", "%*.*wf32d", 16, 13, | |
452 | (int_fast32_t) 12345678901LL); | |
453 | CHECK_PRINTF ("0012345678901 ", "%-16.13wf32d", | |
454 | (int_fast32_t) 12345678901LL); | |
455 | CHECK_PRINTF ("0012345678901 ", "%-*.13wf32d", 16, | |
456 | (int_fast32_t) 12345678901LL); | |
457 | CHECK_PRINTF ("0012345678901 ", "%-16.*wf32d", 13, | |
458 | (int_fast32_t) 12345678901LL); | |
459 | CHECK_PRINTF ("0012345678901 ", "%-*.*wf32d", 16, 13, | |
460 | (int_fast32_t) 12345678901LL); | |
461 | /* Test positional argument handling. */ | |
462 | CHECK_PRINTF ("test 123456789012 test2 234567890123", | |
463 | "%4$s %3$wf32d %2$s %1$wf32d", | |
464 | (int_fast32_t) 234567890123ULL, "test2", | |
465 | (int_fast32_t) 123456789012ULL, "test"); | |
466 | #endif | |
467 | } | |
468 | ||
469 | static void | |
470 | test_w64 (void) | |
471 | { | |
472 | CHAR buf[1024]; | |
473 | CHECK_PRINTF ("12345678901", "%w64d", (int64_t) 12345678901LL); | |
474 | CHECK_PRINTF ("-12345678901", "%w64d", (int64_t) -12345678901LL); | |
475 | CHECK_PRINTF ("12345678901", "%w64i", (int64_t) 12345678901LL); | |
476 | CHECK_PRINTF ("-12345678901", "%w64i", (int64_t) -12345678901LL); | |
477 | CHECK_PRINTF ("1011011111110111000001110000110101", "%w64b", | |
478 | (uint64_t) 12345678901LL); | |
479 | CHECK_PRINTF ("1011011111110111000001110000110101", "%w64B", | |
480 | (uint64_t) 12345678901LL); | |
481 | CHECK_PRINTF ("133767016065", "%w64o", (uint64_t) 12345678901LL); | |
482 | CHECK_PRINTF ("12345678901", "%w64u", (uint64_t) 12345678901LL); | |
483 | CHECK_PRINTF ("2dfdc1c35", "%w64x", (uint64_t) 12345678901LL); | |
484 | CHECK_PRINTF ("2DFDC1C35", "%w64X", (uint64_t) 12345678901LL); | |
485 | CHECK_PRINTF (" 12345678901", "%13w64d", (int64_t) 12345678901LL); | |
486 | CHECK_PRINTF (" 12345678901", "%*w64d", 13, (int64_t) 12345678901LL); | |
487 | CHECK_PRINTF ("0x2dfdc1c35", "%#w64x", (uint64_t) 12345678901LL); | |
488 | CHECK_PRINTF ("0012345678901", "%.13w64d", (int64_t) 12345678901LL); | |
489 | CHECK_PRINTF ("0012345678901", "%.*w64d", 13, (int64_t) 12345678901LL); | |
490 | CHECK_PRINTF (" 0012345678901", "%16.13w64d", (int64_t) 12345678901LL); | |
491 | CHECK_PRINTF (" 0012345678901", "%*.13w64d", 16, (int64_t) 12345678901LL); | |
492 | CHECK_PRINTF (" 0012345678901", "%16.*w64d", 13, (int64_t) 12345678901LL); | |
493 | CHECK_PRINTF (" 0012345678901", "%*.*w64d", 16, 13, | |
494 | (int64_t) 12345678901LL); | |
495 | CHECK_PRINTF ("0012345678901 ", "%-16.13w64d", (int64_t) 12345678901LL); | |
496 | CHECK_PRINTF ("0012345678901 ", "%-*.13w64d", 16, (int64_t) 12345678901LL); | |
497 | CHECK_PRINTF ("0012345678901 ", "%-16.*w64d", 13, (int64_t) 12345678901LL); | |
498 | CHECK_PRINTF ("0012345678901 ", "%-*.*w64d", 16, 13, | |
499 | (int64_t) 12345678901LL); | |
500 | { | |
501 | int64_t n = -1; | |
502 | CHECK_PRINTF ("12345", "%d%w64n", 12345, &n); | |
503 | TEST_COMPARE (n, 5); | |
504 | } | |
505 | CHECK_PRINTF ("12345678901", "%w64d", (int_least64_t) 12345678901LL); | |
506 | CHECK_PRINTF ("-12345678901", "%w64d", (int_least64_t) -12345678901LL); | |
507 | CHECK_PRINTF ("12345678901", "%w64i", (int_least64_t) 12345678901LL); | |
508 | CHECK_PRINTF ("-12345678901", "%w64i", (int_least64_t) -12345678901LL); | |
509 | CHECK_PRINTF ("1011011111110111000001110000110101", "%w64b", | |
510 | (uint_least64_t) 12345678901LL); | |
511 | CHECK_PRINTF ("1011011111110111000001110000110101", "%w64B", | |
512 | (uint_least64_t) 12345678901LL); | |
513 | CHECK_PRINTF ("133767016065", "%w64o", (uint_least64_t) 12345678901LL); | |
514 | CHECK_PRINTF ("12345678901", "%w64u", (uint_least64_t) 12345678901LL); | |
515 | CHECK_PRINTF ("2dfdc1c35", "%w64x", (uint_least64_t) 12345678901LL); | |
516 | CHECK_PRINTF ("2DFDC1C35", "%w64X", (uint_least64_t) 12345678901LL); | |
517 | CHECK_PRINTF (" 12345678901", "%13w64d", (int_least64_t) 12345678901LL); | |
518 | CHECK_PRINTF (" 12345678901", "%*w64d", 13, (int_least64_t) 12345678901LL); | |
519 | CHECK_PRINTF ("0x2dfdc1c35", "%#w64x", (uint_least64_t) 12345678901LL); | |
520 | CHECK_PRINTF ("0012345678901", "%.13w64d", (int_least64_t) 12345678901LL); | |
521 | CHECK_PRINTF ("0012345678901", "%.*w64d", 13, (int_least64_t) 12345678901LL); | |
522 | CHECK_PRINTF (" 0012345678901", "%16.13w64d", | |
523 | (int_least64_t) 12345678901LL); | |
524 | CHECK_PRINTF (" 0012345678901", "%*.13w64d", 16, | |
525 | (int_least64_t) 12345678901LL); | |
526 | CHECK_PRINTF (" 0012345678901", "%16.*w64d", 13, | |
527 | (int_least64_t) 12345678901LL); | |
528 | CHECK_PRINTF (" 0012345678901", "%*.*w64d", 16, 13, | |
529 | (int_least64_t) 12345678901LL); | |
530 | CHECK_PRINTF ("0012345678901 ", "%-16.13w64d", | |
531 | (int_least64_t) 12345678901LL); | |
532 | CHECK_PRINTF ("0012345678901 ", "%-*.13w64d", 16, | |
533 | (int_least64_t) 12345678901LL); | |
534 | CHECK_PRINTF ("0012345678901 ", "%-16.*w64d", 13, | |
535 | (int_least64_t) 12345678901LL); | |
536 | CHECK_PRINTF ("0012345678901 ", "%-*.*w64d", 16, 13, | |
537 | (int_least64_t) 12345678901LL); | |
538 | { | |
539 | int_least64_t ln = -1; | |
540 | CHECK_PRINTF ("12345", "%d%w64n", 12345, &ln); | |
541 | TEST_COMPARE (ln, 5); | |
542 | } | |
543 | /* Test positional argument handling. */ | |
544 | CHECK_PRINTF ("test 123456789012 test2 234567890123", | |
545 | "%4$s %3$w64d %2$s %1$w64d", | |
546 | INT64_C (234567890123), "test2", | |
547 | INT64_C (123456789012), "test"); | |
548 | } | |
549 | ||
550 | static void | |
551 | test_wf64 (void) | |
552 | { | |
553 | CHAR buf[1024]; | |
554 | _Static_assert (sizeof (int_fast64_t) == sizeof (long long int), | |
555 | "test assumes size of int_fast64_t"); | |
556 | CHECK_PRINTF ("12345678901", "%wf64d", (int_fast64_t) 12345678901LL); | |
557 | CHECK_PRINTF ("-12345678901", "%wf64d", (int_fast64_t) -12345678901LL); | |
558 | CHECK_PRINTF ("12345678901", "%wf64i", (int_fast64_t) 12345678901LL); | |
559 | CHECK_PRINTF ("-12345678901", "%wf64i", (int_fast64_t) -12345678901LL); | |
560 | CHECK_PRINTF ("1011011111110111000001110000110101", "%wf64b", | |
561 | (uint_fast64_t) 12345678901LL); | |
562 | CHECK_PRINTF ("1011011111110111000001110000110101", "%wf64B", | |
563 | (uint_fast64_t) 12345678901LL); | |
564 | CHECK_PRINTF ("133767016065", "%wf64o", (uint_fast64_t) 12345678901LL); | |
565 | CHECK_PRINTF ("12345678901", "%wf64u", (uint_fast64_t) 12345678901LL); | |
566 | CHECK_PRINTF ("2dfdc1c35", "%wf64x", (uint_fast64_t) 12345678901LL); | |
567 | CHECK_PRINTF ("2DFDC1C35", "%wf64X", (uint_fast64_t) 12345678901LL); | |
568 | CHECK_PRINTF (" 12345678901", "%13wf64d", (int_fast64_t) 12345678901LL); | |
569 | CHECK_PRINTF (" 12345678901", "%*wf64d", 13, (int_fast64_t) 12345678901LL); | |
570 | CHECK_PRINTF ("0x2dfdc1c35", "%#wf64x", (uint_fast64_t) 12345678901LL); | |
571 | CHECK_PRINTF ("0012345678901", "%.13wf64d", (int_fast64_t) 12345678901LL); | |
572 | CHECK_PRINTF ("0012345678901", "%.*wf64d", 13, (int_fast64_t) 12345678901LL); | |
573 | CHECK_PRINTF (" 0012345678901", "%16.13wf64d", | |
574 | (int_fast64_t) 12345678901LL); | |
575 | CHECK_PRINTF (" 0012345678901", "%*.13wf64d", 16, | |
576 | (int_fast64_t) 12345678901LL); | |
577 | CHECK_PRINTF (" 0012345678901", "%16.*wf64d", 13, | |
578 | (int_fast64_t) 12345678901LL); | |
579 | CHECK_PRINTF (" 0012345678901", "%*.*wf64d", 16, 13, | |
580 | (int_fast64_t) 12345678901LL); | |
581 | CHECK_PRINTF ("0012345678901 ", "%-16.13wf64d", | |
582 | (int_fast64_t) 12345678901LL); | |
583 | CHECK_PRINTF ("0012345678901 ", "%-*.13wf64d", 16, | |
584 | (int_fast64_t) 12345678901LL); | |
585 | CHECK_PRINTF ("0012345678901 ", "%-16.*wf64d", 13, | |
586 | (int_fast64_t) 12345678901LL); | |
587 | CHECK_PRINTF ("0012345678901 ", "%-*.*wf64d", 16, 13, | |
588 | (int_fast64_t) 12345678901LL); | |
589 | { | |
590 | int_fast64_t n = -1; | |
591 | CHECK_PRINTF ("12345", "%d%wf64n", 12345, &n); | |
592 | TEST_COMPARE (n, 5); | |
593 | } | |
594 | /* Test positional argument handling. */ | |
595 | CHECK_PRINTF ("test 123456789012 test2 234567890123", | |
596 | "%4$s %3$wf64d %2$s %1$wf64d", | |
597 | (int_fast64_t) 234567890123ULL, "test2", | |
598 | (int_fast64_t) 123456789012ULL, "test"); | |
599 | } | |
600 | ||
601 | static int | |
602 | do_test (void) | |
603 | { | |
604 | test_w8 (); | |
605 | test_wf8 (); | |
606 | test_w16 (); | |
607 | test_wf16 (); | |
608 | test_w32 (); | |
609 | test_wf32 (); | |
610 | test_w64 (); | |
611 | test_wf64 (); | |
612 | /* Bad N in %wN and %wfN are required to produce an error return | |
613 | from printf functions (and can also be seen to be invalid at | |
614 | compile time). */ | |
615 | DIAG_PUSH_NEEDS_COMMENT; | |
616 | DIAG_IGNORE_NEEDS_COMMENT (13, "-Wformat"); | |
617 | DIAG_IGNORE_NEEDS_COMMENT (13, "-Wformat-extra-args"); | |
618 | CHAR buf[1024]; | |
619 | CHECK_PRINTF_ERR ("%w1d", 123); | |
620 | CHECK_PRINTF_ERR ("%w123d", 123); | |
621 | CHECK_PRINTF_ERR ("%w99999999999999999999d", 123); | |
622 | CHECK_PRINTF_ERR ("%wf1d", 123); | |
623 | CHECK_PRINTF_ERR ("%wf123d", 123); | |
624 | CHECK_PRINTF_ERR ("%wf99999999999999999999d", 123); | |
625 | CHECK_PRINTF_ERR ("%1$w1d", 123); | |
626 | CHECK_PRINTF_ERR ("%1$w123d", 123); | |
627 | CHECK_PRINTF_ERR ("%1$w99999999999999999999d", 123); | |
628 | CHECK_PRINTF_ERR ("%1$wf1d", 123); | |
629 | CHECK_PRINTF_ERR ("%1$wf123d", 123); | |
630 | CHECK_PRINTF_ERR ("%1$wf99999999999999999999d", 123); | |
631 | DIAG_POP_NEEDS_COMMENT; | |
632 | return 0; | |
633 | } | |
634 | ||
635 | DIAG_POP_NEEDS_COMMENT; | |
636 | ||
637 | #include <support/test-driver.c> |