This source file includes following definitions.
- have_minus_zero
- strmatch
- strisnan
- test_function
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 #include "minus-zero.h"
20 #include "infinity.h"
21 #include "nan.h"
22
23
24 static int
25 have_minus_zero ()
26 {
27 static double plus_zero = 0.0;
28 double minus_zero = minus_zerod;
29 return memcmp (&plus_zero, &minus_zero, sizeof (double)) != 0;
30 }
31
32
33
34 #ifdef WORDS_BIGENDIAN
35 # define LDBL80_WORDS(exponent,manthi,mantlo) \
36 { ((unsigned int) (exponent) << 16) | ((unsigned int) (manthi) >> 16), \
37 ((unsigned int) (manthi) << 16) | ((unsigned int) (mantlo) >> 16), \
38 (unsigned int) (mantlo) << 16 \
39 }
40 #else
41 # define LDBL80_WORDS(exponent,manthi,mantlo) \
42 { mantlo, manthi, exponent }
43 #endif
44
45 static int
46 strmatch (const char *pattern, const char *string)
47 {
48 if (strlen (pattern) != strlen (string))
49 return 0;
50 for (; *pattern != '\0'; pattern++, string++)
51 if (*pattern != '*' && *string != *pattern)
52 return 0;
53 return 1;
54 }
55
56
57
58 static int
59 strisnan (const char *string, size_t start_index, size_t end_index, int uppercase)
60 {
61 if (start_index < end_index)
62 {
63 if (string[start_index] == '-')
64 start_index++;
65 if (start_index + 3 <= end_index
66 && memcmp (string + start_index, uppercase ? "NAN" : "nan", 3) == 0)
67 {
68 start_index += 3;
69 if (start_index == end_index
70 || (string[start_index] == '(' && string[end_index - 1] == ')'))
71 return 1;
72 }
73 }
74 return 0;
75 }
76
77 static void
78 test_function (int (*my_sprintf) (char *, const char *, ...))
79 {
80 char result[5000];
81 char buf[8];
82
83
84
85 {
86 int retval;
87
88 memcpy (buf, "DEADBEEF", 8);
89 retval = my_sprintf (buf, "%d", 12345);
90 ASSERT (retval == 5);
91 ASSERT (memcmp (buf, "12345\0EF", 8) == 0);
92 }
93
94
95
96 {
97 int retval =
98 my_sprintf (result, "%ju %d", (uintmax_t) 12345671, 33, 44, 55);
99 ASSERT (strcmp (result, "12345671 33") == 0);
100 ASSERT (retval == strlen (result));
101 }
102
103 {
104 int retval =
105 my_sprintf (result, "%zu %d", (size_t) 12345672, 33, 44, 55);
106 ASSERT (strcmp (result, "12345672 33") == 0);
107 ASSERT (retval == strlen (result));
108 }
109
110 {
111 int retval =
112 my_sprintf (result, "%tu %d", (ptrdiff_t) 12345673, 33, 44, 55);
113 ASSERT (strcmp (result, "12345673 33") == 0);
114 ASSERT (retval == strlen (result));
115 }
116
117 {
118 int retval =
119 my_sprintf (result, "%Lg %d", (long double) 1.5, 33, 44, 55);
120 ASSERT (strcmp (result, "1.5 33") == 0);
121 ASSERT (retval == strlen (result));
122 }
123
124
125
126
127 {
128 int retval =
129 my_sprintf (result, "%a %d", 3.1416015625, 33, 44, 55);
130 ASSERT (strcmp (result, "0x1.922p+1 33") == 0
131 || strcmp (result, "0x3.244p+0 33") == 0
132 || strcmp (result, "0x6.488p-1 33") == 0
133 || strcmp (result, "0xc.91p-2 33") == 0);
134 ASSERT (retval == strlen (result));
135 }
136
137 {
138 int retval =
139 my_sprintf (result, "%A %d", -3.1416015625, 33, 44, 55);
140 ASSERT (strcmp (result, "-0X1.922P+1 33") == 0
141 || strcmp (result, "-0X3.244P+0 33") == 0
142 || strcmp (result, "-0X6.488P-1 33") == 0
143 || strcmp (result, "-0XC.91P-2 33") == 0);
144 ASSERT (retval == strlen (result));
145 }
146
147 {
148 int retval =
149 my_sprintf (result, "%a %d", 0.0, 33, 44, 55);
150 ASSERT (strcmp (result, "0x0p+0 33") == 0);
151 ASSERT (retval == strlen (result));
152 }
153
154 {
155 int retval =
156 my_sprintf (result, "%a %d", minus_zerod, 33, 44, 55);
157 if (have_minus_zero ())
158 ASSERT (strcmp (result, "-0x0p+0 33") == 0);
159 ASSERT (retval == strlen (result));
160 }
161
162 {
163 int retval =
164 my_sprintf (result, "%a %d", Infinityd (), 33, 44, 55);
165 ASSERT (strcmp (result, "inf 33") == 0);
166 ASSERT (retval == strlen (result));
167 }
168
169 {
170 int retval =
171 my_sprintf (result, "%a %d", - Infinityd (), 33, 44, 55);
172 ASSERT (strcmp (result, "-inf 33") == 0);
173 ASSERT (retval == strlen (result));
174 }
175
176 {
177 int retval =
178 my_sprintf (result, "%a %d", NaNd (), 33, 44, 55);
179 ASSERT (strlen (result) >= 3 + 3
180 && strisnan (result, 0, strlen (result) - 3, 0)
181 && strcmp (result + strlen (result) - 3, " 33") == 0);
182 ASSERT (retval == strlen (result));
183 }
184
185 {
186 int retval =
187 my_sprintf (result, "%.0a %d", 1.5, 33, 44, 55);
188 ASSERT (strcmp (result, "0x2p+0 33") == 0
189 || strcmp (result, "0x3p-1 33") == 0
190 || strcmp (result, "0x6p-2 33") == 0
191 || strcmp (result, "0xcp-3 33") == 0);
192 ASSERT (retval == strlen (result));
193 }
194
195 {
196 int retval =
197 my_sprintf (result, "%.0a %d", 1.51, 33, 44, 55);
198 ASSERT (strcmp (result, "0x2p+0 33") == 0
199 || strcmp (result, "0x3p-1 33") == 0
200 || strcmp (result, "0x6p-2 33") == 0
201 || strcmp (result, "0xcp-3 33") == 0);
202 ASSERT (retval == strlen (result));
203 }
204
205 {
206 int retval =
207 my_sprintf (result, "%.1a %d", 1.51, 33, 44, 55);
208 ASSERT (strcmp (result, "0x1.8p+0 33") == 0
209 || strcmp (result, "0x3.0p-1 33") == 0
210 || strcmp (result, "0x6.1p-2 33") == 0
211 || strcmp (result, "0xc.1p-3 33") == 0);
212 ASSERT (retval == strlen (result));
213 }
214
215 {
216 int retval =
217 my_sprintf (result, "%.2a %d", 1.51, 33, 44, 55);
218 ASSERT (strcmp (result, "0x1.83p+0 33") == 0
219 || strcmp (result, "0x3.05p-1 33") == 0
220 || strcmp (result, "0x6.0ap-2 33") == 0
221 || strcmp (result, "0xc.14p-3 33") == 0);
222 ASSERT (retval == strlen (result));
223 }
224
225 {
226 int retval =
227 my_sprintf (result, "%.3a %d", 1.51, 33, 44, 55);
228 ASSERT (strcmp (result, "0x1.829p+0 33") == 0
229 || strcmp (result, "0x3.052p-1 33") == 0
230 || strcmp (result, "0x6.0a4p-2 33") == 0
231 || strcmp (result, "0xc.148p-3 33") == 0);
232 ASSERT (retval == strlen (result));
233 }
234
235 {
236 int retval =
237 my_sprintf (result, "%.3a %d", 1.49999, 33, 44, 55);
238 ASSERT (strcmp (result, "0x1.800p+0 33") == 0
239 || strcmp (result, "0x3.000p-1 33") == 0
240 || strcmp (result, "0x6.000p-2 33") == 0
241 || strcmp (result, "0xc.000p-3 33") == 0);
242 ASSERT (retval == strlen (result));
243 }
244
245 {
246
247 int retval =
248 my_sprintf (result, "%.1a %d", 1.999, 33, 44, 55);
249 ASSERT (strcmp (result, "0x1.0p+1 33") == 0
250 || strcmp (result, "0x2.0p+0 33") == 0
251 || strcmp (result, "0x4.0p-1 33") == 0
252 || strcmp (result, "0x8.0p-2 33") == 0);
253 ASSERT (retval == strlen (result));
254 }
255
256 {
257 int retval =
258 my_sprintf (result, "%10a %d", 1.75, 33, 44, 55);
259 ASSERT (strcmp (result, " 0x1.cp+0 33") == 0
260 || strcmp (result, " 0x3.8p-1 33") == 0
261 || strcmp (result, " 0x7p-2 33") == 0
262 || strcmp (result, " 0xep-3 33") == 0);
263 ASSERT (retval == strlen (result));
264 }
265
266 {
267 int retval =
268 my_sprintf (result, "%.10a %d", 1.75, 33, 44, 55);
269 ASSERT (strcmp (result, "0x1.c000000000p+0 33") == 0
270 || strcmp (result, "0x3.8000000000p-1 33") == 0
271 || strcmp (result, "0x7.0000000000p-2 33") == 0
272 || strcmp (result, "0xe.0000000000p-3 33") == 0);
273 ASSERT (retval == strlen (result));
274 }
275
276 {
277 int retval =
278 my_sprintf (result, "%.50a %d", 1.75, 33, 44, 55);
279 ASSERT (strcmp (result, "0x1.c0000000000000000000000000000000000000000000000000p+0 33") == 0
280 || strcmp (result, "0x3.80000000000000000000000000000000000000000000000000p-1 33") == 0
281 || strcmp (result, "0x7.00000000000000000000000000000000000000000000000000p-2 33") == 0
282 || strcmp (result, "0xe.00000000000000000000000000000000000000000000000000p-3 33") == 0);
283 ASSERT (retval == strlen (result));
284 }
285
286 {
287 int retval =
288 my_sprintf (result, "%-10a %d", 1.75, 33, 44, 55);
289 ASSERT (strcmp (result, "0x1.cp+0 33") == 0
290 || strcmp (result, "0x3.8p-1 33") == 0
291 || strcmp (result, "0x7p-2 33") == 0
292 || strcmp (result, "0xep-3 33") == 0);
293 ASSERT (retval == strlen (result));
294 }
295
296 {
297 int retval =
298 my_sprintf (result, "%+a %d", 1.75, 33, 44, 55);
299 ASSERT (strcmp (result, "+0x1.cp+0 33") == 0
300 || strcmp (result, "+0x3.8p-1 33") == 0
301 || strcmp (result, "+0x7p-2 33") == 0
302 || strcmp (result, "+0xep-3 33") == 0);
303 ASSERT (retval == strlen (result));
304 }
305
306 {
307 int retval =
308 my_sprintf (result, "% a %d", 1.75, 33, 44, 55);
309 ASSERT (strcmp (result, " 0x1.cp+0 33") == 0
310 || strcmp (result, " 0x3.8p-1 33") == 0
311 || strcmp (result, " 0x7p-2 33") == 0
312 || strcmp (result, " 0xep-3 33") == 0);
313 ASSERT (retval == strlen (result));
314 }
315
316 {
317 int retval =
318 my_sprintf (result, "%#a %d", 1.75, 33, 44, 55);
319 ASSERT (strcmp (result, "0x1.cp+0 33") == 0
320 || strcmp (result, "0x3.8p-1 33") == 0
321 || strcmp (result, "0x7.p-2 33") == 0
322 || strcmp (result, "0xe.p-3 33") == 0);
323 ASSERT (retval == strlen (result));
324 }
325
326 {
327 int retval =
328 my_sprintf (result, "%#a %d", 1.0, 33, 44, 55);
329 ASSERT (strcmp (result, "0x1.p+0 33") == 0
330 || strcmp (result, "0x2.p-1 33") == 0
331 || strcmp (result, "0x4.p-2 33") == 0
332 || strcmp (result, "0x8.p-3 33") == 0);
333 ASSERT (retval == strlen (result));
334 }
335
336 {
337 int retval =
338 my_sprintf (result, "%010a %d", 1.75, 33, 44, 55);
339 ASSERT (strcmp (result, "0x001.cp+0 33") == 0
340 || strcmp (result, "0x003.8p-1 33") == 0
341 || strcmp (result, "0x00007p-2 33") == 0
342 || strcmp (result, "0x0000ep-3 33") == 0);
343 ASSERT (retval == strlen (result));
344 }
345
346 {
347 int retval =
348 my_sprintf (result, "%010a %d", Infinityd (), 33, 44, 55);
349
350
351 ASSERT (strcmp (result, " inf 33") == 0);
352 ASSERT (retval == strlen (result));
353 }
354
355 {
356 int retval =
357 my_sprintf (result, "%050a %d", NaNd (), 33, 44, 55);
358
359
360 ASSERT (strlen (result) == 50 + 3
361 && strisnan (result, strspn (result, " "), strlen (result) - 3, 0)
362 && strcmp (result + strlen (result) - 3, " 33") == 0);
363 ASSERT (retval == strlen (result));
364 }
365
366 {
367 int retval =
368 my_sprintf (result, "%La %d", 3.1416015625L, 33, 44, 55);
369 ASSERT (strcmp (result, "0x1.922p+1 33") == 0
370 || strcmp (result, "0x3.244p+0 33") == 0
371 || strcmp (result, "0x6.488p-1 33") == 0
372 || strcmp (result, "0xc.91p-2 33") == 0);
373 ASSERT (retval == strlen (result));
374 }
375
376 {
377 int retval =
378 my_sprintf (result, "%LA %d", -3.1416015625L, 33, 44, 55);
379 ASSERT (strcmp (result, "-0X1.922P+1 33") == 0
380 || strcmp (result, "-0X3.244P+0 33") == 0
381 || strcmp (result, "-0X6.488P-1 33") == 0
382 || strcmp (result, "-0XC.91P-2 33") == 0);
383 ASSERT (retval == strlen (result));
384 }
385
386 {
387 int retval =
388 my_sprintf (result, "%La %d", 0.0L, 33, 44, 55);
389 ASSERT (strcmp (result, "0x0p+0 33") == 0);
390 ASSERT (retval == strlen (result));
391 }
392
393 {
394 int retval =
395 my_sprintf (result, "%La %d", minus_zerol, 33, 44, 55);
396 if (have_minus_zero ())
397 ASSERT (strcmp (result, "-0x0p+0 33") == 0);
398 ASSERT (retval == strlen (result));
399 }
400
401 {
402 int retval =
403 my_sprintf (result, "%La %d", Infinityl (), 33, 44, 55);
404 ASSERT (strcmp (result, "inf 33") == 0);
405 ASSERT (retval == strlen (result));
406 }
407
408 {
409 int retval =
410 my_sprintf (result, "%La %d", - Infinityl (), 33, 44, 55);
411 ASSERT (strcmp (result, "-inf 33") == 0);
412 ASSERT (retval == strlen (result));
413 }
414
415 {
416 int retval =
417 my_sprintf (result, "%La %d", NaNl (), 33, 44, 55);
418 ASSERT (strlen (result) >= 3 + 3
419 && strisnan (result, 0, strlen (result) - 3, 0)
420 && strcmp (result + strlen (result) - 3, " 33") == 0);
421 ASSERT (retval == strlen (result));
422 }
423 #if CHECK_PRINTF_SAFE && ((defined __ia64 && LDBL_MANT_DIG == 64) || (defined __x86_64__ || defined __amd64__) || (defined __i386 || defined __i386__ || defined _I386 || defined _M_IX86 || defined _X86_)) && !HAVE_SAME_LONG_DOUBLE_AS_DOUBLE
424 {
425 static union { unsigned int word[4]; long double value; } x =
426 { LDBL80_WORDS (0xFFFF, 0xC3333333, 0x00000000) };
427 int retval =
428 my_sprintf (result, "%La %d", x.value, 33, 44, 55);
429 ASSERT (strlen (result) >= 3 + 3
430 && strisnan (result, 0, strlen (result) - 3, 0)
431 && strcmp (result + strlen (result) - 3, " 33") == 0);
432 ASSERT (retval == strlen (result));
433 }
434 {
435
436 static union { unsigned int word[4]; long double value; } x =
437 { LDBL80_WORDS (0xFFFF, 0x83333333, 0x00000000) };
438 int retval =
439 my_sprintf (result, "%La %d", x.value, 33, 44, 55);
440 ASSERT (strlen (result) >= 3 + 3
441 && strisnan (result, 0, strlen (result) - 3, 0)
442 && strcmp (result + strlen (result) - 3, " 33") == 0);
443 ASSERT (retval == strlen (result));
444 }
445
446 {
447 static union { unsigned int word[4]; long double value; } x =
448 { LDBL80_WORDS (0xFFFF, 0x40000001, 0x00000000) };
449 int retval =
450 my_sprintf (result, "%La %d", x.value, 33, 44, 55);
451 ASSERT (retval == strlen (result));
452 ASSERT (3 < retval && strcmp (result + retval - 3, " 33") == 0);
453 }
454 {
455 static union { unsigned int word[4]; long double value; } x =
456 { LDBL80_WORDS (0xFFFF, 0x00000000, 0x00000000) };
457 int retval =
458 my_sprintf (result, "%La %d", x.value, 33, 44, 55);
459 ASSERT (retval == strlen (result));
460 ASSERT (3 < retval && strcmp (result + retval - 3, " 33") == 0);
461 }
462 {
463 static union { unsigned int word[4]; long double value; } x =
464 { LDBL80_WORDS (0x4004, 0x00000000, 0x00000000) };
465 int retval =
466 my_sprintf (result, "%La %d", x.value, 33, 44, 55);
467 ASSERT (retval == strlen (result));
468 ASSERT (3 < retval && strcmp (result + retval - 3, " 33") == 0);
469 }
470 {
471 static union { unsigned int word[4]; long double value; } x =
472 { LDBL80_WORDS (0x4000, 0x63333333, 0x00000000) };
473 int retval =
474 my_sprintf (result, "%La %d", x.value, 33, 44, 55);
475 ASSERT (retval == strlen (result));
476 ASSERT (3 < retval && strcmp (result + retval - 3, " 33") == 0);
477 }
478 {
479 static union { unsigned int word[4]; long double value; } x =
480 { LDBL80_WORDS (0x0000, 0x83333333, 0x00000000) };
481 int retval =
482 my_sprintf (result, "%La %d", x.value, 33, 44, 55);
483 ASSERT (retval == strlen (result));
484 ASSERT (3 < retval && strcmp (result + retval - 3, " 33") == 0);
485 }
486 #endif
487
488 {
489 int retval =
490 my_sprintf (result, "%.0La %d", 1.5L, 33, 44, 55);
491 ASSERT (strcmp (result, "0x2p+0 33") == 0
492 || strcmp (result, "0x3p-1 33") == 0
493 || strcmp (result, "0x6p-2 33") == 0
494 || strcmp (result, "0xcp-3 33") == 0);
495 ASSERT (retval == strlen (result));
496 }
497
498 {
499 int retval =
500 my_sprintf (result, "%.0La %d", 1.51L, 33, 44, 55);
501 ASSERT (strcmp (result, "0x2p+0 33") == 0
502 || strcmp (result, "0x3p-1 33") == 0
503 || strcmp (result, "0x6p-2 33") == 0
504 || strcmp (result, "0xcp-3 33") == 0);
505 ASSERT (retval == strlen (result));
506 }
507
508 {
509 int retval =
510 my_sprintf (result, "%.1La %d", 1.51L, 33, 44, 55);
511 ASSERT (strcmp (result, "0x1.8p+0 33") == 0
512 || strcmp (result, "0x3.0p-1 33") == 0
513 || strcmp (result, "0x6.1p-2 33") == 0
514 || strcmp (result, "0xc.1p-3 33") == 0);
515 ASSERT (retval == strlen (result));
516 }
517
518 {
519 int retval =
520 my_sprintf (result, "%.2La %d", 1.51L, 33, 44, 55);
521 ASSERT (strcmp (result, "0x1.83p+0 33") == 0
522 || strcmp (result, "0x3.05p-1 33") == 0
523 || strcmp (result, "0x6.0ap-2 33") == 0
524 || strcmp (result, "0xc.14p-3 33") == 0);
525 ASSERT (retval == strlen (result));
526 }
527
528 {
529 int retval =
530 my_sprintf (result, "%.3La %d", 1.51L, 33, 44, 55);
531 ASSERT (strcmp (result, "0x1.829p+0 33") == 0
532 || strcmp (result, "0x3.052p-1 33") == 0
533 || strcmp (result, "0x6.0a4p-2 33") == 0
534 || strcmp (result, "0xc.148p-3 33") == 0);
535 ASSERT (retval == strlen (result));
536 }
537
538 {
539 int retval =
540 my_sprintf (result, "%.3La %d", 1.49999L, 33, 44, 55);
541 ASSERT (strcmp (result, "0x1.800p+0 33") == 0
542 || strcmp (result, "0x3.000p-1 33") == 0
543 || strcmp (result, "0x6.000p-2 33") == 0
544 || strcmp (result, "0xc.000p-3 33") == 0);
545 ASSERT (retval == strlen (result));
546 }
547
548 {
549
550
551 int retval =
552 my_sprintf (result, "%.1La %d", 1.999L, 33, 44, 55);
553 ASSERT (strcmp (result, "0x1.0p+1 33") == 0
554 || strcmp (result, "0x2.0p+0 33") == 0
555 || strcmp (result, "0x4.0p-1 33") == 0
556 || strcmp (result, "0x8.0p-2 33") == 0);
557 ASSERT (retval == strlen (result));
558 }
559
560 {
561 int retval =
562 my_sprintf (result, "%10La %d", 1.75L, 33, 44, 55);
563 ASSERT (strcmp (result, " 0x1.cp+0 33") == 0
564 || strcmp (result, " 0x3.8p-1 33") == 0
565 || strcmp (result, " 0x7p-2 33") == 0
566 || strcmp (result, " 0xep-3 33") == 0);
567 ASSERT (retval == strlen (result));
568 }
569
570 {
571 int retval =
572 my_sprintf (result, "%.10La %d", 1.75L, 33, 44, 55);
573 ASSERT (strcmp (result, "0x1.c000000000p+0 33") == 0
574 || strcmp (result, "0x3.8000000000p-1 33") == 0
575 || strcmp (result, "0x7.0000000000p-2 33") == 0
576 || strcmp (result, "0xe.0000000000p-3 33") == 0);
577 ASSERT (retval == strlen (result));
578 }
579
580 {
581 int retval =
582 my_sprintf (result, "%.50La %d", 1.75L, 33, 44, 55);
583 ASSERT (strcmp (result, "0x1.c0000000000000000000000000000000000000000000000000p+0 33") == 0
584 || strcmp (result, "0x3.80000000000000000000000000000000000000000000000000p-1 33") == 0
585 || strcmp (result, "0x7.00000000000000000000000000000000000000000000000000p-2 33") == 0
586 || strcmp (result, "0xe.00000000000000000000000000000000000000000000000000p-3 33") == 0);
587 ASSERT (retval == strlen (result));
588 }
589
590 {
591 int retval =
592 my_sprintf (result, "%-10La %d", 1.75L, 33, 44, 55);
593 ASSERT (strcmp (result, "0x1.cp+0 33") == 0
594 || strcmp (result, "0x3.8p-1 33") == 0
595 || strcmp (result, "0x7p-2 33") == 0
596 || strcmp (result, "0xep-3 33") == 0);
597 ASSERT (retval == strlen (result));
598 }
599
600 {
601 int retval =
602 my_sprintf (result, "%+La %d", 1.75L, 33, 44, 55);
603 ASSERT (strcmp (result, "+0x1.cp+0 33") == 0
604 || strcmp (result, "+0x3.8p-1 33") == 0
605 || strcmp (result, "+0x7p-2 33") == 0
606 || strcmp (result, "+0xep-3 33") == 0);
607 ASSERT (retval == strlen (result));
608 }
609
610 {
611 int retval =
612 my_sprintf (result, "% La %d", 1.75L, 33, 44, 55);
613 ASSERT (strcmp (result, " 0x1.cp+0 33") == 0
614 || strcmp (result, " 0x3.8p-1 33") == 0
615 || strcmp (result, " 0x7p-2 33") == 0
616 || strcmp (result, " 0xep-3 33") == 0);
617 ASSERT (retval == strlen (result));
618 }
619
620 {
621 int retval =
622 my_sprintf (result, "%#La %d", 1.75L, 33, 44, 55);
623 ASSERT (strcmp (result, "0x1.cp+0 33") == 0
624 || strcmp (result, "0x3.8p-1 33") == 0
625 || strcmp (result, "0x7.p-2 33") == 0
626 || strcmp (result, "0xe.p-3 33") == 0);
627 ASSERT (retval == strlen (result));
628 }
629
630 {
631 int retval =
632 my_sprintf (result, "%#La %d", 1.0L, 33, 44, 55);
633 ASSERT (strcmp (result, "0x1.p+0 33") == 0
634 || strcmp (result, "0x2.p-1 33") == 0
635 || strcmp (result, "0x4.p-2 33") == 0
636 || strcmp (result, "0x8.p-3 33") == 0);
637 ASSERT (retval == strlen (result));
638 }
639
640 {
641 int retval =
642 my_sprintf (result, "%010La %d", 1.75L, 33, 44, 55);
643 ASSERT (strcmp (result, "0x001.cp+0 33") == 0
644 || strcmp (result, "0x003.8p-1 33") == 0
645 || strcmp (result, "0x00007p-2 33") == 0
646 || strcmp (result, "0x0000ep-3 33") == 0);
647 ASSERT (retval == strlen (result));
648 }
649
650 {
651 int retval =
652 my_sprintf (result, "%010La %d", Infinityl (), 33, 44, 55);
653
654
655 ASSERT (strcmp (result, " inf 33") == 0);
656 ASSERT (retval == strlen (result));
657 }
658
659 {
660 int retval =
661 my_sprintf (result, "%050La %d", NaNl (), 33, 44, 55);
662
663
664 ASSERT (strlen (result) == 50 + 3
665 && strisnan (result, strspn (result, " "), strlen (result) - 3, 0)
666 && strcmp (result + strlen (result) - 3, " 33") == 0);
667 ASSERT (retval == strlen (result));
668 }
669
670
671
672 {
673 int retval =
674 my_sprintf (result, "%f %d", 12.75, 33, 44, 55);
675 ASSERT (strcmp (result, "12.750000 33") == 0);
676 ASSERT (retval == strlen (result));
677 }
678
679 {
680 int retval =
681 my_sprintf (result, "%f %d", 1234567.0, 33, 44, 55);
682 ASSERT (strcmp (result, "1234567.000000 33") == 0);
683 ASSERT (retval == strlen (result));
684 }
685
686 {
687 static struct { double value; const char *string; } data[] =
688 {
689 { 1.234321234321234e-37, "0.000000" },
690 { 1.234321234321234e-36, "0.000000" },
691 { 1.234321234321234e-35, "0.000000" },
692 { 1.234321234321234e-34, "0.000000" },
693 { 1.234321234321234e-33, "0.000000" },
694 { 1.234321234321234e-32, "0.000000" },
695 { 1.234321234321234e-31, "0.000000" },
696 { 1.234321234321234e-30, "0.000000" },
697 { 1.234321234321234e-29, "0.000000" },
698 { 1.234321234321234e-28, "0.000000" },
699 { 1.234321234321234e-27, "0.000000" },
700 { 1.234321234321234e-26, "0.000000" },
701 { 1.234321234321234e-25, "0.000000" },
702 { 1.234321234321234e-24, "0.000000" },
703 { 1.234321234321234e-23, "0.000000" },
704 { 1.234321234321234e-22, "0.000000" },
705 { 1.234321234321234e-21, "0.000000" },
706 { 1.234321234321234e-20, "0.000000" },
707 { 1.234321234321234e-19, "0.000000" },
708 { 1.234321234321234e-18, "0.000000" },
709 { 1.234321234321234e-17, "0.000000" },
710 { 1.234321234321234e-16, "0.000000" },
711 { 1.234321234321234e-15, "0.000000" },
712 { 1.234321234321234e-14, "0.000000" },
713 { 1.234321234321234e-13, "0.000000" },
714 { 1.234321234321234e-12, "0.000000" },
715 { 1.234321234321234e-11, "0.000000" },
716 { 1.234321234321234e-10, "0.000000" },
717 { 1.234321234321234e-9, "0.000000" },
718 { 1.234321234321234e-8, "0.000000" },
719 { 1.234321234321234e-7, "0.000000" },
720 { 1.234321234321234e-6, "0.000001" },
721 { 1.234321234321234e-5, "0.000012" },
722 { 1.234321234321234e-4, "0.000123" },
723 { 1.234321234321234e-3, "0.001234" },
724 { 1.234321234321234e-2, "0.012343" },
725 { 1.234321234321234e-1, "0.123432" },
726 { 1.234321234321234, "1.234321" },
727 { 1.234321234321234e1, "12.343212" },
728 { 1.234321234321234e2, "123.432123" },
729 { 1.234321234321234e3, "1234.321234" },
730 { 1.234321234321234e4, "12343.212343" },
731 { 1.234321234321234e5, "123432.123432" },
732 { 1.234321234321234e6, "1234321.234321" },
733 { 1.234321234321234e7, "12343212.343212" },
734 { 1.234321234321234e8, "123432123.432123" },
735 { 1.234321234321234e9, "1234321234.321234" },
736 { 1.234321234321234e10, "12343212343.2123**" },
737 { 1.234321234321234e11, "123432123432.123***" },
738 { 1.234321234321234e12, "1234321234321.23****" },
739 { 1.234321234321234e13, "12343212343212.3*****" },
740 { 1.234321234321234e14, "123432123432123.******" },
741 { 1.234321234321234e15, "1234321234321234.000000" },
742 { 1.234321234321234e16, "123432123432123**.000000" },
743 { 1.234321234321234e17, "123432123432123***.000000" },
744 { 1.234321234321234e18, "123432123432123****.000000" },
745 { 1.234321234321234e19, "123432123432123*****.000000" },
746 { 1.234321234321234e20, "123432123432123******.000000" },
747 { 1.234321234321234e21, "123432123432123*******.000000" },
748 { 1.234321234321234e22, "123432123432123********.000000" },
749 { 1.234321234321234e23, "123432123432123*********.000000" },
750 { 1.234321234321234e24, "123432123432123**********.000000" },
751 { 1.234321234321234e25, "123432123432123***********.000000" },
752 { 1.234321234321234e26, "123432123432123************.000000" },
753 { 1.234321234321234e27, "123432123432123*************.000000" },
754 { 1.234321234321234e28, "123432123432123**************.000000" },
755 { 1.234321234321234e29, "123432123432123***************.000000" },
756 { 1.234321234321234e30, "123432123432123****************.000000" },
757 { 1.234321234321234e31, "123432123432123*****************.000000" },
758 { 1.234321234321234e32, "123432123432123******************.000000" },
759 { 1.234321234321234e33, "123432123432123*******************.000000" },
760 { 1.234321234321234e34, "123432123432123********************.000000" },
761 { 1.234321234321234e35, "123432123432123*********************.000000" },
762 { 1.234321234321234e36, "123432123432123**********************.000000" }
763 };
764 size_t k;
765 for (k = 0; k < SIZEOF (data); k++)
766 {
767 int retval =
768 my_sprintf (result, "%f", data[k].value);
769 ASSERT (strmatch (data[k].string, result));
770 ASSERT (retval == strlen (result));
771 }
772 }
773
774 {
775 int retval =
776 my_sprintf (result, "%f %d", -0.03125, 33, 44, 55);
777 ASSERT (strcmp (result, "-0.031250 33") == 0);
778 ASSERT (retval == strlen (result));
779 }
780
781 {
782 int retval =
783 my_sprintf (result, "%f %d", 0.0, 33, 44, 55);
784 ASSERT (strcmp (result, "0.000000 33") == 0);
785 ASSERT (retval == strlen (result));
786 }
787
788 {
789 int retval =
790 my_sprintf (result, "%f %d", minus_zerod, 33, 44, 55);
791 if (have_minus_zero ())
792 ASSERT (strcmp (result, "-0.000000 33") == 0);
793 ASSERT (retval == strlen (result));
794 }
795
796 {
797 int retval =
798 my_sprintf (result, "%f %d", Infinityd (), 33, 44, 55);
799 ASSERT (strcmp (result, "inf 33") == 0
800 || strcmp (result, "infinity 33") == 0);
801 ASSERT (retval == strlen (result));
802 }
803
804 {
805 int retval =
806 my_sprintf (result, "%f %d", - Infinityd (), 33, 44, 55);
807 ASSERT (strcmp (result, "-inf 33") == 0
808 || strcmp (result, "-infinity 33") == 0);
809 ASSERT (retval == strlen (result));
810 }
811
812 {
813 int retval =
814 my_sprintf (result, "%f %d", NaNd (), 33, 44, 55);
815 ASSERT (strlen (result) >= 3 + 3
816 && strisnan (result, 0, strlen (result) - 3, 0)
817 && strcmp (result + strlen (result) - 3, " 33") == 0);
818 ASSERT (retval == strlen (result));
819 }
820
821 {
822 int retval =
823 my_sprintf (result, "%10f %d", 1.75, 33, 44, 55);
824 ASSERT (strcmp (result, " 1.750000 33") == 0);
825 ASSERT (retval == strlen (result));
826 }
827
828 {
829 int retval =
830 my_sprintf (result, "%-10f %d", 1.75, 33, 44, 55);
831 ASSERT (strcmp (result, "1.750000 33") == 0);
832 ASSERT (retval == strlen (result));
833 }
834
835 {
836 int retval =
837 my_sprintf (result, "%+f %d", 1.75, 33, 44, 55);
838 ASSERT (strcmp (result, "+1.750000 33") == 0);
839 ASSERT (retval == strlen (result));
840 }
841
842 {
843 int retval =
844 my_sprintf (result, "% f %d", 1.75, 33, 44, 55);
845 ASSERT (strcmp (result, " 1.750000 33") == 0);
846 ASSERT (retval == strlen (result));
847 }
848
849 {
850 int retval =
851 my_sprintf (result, "%#f %d", 1.75, 33, 44, 55);
852 ASSERT (strcmp (result, "1.750000 33") == 0);
853 ASSERT (retval == strlen (result));
854 }
855
856 {
857 int retval =
858 my_sprintf (result, "%#.f %d", 1.75, 33, 44, 55);
859 ASSERT (strcmp (result, "2. 33") == 0);
860 ASSERT (retval == strlen (result));
861 }
862
863 {
864 int retval =
865 my_sprintf (result, "%015f %d", 1234.0, 33, 44, 55);
866 ASSERT (strcmp (result, "00001234.000000 33") == 0);
867 ASSERT (retval == strlen (result));
868 }
869
870 {
871 int retval =
872 my_sprintf (result, "%015f %d", - Infinityd (), 33, 44, 55);
873 ASSERT (strcmp (result, " -inf 33") == 0
874 || strcmp (result, " -infinity 33") == 0);
875 ASSERT (retval == strlen (result));
876 }
877
878 {
879 int retval =
880 my_sprintf (result, "%050f %d", NaNd (), 33, 44, 55);
881 ASSERT (strlen (result) == 50 + 3
882 && strisnan (result, strspn (result, " "), strlen (result) - 3, 0)
883 && strcmp (result + strlen (result) - 3, " 33") == 0);
884 ASSERT (retval == strlen (result));
885 }
886
887 {
888 int retval =
889 my_sprintf (result, "%.f %d", 1234.0, 33, 44, 55);
890 ASSERT (strcmp (result, "1234 33") == 0);
891 ASSERT (retval == strlen (result));
892 }
893
894 {
895 int retval =
896 my_sprintf (result, "%.2f %d", 999.951, 33, 44, 55);
897 ASSERT (strcmp (result, "999.95 33") == 0);
898 ASSERT (retval == strlen (result));
899 }
900
901 {
902 int retval =
903 my_sprintf (result, "%.2f %d", 999.996, 33, 44, 55);
904 ASSERT (strcmp (result, "1000.00 33") == 0);
905 ASSERT (retval == strlen (result));
906 }
907
908 {
909 int retval =
910 my_sprintf (result, "%Lf %d", 12.75L, 33, 44, 55);
911 ASSERT (strcmp (result, "12.750000 33") == 0);
912 ASSERT (retval == strlen (result));
913 }
914
915 {
916 int retval =
917 my_sprintf (result, "%Lf %d", 1234567.0L, 33, 44, 55);
918 ASSERT (strcmp (result, "1234567.000000 33") == 0);
919 ASSERT (retval == strlen (result));
920 }
921
922 {
923 static struct { long double value; const char *string; } data[] =
924 {
925 { 1.234321234321234e-37L, "0.000000" },
926 { 1.234321234321234e-36L, "0.000000" },
927 { 1.234321234321234e-35L, "0.000000" },
928 { 1.234321234321234e-34L, "0.000000" },
929 { 1.234321234321234e-33L, "0.000000" },
930 { 1.234321234321234e-32L, "0.000000" },
931 { 1.234321234321234e-31L, "0.000000" },
932 { 1.234321234321234e-30L, "0.000000" },
933 { 1.234321234321234e-29L, "0.000000" },
934 { 1.234321234321234e-28L, "0.000000" },
935 { 1.234321234321234e-27L, "0.000000" },
936 { 1.234321234321234e-26L, "0.000000" },
937 { 1.234321234321234e-25L, "0.000000" },
938 { 1.234321234321234e-24L, "0.000000" },
939 { 1.234321234321234e-23L, "0.000000" },
940 { 1.234321234321234e-22L, "0.000000" },
941 { 1.234321234321234e-21L, "0.000000" },
942 { 1.234321234321234e-20L, "0.000000" },
943 { 1.234321234321234e-19L, "0.000000" },
944 { 1.234321234321234e-18L, "0.000000" },
945 { 1.234321234321234e-17L, "0.000000" },
946 { 1.234321234321234e-16L, "0.000000" },
947 { 1.234321234321234e-15L, "0.000000" },
948 { 1.234321234321234e-14L, "0.000000" },
949 { 1.234321234321234e-13L, "0.000000" },
950 { 1.234321234321234e-12L, "0.000000" },
951 { 1.234321234321234e-11L, "0.000000" },
952 { 1.234321234321234e-10L, "0.000000" },
953 { 1.234321234321234e-9L, "0.000000" },
954 { 1.234321234321234e-8L, "0.000000" },
955 { 1.234321234321234e-7L, "0.000000" },
956 { 1.234321234321234e-6L, "0.000001" },
957 { 1.234321234321234e-5L, "0.000012" },
958 { 1.234321234321234e-4L, "0.000123" },
959 { 1.234321234321234e-3L, "0.001234" },
960 { 1.234321234321234e-2L, "0.012343" },
961 { 1.234321234321234e-1L, "0.123432" },
962 { 1.234321234321234L, "1.234321" },
963 { 1.234321234321234e1L, "12.343212" },
964 { 1.234321234321234e2L, "123.432123" },
965 { 1.234321234321234e3L, "1234.321234" },
966 { 1.234321234321234e4L, "12343.212343" },
967 { 1.234321234321234e5L, "123432.123432" },
968 { 1.234321234321234e6L, "1234321.234321" },
969 { 1.234321234321234e7L, "12343212.343212" },
970 { 1.234321234321234e8L, "123432123.432123" },
971 { 1.234321234321234e9L, "1234321234.321234" },
972 { 1.234321234321234e10L, "12343212343.2123**" },
973 { 1.234321234321234e11L, "123432123432.123***" },
974 { 1.234321234321234e12L, "1234321234321.23****" },
975 { 1.234321234321234e13L, "12343212343212.3*****" },
976 { 1.234321234321234e14L, "123432123432123.******" },
977 { 1.234321234321234e15L, "1234321234321234.000000" },
978 { 1.234321234321234e16L, "123432123432123**.000000" },
979 { 1.234321234321234e17L, "123432123432123***.000000" },
980 { 1.234321234321234e18L, "123432123432123****.000000" },
981 { 1.234321234321234e19L, "123432123432123*****.000000" },
982 { 1.234321234321234e20L, "123432123432123******.000000" },
983 { 1.234321234321234e21L, "123432123432123*******.000000" },
984 { 1.234321234321234e22L, "123432123432123********.000000" },
985 { 1.234321234321234e23L, "123432123432123*********.000000" },
986 { 1.234321234321234e24L, "123432123432123**********.000000" },
987 { 1.234321234321234e25L, "123432123432123***********.000000" },
988 { 1.234321234321234e26L, "123432123432123************.000000" },
989 { 1.234321234321234e27L, "123432123432123*************.000000" },
990 { 1.234321234321234e28L, "123432123432123**************.000000" },
991 { 1.234321234321234e29L, "123432123432123***************.000000" },
992 { 1.234321234321234e30L, "123432123432123****************.000000" },
993 { 1.234321234321234e31L, "123432123432123*****************.000000" },
994 { 1.234321234321234e32L, "123432123432123******************.000000" },
995 { 1.234321234321234e33L, "123432123432123*******************.000000" },
996 { 1.234321234321234e34L, "123432123432123********************.000000" },
997 { 1.234321234321234e35L, "123432123432123*********************.000000" },
998 { 1.234321234321234e36L, "123432123432123**********************.000000" }
999 };
1000 size_t k;
1001 for (k = 0; k < SIZEOF (data); k++)
1002 {
1003 int retval =
1004 my_sprintf (result, "%Lf", data[k].value);
1005 ASSERT (strmatch (data[k].string, result));
1006 ASSERT (retval == strlen (result));
1007 }
1008 }
1009
1010 {
1011 int retval =
1012 my_sprintf (result, "%Lf %d", -0.03125L, 33, 44, 55);
1013 ASSERT (strcmp (result, "-0.031250 33") == 0);
1014 ASSERT (retval == strlen (result));
1015 }
1016
1017 {
1018 int retval =
1019 my_sprintf (result, "%Lf %d", 0.0L, 33, 44, 55);
1020 ASSERT (strcmp (result, "0.000000 33") == 0);
1021 ASSERT (retval == strlen (result));
1022 }
1023
1024 {
1025 int retval =
1026 my_sprintf (result, "%Lf %d", minus_zerol, 33, 44, 55);
1027 if (have_minus_zero ())
1028 ASSERT (strcmp (result, "-0.000000 33") == 0);
1029 ASSERT (retval == strlen (result));
1030 }
1031
1032 {
1033 int retval =
1034 my_sprintf (result, "%Lf %d", Infinityl (), 33, 44, 55);
1035 ASSERT (strcmp (result, "inf 33") == 0
1036 || strcmp (result, "infinity 33") == 0);
1037 ASSERT (retval == strlen (result));
1038 }
1039
1040 {
1041 int retval =
1042 my_sprintf (result, "%Lf %d", - Infinityl (), 33, 44, 55);
1043 ASSERT (strcmp (result, "-inf 33") == 0
1044 || strcmp (result, "-infinity 33") == 0);
1045 ASSERT (retval == strlen (result));
1046 }
1047
1048 {
1049 int retval =
1050 my_sprintf (result, "%Lf %d", NaNl (), 33, 44, 55);
1051 ASSERT (strlen (result) >= 3 + 3
1052 && strisnan (result, 0, strlen (result) - 3, 0)
1053 && strcmp (result + strlen (result) - 3, " 33") == 0);
1054 ASSERT (retval == strlen (result));
1055 }
1056 #if CHECK_PRINTF_SAFE && ((defined __ia64 && LDBL_MANT_DIG == 64) || (defined __x86_64__ || defined __amd64__) || (defined __i386 || defined __i386__ || defined _I386 || defined _M_IX86 || defined _X86_)) && !HAVE_SAME_LONG_DOUBLE_AS_DOUBLE
1057 {
1058 static union { unsigned int word[4]; long double value; } x =
1059 { LDBL80_WORDS (0xFFFF, 0xC3333333, 0x00000000) };
1060 int retval =
1061 my_sprintf (result, "%Lf %d", x.value, 33, 44, 55);
1062 ASSERT (strlen (result) >= 3 + 3
1063 && strisnan (result, 0, strlen (result) - 3, 0)
1064 && strcmp (result + strlen (result) - 3, " 33") == 0);
1065 ASSERT (retval == strlen (result));
1066 }
1067 {
1068
1069 static union { unsigned int word[4]; long double value; } x =
1070 { LDBL80_WORDS (0xFFFF, 0x83333333, 0x00000000) };
1071 int retval =
1072 my_sprintf (result, "%Lf %d", x.value, 33, 44, 55);
1073 ASSERT (strlen (result) >= 3 + 3
1074 && strisnan (result, 0, strlen (result) - 3, 0)
1075 && strcmp (result + strlen (result) - 3, " 33") == 0);
1076 ASSERT (retval == strlen (result));
1077 }
1078
1079 {
1080 static union { unsigned int word[4]; long double value; } x =
1081 { LDBL80_WORDS (0xFFFF, 0x40000001, 0x00000000) };
1082 int retval =
1083 my_sprintf (result, "%Lf %d", x.value, 33, 44, 55);
1084 ASSERT (retval == strlen (result));
1085 ASSERT (3 < retval && strcmp (result + retval - 3, " 33") == 0);
1086 }
1087 {
1088 static union { unsigned int word[4]; long double value; } x =
1089 { LDBL80_WORDS (0xFFFF, 0x00000000, 0x00000000) };
1090 int retval =
1091 my_sprintf (result, "%Lf %d", x.value, 33, 44, 55);
1092 ASSERT (retval == strlen (result));
1093 ASSERT (3 < retval && strcmp (result + retval - 3, " 33") == 0);
1094 }
1095 {
1096 static union { unsigned int word[4]; long double value; } x =
1097 { LDBL80_WORDS (0x4004, 0x00000000, 0x00000000) };
1098 int retval =
1099 my_sprintf (result, "%Lf %d", x.value, 33, 44, 55);
1100 ASSERT (retval == strlen (result));
1101 ASSERT (3 < retval && strcmp (result + retval - 3, " 33") == 0);
1102 }
1103 {
1104 static union { unsigned int word[4]; long double value; } x =
1105 { LDBL80_WORDS (0x4000, 0x63333333, 0x00000000) };
1106 int retval =
1107 my_sprintf (result, "%Lf %d", x.value, 33, 44, 55);
1108 ASSERT (retval == strlen (result));
1109 ASSERT (3 < retval && strcmp (result + retval - 3, " 33") == 0);
1110 }
1111 {
1112 static union { unsigned int word[4]; long double value; } x =
1113 { LDBL80_WORDS (0x0000, 0x83333333, 0x00000000) };
1114 int retval =
1115 my_sprintf (result, "%Lf %d", x.value, 33, 44, 55);
1116 ASSERT (retval == strlen (result));
1117 ASSERT (3 < retval && strcmp (result + retval - 3, " 33") == 0);
1118 }
1119 #endif
1120
1121 {
1122 int retval =
1123 my_sprintf (result, "%10Lf %d", 1.75L, 33, 44, 55);
1124 ASSERT (strcmp (result, " 1.750000 33") == 0);
1125 ASSERT (retval == strlen (result));
1126 }
1127
1128 {
1129 int retval =
1130 my_sprintf (result, "%-10Lf %d", 1.75L, 33, 44, 55);
1131 ASSERT (strcmp (result, "1.750000 33") == 0);
1132 ASSERT (retval == strlen (result));
1133 }
1134
1135 {
1136 int retval =
1137 my_sprintf (result, "%+Lf %d", 1.75L, 33, 44, 55);
1138 ASSERT (strcmp (result, "+1.750000 33") == 0);
1139 ASSERT (retval == strlen (result));
1140 }
1141
1142 {
1143 int retval =
1144 my_sprintf (result, "% Lf %d", 1.75L, 33, 44, 55);
1145 ASSERT (strcmp (result, " 1.750000 33") == 0);
1146 ASSERT (retval == strlen (result));
1147 }
1148
1149 {
1150 int retval =
1151 my_sprintf (result, "%#Lf %d", 1.75L, 33, 44, 55);
1152 ASSERT (strcmp (result, "1.750000 33") == 0);
1153 ASSERT (retval == strlen (result));
1154 }
1155
1156 {
1157 int retval =
1158 my_sprintf (result, "%#.Lf %d", 1.75L, 33, 44, 55);
1159 ASSERT (strcmp (result, "2. 33") == 0);
1160 ASSERT (retval == strlen (result));
1161 }
1162
1163 {
1164 int retval =
1165 my_sprintf (result, "%015Lf %d", 1234.0L, 33, 44, 55);
1166 ASSERT (strcmp (result, "00001234.000000 33") == 0);
1167 ASSERT (retval == strlen (result));
1168 }
1169
1170 {
1171 int retval =
1172 my_sprintf (result, "%015Lf %d", - Infinityl (), 33, 44, 55);
1173 ASSERT (strcmp (result, " -inf 33") == 0
1174 || strcmp (result, " -infinity 33") == 0);
1175 ASSERT (retval == strlen (result));
1176 }
1177
1178 {
1179 int retval =
1180 my_sprintf (result, "%050Lf %d", NaNl (), 33, 44, 55);
1181 ASSERT (strlen (result) == 50 + 3
1182 && strisnan (result, strspn (result, " "), strlen (result) - 3, 0)
1183 && strcmp (result + strlen (result) - 3, " 33") == 0);
1184 ASSERT (retval == strlen (result));
1185 }
1186
1187 {
1188 int retval =
1189 my_sprintf (result, "%.Lf %d", 1234.0L, 33, 44, 55);
1190 ASSERT (strcmp (result, "1234 33") == 0);
1191 ASSERT (retval == strlen (result));
1192 }
1193
1194 {
1195 int retval =
1196 my_sprintf (result, "%.2Lf %d", 999.951L, 33, 44, 55);
1197 ASSERT (strcmp (result, "999.95 33") == 0);
1198 ASSERT (retval == strlen (result));
1199 }
1200
1201 {
1202 int retval =
1203 my_sprintf (result, "%.2Lf %d", 999.996L, 33, 44, 55);
1204 ASSERT (strcmp (result, "1000.00 33") == 0);
1205 ASSERT (retval == strlen (result));
1206 }
1207
1208
1209
1210 {
1211 int retval =
1212 my_sprintf (result, "%F %d", 12.75, 33, 44, 55);
1213 ASSERT (strcmp (result, "12.750000 33") == 0);
1214 ASSERT (retval == strlen (result));
1215 }
1216
1217 {
1218 int retval =
1219 my_sprintf (result, "%F %d", 1234567.0, 33, 44, 55);
1220 ASSERT (strcmp (result, "1234567.000000 33") == 0);
1221 ASSERT (retval == strlen (result));
1222 }
1223
1224 {
1225 int retval =
1226 my_sprintf (result, "%F %d", -0.03125, 33, 44, 55);
1227 ASSERT (strcmp (result, "-0.031250 33") == 0);
1228 ASSERT (retval == strlen (result));
1229 }
1230
1231 {
1232 int retval =
1233 my_sprintf (result, "%F %d", 0.0, 33, 44, 55);
1234 ASSERT (strcmp (result, "0.000000 33") == 0);
1235 ASSERT (retval == strlen (result));
1236 }
1237
1238 {
1239 int retval =
1240 my_sprintf (result, "%F %d", minus_zerod, 33, 44, 55);
1241 if (have_minus_zero ())
1242 ASSERT (strcmp (result, "-0.000000 33") == 0);
1243 ASSERT (retval == strlen (result));
1244 }
1245
1246 {
1247 int retval =
1248 my_sprintf (result, "%F %d", Infinityd (), 33, 44, 55);
1249 ASSERT (strcmp (result, "INF 33") == 0
1250 || strcmp (result, "INFINITY 33") == 0);
1251 ASSERT (retval == strlen (result));
1252 }
1253
1254 {
1255 int retval =
1256 my_sprintf (result, "%F %d", - Infinityd (), 33, 44, 55);
1257 ASSERT (strcmp (result, "-INF 33") == 0
1258 || strcmp (result, "-INFINITY 33") == 0);
1259 ASSERT (retval == strlen (result));
1260 }
1261
1262 {
1263 int retval =
1264 my_sprintf (result, "%F %d", NaNd (), 33, 44, 55);
1265 ASSERT (strlen (result) >= 3 + 3
1266 && strisnan (result, 0, strlen (result) - 3, 1)
1267 && strcmp (result + strlen (result) - 3, " 33") == 0);
1268 ASSERT (retval == strlen (result));
1269 }
1270
1271 {
1272 int retval =
1273 my_sprintf (result, "%015F %d", 1234.0, 33, 44, 55);
1274 ASSERT (strcmp (result, "00001234.000000 33") == 0);
1275 ASSERT (retval == strlen (result));
1276 }
1277
1278 {
1279 int retval =
1280 my_sprintf (result, "%015F %d", - Infinityd (), 33, 44, 55);
1281 ASSERT (strcmp (result, " -INF 33") == 0
1282 || strcmp (result, " -INFINITY 33") == 0);
1283 ASSERT (retval == strlen (result));
1284 }
1285
1286 {
1287 int retval =
1288 my_sprintf (result, "%.F %d", 1234.0, 33, 44, 55);
1289 ASSERT (strcmp (result, "1234 33") == 0);
1290 ASSERT (retval == strlen (result));
1291 }
1292
1293 {
1294 int retval =
1295 my_sprintf (result, "%.2F %d", 999.951, 33, 44, 55);
1296 ASSERT (strcmp (result, "999.95 33") == 0);
1297 ASSERT (retval == strlen (result));
1298 }
1299
1300 {
1301 int retval =
1302 my_sprintf (result, "%.2F %d", 999.996, 33, 44, 55);
1303 ASSERT (strcmp (result, "1000.00 33") == 0);
1304 ASSERT (retval == strlen (result));
1305 }
1306
1307 {
1308 int retval =
1309 my_sprintf (result, "%LF %d", 12.75L, 33, 44, 55);
1310 ASSERT (strcmp (result, "12.750000 33") == 0);
1311 ASSERT (retval == strlen (result));
1312 }
1313
1314 {
1315 int retval =
1316 my_sprintf (result, "%LF %d", 1234567.0L, 33, 44, 55);
1317 ASSERT (strcmp (result, "1234567.000000 33") == 0);
1318 ASSERT (retval == strlen (result));
1319 }
1320
1321 {
1322 int retval =
1323 my_sprintf (result, "%LF %d", -0.03125L, 33, 44, 55);
1324 ASSERT (strcmp (result, "-0.031250 33") == 0);
1325 ASSERT (retval == strlen (result));
1326 }
1327
1328 {
1329 int retval =
1330 my_sprintf (result, "%LF %d", 0.0L, 33, 44, 55);
1331 ASSERT (strcmp (result, "0.000000 33") == 0);
1332 ASSERT (retval == strlen (result));
1333 }
1334
1335 {
1336 int retval =
1337 my_sprintf (result, "%LF %d", minus_zerol, 33, 44, 55);
1338 if (have_minus_zero ())
1339 ASSERT (strcmp (result, "-0.000000 33") == 0);
1340 ASSERT (retval == strlen (result));
1341 }
1342
1343 {
1344 int retval =
1345 my_sprintf (result, "%LF %d", Infinityl (), 33, 44, 55);
1346 ASSERT (strcmp (result, "INF 33") == 0
1347 || strcmp (result, "INFINITY 33") == 0);
1348 ASSERT (retval == strlen (result));
1349 }
1350
1351 {
1352 int retval =
1353 my_sprintf (result, "%LF %d", - Infinityl (), 33, 44, 55);
1354 ASSERT (strcmp (result, "-INF 33") == 0
1355 || strcmp (result, "-INFINITY 33") == 0);
1356 ASSERT (retval == strlen (result));
1357 }
1358
1359 {
1360 int retval =
1361 my_sprintf (result, "%LF %d", NaNl (), 33, 44, 55);
1362 ASSERT (strlen (result) >= 3 + 3
1363 && strisnan (result, 0, strlen (result) - 3, 1)
1364 && strcmp (result + strlen (result) - 3, " 33") == 0);
1365 ASSERT (retval == strlen (result));
1366 }
1367
1368 {
1369 int retval =
1370 my_sprintf (result, "%015LF %d", 1234.0L, 33, 44, 55);
1371 ASSERT (strcmp (result, "00001234.000000 33") == 0);
1372 ASSERT (retval == strlen (result));
1373 }
1374
1375 {
1376 int retval =
1377 my_sprintf (result, "%015LF %d", - Infinityl (), 33, 44, 55);
1378 ASSERT (strcmp (result, " -INF 33") == 0
1379 || strcmp (result, " -INFINITY 33") == 0);
1380 ASSERT (retval == strlen (result));
1381 }
1382
1383 {
1384 int retval =
1385 my_sprintf (result, "%.LF %d", 1234.0L, 33, 44, 55);
1386 ASSERT (strcmp (result, "1234 33") == 0);
1387 ASSERT (retval == strlen (result));
1388 }
1389
1390 {
1391 int retval =
1392 my_sprintf (result, "%.2LF %d", 999.951L, 33, 44, 55);
1393 ASSERT (strcmp (result, "999.95 33") == 0);
1394 ASSERT (retval == strlen (result));
1395 }
1396
1397 {
1398 int retval =
1399 my_sprintf (result, "%.2LF %d", 999.996L, 33, 44, 55);
1400 ASSERT (strcmp (result, "1000.00 33") == 0);
1401 ASSERT (retval == strlen (result));
1402 }
1403
1404
1405
1406 {
1407 int retval =
1408 my_sprintf (result, "%e %d", 12.75, 33, 44, 55);
1409 ASSERT (strcmp (result, "1.275000e+01 33") == 0
1410 || strcmp (result, "1.275000e+001 33") == 0);
1411 ASSERT (retval == strlen (result));
1412 }
1413
1414 {
1415 int retval =
1416 my_sprintf (result, "%e %d", 1234567.0, 33, 44, 55);
1417 ASSERT (strcmp (result, "1.234567e+06 33") == 0
1418 || strcmp (result, "1.234567e+006 33") == 0);
1419 ASSERT (retval == strlen (result));
1420 }
1421
1422 {
1423 static struct { double value; const char *string; } data[] =
1424 {
1425 { 1.234321234321234e-37, "1.234321e-37" },
1426 { 1.234321234321234e-36, "1.234321e-36" },
1427 { 1.234321234321234e-35, "1.234321e-35" },
1428 { 1.234321234321234e-34, "1.234321e-34" },
1429 { 1.234321234321234e-33, "1.234321e-33" },
1430 { 1.234321234321234e-32, "1.234321e-32" },
1431 { 1.234321234321234e-31, "1.234321e-31" },
1432 { 1.234321234321234e-30, "1.234321e-30" },
1433 { 1.234321234321234e-29, "1.234321e-29" },
1434 { 1.234321234321234e-28, "1.234321e-28" },
1435 { 1.234321234321234e-27, "1.234321e-27" },
1436 { 1.234321234321234e-26, "1.234321e-26" },
1437 { 1.234321234321234e-25, "1.234321e-25" },
1438 { 1.234321234321234e-24, "1.234321e-24" },
1439 { 1.234321234321234e-23, "1.234321e-23" },
1440 { 1.234321234321234e-22, "1.234321e-22" },
1441 { 1.234321234321234e-21, "1.234321e-21" },
1442 { 1.234321234321234e-20, "1.234321e-20" },
1443 { 1.234321234321234e-19, "1.234321e-19" },
1444 { 1.234321234321234e-18, "1.234321e-18" },
1445 { 1.234321234321234e-17, "1.234321e-17" },
1446 { 1.234321234321234e-16, "1.234321e-16" },
1447 { 1.234321234321234e-15, "1.234321e-15" },
1448 { 1.234321234321234e-14, "1.234321e-14" },
1449 { 1.234321234321234e-13, "1.234321e-13" },
1450 { 1.234321234321234e-12, "1.234321e-12" },
1451 { 1.234321234321234e-11, "1.234321e-11" },
1452 { 1.234321234321234e-10, "1.234321e-10" },
1453 { 1.234321234321234e-9, "1.234321e-09" },
1454 { 1.234321234321234e-8, "1.234321e-08" },
1455 { 1.234321234321234e-7, "1.234321e-07" },
1456 { 1.234321234321234e-6, "1.234321e-06" },
1457 { 1.234321234321234e-5, "1.234321e-05" },
1458 { 1.234321234321234e-4, "1.234321e-04" },
1459 { 1.234321234321234e-3, "1.234321e-03" },
1460 { 1.234321234321234e-2, "1.234321e-02" },
1461 { 1.234321234321234e-1, "1.234321e-01" },
1462 { 1.234321234321234, "1.234321e+00" },
1463 { 1.234321234321234e1, "1.234321e+01" },
1464 { 1.234321234321234e2, "1.234321e+02" },
1465 { 1.234321234321234e3, "1.234321e+03" },
1466 { 1.234321234321234e4, "1.234321e+04" },
1467 { 1.234321234321234e5, "1.234321e+05" },
1468 { 1.234321234321234e6, "1.234321e+06" },
1469 { 1.234321234321234e7, "1.234321e+07" },
1470 { 1.234321234321234e8, "1.234321e+08" },
1471 { 1.234321234321234e9, "1.234321e+09" },
1472 { 1.234321234321234e10, "1.234321e+10" },
1473 { 1.234321234321234e11, "1.234321e+11" },
1474 { 1.234321234321234e12, "1.234321e+12" },
1475 { 1.234321234321234e13, "1.234321e+13" },
1476 { 1.234321234321234e14, "1.234321e+14" },
1477 { 1.234321234321234e15, "1.234321e+15" },
1478 { 1.234321234321234e16, "1.234321e+16" },
1479 { 1.234321234321234e17, "1.234321e+17" },
1480 { 1.234321234321234e18, "1.234321e+18" },
1481 { 1.234321234321234e19, "1.234321e+19" },
1482 { 1.234321234321234e20, "1.234321e+20" },
1483 { 1.234321234321234e21, "1.234321e+21" },
1484 { 1.234321234321234e22, "1.234321e+22" },
1485 { 1.234321234321234e23, "1.234321e+23" },
1486 { 1.234321234321234e24, "1.234321e+24" },
1487 { 1.234321234321234e25, "1.234321e+25" },
1488 { 1.234321234321234e26, "1.234321e+26" },
1489 { 1.234321234321234e27, "1.234321e+27" },
1490 { 1.234321234321234e28, "1.234321e+28" },
1491 { 1.234321234321234e29, "1.234321e+29" },
1492 { 1.234321234321234e30, "1.234321e+30" },
1493 { 1.234321234321234e31, "1.234321e+31" },
1494 { 1.234321234321234e32, "1.234321e+32" },
1495 { 1.234321234321234e33, "1.234321e+33" },
1496 { 1.234321234321234e34, "1.234321e+34" },
1497 { 1.234321234321234e35, "1.234321e+35" },
1498 { 1.234321234321234e36, "1.234321e+36" }
1499 };
1500 size_t k;
1501 for (k = 0; k < SIZEOF (data); k++)
1502 {
1503 int retval =
1504 my_sprintf (result, "%e", data[k].value);
1505 const char *expected = data[k].string;
1506 ASSERT (strcmp (result, expected) == 0
1507
1508 || (strlen (result) == strlen (expected) + 1
1509 && memcmp (result, expected, strlen (expected) - 2) == 0
1510 && result[strlen (expected) - 2] == '0'
1511 && strcmp (result + strlen (expected) - 1,
1512 expected + strlen (expected) - 2)
1513 == 0));
1514 ASSERT (retval == strlen (result));
1515 }
1516 }
1517
1518 {
1519 int retval =
1520 my_sprintf (result, "%e %d", -0.03125, 33, 44, 55);
1521 ASSERT (strcmp (result, "-3.125000e-02 33") == 0
1522 || strcmp (result, "-3.125000e-002 33") == 0);
1523 ASSERT (retval == strlen (result));
1524 }
1525
1526 {
1527 int retval =
1528 my_sprintf (result, "%e %d", 0.0, 33, 44, 55);
1529 ASSERT (strcmp (result, "0.000000e+00 33") == 0
1530 || strcmp (result, "0.000000e+000 33") == 0);
1531 ASSERT (retval == strlen (result));
1532 }
1533
1534 {
1535 int retval =
1536 my_sprintf (result, "%e %d", minus_zerod, 33, 44, 55);
1537 if (have_minus_zero ())
1538 ASSERT (strcmp (result, "-0.000000e+00 33") == 0
1539 || strcmp (result, "-0.000000e+000 33") == 0);
1540 ASSERT (retval == strlen (result));
1541 }
1542
1543 {
1544 int retval =
1545 my_sprintf (result, "%e %d", Infinityd (), 33, 44, 55);
1546 ASSERT (strcmp (result, "inf 33") == 0
1547 || strcmp (result, "infinity 33") == 0);
1548 ASSERT (retval == strlen (result));
1549 }
1550
1551 {
1552 int retval =
1553 my_sprintf (result, "%e %d", - Infinityd (), 33, 44, 55);
1554 ASSERT (strcmp (result, "-inf 33") == 0
1555 || strcmp (result, "-infinity 33") == 0);
1556 ASSERT (retval == strlen (result));
1557 }
1558
1559 {
1560 int retval =
1561 my_sprintf (result, "%e %d", NaNd (), 33, 44, 55);
1562 ASSERT (strlen (result) >= 3 + 3
1563 && strisnan (result, 0, strlen (result) - 3, 0)
1564 && strcmp (result + strlen (result) - 3, " 33") == 0);
1565 ASSERT (retval == strlen (result));
1566 }
1567
1568 {
1569 int retval =
1570 my_sprintf (result, "%15e %d", 1.75, 33, 44, 55);
1571 ASSERT (strcmp (result, " 1.750000e+00 33") == 0
1572 || strcmp (result, " 1.750000e+000 33") == 0);
1573 ASSERT (retval == strlen (result));
1574 }
1575
1576 {
1577 int retval =
1578 my_sprintf (result, "%-15e %d", 1.75, 33, 44, 55);
1579 ASSERT (strcmp (result, "1.750000e+00 33") == 0
1580 || strcmp (result, "1.750000e+000 33") == 0);
1581 ASSERT (retval == strlen (result));
1582 }
1583
1584 {
1585 int retval =
1586 my_sprintf (result, "%+e %d", 1.75, 33, 44, 55);
1587 ASSERT (strcmp (result, "+1.750000e+00 33") == 0
1588 || strcmp (result, "+1.750000e+000 33") == 0);
1589 ASSERT (retval == strlen (result));
1590 }
1591
1592 {
1593 int retval =
1594 my_sprintf (result, "% e %d", 1.75, 33, 44, 55);
1595 ASSERT (strcmp (result, " 1.750000e+00 33") == 0
1596 || strcmp (result, " 1.750000e+000 33") == 0);
1597 ASSERT (retval == strlen (result));
1598 }
1599
1600 {
1601 int retval =
1602 my_sprintf (result, "%#e %d", 1.75, 33, 44, 55);
1603 ASSERT (strcmp (result, "1.750000e+00 33") == 0
1604 || strcmp (result, "1.750000e+000 33") == 0);
1605 ASSERT (retval == strlen (result));
1606 }
1607
1608 {
1609 int retval =
1610 my_sprintf (result, "%#.e %d", 1.75, 33, 44, 55);
1611 ASSERT (strcmp (result, "2.e+00 33") == 0
1612 || strcmp (result, "2.e+000 33") == 0);
1613 ASSERT (retval == strlen (result));
1614 }
1615
1616 {
1617 int retval =
1618 my_sprintf (result, "%#.e %d", 9.75, 33, 44, 55);
1619 ASSERT (strcmp (result, "1.e+01 33") == 0
1620 || strcmp (result, "1.e+001 33") == 0);
1621 ASSERT (retval == strlen (result));
1622 }
1623
1624 {
1625 int retval =
1626 my_sprintf (result, "%015e %d", 1234.0, 33, 44, 55);
1627 ASSERT (strcmp (result, "0001.234000e+03 33") == 0
1628 || strcmp (result, "001.234000e+003 33") == 0);
1629 ASSERT (retval == strlen (result));
1630 }
1631
1632 {
1633 int retval =
1634 my_sprintf (result, "%015e %d", - Infinityd (), 33, 44, 55);
1635 ASSERT (strcmp (result, " -inf 33") == 0
1636 || strcmp (result, " -infinity 33") == 0);
1637 ASSERT (retval == strlen (result));
1638 }
1639
1640 {
1641 int retval =
1642 my_sprintf (result, "%050e %d", NaNd (), 33, 44, 55);
1643 ASSERT (strlen (result) == 50 + 3
1644 && strisnan (result, strspn (result, " "), strlen (result) - 3, 0)
1645 && strcmp (result + strlen (result) - 3, " 33") == 0);
1646 ASSERT (retval == strlen (result));
1647 }
1648
1649 {
1650 int retval =
1651 my_sprintf (result, "%.e %d", 1234.0, 33, 44, 55);
1652 ASSERT (strcmp (result, "1e+03 33") == 0
1653 || strcmp (result, "1e+003 33") == 0);
1654 ASSERT (retval == strlen (result));
1655 }
1656
1657 {
1658 int retval =
1659 my_sprintf (result, "%.4e %d", 999.951, 33, 44, 55);
1660 ASSERT (strcmp (result, "9.9995e+02 33") == 0
1661 || strcmp (result, "9.9995e+002 33") == 0);
1662 ASSERT (retval == strlen (result));
1663 }
1664
1665 {
1666 int retval =
1667 my_sprintf (result, "%.4e %d", 999.996, 33, 44, 55);
1668 ASSERT (strcmp (result, "1.0000e+03 33") == 0
1669 || strcmp (result, "1.0000e+003 33") == 0);
1670 ASSERT (retval == strlen (result));
1671 }
1672
1673 {
1674 int retval =
1675 my_sprintf (result, "%Le %d", 12.75L, 33, 44, 55);
1676 ASSERT (strcmp (result, "1.275000e+01 33") == 0
1677 || strcmp (result, "1.275000e+001 33") == 0);
1678 ASSERT (retval == strlen (result));
1679 }
1680
1681 {
1682 int retval =
1683 my_sprintf (result, "%Le %d", 1234567.0L, 33, 44, 55);
1684 ASSERT (strcmp (result, "1.234567e+06 33") == 0
1685 || strcmp (result, "1.234567e+006 33") == 0);
1686 ASSERT (retval == strlen (result));
1687 }
1688
1689 {
1690 static struct { long double value; const char *string; } data[] =
1691 {
1692 { 1.234321234321234e-37L, "1.234321e-37" },
1693 { 1.234321234321234e-36L, "1.234321e-36" },
1694 { 1.234321234321234e-35L, "1.234321e-35" },
1695 { 1.234321234321234e-34L, "1.234321e-34" },
1696 { 1.234321234321234e-33L, "1.234321e-33" },
1697 { 1.234321234321234e-32L, "1.234321e-32" },
1698 { 1.234321234321234e-31L, "1.234321e-31" },
1699 { 1.234321234321234e-30L, "1.234321e-30" },
1700 { 1.234321234321234e-29L, "1.234321e-29" },
1701 { 1.234321234321234e-28L, "1.234321e-28" },
1702 { 1.234321234321234e-27L, "1.234321e-27" },
1703 { 1.234321234321234e-26L, "1.234321e-26" },
1704 { 1.234321234321234e-25L, "1.234321e-25" },
1705 { 1.234321234321234e-24L, "1.234321e-24" },
1706 { 1.234321234321234e-23L, "1.234321e-23" },
1707 { 1.234321234321234e-22L, "1.234321e-22" },
1708 { 1.234321234321234e-21L, "1.234321e-21" },
1709 { 1.234321234321234e-20L, "1.234321e-20" },
1710 { 1.234321234321234e-19L, "1.234321e-19" },
1711 { 1.234321234321234e-18L, "1.234321e-18" },
1712 { 1.234321234321234e-17L, "1.234321e-17" },
1713 { 1.234321234321234e-16L, "1.234321e-16" },
1714 { 1.234321234321234e-15L, "1.234321e-15" },
1715 { 1.234321234321234e-14L, "1.234321e-14" },
1716 { 1.234321234321234e-13L, "1.234321e-13" },
1717 { 1.234321234321234e-12L, "1.234321e-12" },
1718 { 1.234321234321234e-11L, "1.234321e-11" },
1719 { 1.234321234321234e-10L, "1.234321e-10" },
1720 { 1.234321234321234e-9L, "1.234321e-09" },
1721 { 1.234321234321234e-8L, "1.234321e-08" },
1722 { 1.234321234321234e-7L, "1.234321e-07" },
1723 { 1.234321234321234e-6L, "1.234321e-06" },
1724 { 1.234321234321234e-5L, "1.234321e-05" },
1725 { 1.234321234321234e-4L, "1.234321e-04" },
1726 { 1.234321234321234e-3L, "1.234321e-03" },
1727 { 1.234321234321234e-2L, "1.234321e-02" },
1728 { 1.234321234321234e-1L, "1.234321e-01" },
1729 { 1.234321234321234L, "1.234321e+00" },
1730 { 1.234321234321234e1L, "1.234321e+01" },
1731 { 1.234321234321234e2L, "1.234321e+02" },
1732 { 1.234321234321234e3L, "1.234321e+03" },
1733 { 1.234321234321234e4L, "1.234321e+04" },
1734 { 1.234321234321234e5L, "1.234321e+05" },
1735 { 1.234321234321234e6L, "1.234321e+06" },
1736 { 1.234321234321234e7L, "1.234321e+07" },
1737 { 1.234321234321234e8L, "1.234321e+08" },
1738 { 1.234321234321234e9L, "1.234321e+09" },
1739 { 1.234321234321234e10L, "1.234321e+10" },
1740 { 1.234321234321234e11L, "1.234321e+11" },
1741 { 1.234321234321234e12L, "1.234321e+12" },
1742 { 1.234321234321234e13L, "1.234321e+13" },
1743 { 1.234321234321234e14L, "1.234321e+14" },
1744 { 1.234321234321234e15L, "1.234321e+15" },
1745 { 1.234321234321234e16L, "1.234321e+16" },
1746 { 1.234321234321234e17L, "1.234321e+17" },
1747 { 1.234321234321234e18L, "1.234321e+18" },
1748 { 1.234321234321234e19L, "1.234321e+19" },
1749 { 1.234321234321234e20L, "1.234321e+20" },
1750 { 1.234321234321234e21L, "1.234321e+21" },
1751 { 1.234321234321234e22L, "1.234321e+22" },
1752 { 1.234321234321234e23L, "1.234321e+23" },
1753 { 1.234321234321234e24L, "1.234321e+24" },
1754 { 1.234321234321234e25L, "1.234321e+25" },
1755 { 1.234321234321234e26L, "1.234321e+26" },
1756 { 1.234321234321234e27L, "1.234321e+27" },
1757 { 1.234321234321234e28L, "1.234321e+28" },
1758 { 1.234321234321234e29L, "1.234321e+29" },
1759 { 1.234321234321234e30L, "1.234321e+30" },
1760 { 1.234321234321234e31L, "1.234321e+31" },
1761 { 1.234321234321234e32L, "1.234321e+32" },
1762 { 1.234321234321234e33L, "1.234321e+33" },
1763 { 1.234321234321234e34L, "1.234321e+34" },
1764 { 1.234321234321234e35L, "1.234321e+35" },
1765 { 1.234321234321234e36L, "1.234321e+36" }
1766 };
1767 size_t k;
1768 for (k = 0; k < SIZEOF (data); k++)
1769 {
1770 int retval =
1771 my_sprintf (result, "%Le", data[k].value);
1772 const char *expected = data[k].string;
1773 ASSERT (strcmp (result, expected) == 0
1774
1775 || (strlen (result) == strlen (expected) + 1
1776 && memcmp (result, expected, strlen (expected) - 2) == 0
1777 && result[strlen (expected) - 2] == '0'
1778 && strcmp (result + strlen (expected) - 1,
1779 expected + strlen (expected) - 2)
1780 == 0));
1781 ASSERT (retval == strlen (result));
1782 }
1783 }
1784
1785 {
1786 int retval =
1787 my_sprintf (result, "%Le %d", -0.03125L, 33, 44, 55);
1788 ASSERT (strcmp (result, "-3.125000e-02 33") == 0
1789 || strcmp (result, "-3.125000e-002 33") == 0);
1790 ASSERT (retval == strlen (result));
1791 }
1792
1793 {
1794 int retval =
1795 my_sprintf (result, "%Le %d", 0.0L, 33, 44, 55);
1796 ASSERT (strcmp (result, "0.000000e+00 33") == 0
1797 || strcmp (result, "0.000000e+000 33") == 0);
1798 ASSERT (retval == strlen (result));
1799 }
1800
1801 {
1802 int retval =
1803 my_sprintf (result, "%Le %d", minus_zerol, 33, 44, 55);
1804 if (have_minus_zero ())
1805 ASSERT (strcmp (result, "-0.000000e+00 33") == 0
1806 || strcmp (result, "-0.000000e+000 33") == 0);
1807 ASSERT (retval == strlen (result));
1808 }
1809
1810 {
1811 int retval =
1812 my_sprintf (result, "%Le %d", Infinityl (), 33, 44, 55);
1813 ASSERT (strcmp (result, "inf 33") == 0
1814 || strcmp (result, "infinity 33") == 0);
1815 ASSERT (retval == strlen (result));
1816 }
1817
1818 {
1819 int retval =
1820 my_sprintf (result, "%Le %d", - Infinityl (), 33, 44, 55);
1821 ASSERT (strcmp (result, "-inf 33") == 0
1822 || strcmp (result, "-infinity 33") == 0);
1823 ASSERT (retval == strlen (result));
1824 }
1825
1826 {
1827 int retval =
1828 my_sprintf (result, "%Le %d", NaNl (), 33, 44, 55);
1829 ASSERT (strlen (result) >= 3 + 3
1830 && strisnan (result, 0, strlen (result) - 3, 0)
1831 && strcmp (result + strlen (result) - 3, " 33") == 0);
1832 ASSERT (retval == strlen (result));
1833 }
1834 #if CHECK_PRINTF_SAFE && ((defined __ia64 && LDBL_MANT_DIG == 64) || (defined __x86_64__ || defined __amd64__) || (defined __i386 || defined __i386__ || defined _I386 || defined _M_IX86 || defined _X86_)) && !HAVE_SAME_LONG_DOUBLE_AS_DOUBLE
1835 {
1836 static union { unsigned int word[4]; long double value; } x =
1837 { LDBL80_WORDS (0xFFFF, 0xC3333333, 0x00000000) };
1838 int retval =
1839 my_sprintf (result, "%Le %d", x.value, 33, 44, 55);
1840 ASSERT (strlen (result) >= 3 + 3
1841 && strisnan (result, 0, strlen (result) - 3, 0)
1842 && strcmp (result + strlen (result) - 3, " 33") == 0);
1843 ASSERT (retval == strlen (result));
1844 }
1845 {
1846
1847 static union { unsigned int word[4]; long double value; } x =
1848 { LDBL80_WORDS (0xFFFF, 0x83333333, 0x00000000) };
1849 int retval =
1850 my_sprintf (result, "%Le %d", x.value, 33, 44, 55);
1851 ASSERT (strlen (result) >= 3 + 3
1852 && strisnan (result, 0, strlen (result) - 3, 0)
1853 && strcmp (result + strlen (result) - 3, " 33") == 0);
1854 ASSERT (retval == strlen (result));
1855 }
1856
1857 {
1858 static union { unsigned int word[4]; long double value; } x =
1859 { LDBL80_WORDS (0xFFFF, 0x40000001, 0x00000000) };
1860 int retval =
1861 my_sprintf (result, "%Le %d", x.value, 33, 44, 55);
1862 ASSERT (retval == strlen (result));
1863 ASSERT (3 < retval && strcmp (result + retval - 3, " 33") == 0);
1864 }
1865 {
1866 static union { unsigned int word[4]; long double value; } x =
1867 { LDBL80_WORDS (0xFFFF, 0x00000000, 0x00000000) };
1868 int retval =
1869 my_sprintf (result, "%Le %d", x.value, 33, 44, 55);
1870 ASSERT (retval == strlen (result));
1871 ASSERT (3 < retval && strcmp (result + retval - 3, " 33") == 0);
1872 }
1873 {
1874 static union { unsigned int word[4]; long double value; } x =
1875 { LDBL80_WORDS (0x4004, 0x00000000, 0x00000000) };
1876 int retval =
1877 my_sprintf (result, "%Le %d", x.value, 33, 44, 55);
1878 ASSERT (retval == strlen (result));
1879 ASSERT (3 < retval && strcmp (result + retval - 3, " 33") == 0);
1880 }
1881 {
1882 static union { unsigned int word[4]; long double value; } x =
1883 { LDBL80_WORDS (0x4000, 0x63333333, 0x00000000) };
1884 int retval =
1885 my_sprintf (result, "%Le %d", x.value, 33, 44, 55);
1886 ASSERT (retval == strlen (result));
1887 ASSERT (3 < retval && strcmp (result + retval - 3, " 33") == 0);
1888 }
1889 {
1890 static union { unsigned int word[4]; long double value; } x =
1891 { LDBL80_WORDS (0x0000, 0x83333333, 0x00000000) };
1892 int retval =
1893 my_sprintf (result, "%Le %d", x.value, 33, 44, 55);
1894 ASSERT (retval == strlen (result));
1895 ASSERT (3 < retval && strcmp (result + retval - 3, " 33") == 0);
1896 }
1897 #endif
1898
1899 {
1900 int retval =
1901 my_sprintf (result, "%15Le %d", 1.75L, 33, 44, 55);
1902 ASSERT (strcmp (result, " 1.750000e+00 33") == 0
1903 || strcmp (result, " 1.750000e+000 33") == 0);
1904 ASSERT (retval == strlen (result));
1905 }
1906
1907 {
1908 int retval =
1909 my_sprintf (result, "%-15Le %d", 1.75L, 33, 44, 55);
1910 ASSERT (strcmp (result, "1.750000e+00 33") == 0
1911 || strcmp (result, "1.750000e+000 33") == 0);
1912 ASSERT (retval == strlen (result));
1913 }
1914
1915 {
1916 int retval =
1917 my_sprintf (result, "%+Le %d", 1.75L, 33, 44, 55);
1918 ASSERT (strcmp (result, "+1.750000e+00 33") == 0
1919 || strcmp (result, "+1.750000e+000 33") == 0);
1920 ASSERT (retval == strlen (result));
1921 }
1922
1923 {
1924 int retval =
1925 my_sprintf (result, "% Le %d", 1.75L, 33, 44, 55);
1926 ASSERT (strcmp (result, " 1.750000e+00 33") == 0
1927 || strcmp (result, " 1.750000e+000 33") == 0);
1928 ASSERT (retval == strlen (result));
1929 }
1930
1931 {
1932 int retval =
1933 my_sprintf (result, "%#Le %d", 1.75L, 33, 44, 55);
1934 ASSERT (strcmp (result, "1.750000e+00 33") == 0
1935 || strcmp (result, "1.750000e+000 33") == 0);
1936 ASSERT (retval == strlen (result));
1937 }
1938
1939 {
1940 int retval =
1941 my_sprintf (result, "%#.Le %d", 1.75L, 33, 44, 55);
1942 ASSERT (strcmp (result, "2.e+00 33") == 0
1943 || strcmp (result, "2.e+000 33") == 0);
1944 ASSERT (retval == strlen (result));
1945 }
1946
1947 {
1948 int retval =
1949 my_sprintf (result, "%#.Le %d", 9.75L, 33, 44, 55);
1950 ASSERT (strcmp (result, "1.e+01 33") == 0
1951 || strcmp (result, "1.e+001 33") == 0);
1952 ASSERT (retval == strlen (result));
1953 }
1954
1955 {
1956 int retval =
1957 my_sprintf (result, "%015Le %d", 1234.0L, 33, 44, 55);
1958 ASSERT (strcmp (result, "0001.234000e+03 33") == 0
1959 || strcmp (result, "001.234000e+003 33") == 0);
1960 ASSERT (retval == strlen (result));
1961 }
1962
1963 {
1964 int retval =
1965 my_sprintf (result, "%015Le %d", - Infinityl (), 33, 44, 55);
1966 ASSERT (strcmp (result, " -inf 33") == 0
1967 || strcmp (result, " -infinity 33") == 0);
1968 ASSERT (retval == strlen (result));
1969 }
1970
1971 {
1972 int retval =
1973 my_sprintf (result, "%050Le %d", NaNl (), 33, 44, 55);
1974 ASSERT (strlen (result) == 50 + 3
1975 && strisnan (result, strspn (result, " "), strlen (result) - 3, 0)
1976 && strcmp (result + strlen (result) - 3, " 33") == 0);
1977 ASSERT (retval == strlen (result));
1978 }
1979
1980 {
1981 int retval =
1982 my_sprintf (result, "%.Le %d", 1234.0L, 33, 44, 55);
1983 ASSERT (strcmp (result, "1e+03 33") == 0
1984 || strcmp (result, "1e+003 33") == 0);
1985 ASSERT (retval == strlen (result));
1986 }
1987
1988 {
1989 int retval =
1990 my_sprintf (result, "%.4Le %d", 999.951L, 33, 44, 55);
1991 ASSERT (strcmp (result, "9.9995e+02 33") == 0
1992 || strcmp (result, "9.9995e+002 33") == 0);
1993 ASSERT (retval == strlen (result));
1994 }
1995
1996 {
1997 int retval =
1998 my_sprintf (result, "%.4Le %d", 999.996L, 33, 44, 55);
1999 ASSERT (strcmp (result, "1.0000e+03 33") == 0
2000 || strcmp (result, "1.0000e+003 33") == 0);
2001 ASSERT (retval == strlen (result));
2002 }
2003
2004
2005
2006 {
2007 int retval =
2008 my_sprintf (result, "%g %d", 12.75, 33, 44, 55);
2009 ASSERT (strcmp (result, "12.75 33") == 0);
2010 ASSERT (retval == strlen (result));
2011 }
2012
2013 {
2014 int retval =
2015 my_sprintf (result, "%g %d", 1234567.0, 33, 44, 55);
2016 ASSERT (strcmp (result, "1.23457e+06 33") == 0
2017 || strcmp (result, "1.23457e+006 33") == 0);
2018 ASSERT (retval == strlen (result));
2019 }
2020
2021 {
2022 static struct { double value; const char *string; } data[] =
2023 {
2024 { 1.234321234321234e-37, "1.23432e-37" },
2025 { 1.234321234321234e-36, "1.23432e-36" },
2026 { 1.234321234321234e-35, "1.23432e-35" },
2027 { 1.234321234321234e-34, "1.23432e-34" },
2028 { 1.234321234321234e-33, "1.23432e-33" },
2029 { 1.234321234321234e-32, "1.23432e-32" },
2030 { 1.234321234321234e-31, "1.23432e-31" },
2031 { 1.234321234321234e-30, "1.23432e-30" },
2032 { 1.234321234321234e-29, "1.23432e-29" },
2033 { 1.234321234321234e-28, "1.23432e-28" },
2034 { 1.234321234321234e-27, "1.23432e-27" },
2035 { 1.234321234321234e-26, "1.23432e-26" },
2036 { 1.234321234321234e-25, "1.23432e-25" },
2037 { 1.234321234321234e-24, "1.23432e-24" },
2038 { 1.234321234321234e-23, "1.23432e-23" },
2039 { 1.234321234321234e-22, "1.23432e-22" },
2040 { 1.234321234321234e-21, "1.23432e-21" },
2041 { 1.234321234321234e-20, "1.23432e-20" },
2042 { 1.234321234321234e-19, "1.23432e-19" },
2043 { 1.234321234321234e-18, "1.23432e-18" },
2044 { 1.234321234321234e-17, "1.23432e-17" },
2045 { 1.234321234321234e-16, "1.23432e-16" },
2046 { 1.234321234321234e-15, "1.23432e-15" },
2047 { 1.234321234321234e-14, "1.23432e-14" },
2048 { 1.234321234321234e-13, "1.23432e-13" },
2049 { 1.234321234321234e-12, "1.23432e-12" },
2050 { 1.234321234321234e-11, "1.23432e-11" },
2051 { 1.234321234321234e-10, "1.23432e-10" },
2052 { 1.234321234321234e-9, "1.23432e-09" },
2053 { 1.234321234321234e-8, "1.23432e-08" },
2054 { 1.234321234321234e-7, "1.23432e-07" },
2055 { 1.234321234321234e-6, "1.23432e-06" },
2056 { 1.234321234321234e-5, "1.23432e-05" },
2057 { 1.234321234321234e-4, "0.000123432" },
2058 { 1.234321234321234e-3, "0.00123432" },
2059 { 1.234321234321234e-2, "0.0123432" },
2060 { 1.234321234321234e-1, "0.123432" },
2061 { 1.234321234321234, "1.23432" },
2062 { 1.234321234321234e1, "12.3432" },
2063 { 1.234321234321234e2, "123.432" },
2064 { 1.234321234321234e3, "1234.32" },
2065 { 1.234321234321234e4, "12343.2" },
2066 { 1.234321234321234e5, "123432" },
2067 { 1.234321234321234e6, "1.23432e+06" },
2068 { 1.234321234321234e7, "1.23432e+07" },
2069 { 1.234321234321234e8, "1.23432e+08" },
2070 { 1.234321234321234e9, "1.23432e+09" },
2071 { 1.234321234321234e10, "1.23432e+10" },
2072 { 1.234321234321234e11, "1.23432e+11" },
2073 { 1.234321234321234e12, "1.23432e+12" },
2074 { 1.234321234321234e13, "1.23432e+13" },
2075 { 1.234321234321234e14, "1.23432e+14" },
2076 { 1.234321234321234e15, "1.23432e+15" },
2077 { 1.234321234321234e16, "1.23432e+16" },
2078 { 1.234321234321234e17, "1.23432e+17" },
2079 { 1.234321234321234e18, "1.23432e+18" },
2080 { 1.234321234321234e19, "1.23432e+19" },
2081 { 1.234321234321234e20, "1.23432e+20" },
2082 { 1.234321234321234e21, "1.23432e+21" },
2083 { 1.234321234321234e22, "1.23432e+22" },
2084 { 1.234321234321234e23, "1.23432e+23" },
2085 { 1.234321234321234e24, "1.23432e+24" },
2086 { 1.234321234321234e25, "1.23432e+25" },
2087 { 1.234321234321234e26, "1.23432e+26" },
2088 { 1.234321234321234e27, "1.23432e+27" },
2089 { 1.234321234321234e28, "1.23432e+28" },
2090 { 1.234321234321234e29, "1.23432e+29" },
2091 { 1.234321234321234e30, "1.23432e+30" },
2092 { 1.234321234321234e31, "1.23432e+31" },
2093 { 1.234321234321234e32, "1.23432e+32" },
2094 { 1.234321234321234e33, "1.23432e+33" },
2095 { 1.234321234321234e34, "1.23432e+34" },
2096 { 1.234321234321234e35, "1.23432e+35" },
2097 { 1.234321234321234e36, "1.23432e+36" }
2098 };
2099 size_t k;
2100 for (k = 0; k < SIZEOF (data); k++)
2101 {
2102 int retval =
2103 my_sprintf (result, "%g", data[k].value);
2104 const char *expected = data[k].string;
2105 ASSERT (strcmp (result, expected) == 0
2106
2107 || (expected[strlen (expected) - 4] == 'e'
2108 && strlen (result) == strlen (expected) + 1
2109 && memcmp (result, expected, strlen (expected) - 2) == 0
2110 && result[strlen (expected) - 2] == '0'
2111 && strcmp (result + strlen (expected) - 1,
2112 expected + strlen (expected) - 2)
2113 == 0));
2114 ASSERT (retval == strlen (result));
2115 }
2116 }
2117
2118 {
2119 int retval =
2120 my_sprintf (result, "%g %d", -0.03125, 33, 44, 55);
2121 ASSERT (strcmp (result, "-0.03125 33") == 0);
2122 ASSERT (retval == strlen (result));
2123 }
2124
2125 {
2126 int retval =
2127 my_sprintf (result, "%g %d", 0.0, 33, 44, 55);
2128 ASSERT (strcmp (result, "0 33") == 0);
2129 ASSERT (retval == strlen (result));
2130 }
2131
2132 {
2133 int retval =
2134 my_sprintf (result, "%g %d", minus_zerod, 33, 44, 55);
2135 if (have_minus_zero ())
2136 ASSERT (strcmp (result, "-0 33") == 0);
2137 ASSERT (retval == strlen (result));
2138 }
2139
2140 {
2141 int retval =
2142 my_sprintf (result, "%g %d", Infinityd (), 33, 44, 55);
2143 ASSERT (strcmp (result, "inf 33") == 0
2144 || strcmp (result, "infinity 33") == 0);
2145 ASSERT (retval == strlen (result));
2146 }
2147
2148 {
2149 int retval =
2150 my_sprintf (result, "%g %d", - Infinityd (), 33, 44, 55);
2151 ASSERT (strcmp (result, "-inf 33") == 0
2152 || strcmp (result, "-infinity 33") == 0);
2153 ASSERT (retval == strlen (result));
2154 }
2155
2156 {
2157 int retval =
2158 my_sprintf (result, "%g %d", NaNd (), 33, 44, 55);
2159 ASSERT (strlen (result) >= 3 + 3
2160 && strisnan (result, 0, strlen (result) - 3, 0)
2161 && strcmp (result + strlen (result) - 3, " 33") == 0);
2162 ASSERT (retval == strlen (result));
2163 }
2164
2165 {
2166 int retval =
2167 my_sprintf (result, "%10g %d", 1.75, 33, 44, 55);
2168 ASSERT (strcmp (result, " 1.75 33") == 0);
2169 ASSERT (retval == strlen (result));
2170 }
2171
2172 {
2173 int retval =
2174 my_sprintf (result, "%-10g %d", 1.75, 33, 44, 55);
2175 ASSERT (strcmp (result, "1.75 33") == 0);
2176 ASSERT (retval == strlen (result));
2177 }
2178
2179 {
2180 int retval =
2181 my_sprintf (result, "%+g %d", 1.75, 33, 44, 55);
2182 ASSERT (strcmp (result, "+1.75 33") == 0);
2183 ASSERT (retval == strlen (result));
2184 }
2185
2186 {
2187 int retval =
2188 my_sprintf (result, "% g %d", 1.75, 33, 44, 55);
2189 ASSERT (strcmp (result, " 1.75 33") == 0);
2190 ASSERT (retval == strlen (result));
2191 }
2192
2193 {
2194 int retval =
2195 my_sprintf (result, "%#g %d", 1.75, 33, 44, 55);
2196 ASSERT (strcmp (result, "1.75000 33") == 0);
2197 ASSERT (retval == strlen (result));
2198 }
2199
2200 {
2201 int retval =
2202 my_sprintf (result, "%#.g %d", 1.75, 33, 44, 55);
2203 ASSERT (strcmp (result, "2. 33") == 0);
2204 ASSERT (retval == strlen (result));
2205 }
2206
2207 {
2208 int retval =
2209 my_sprintf (result, "%#.g %d", 9.75, 33, 44, 55);
2210 ASSERT (strcmp (result, "1.e+01 33") == 0
2211 || strcmp (result, "1.e+001 33") == 0);
2212 ASSERT (retval == strlen (result));
2213 }
2214
2215 {
2216 int retval =
2217 my_sprintf (result, "%010g %d", 1234.0, 33, 44, 55);
2218 ASSERT (strcmp (result, "0000001234 33") == 0);
2219 ASSERT (retval == strlen (result));
2220 }
2221
2222 {
2223 int retval =
2224 my_sprintf (result, "%015g %d", - Infinityd (), 33, 44, 55);
2225 ASSERT (strcmp (result, " -inf 33") == 0
2226 || strcmp (result, " -infinity 33") == 0);
2227 ASSERT (retval == strlen (result));
2228 }
2229
2230 {
2231 int retval =
2232 my_sprintf (result, "%050g %d", NaNd (), 33, 44, 55);
2233 ASSERT (strlen (result) == 50 + 3
2234 && strisnan (result, strspn (result, " "), strlen (result) - 3, 0)
2235 && strcmp (result + strlen (result) - 3, " 33") == 0);
2236 ASSERT (retval == strlen (result));
2237 }
2238
2239 {
2240 int retval =
2241 my_sprintf (result, "%.g %d", 1234.0, 33, 44, 55);
2242 ASSERT (strcmp (result, "1e+03 33") == 0
2243 || strcmp (result, "1e+003 33") == 0);
2244 ASSERT (retval == strlen (result));
2245 }
2246
2247 {
2248 int retval =
2249 my_sprintf (result, "%.5g %d", 999.951, 33, 44, 55);
2250 ASSERT (strcmp (result, "999.95 33") == 0);
2251 ASSERT (retval == strlen (result));
2252 }
2253
2254 {
2255 int retval =
2256 my_sprintf (result, "%.5g %d", 999.996, 33, 44, 55);
2257 ASSERT (strcmp (result, "1000 33") == 0);
2258 ASSERT (retval == strlen (result));
2259 }
2260
2261 {
2262 int retval =
2263 my_sprintf (result, "%Lg %d", 12.75L, 33, 44, 55);
2264 ASSERT (strcmp (result, "12.75 33") == 0);
2265 ASSERT (retval == strlen (result));
2266 }
2267
2268 {
2269 int retval =
2270 my_sprintf (result, "%Lg %d", 1234567.0L, 33, 44, 55);
2271 ASSERT (strcmp (result, "1.23457e+06 33") == 0
2272 || strcmp (result, "1.23457e+006 33") == 0);
2273 ASSERT (retval == strlen (result));
2274 }
2275
2276 {
2277 static struct { long double value; const char *string; } data[] =
2278 {
2279 { 1.234321234321234e-37L, "1.23432e-37" },
2280 { 1.234321234321234e-36L, "1.23432e-36" },
2281 { 1.234321234321234e-35L, "1.23432e-35" },
2282 { 1.234321234321234e-34L, "1.23432e-34" },
2283 { 1.234321234321234e-33L, "1.23432e-33" },
2284 { 1.234321234321234e-32L, "1.23432e-32" },
2285 { 1.234321234321234e-31L, "1.23432e-31" },
2286 { 1.234321234321234e-30L, "1.23432e-30" },
2287 { 1.234321234321234e-29L, "1.23432e-29" },
2288 { 1.234321234321234e-28L, "1.23432e-28" },
2289 { 1.234321234321234e-27L, "1.23432e-27" },
2290 { 1.234321234321234e-26L, "1.23432e-26" },
2291 { 1.234321234321234e-25L, "1.23432e-25" },
2292 { 1.234321234321234e-24L, "1.23432e-24" },
2293 { 1.234321234321234e-23L, "1.23432e-23" },
2294 { 1.234321234321234e-22L, "1.23432e-22" },
2295 { 1.234321234321234e-21L, "1.23432e-21" },
2296 { 1.234321234321234e-20L, "1.23432e-20" },
2297 { 1.234321234321234e-19L, "1.23432e-19" },
2298 { 1.234321234321234e-18L, "1.23432e-18" },
2299 { 1.234321234321234e-17L, "1.23432e-17" },
2300 { 1.234321234321234e-16L, "1.23432e-16" },
2301 { 1.234321234321234e-15L, "1.23432e-15" },
2302 { 1.234321234321234e-14L, "1.23432e-14" },
2303 { 1.234321234321234e-13L, "1.23432e-13" },
2304 { 1.234321234321234e-12L, "1.23432e-12" },
2305 { 1.234321234321234e-11L, "1.23432e-11" },
2306 { 1.234321234321234e-10L, "1.23432e-10" },
2307 { 1.234321234321234e-9L, "1.23432e-09" },
2308 { 1.234321234321234e-8L, "1.23432e-08" },
2309 { 1.234321234321234e-7L, "1.23432e-07" },
2310 { 1.234321234321234e-6L, "1.23432e-06" },
2311 { 1.234321234321234e-5L, "1.23432e-05" },
2312 { 1.234321234321234e-4L, "0.000123432" },
2313 { 1.234321234321234e-3L, "0.00123432" },
2314 { 1.234321234321234e-2L, "0.0123432" },
2315 { 1.234321234321234e-1L, "0.123432" },
2316 { 1.234321234321234L, "1.23432" },
2317 { 1.234321234321234e1L, "12.3432" },
2318 { 1.234321234321234e2L, "123.432" },
2319 { 1.234321234321234e3L, "1234.32" },
2320 { 1.234321234321234e4L, "12343.2" },
2321 { 1.234321234321234e5L, "123432" },
2322 { 1.234321234321234e6L, "1.23432e+06" },
2323 { 1.234321234321234e7L, "1.23432e+07" },
2324 { 1.234321234321234e8L, "1.23432e+08" },
2325 { 1.234321234321234e9L, "1.23432e+09" },
2326 { 1.234321234321234e10L, "1.23432e+10" },
2327 { 1.234321234321234e11L, "1.23432e+11" },
2328 { 1.234321234321234e12L, "1.23432e+12" },
2329 { 1.234321234321234e13L, "1.23432e+13" },
2330 { 1.234321234321234e14L, "1.23432e+14" },
2331 { 1.234321234321234e15L, "1.23432e+15" },
2332 { 1.234321234321234e16L, "1.23432e+16" },
2333 { 1.234321234321234e17L, "1.23432e+17" },
2334 { 1.234321234321234e18L, "1.23432e+18" },
2335 { 1.234321234321234e19L, "1.23432e+19" },
2336 { 1.234321234321234e20L, "1.23432e+20" },
2337 { 1.234321234321234e21L, "1.23432e+21" },
2338 { 1.234321234321234e22L, "1.23432e+22" },
2339 { 1.234321234321234e23L, "1.23432e+23" },
2340 { 1.234321234321234e24L, "1.23432e+24" },
2341 { 1.234321234321234e25L, "1.23432e+25" },
2342 { 1.234321234321234e26L, "1.23432e+26" },
2343 { 1.234321234321234e27L, "1.23432e+27" },
2344 { 1.234321234321234e28L, "1.23432e+28" },
2345 { 1.234321234321234e29L, "1.23432e+29" },
2346 { 1.234321234321234e30L, "1.23432e+30" },
2347 { 1.234321234321234e31L, "1.23432e+31" },
2348 { 1.234321234321234e32L, "1.23432e+32" },
2349 { 1.234321234321234e33L, "1.23432e+33" },
2350 { 1.234321234321234e34L, "1.23432e+34" },
2351 { 1.234321234321234e35L, "1.23432e+35" },
2352 { 1.234321234321234e36L, "1.23432e+36" }
2353 };
2354 size_t k;
2355 for (k = 0; k < SIZEOF (data); k++)
2356 {
2357 int retval =
2358 my_sprintf (result, "%Lg", data[k].value);
2359 const char *expected = data[k].string;
2360 ASSERT (strcmp (result, expected) == 0
2361
2362 || (expected[strlen (expected) - 4] == 'e'
2363 && strlen (result) == strlen (expected) + 1
2364 && memcmp (result, expected, strlen (expected) - 2) == 0
2365 && result[strlen (expected) - 2] == '0'
2366 && strcmp (result + strlen (expected) - 1,
2367 expected + strlen (expected) - 2)
2368 == 0));
2369 ASSERT (retval == strlen (result));
2370 }
2371 }
2372
2373 {
2374 int retval =
2375 my_sprintf (result, "%Lg %d", -0.03125L, 33, 44, 55);
2376 ASSERT (strcmp (result, "-0.03125 33") == 0);
2377 ASSERT (retval == strlen (result));
2378 }
2379
2380 {
2381 int retval =
2382 my_sprintf (result, "%Lg %d", 0.0L, 33, 44, 55);
2383 ASSERT (strcmp (result, "0 33") == 0);
2384 ASSERT (retval == strlen (result));
2385 }
2386
2387 {
2388 int retval =
2389 my_sprintf (result, "%Lg %d", minus_zerol, 33, 44, 55);
2390 if (have_minus_zero ())
2391 ASSERT (strcmp (result, "-0 33") == 0);
2392 ASSERT (retval == strlen (result));
2393 }
2394
2395 {
2396 int retval =
2397 my_sprintf (result, "%Lg %d", Infinityl (), 33, 44, 55);
2398 ASSERT (strcmp (result, "inf 33") == 0
2399 || strcmp (result, "infinity 33") == 0);
2400 ASSERT (retval == strlen (result));
2401 }
2402
2403 {
2404 int retval =
2405 my_sprintf (result, "%Lg %d", - Infinityl (), 33, 44, 55);
2406 ASSERT (strcmp (result, "-inf 33") == 0
2407 || strcmp (result, "-infinity 33") == 0);
2408 ASSERT (retval == strlen (result));
2409 }
2410
2411 {
2412 int retval =
2413 my_sprintf (result, "%Lg %d", NaNl (), 33, 44, 55);
2414 ASSERT (strlen (result) >= 3 + 3
2415 && strisnan (result, 0, strlen (result) - 3, 0)
2416 && strcmp (result + strlen (result) - 3, " 33") == 0);
2417 ASSERT (retval == strlen (result));
2418 }
2419 #if CHECK_PRINTF_SAFE && ((defined __ia64 && LDBL_MANT_DIG == 64) || (defined __x86_64__ || defined __amd64__) || (defined __i386 || defined __i386__ || defined _I386 || defined _M_IX86 || defined _X86_)) && !HAVE_SAME_LONG_DOUBLE_AS_DOUBLE
2420 {
2421 static union { unsigned int word[4]; long double value; } x =
2422 { LDBL80_WORDS (0xFFFF, 0xC3333333, 0x00000000) };
2423 int retval =
2424 my_sprintf (result, "%La %d", x.value, 33, 44, 55);
2425 ASSERT (strlen (result) >= 3 + 3
2426 && strisnan (result, 0, strlen (result) - 3, 0)
2427 && strcmp (result + strlen (result) - 3, " 33") == 0);
2428 ASSERT (retval == strlen (result));
2429 }
2430 {
2431
2432 static union { unsigned int word[4]; long double value; } x =
2433 { LDBL80_WORDS (0xFFFF, 0x83333333, 0x00000000) };
2434 int retval =
2435 my_sprintf (result, "%La %d", x.value, 33, 44, 55);
2436 ASSERT (strlen (result) >= 3 + 3
2437 && strisnan (result, 0, strlen (result) - 3, 0)
2438 && strcmp (result + strlen (result) - 3, " 33") == 0);
2439 ASSERT (retval == strlen (result));
2440 }
2441
2442 {
2443 static union { unsigned int word[4]; long double value; } x =
2444 { LDBL80_WORDS (0xFFFF, 0x40000001, 0x00000000) };
2445 int retval =
2446 my_sprintf (result, "%Lg %d", x.value, 33, 44, 55);
2447 ASSERT (retval == strlen (result));
2448 ASSERT (3 < retval && strcmp (result + retval - 3, " 33") == 0);
2449 }
2450 {
2451 static union { unsigned int word[4]; long double value; } x =
2452 { LDBL80_WORDS (0xFFFF, 0x00000000, 0x00000000) };
2453 int retval =
2454 my_sprintf (result, "%Lg %d", x.value, 33, 44, 55);
2455 ASSERT (retval == strlen (result));
2456 ASSERT (3 < retval && strcmp (result + retval - 3, " 33") == 0);
2457 }
2458 {
2459 static union { unsigned int word[4]; long double value; } x =
2460 { LDBL80_WORDS (0x4004, 0x00000000, 0x00000000) };
2461 int retval =
2462 my_sprintf (result, "%Lg %d", x.value, 33, 44, 55);
2463 ASSERT (retval == strlen (result));
2464 ASSERT (3 < retval && strcmp (result + retval - 3, " 33") == 0);
2465 }
2466 {
2467 static union { unsigned int word[4]; long double value; } x =
2468 { LDBL80_WORDS (0x4000, 0x63333333, 0x00000000) };
2469 int retval =
2470 my_sprintf (result, "%Lg %d", x.value, 33, 44, 55);
2471 ASSERT (retval == strlen (result));
2472 ASSERT (3 < retval && strcmp (result + retval - 3, " 33") == 0);
2473 }
2474 {
2475 static union { unsigned int word[4]; long double value; } x =
2476 { LDBL80_WORDS (0x0000, 0x83333333, 0x00000000) };
2477 int retval =
2478 my_sprintf (result, "%Lg %d", x.value, 33, 44, 55);
2479 ASSERT (retval == strlen (result));
2480 ASSERT (3 < retval && strcmp (result + retval - 3, " 33") == 0);
2481 }
2482 #endif
2483
2484 {
2485 int retval =
2486 my_sprintf (result, "%10Lg %d", 1.75L, 33, 44, 55);
2487 ASSERT (strcmp (result, " 1.75 33") == 0);
2488 ASSERT (retval == strlen (result));
2489 }
2490
2491 {
2492 int retval =
2493 my_sprintf (result, "%-10Lg %d", 1.75L, 33, 44, 55);
2494 ASSERT (strcmp (result, "1.75 33") == 0);
2495 ASSERT (retval == strlen (result));
2496 }
2497
2498 {
2499 int retval =
2500 my_sprintf (result, "%+Lg %d", 1.75L, 33, 44, 55);
2501 ASSERT (strcmp (result, "+1.75 33") == 0);
2502 ASSERT (retval == strlen (result));
2503 }
2504
2505 {
2506 int retval =
2507 my_sprintf (result, "% Lg %d", 1.75L, 33, 44, 55);
2508 ASSERT (strcmp (result, " 1.75 33") == 0);
2509 ASSERT (retval == strlen (result));
2510 }
2511
2512 {
2513 int retval =
2514 my_sprintf (result, "%#Lg %d", 1.75L, 33, 44, 55);
2515 ASSERT (strcmp (result, "1.75000 33") == 0);
2516 ASSERT (retval == strlen (result));
2517 }
2518
2519 {
2520 int retval =
2521 my_sprintf (result, "%#.Lg %d", 1.75L, 33, 44, 55);
2522 ASSERT (strcmp (result, "2. 33") == 0);
2523 ASSERT (retval == strlen (result));
2524 }
2525
2526 {
2527 int retval =
2528 my_sprintf (result, "%#.Lg %d", 9.75L, 33, 44, 55);
2529 ASSERT (strcmp (result, "1.e+01 33") == 0
2530 || strcmp (result, "1.e+001 33") == 0);
2531 ASSERT (retval == strlen (result));
2532 }
2533
2534 {
2535 int retval =
2536 my_sprintf (result, "%010Lg %d", 1234.0L, 33, 44, 55);
2537 ASSERT (strcmp (result, "0000001234 33") == 0);
2538 ASSERT (retval == strlen (result));
2539 }
2540
2541 {
2542 int retval =
2543 my_sprintf (result, "%015Lg %d", - Infinityl (), 33, 44, 55);
2544 ASSERT (strcmp (result, " -inf 33") == 0
2545 || strcmp (result, " -infinity 33") == 0);
2546 ASSERT (retval == strlen (result));
2547 }
2548
2549 {
2550 int retval =
2551 my_sprintf (result, "%050Lg %d", NaNl (), 33, 44, 55);
2552 ASSERT (strlen (result) == 50 + 3
2553 && strisnan (result, strspn (result, " "), strlen (result) - 3, 0)
2554 && strcmp (result + strlen (result) - 3, " 33") == 0);
2555 ASSERT (retval == strlen (result));
2556 }
2557
2558 {
2559 int retval =
2560 my_sprintf (result, "%.Lg %d", 1234.0L, 33, 44, 55);
2561 ASSERT (strcmp (result, "1e+03 33") == 0
2562 || strcmp (result, "1e+003 33") == 0);
2563 ASSERT (retval == strlen (result));
2564 }
2565
2566 {
2567 int retval =
2568 my_sprintf (result, "%.5Lg %d", 999.951L, 33, 44, 55);
2569 ASSERT (strcmp (result, "999.95 33") == 0);
2570 ASSERT (retval == strlen (result));
2571 }
2572
2573 {
2574 int retval =
2575 my_sprintf (result, "%.5Lg %d", 999.996L, 33, 44, 55);
2576 ASSERT (strcmp (result, "1000 33") == 0);
2577 ASSERT (retval == strlen (result));
2578 }
2579
2580
2581
2582 {
2583 int count = -1;
2584 int retval =
2585 my_sprintf (result, "%d %n", 123, &count, 33, 44, 55);
2586 ASSERT (strcmp (result, "123 ") == 0);
2587 ASSERT (retval == strlen (result));
2588 ASSERT (count == 4);
2589 }
2590
2591
2592
2593 {
2594 int retval =
2595 my_sprintf (result, "%2$d %1$d", 33, 55);
2596 ASSERT (strcmp (result, "55 33") == 0);
2597 ASSERT (retval == strlen (result));
2598 }
2599
2600
2601
2602 {
2603 int retval =
2604 my_sprintf (result, "%'d %d", 1234567, 99);
2605 ASSERT (result[strlen (result) - 1] == '9');
2606 ASSERT (retval == strlen (result));
2607 }
2608
2609
2610
2611 {
2612 int retval =
2613 my_sprintf (result, "a%*sc", -3, "b");
2614 ASSERT (strcmp (result, "ab c") == 0);
2615 ASSERT (retval == strlen (result));
2616 }
2617
2618 {
2619 int retval =
2620 my_sprintf (result, "a%-*sc", 3, "b");
2621 ASSERT (strcmp (result, "ab c") == 0);
2622 ASSERT (retval == strlen (result));
2623 }
2624
2625 {
2626 int retval =
2627 my_sprintf (result, "a%-*sc", -3, "b");
2628 ASSERT (strcmp (result, "ab c") == 0);
2629 ASSERT (retval == strlen (result));
2630 }
2631
2632
2633
2634 {
2635 int retval =
2636 my_sprintf (result, "%.4000d %d", 1234567, 99);
2637 size_t i;
2638 for (i = 0; i < 4000 - 7; i++)
2639 ASSERT (result[i] == '0');
2640 ASSERT (strcmp (result + 4000 - 7, "1234567 99") == 0);
2641 ASSERT (retval == strlen (result));
2642 }
2643
2644 {
2645 int retval =
2646 my_sprintf (result, "%.*d %d", 4000, 1234567, 99);
2647 size_t i;
2648 for (i = 0; i < 4000 - 7; i++)
2649 ASSERT (result[i] == '0');
2650 ASSERT (strcmp (result + 4000 - 7, "1234567 99") == 0);
2651 ASSERT (retval == strlen (result));
2652 }
2653
2654 {
2655 int retval =
2656 my_sprintf (result, "%.4000d %d", -1234567, 99);
2657 size_t i;
2658 ASSERT (result[0] == '-');
2659 for (i = 0; i < 4000 - 7; i++)
2660 ASSERT (result[1 + i] == '0');
2661 ASSERT (strcmp (result + 1 + 4000 - 7, "1234567 99") == 0);
2662 ASSERT (retval == strlen (result));
2663 }
2664
2665 {
2666 int retval =
2667 my_sprintf (result, "%.4000u %d", 1234567, 99);
2668 size_t i;
2669 for (i = 0; i < 4000 - 7; i++)
2670 ASSERT (result[i] == '0');
2671 ASSERT (strcmp (result + 4000 - 7, "1234567 99") == 0);
2672 ASSERT (retval == strlen (result));
2673 }
2674
2675 {
2676 int retval =
2677 my_sprintf (result, "%.4000o %d", 1234567, 99);
2678 size_t i;
2679 for (i = 0; i < 4000 - 7; i++)
2680 ASSERT (result[i] == '0');
2681 ASSERT (strcmp (result + 4000 - 7, "4553207 99") == 0);
2682 ASSERT (retval == strlen (result));
2683 }
2684
2685 {
2686 int retval =
2687 my_sprintf (result, "%.4000x %d", 1234567, 99);
2688 size_t i;
2689 for (i = 0; i < 4000 - 6; i++)
2690 ASSERT (result[i] == '0');
2691 ASSERT (strcmp (result + 4000 - 6, "12d687 99") == 0);
2692 ASSERT (retval == strlen (result));
2693 }
2694
2695 {
2696 int retval =
2697 my_sprintf (result, "%#.4000x %d", 1234567, 99);
2698 size_t i;
2699 ASSERT (result[0] == '0');
2700 ASSERT (result[1] == 'x');
2701 for (i = 0; i < 4000 - 6; i++)
2702 ASSERT (result[2 + i] == '0');
2703 ASSERT (strcmp (result + 2 + 4000 - 6, "12d687 99") == 0);
2704 ASSERT (retval == strlen (result));
2705 }
2706
2707 {
2708 int retval =
2709 my_sprintf (result, "%.4000f %d", 1.0, 99);
2710 size_t i;
2711 ASSERT (result[0] == '1');
2712 ASSERT (result[1] == '.');
2713 for (i = 0; i < 4000; i++)
2714 ASSERT (result[2 + i] == '0');
2715 ASSERT (strcmp (result + 2 + 4000, " 99") == 0);
2716 ASSERT (retval == strlen (result));
2717 }
2718
2719 {
2720 int retval =
2721 my_sprintf (result, "%.511f %d", 1.0, 99);
2722 size_t i;
2723 ASSERT (result[0] == '1');
2724 ASSERT (result[1] == '.');
2725 for (i = 0; i < 511; i++)
2726 ASSERT (result[2 + i] == '0');
2727 ASSERT (strcmp (result + 2 + 511, " 99") == 0);
2728 ASSERT (retval == strlen (result));
2729 }
2730
2731 {
2732 char input[5000];
2733 int retval;
2734 size_t i;
2735
2736 for (i = 0; i < sizeof (input) - 1; i++)
2737 input[i] = 'a' + ((1000000 / (i + 1)) % 26);
2738 input[i] = '\0';
2739 retval = my_sprintf (result, "%.4000s %d", input, 99);
2740 ASSERT (memcmp (result, input, 4000) == 0);
2741 ASSERT (strcmp (result + 4000, " 99") == 0);
2742 ASSERT (retval == strlen (result));
2743 }
2744
2745
2746
2747
2748
2749
2750 {
2751 size_t i;
2752
2753 for (i = 1; i <= 8; i++)
2754 {
2755 char *block;
2756 int retval;
2757
2758 block = (char *) malloc (i);
2759 memcpy (block, "abcdefgh", i);
2760 retval = my_sprintf (result, "%.*s", (int) i, block);
2761 ASSERT (memcmp (result, block, i) == 0);
2762 ASSERT (result[i] == '\0');
2763 ASSERT (retval == strlen (result));
2764 free (block);
2765 }
2766 }
2767 #if HAVE_WCHAR_T
2768 {
2769 size_t i;
2770
2771 for (i = 1; i <= 8; i++)
2772 {
2773 wchar_t *block;
2774 size_t j;
2775 int retval;
2776
2777 block = (wchar_t *) malloc (i * sizeof (wchar_t));
2778 for (j = 0; j < i; j++)
2779 block[j] = "abcdefgh"[j];
2780 retval = my_sprintf (result, "%.*ls", (int) i, block);
2781 ASSERT (memcmp (result, "abcdefgh", i) == 0);
2782 ASSERT (result[i] == '\0');
2783 ASSERT (retval == strlen (result));
2784 free (block);
2785 }
2786 }
2787 #endif
2788 }