annotate tests/test-vasnprintf-posix.c @ 9854:baba3b346ab2

Use macros NaNf, NaNd, NaNl instead of NAN.
author Bruno Haible <bruno@clisp.org>
date Wed, 02 Apr 2008 03:06:02 +0200
parents 7f3ed6b093be
children 0be6f1ab456d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
8336
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
1 /* Test of POSIX compatible vasnprintf() and asnprintf() functions.
9674
b69f1141e94f Fix *printf behaviour regarding the left-adjust flag on HP-UX 10.20.
Bruno Haible <bruno@clisp.org>
parents: 9447
diff changeset
2 Copyright (C) 2007-2008 Free Software Foundation, Inc.
8336
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
3
9309
bbbbbf4cd1c5 Change copyright notice from GPLv2+ to GPLv3+.
Bruno Haible <bruno@clisp.org>
parents: 8919
diff changeset
4 This program is free software: you can redistribute it and/or modify
8336
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
5 it under the terms of the GNU General Public License as published by
9309
bbbbbf4cd1c5 Change copyright notice from GPLv2+ to GPLv3+.
Bruno Haible <bruno@clisp.org>
parents: 8919
diff changeset
6 the Free Software Foundation; either version 3 of the License, or
bbbbbf4cd1c5 Change copyright notice from GPLv2+ to GPLv3+.
Bruno Haible <bruno@clisp.org>
parents: 8919
diff changeset
7 (at your option) any later version.
8336
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
8
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
9 This program is distributed in the hope that it will be useful,
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
12 GNU General Public License for more details.
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
13
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
14 You should have received a copy of the GNU General Public License
9309
bbbbbf4cd1c5 Change copyright notice from GPLv2+ to GPLv3+.
Bruno Haible <bruno@clisp.org>
parents: 8919
diff changeset
15 along with this program. If not, see <http://www.gnu.org/licenses/>. */
8336
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
16
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
17 /* Written by Bruno Haible <bruno@clisp.org>, 2007. */
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
18
8891
633babea5f62 Unconditionally include <config.h> in unit tests.
Eric Blake <ebb9@byu.net>
parents: 8870
diff changeset
19 #include <config.h>
8336
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
20
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
21 #include "vasnprintf.h"
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
22
8919
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
23 #include <float.h>
8336
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
24 #include <stdarg.h>
8354
81b3f885ff9d Include <stddef.h>, for ptrdiff_t.
Bruno Haible <bruno@clisp.org>
parents: 8344
diff changeset
25 #include <stddef.h>
8754
1f57552cdb11 Better ASSERT macro.
Bruno Haible <bruno@clisp.org>
parents: 8684
diff changeset
26 #include <stdio.h>
8336
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
27 #include <stdint.h>
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
28 #include <stdlib.h>
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
29 #include <string.h>
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
30
9854
baba3b346ab2 Use macros NaNf, NaNd, NaNl instead of NAN.
Bruno Haible <bruno@clisp.org>
parents: 9850
diff changeset
31 #include "nan.h"
baba3b346ab2 Use macros NaNf, NaNd, NaNl instead of NAN.
Bruno Haible <bruno@clisp.org>
parents: 9850
diff changeset
32
8834
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
33 #define SIZEOF(array) (sizeof (array) / sizeof (array[0]))
8754
1f57552cdb11 Better ASSERT macro.
Bruno Haible <bruno@clisp.org>
parents: 8684
diff changeset
34 #define ASSERT(expr) \
1f57552cdb11 Better ASSERT macro.
Bruno Haible <bruno@clisp.org>
parents: 8684
diff changeset
35 do \
1f57552cdb11 Better ASSERT macro.
Bruno Haible <bruno@clisp.org>
parents: 8684
diff changeset
36 { \
1f57552cdb11 Better ASSERT macro.
Bruno Haible <bruno@clisp.org>
parents: 8684
diff changeset
37 if (!(expr)) \
1f57552cdb11 Better ASSERT macro.
Bruno Haible <bruno@clisp.org>
parents: 8684
diff changeset
38 { \
1f57552cdb11 Better ASSERT macro.
Bruno Haible <bruno@clisp.org>
parents: 8684
diff changeset
39 fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \
1f57552cdb11 Better ASSERT macro.
Bruno Haible <bruno@clisp.org>
parents: 8684
diff changeset
40 abort (); \
1f57552cdb11 Better ASSERT macro.
Bruno Haible <bruno@clisp.org>
parents: 8684
diff changeset
41 } \
1f57552cdb11 Better ASSERT macro.
Bruno Haible <bruno@clisp.org>
parents: 8684
diff changeset
42 } \
1f57552cdb11 Better ASSERT macro.
Bruno Haible <bruno@clisp.org>
parents: 8684
diff changeset
43 while (0)
8336
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
44
8852
df0b5e8ea770 Avoid test failures on platforms where -0.0 and 0.0 are identical.
Bruno Haible <bruno@clisp.org>
parents: 8850
diff changeset
45 /* The SGI MIPS floating-point format does not distinguish 0.0 and -0.0. */
df0b5e8ea770 Avoid test failures on platforms where -0.0 and 0.0 are identical.
Bruno Haible <bruno@clisp.org>
parents: 8850
diff changeset
46 static int
df0b5e8ea770 Avoid test failures on platforms where -0.0 and 0.0 are identical.
Bruno Haible <bruno@clisp.org>
parents: 8850
diff changeset
47 have_minus_zero ()
df0b5e8ea770 Avoid test failures on platforms where -0.0 and 0.0 are identical.
Bruno Haible <bruno@clisp.org>
parents: 8850
diff changeset
48 {
df0b5e8ea770 Avoid test failures on platforms where -0.0 and 0.0 are identical.
Bruno Haible <bruno@clisp.org>
parents: 8850
diff changeset
49 static double plus_zero = 0.0;
df0b5e8ea770 Avoid test failures on platforms where -0.0 and 0.0 are identical.
Bruno Haible <bruno@clisp.org>
parents: 8850
diff changeset
50 static double minus_zero = -0.0;
df0b5e8ea770 Avoid test failures on platforms where -0.0 and 0.0 are identical.
Bruno Haible <bruno@clisp.org>
parents: 8850
diff changeset
51 return memcmp (&plus_zero, &minus_zero, sizeof (double)) != 0;
df0b5e8ea770 Avoid test failures on platforms where -0.0 and 0.0 are identical.
Bruno Haible <bruno@clisp.org>
parents: 8850
diff changeset
52 }
df0b5e8ea770 Avoid test failures on platforms where -0.0 and 0.0 are identical.
Bruno Haible <bruno@clisp.org>
parents: 8850
diff changeset
53
8919
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
54 /* Representation of an 80-bit 'long double' as an initializer for a sequence
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
55 of 'unsigned int' words. */
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
56 #ifdef WORDS_BIGENDIAN
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
57 # define LDBL80_WORDS(exponent,manthi,mantlo) \
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
58 { ((unsigned int) (exponent) << 16) | ((unsigned int) (manthi) >> 16), \
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
59 ((unsigned int) (manthi) << 16) | (unsigned int) (mantlo) >> 16), \
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
60 (unsigned int) (mantlo) << 16 \
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
61 }
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
62 #else
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
63 # define LDBL80_WORDS(exponent,manthi,mantlo) \
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
64 { mantlo, manthi, exponent }
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
65 #endif
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
66
8834
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
67 static int
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
68 strmatch (const char *pattern, const char *string)
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
69 {
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
70 if (strlen (pattern) != strlen (string))
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
71 return 0;
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
72 for (; *pattern != '\0'; pattern++, string++)
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
73 if (*pattern != '*' && *string != *pattern)
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
74 return 0;
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
75 return 1;
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
76 }
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
77
8865
9e203d8ade65 Stricter check for printf result for NaN arguments.
Bruno Haible <bruno@clisp.org>
parents: 8857
diff changeset
78 /* Test whether string[start_index..end_index-1] is a valid textual
9e203d8ade65 Stricter check for printf result for NaN arguments.
Bruno Haible <bruno@clisp.org>
parents: 8857
diff changeset
79 representation of NaN. */
9e203d8ade65 Stricter check for printf result for NaN arguments.
Bruno Haible <bruno@clisp.org>
parents: 8857
diff changeset
80 static int
9e203d8ade65 Stricter check for printf result for NaN arguments.
Bruno Haible <bruno@clisp.org>
parents: 8857
diff changeset
81 strisnan (const char *string, size_t start_index, size_t end_index, int uppercase)
9e203d8ade65 Stricter check for printf result for NaN arguments.
Bruno Haible <bruno@clisp.org>
parents: 8857
diff changeset
82 {
9e203d8ade65 Stricter check for printf result for NaN arguments.
Bruno Haible <bruno@clisp.org>
parents: 8857
diff changeset
83 if (start_index < end_index)
9e203d8ade65 Stricter check for printf result for NaN arguments.
Bruno Haible <bruno@clisp.org>
parents: 8857
diff changeset
84 {
9e203d8ade65 Stricter check for printf result for NaN arguments.
Bruno Haible <bruno@clisp.org>
parents: 8857
diff changeset
85 if (string[start_index] == '-')
9e203d8ade65 Stricter check for printf result for NaN arguments.
Bruno Haible <bruno@clisp.org>
parents: 8857
diff changeset
86 start_index++;
9e203d8ade65 Stricter check for printf result for NaN arguments.
Bruno Haible <bruno@clisp.org>
parents: 8857
diff changeset
87 if (start_index + 3 <= end_index
9e203d8ade65 Stricter check for printf result for NaN arguments.
Bruno Haible <bruno@clisp.org>
parents: 8857
diff changeset
88 && memcmp (string + start_index, uppercase ? "NAN" : "nan", 3) == 0)
9e203d8ade65 Stricter check for printf result for NaN arguments.
Bruno Haible <bruno@clisp.org>
parents: 8857
diff changeset
89 {
9e203d8ade65 Stricter check for printf result for NaN arguments.
Bruno Haible <bruno@clisp.org>
parents: 8857
diff changeset
90 start_index += 3;
9e203d8ade65 Stricter check for printf result for NaN arguments.
Bruno Haible <bruno@clisp.org>
parents: 8857
diff changeset
91 if (start_index == end_index
9e203d8ade65 Stricter check for printf result for NaN arguments.
Bruno Haible <bruno@clisp.org>
parents: 8857
diff changeset
92 || (string[start_index] == '(' && string[end_index - 1] == ')'))
9e203d8ade65 Stricter check for printf result for NaN arguments.
Bruno Haible <bruno@clisp.org>
parents: 8857
diff changeset
93 return 1;
9e203d8ade65 Stricter check for printf result for NaN arguments.
Bruno Haible <bruno@clisp.org>
parents: 8857
diff changeset
94 }
9e203d8ade65 Stricter check for printf result for NaN arguments.
Bruno Haible <bruno@clisp.org>
parents: 8857
diff changeset
95 }
9e203d8ade65 Stricter check for printf result for NaN arguments.
Bruno Haible <bruno@clisp.org>
parents: 8857
diff changeset
96 return 0;
9e203d8ade65 Stricter check for printf result for NaN arguments.
Bruno Haible <bruno@clisp.org>
parents: 8857
diff changeset
97 }
9850
7f3ed6b093be Guarantee a definition of NAN.
Eric Blake <ebb9@byu.net>
parents: 9674
diff changeset
98
8336
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
99 static void
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
100 test_function (char * (*my_asnprintf) (char *, size_t *, const char *, ...))
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
101 {
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
102 char buf[8];
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
103 int size;
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
104
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
105 /* Test return value convention. */
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
106
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
107 for (size = 0; size <= 8; size++)
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
108 {
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
109 size_t length = size;
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
110 char *result = my_asnprintf (NULL, &length, "%d", 12345);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
111 ASSERT (result != NULL);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
112 ASSERT (strcmp (result, "12345") == 0);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
113 ASSERT (length == 5);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
114 free (result);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
115 }
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
116
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
117 for (size = 0; size <= 8; size++)
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
118 {
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
119 size_t length;
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
120 char *result;
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
121
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
122 memcpy (buf, "DEADBEEF", 8);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
123 length = size;
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
124 result = my_asnprintf (buf, &length, "%d", 12345);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
125 ASSERT (result != NULL);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
126 ASSERT (strcmp (result, "12345") == 0);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
127 ASSERT (length == 5);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
128 if (size < 6)
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
129 ASSERT (result != buf);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
130 ASSERT (memcmp (buf + size, "DEADBEEF" + size, 8 - size) == 0);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
131 if (result != buf)
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
132 free (result);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
133 }
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
134
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
135 /* Test support of size specifiers as in C99. */
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
136
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
137 {
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
138 size_t length;
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
139 char *result =
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
140 my_asnprintf (NULL, &length, "%ju %d", (uintmax_t) 12345671, 33, 44, 55);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
141 ASSERT (result != NULL);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
142 ASSERT (strcmp (result, "12345671 33") == 0);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
143 ASSERT (length == strlen (result));
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
144 free (result);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
145 }
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
146
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
147 {
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
148 size_t length;
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
149 char *result =
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
150 my_asnprintf (NULL, &length, "%zu %d", (size_t) 12345672, 33, 44, 55);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
151 ASSERT (result != NULL);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
152 ASSERT (strcmp (result, "12345672 33") == 0);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
153 ASSERT (length == strlen (result));
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
154 free (result);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
155 }
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
156
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
157 {
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
158 size_t length;
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
159 char *result =
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
160 my_asnprintf (NULL, &length, "%tu %d", (ptrdiff_t) 12345673, 33, 44, 55);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
161 ASSERT (result != NULL);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
162 ASSERT (strcmp (result, "12345673 33") == 0);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
163 ASSERT (length == strlen (result));
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
164 free (result);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
165 }
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
166
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
167 {
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
168 size_t length;
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
169 char *result =
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
170 my_asnprintf (NULL, &length, "%Lg %d", (long double) 1.5, 33, 44, 55);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
171 ASSERT (result != NULL);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
172 ASSERT (strcmp (result, "1.5 33") == 0);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
173 ASSERT (length == strlen (result));
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
174 free (result);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
175 }
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
176
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
177 /* Test the support of the 'a' and 'A' conversion specifier for hexadecimal
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
178 output of floating-point numbers. */
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
179
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
180 { /* A positive number. */
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
181 size_t length;
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
182 char *result =
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
183 my_asnprintf (NULL, &length, "%a %d", 3.1416015625, 33, 44, 55);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
184 ASSERT (result != NULL);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
185 ASSERT (strcmp (result, "0x1.922p+1 33") == 0
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
186 || strcmp (result, "0x3.244p+0 33") == 0
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
187 || strcmp (result, "0x6.488p-1 33") == 0
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
188 || strcmp (result, "0xc.91p-2 33") == 0);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
189 ASSERT (length == strlen (result));
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
190 free (result);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
191 }
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
192
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
193 { /* A negative number. */
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
194 size_t length;
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
195 char *result =
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
196 my_asnprintf (NULL, &length, "%A %d", -3.1416015625, 33, 44, 55);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
197 ASSERT (result != NULL);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
198 ASSERT (strcmp (result, "-0X1.922P+1 33") == 0
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
199 || strcmp (result, "-0X3.244P+0 33") == 0
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
200 || strcmp (result, "-0X6.488P-1 33") == 0
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
201 || strcmp (result, "-0XC.91P-2 33") == 0);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
202 ASSERT (length == strlen (result));
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
203 free (result);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
204 }
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
205
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
206 { /* Positive zero. */
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
207 size_t length;
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
208 char *result =
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
209 my_asnprintf (NULL, &length, "%a %d", 0.0, 33, 44, 55);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
210 ASSERT (result != NULL);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
211 ASSERT (strcmp (result, "0x0p+0 33") == 0);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
212 ASSERT (length == strlen (result));
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
213 free (result);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
214 }
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
215
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
216 { /* Negative zero. */
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
217 size_t length;
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
218 char *result =
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
219 my_asnprintf (NULL, &length, "%a %d", -0.0, 33, 44, 55);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
220 ASSERT (result != NULL);
8852
df0b5e8ea770 Avoid test failures on platforms where -0.0 and 0.0 are identical.
Bruno Haible <bruno@clisp.org>
parents: 8850
diff changeset
221 if (have_minus_zero ())
df0b5e8ea770 Avoid test failures on platforms where -0.0 and 0.0 are identical.
Bruno Haible <bruno@clisp.org>
parents: 8850
diff changeset
222 ASSERT (strcmp (result, "-0x0p+0 33") == 0);
8336
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
223 ASSERT (length == strlen (result));
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
224 free (result);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
225 }
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
226
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
227 { /* Positive infinity. */
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
228 size_t length;
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
229 char *result =
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
230 my_asnprintf (NULL, &length, "%a %d", 1.0 / 0.0, 33, 44, 55);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
231 ASSERT (result != NULL);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
232 ASSERT (strcmp (result, "inf 33") == 0);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
233 ASSERT (length == strlen (result));
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
234 free (result);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
235 }
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
236
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
237 { /* Negative infinity. */
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
238 size_t length;
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
239 char *result =
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
240 my_asnprintf (NULL, &length, "%a %d", -1.0 / 0.0, 33, 44, 55);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
241 ASSERT (result != NULL);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
242 ASSERT (strcmp (result, "-inf 33") == 0);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
243 ASSERT (length == strlen (result));
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
244 free (result);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
245 }
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
246
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
247 { /* NaN. */
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
248 size_t length;
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
249 char *result =
9854
baba3b346ab2 Use macros NaNf, NaNd, NaNl instead of NAN.
Bruno Haible <bruno@clisp.org>
parents: 9850
diff changeset
250 my_asnprintf (NULL, &length, "%a %d", NaNd (), 33, 44, 55);
8336
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
251 ASSERT (result != NULL);
8850
d1fe16dfbfee Avoid test failures on IRIX 6.5.
Bruno Haible <bruno@clisp.org>
parents: 8839
diff changeset
252 ASSERT (strlen (result) >= 3 + 3
8865
9e203d8ade65 Stricter check for printf result for NaN arguments.
Bruno Haible <bruno@clisp.org>
parents: 8857
diff changeset
253 && strisnan (result, 0, strlen (result) - 3, 0)
8850
d1fe16dfbfee Avoid test failures on IRIX 6.5.
Bruno Haible <bruno@clisp.org>
parents: 8839
diff changeset
254 && strcmp (result + strlen (result) - 3, " 33") == 0);
8336
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
255 ASSERT (length == strlen (result));
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
256 free (result);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
257 }
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
258
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
259 { /* Rounding near the decimal point. */
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
260 size_t length;
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
261 char *result =
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
262 my_asnprintf (NULL, &length, "%.0a %d", 1.5, 33, 44, 55);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
263 ASSERT (result != NULL);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
264 ASSERT (strcmp (result, "0x2p+0 33") == 0
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
265 || strcmp (result, "0x3p-1 33") == 0
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
266 || strcmp (result, "0x6p-2 33") == 0
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
267 || strcmp (result, "0xcp-3 33") == 0);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
268 ASSERT (length == strlen (result));
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
269 free (result);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
270 }
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
271
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
272 { /* Rounding with precision 0. */
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
273 size_t length;
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
274 char *result =
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
275 my_asnprintf (NULL, &length, "%.0a %d", 1.51, 33, 44, 55);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
276 ASSERT (result != NULL);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
277 ASSERT (strcmp (result, "0x2p+0 33") == 0
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
278 || strcmp (result, "0x3p-1 33") == 0
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
279 || strcmp (result, "0x6p-2 33") == 0
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
280 || strcmp (result, "0xcp-3 33") == 0);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
281 ASSERT (length == strlen (result));
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
282 free (result);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
283 }
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
284
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
285 { /* Rounding with precision 1. */
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
286 size_t length;
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
287 char *result =
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
288 my_asnprintf (NULL, &length, "%.1a %d", 1.51, 33, 44, 55);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
289 ASSERT (result != NULL);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
290 ASSERT (strcmp (result, "0x1.8p+0 33") == 0
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
291 || strcmp (result, "0x3.0p-1 33") == 0
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
292 || strcmp (result, "0x6.1p-2 33") == 0
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
293 || strcmp (result, "0xc.1p-3 33") == 0);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
294 ASSERT (length == strlen (result));
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
295 free (result);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
296 }
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
297
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
298 { /* Rounding with precision 2. */
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
299 size_t length;
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
300 char *result =
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
301 my_asnprintf (NULL, &length, "%.2a %d", 1.51, 33, 44, 55);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
302 ASSERT (result != NULL);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
303 ASSERT (strcmp (result, "0x1.83p+0 33") == 0
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
304 || strcmp (result, "0x3.05p-1 33") == 0
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
305 || strcmp (result, "0x6.0ap-2 33") == 0
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
306 || strcmp (result, "0xc.14p-3 33") == 0);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
307 ASSERT (length == strlen (result));
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
308 free (result);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
309 }
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
310
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
311 { /* Rounding with precision 3. */
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
312 size_t length;
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
313 char *result =
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
314 my_asnprintf (NULL, &length, "%.3a %d", 1.51, 33, 44, 55);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
315 ASSERT (result != NULL);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
316 ASSERT (strcmp (result, "0x1.829p+0 33") == 0
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
317 || strcmp (result, "0x3.052p-1 33") == 0
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
318 || strcmp (result, "0x6.0a4p-2 33") == 0
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
319 || strcmp (result, "0xc.148p-3 33") == 0);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
320 ASSERT (length == strlen (result));
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
321 free (result);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
322 }
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
323
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
324 { /* Rounding can turn a ...FFF into a ...000. */
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
325 size_t length;
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
326 char *result =
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
327 my_asnprintf (NULL, &length, "%.3a %d", 1.49999, 33, 44, 55);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
328 ASSERT (result != NULL);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
329 ASSERT (strcmp (result, "0x1.800p+0 33") == 0
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
330 || strcmp (result, "0x3.000p-1 33") == 0
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
331 || strcmp (result, "0x6.000p-2 33") == 0
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
332 || strcmp (result, "0xc.000p-3 33") == 0);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
333 ASSERT (length == strlen (result));
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
334 free (result);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
335 }
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
336
8344
c8055280f68e Test a corner case. Exclude two buggy implementations.
Bruno Haible <bruno@clisp.org>
parents: 8336
diff changeset
337 { /* Rounding can turn a ...FFF into a ...000.
c8055280f68e Test a corner case. Exclude two buggy implementations.
Bruno Haible <bruno@clisp.org>
parents: 8336
diff changeset
338 This shows a MacOS X 10.3.9 (Darwin 7.9) bug. */
c8055280f68e Test a corner case. Exclude two buggy implementations.
Bruno Haible <bruno@clisp.org>
parents: 8336
diff changeset
339 size_t length;
c8055280f68e Test a corner case. Exclude two buggy implementations.
Bruno Haible <bruno@clisp.org>
parents: 8336
diff changeset
340 char *result =
c8055280f68e Test a corner case. Exclude two buggy implementations.
Bruno Haible <bruno@clisp.org>
parents: 8336
diff changeset
341 my_asnprintf (NULL, &length, "%.1a %d", 1.999, 33, 44, 55);
c8055280f68e Test a corner case. Exclude two buggy implementations.
Bruno Haible <bruno@clisp.org>
parents: 8336
diff changeset
342 ASSERT (result != NULL);
c8055280f68e Test a corner case. Exclude two buggy implementations.
Bruno Haible <bruno@clisp.org>
parents: 8336
diff changeset
343 ASSERT (strcmp (result, "0x1.0p+1 33") == 0
c8055280f68e Test a corner case. Exclude two buggy implementations.
Bruno Haible <bruno@clisp.org>
parents: 8336
diff changeset
344 || strcmp (result, "0x2.0p+0 33") == 0
c8055280f68e Test a corner case. Exclude two buggy implementations.
Bruno Haible <bruno@clisp.org>
parents: 8336
diff changeset
345 || strcmp (result, "0x4.0p-1 33") == 0
c8055280f68e Test a corner case. Exclude two buggy implementations.
Bruno Haible <bruno@clisp.org>
parents: 8336
diff changeset
346 || strcmp (result, "0x8.0p-2 33") == 0);
c8055280f68e Test a corner case. Exclude two buggy implementations.
Bruno Haible <bruno@clisp.org>
parents: 8336
diff changeset
347 ASSERT (length == strlen (result));
c8055280f68e Test a corner case. Exclude two buggy implementations.
Bruno Haible <bruno@clisp.org>
parents: 8336
diff changeset
348 free (result);
c8055280f68e Test a corner case. Exclude two buggy implementations.
Bruno Haible <bruno@clisp.org>
parents: 8336
diff changeset
349 }
c8055280f68e Test a corner case. Exclude two buggy implementations.
Bruno Haible <bruno@clisp.org>
parents: 8336
diff changeset
350
8336
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
351 { /* Width. */
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
352 size_t length;
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
353 char *result =
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
354 my_asnprintf (NULL, &length, "%10a %d", 1.75, 33, 44, 55);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
355 ASSERT (result != NULL);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
356 ASSERT (strcmp (result, " 0x1.cp+0 33") == 0
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
357 || strcmp (result, " 0x3.8p-1 33") == 0
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
358 || strcmp (result, " 0x7p-2 33") == 0
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
359 || strcmp (result, " 0xep-3 33") == 0);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
360 ASSERT (length == strlen (result));
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
361 free (result);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
362 }
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
363
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
364 { /* Small precision. */
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
365 size_t length;
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
366 char *result =
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
367 my_asnprintf (NULL, &length, "%.10a %d", 1.75, 33, 44, 55);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
368 ASSERT (result != NULL);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
369 ASSERT (strcmp (result, "0x1.c000000000p+0 33") == 0
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
370 || strcmp (result, "0x3.8000000000p-1 33") == 0
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
371 || strcmp (result, "0x7.0000000000p-2 33") == 0
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
372 || strcmp (result, "0xe.0000000000p-3 33") == 0);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
373 ASSERT (length == strlen (result));
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
374 free (result);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
375 }
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
376
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
377 { /* Large precision. */
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
378 size_t length;
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
379 char *result =
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
380 my_asnprintf (NULL, &length, "%.50a %d", 1.75, 33, 44, 55);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
381 ASSERT (result != NULL);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
382 ASSERT (strcmp (result, "0x1.c0000000000000000000000000000000000000000000000000p+0 33") == 0
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
383 || strcmp (result, "0x3.80000000000000000000000000000000000000000000000000p-1 33") == 0
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
384 || strcmp (result, "0x7.00000000000000000000000000000000000000000000000000p-2 33") == 0
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
385 || strcmp (result, "0xe.00000000000000000000000000000000000000000000000000p-3 33") == 0);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
386 ASSERT (length == strlen (result));
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
387 free (result);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
388 }
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
389
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
390 { /* FLAG_LEFT. */
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
391 size_t length;
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
392 char *result =
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
393 my_asnprintf (NULL, &length, "%-10a %d", 1.75, 33, 44, 55);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
394 ASSERT (result != NULL);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
395 ASSERT (strcmp (result, "0x1.cp+0 33") == 0
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
396 || strcmp (result, "0x3.8p-1 33") == 0
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
397 || strcmp (result, "0x7p-2 33") == 0
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
398 || strcmp (result, "0xep-3 33") == 0);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
399 ASSERT (length == strlen (result));
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
400 free (result);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
401 }
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
402
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
403 { /* FLAG_SHOWSIGN. */
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
404 size_t length;
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
405 char *result =
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
406 my_asnprintf (NULL, &length, "%+a %d", 1.75, 33, 44, 55);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
407 ASSERT (result != NULL);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
408 ASSERT (strcmp (result, "+0x1.cp+0 33") == 0
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
409 || strcmp (result, "+0x3.8p-1 33") == 0
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
410 || strcmp (result, "+0x7p-2 33") == 0
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
411 || strcmp (result, "+0xep-3 33") == 0);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
412 ASSERT (length == strlen (result));
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
413 free (result);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
414 }
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
415
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
416 { /* FLAG_SPACE. */
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
417 size_t length;
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
418 char *result =
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
419 my_asnprintf (NULL, &length, "% a %d", 1.75, 33, 44, 55);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
420 ASSERT (result != NULL);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
421 ASSERT (strcmp (result, " 0x1.cp+0 33") == 0
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
422 || strcmp (result, " 0x3.8p-1 33") == 0
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
423 || strcmp (result, " 0x7p-2 33") == 0
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
424 || strcmp (result, " 0xep-3 33") == 0);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
425 ASSERT (length == strlen (result));
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
426 free (result);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
427 }
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
428
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
429 { /* FLAG_ALT. */
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
430 size_t length;
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
431 char *result =
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
432 my_asnprintf (NULL, &length, "%#a %d", 1.75, 33, 44, 55);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
433 ASSERT (result != NULL);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
434 ASSERT (strcmp (result, "0x1.cp+0 33") == 0
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
435 || strcmp (result, "0x3.8p-1 33") == 0
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
436 || strcmp (result, "0x7.p-2 33") == 0
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
437 || strcmp (result, "0xe.p-3 33") == 0);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
438 ASSERT (length == strlen (result));
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
439 free (result);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
440 }
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
441
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
442 { /* FLAG_ALT. */
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
443 size_t length;
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
444 char *result =
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
445 my_asnprintf (NULL, &length, "%#a %d", 1.0, 33, 44, 55);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
446 ASSERT (result != NULL);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
447 ASSERT (strcmp (result, "0x1.p+0 33") == 0
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
448 || strcmp (result, "0x2.p-1 33") == 0
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
449 || strcmp (result, "0x4.p-2 33") == 0
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
450 || strcmp (result, "0x8.p-3 33") == 0);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
451 ASSERT (length == strlen (result));
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
452 free (result);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
453 }
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
454
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
455 { /* FLAG_ZERO with finite number. */
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
456 size_t length;
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
457 char *result =
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
458 my_asnprintf (NULL, &length, "%010a %d", 1.75, 33, 44, 55);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
459 ASSERT (result != NULL);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
460 ASSERT (strcmp (result, "0x001.cp+0 33") == 0
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
461 || strcmp (result, "0x003.8p-1 33") == 0
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
462 || strcmp (result, "0x00007p-2 33") == 0
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
463 || strcmp (result, "0x0000ep-3 33") == 0);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
464 ASSERT (length == strlen (result));
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
465 free (result);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
466 }
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
467
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
468 { /* FLAG_ZERO with infinite number. */
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
469 size_t length;
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
470 char *result =
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
471 my_asnprintf (NULL, &length, "%010a %d", 1.0 / 0.0, 33, 44, 55);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
472 ASSERT (result != NULL);
8662
023aa5c883a7 Guard against FreeBSD 6.1 bug.
Bruno Haible <bruno@clisp.org>
parents: 8648
diff changeset
473 /* "0000000inf 33" is not a valid result; see
023aa5c883a7 Guard against FreeBSD 6.1 bug.
Bruno Haible <bruno@clisp.org>
parents: 8648
diff changeset
474 <http://lists.gnu.org/archive/html/bug-gnulib/2007-04/msg00107.html> */
023aa5c883a7 Guard against FreeBSD 6.1 bug.
Bruno Haible <bruno@clisp.org>
parents: 8648
diff changeset
475 ASSERT (strcmp (result, " inf 33") == 0);
8336
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
476 ASSERT (length == strlen (result));
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
477 free (result);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
478 }
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
479
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
480 { /* FLAG_ZERO with NaN. */
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
481 size_t length;
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
482 char *result =
9854
baba3b346ab2 Use macros NaNf, NaNd, NaNl instead of NAN.
Bruno Haible <bruno@clisp.org>
parents: 9850
diff changeset
483 my_asnprintf (NULL, &length, "%050a %d", NaNd (), 33, 44, 55);
8336
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
484 ASSERT (result != NULL);
8662
023aa5c883a7 Guard against FreeBSD 6.1 bug.
Bruno Haible <bruno@clisp.org>
parents: 8648
diff changeset
485 /* "0000000nan 33" is not a valid result; see
023aa5c883a7 Guard against FreeBSD 6.1 bug.
Bruno Haible <bruno@clisp.org>
parents: 8648
diff changeset
486 <http://lists.gnu.org/archive/html/bug-gnulib/2007-04/msg00107.html> */
8870
4e1f2ea486b4 Allow for a longer printed representation of NaN.
Bruno Haible <bruno@clisp.org>
parents: 8865
diff changeset
487 ASSERT (strlen (result) == 50 + 3
8865
9e203d8ade65 Stricter check for printf result for NaN arguments.
Bruno Haible <bruno@clisp.org>
parents: 8857
diff changeset
488 && strisnan (result, strspn (result, " "), strlen (result) - 3, 0)
8850
d1fe16dfbfee Avoid test failures on IRIX 6.5.
Bruno Haible <bruno@clisp.org>
parents: 8839
diff changeset
489 && strcmp (result + strlen (result) - 3, " 33") == 0);
8336
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
490 ASSERT (length == strlen (result));
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
491 free (result);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
492 }
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
493
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
494 { /* A positive number. */
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
495 size_t length;
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
496 char *result =
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
497 my_asnprintf (NULL, &length, "%La %d", 3.1416015625L, 33, 44, 55);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
498 ASSERT (result != NULL);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
499 ASSERT (strcmp (result, "0x1.922p+1 33") == 0
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
500 || strcmp (result, "0x3.244p+0 33") == 0
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
501 || strcmp (result, "0x6.488p-1 33") == 0
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
502 || strcmp (result, "0xc.91p-2 33") == 0);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
503 ASSERT (length == strlen (result));
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
504 free (result);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
505 }
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
506
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
507 { /* A negative number. */
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
508 size_t length;
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
509 char *result =
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
510 my_asnprintf (NULL, &length, "%LA %d", -3.1416015625L, 33, 44, 55);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
511 ASSERT (result != NULL);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
512 ASSERT (strcmp (result, "-0X1.922P+1 33") == 0
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
513 || strcmp (result, "-0X3.244P+0 33") == 0
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
514 || strcmp (result, "-0X6.488P-1 33") == 0
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
515 || strcmp (result, "-0XC.91P-2 33") == 0);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
516 ASSERT (length == strlen (result));
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
517 free (result);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
518 }
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
519
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
520 { /* Positive zero. */
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
521 size_t length;
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
522 char *result =
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
523 my_asnprintf (NULL, &length, "%La %d", 0.0L, 33, 44, 55);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
524 ASSERT (result != NULL);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
525 ASSERT (strcmp (result, "0x0p+0 33") == 0);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
526 ASSERT (length == strlen (result));
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
527 free (result);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
528 }
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
529
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
530 { /* Negative zero. */
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
531 size_t length;
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
532 char *result =
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
533 my_asnprintf (NULL, &length, "%La %d", -0.0L, 33, 44, 55);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
534 ASSERT (result != NULL);
8852
df0b5e8ea770 Avoid test failures on platforms where -0.0 and 0.0 are identical.
Bruno Haible <bruno@clisp.org>
parents: 8850
diff changeset
535 if (have_minus_zero ())
df0b5e8ea770 Avoid test failures on platforms where -0.0 and 0.0 are identical.
Bruno Haible <bruno@clisp.org>
parents: 8850
diff changeset
536 ASSERT (strcmp (result, "-0x0p+0 33") == 0);
8336
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
537 ASSERT (length == strlen (result));
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
538 free (result);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
539 }
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
540
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
541 { /* Positive infinity. */
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
542 size_t length;
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
543 char *result =
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
544 my_asnprintf (NULL, &length, "%La %d", 1.0L / 0.0L, 33, 44, 55);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
545 ASSERT (result != NULL);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
546 ASSERT (strcmp (result, "inf 33") == 0);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
547 ASSERT (length == strlen (result));
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
548 free (result);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
549 }
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
550
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
551 { /* Negative infinity. */
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
552 size_t length;
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
553 char *result =
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
554 my_asnprintf (NULL, &length, "%La %d", -1.0L / 0.0L, 33, 44, 55);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
555 ASSERT (result != NULL);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
556 ASSERT (strcmp (result, "-inf 33") == 0);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
557 ASSERT (length == strlen (result));
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
558 free (result);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
559 }
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
560
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
561 { /* NaN. */
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
562 size_t length;
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
563 char *result =
9854
baba3b346ab2 Use macros NaNf, NaNd, NaNl instead of NAN.
Bruno Haible <bruno@clisp.org>
parents: 9850
diff changeset
564 my_asnprintf (NULL, &length, "%La %d", NaNl (), 33, 44, 55);
8336
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
565 ASSERT (result != NULL);
8850
d1fe16dfbfee Avoid test failures on IRIX 6.5.
Bruno Haible <bruno@clisp.org>
parents: 8839
diff changeset
566 ASSERT (strlen (result) >= 3 + 3
8865
9e203d8ade65 Stricter check for printf result for NaN arguments.
Bruno Haible <bruno@clisp.org>
parents: 8857
diff changeset
567 && strisnan (result, 0, strlen (result) - 3, 0)
8850
d1fe16dfbfee Avoid test failures on IRIX 6.5.
Bruno Haible <bruno@clisp.org>
parents: 8839
diff changeset
568 && strcmp (result + strlen (result) - 3, " 33") == 0);
8336
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
569 ASSERT (length == strlen (result));
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
570 free (result);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
571 }
8919
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
572 #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_))
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
573 { /* Quiet NaN. */
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
574 static union { unsigned int word[4]; long double value; } x =
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
575 { LDBL80_WORDS (0xFFFF, 0xC3333333, 0x00000000) };
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
576 size_t length;
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
577 char *result =
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
578 my_asnprintf (NULL, &length, "%La %d", x.value, 33, 44, 55);
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
579 ASSERT (result != NULL);
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
580 ASSERT (strlen (result) >= 3 + 3
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
581 && strisnan (result, 0, strlen (result) - 3, 0)
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
582 && strcmp (result + strlen (result) - 3, " 33") == 0);
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
583 ASSERT (length == strlen (result));
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
584 free (result);
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
585 }
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
586 {
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
587 /* Signalling NaN. */
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
588 static union { unsigned int word[4]; long double value; } x =
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
589 { LDBL80_WORDS (0xFFFF, 0x83333333, 0x00000000) };
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
590 size_t length;
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
591 char *result =
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
592 my_asnprintf (NULL, &length, "%La %d", x.value, 33, 44, 55);
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
593 ASSERT (result != NULL);
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
594 ASSERT (strlen (result) >= 3 + 3
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
595 && strisnan (result, 0, strlen (result) - 3, 0)
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
596 && strcmp (result + strlen (result) - 3, " 33") == 0);
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
597 ASSERT (length == strlen (result));
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
598 free (result);
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
599 }
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
600 /* The isnanl function should recognize Pseudo-NaNs, Pseudo-Infinities,
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
601 Pseudo-Zeroes, Unnormalized Numbers, and Pseudo-Denormals, as defined in
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
602 Intel IA-64 Architecture Software Developer's Manual, Volume 1:
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
603 Application Architecture.
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
604 Table 5-2 "Floating-Point Register Encodings"
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
605 Figure 5-6 "Memory to Floating-Point Register Data Translation"
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
606 */
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
607 { /* Pseudo-NaN. */
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
608 static union { unsigned int word[4]; long double value; } x =
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
609 { LDBL80_WORDS (0xFFFF, 0x40000001, 0x00000000) };
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
610 size_t length;
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
611 char *result =
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
612 my_asnprintf (NULL, &length, "%La %d", x.value, 33, 44, 55);
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
613 ASSERT (result != NULL);
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
614 ASSERT (strlen (result) >= 3 + 3
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
615 && strisnan (result, 0, strlen (result) - 3, 0)
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
616 && strcmp (result + strlen (result) - 3, " 33") == 0);
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
617 ASSERT (length == strlen (result));
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
618 free (result);
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
619 }
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
620 { /* Pseudo-Infinity. */
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
621 static union { unsigned int word[4]; long double value; } x =
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
622 { LDBL80_WORDS (0xFFFF, 0x00000000, 0x00000000) };
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
623 size_t length;
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
624 char *result =
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
625 my_asnprintf (NULL, &length, "%La %d", x.value, 33, 44, 55);
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
626 ASSERT (result != NULL);
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
627 ASSERT (strlen (result) >= 3 + 3
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
628 && strisnan (result, 0, strlen (result) - 3, 0)
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
629 && strcmp (result + strlen (result) - 3, " 33") == 0);
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
630 ASSERT (length == strlen (result));
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
631 free (result);
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
632 }
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
633 { /* Pseudo-Zero. */
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
634 static union { unsigned int word[4]; long double value; } x =
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
635 { LDBL80_WORDS (0x4004, 0x00000000, 0x00000000) };
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
636 size_t length;
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
637 char *result =
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
638 my_asnprintf (NULL, &length, "%La %d", x.value, 33, 44, 55);
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
639 ASSERT (result != NULL);
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
640 ASSERT (strlen (result) >= 3 + 3
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
641 && strisnan (result, 0, strlen (result) - 3, 0)
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
642 && strcmp (result + strlen (result) - 3, " 33") == 0);
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
643 ASSERT (length == strlen (result));
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
644 free (result);
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
645 }
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
646 { /* Unnormalized number. */
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
647 static union { unsigned int word[4]; long double value; } x =
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
648 { LDBL80_WORDS (0x4000, 0x63333333, 0x00000000) };
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
649 size_t length;
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
650 char *result =
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
651 my_asnprintf (NULL, &length, "%La %d", x.value, 33, 44, 55);
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
652 ASSERT (result != NULL);
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
653 ASSERT (strlen (result) >= 3 + 3
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
654 && strisnan (result, 0, strlen (result) - 3, 0)
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
655 && strcmp (result + strlen (result) - 3, " 33") == 0);
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
656 ASSERT (length == strlen (result));
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
657 free (result);
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
658 }
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
659 { /* Pseudo-Denormal. */
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
660 static union { unsigned int word[4]; long double value; } x =
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
661 { LDBL80_WORDS (0x0000, 0x83333333, 0x00000000) };
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
662 size_t length;
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
663 char *result =
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
664 my_asnprintf (NULL, &length, "%La %d", x.value, 33, 44, 55);
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
665 ASSERT (result != NULL);
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
666 ASSERT (strlen (result) >= 3 + 3
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
667 && strisnan (result, 0, strlen (result) - 3, 0)
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
668 && strcmp (result + strlen (result) - 3, " 33") == 0);
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
669 ASSERT (length == strlen (result));
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
670 free (result);
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
671 }
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
672 #endif
8336
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
673
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
674 { /* Rounding near the decimal point. */
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
675 size_t length;
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
676 char *result =
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
677 my_asnprintf (NULL, &length, "%.0La %d", 1.5L, 33, 44, 55);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
678 ASSERT (result != NULL);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
679 ASSERT (strcmp (result, "0x2p+0 33") == 0
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
680 || strcmp (result, "0x3p-1 33") == 0
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
681 || strcmp (result, "0x6p-2 33") == 0
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
682 || strcmp (result, "0xcp-3 33") == 0);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
683 ASSERT (length == strlen (result));
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
684 free (result);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
685 }
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
686
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
687 { /* Rounding with precision 0. */
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
688 size_t length;
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
689 char *result =
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
690 my_asnprintf (NULL, &length, "%.0La %d", 1.51L, 33, 44, 55);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
691 ASSERT (result != NULL);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
692 ASSERT (strcmp (result, "0x2p+0 33") == 0
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
693 || strcmp (result, "0x3p-1 33") == 0
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
694 || strcmp (result, "0x6p-2 33") == 0
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
695 || strcmp (result, "0xcp-3 33") == 0);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
696 ASSERT (length == strlen (result));
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
697 free (result);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
698 }
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
699
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
700 { /* Rounding with precision 1. */
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
701 size_t length;
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
702 char *result =
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
703 my_asnprintf (NULL, &length, "%.1La %d", 1.51L, 33, 44, 55);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
704 ASSERT (result != NULL);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
705 ASSERT (strcmp (result, "0x1.8p+0 33") == 0
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
706 || strcmp (result, "0x3.0p-1 33") == 0
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
707 || strcmp (result, "0x6.1p-2 33") == 0
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
708 || strcmp (result, "0xc.1p-3 33") == 0);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
709 ASSERT (length == strlen (result));
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
710 free (result);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
711 }
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
712
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
713 { /* Rounding with precision 2. */
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
714 size_t length;
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
715 char *result =
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
716 my_asnprintf (NULL, &length, "%.2La %d", 1.51L, 33, 44, 55);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
717 ASSERT (result != NULL);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
718 ASSERT (strcmp (result, "0x1.83p+0 33") == 0
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
719 || strcmp (result, "0x3.05p-1 33") == 0
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
720 || strcmp (result, "0x6.0ap-2 33") == 0
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
721 || strcmp (result, "0xc.14p-3 33") == 0);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
722 ASSERT (length == strlen (result));
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
723 free (result);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
724 }
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
725
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
726 { /* Rounding with precision 3. */
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
727 size_t length;
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
728 char *result =
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
729 my_asnprintf (NULL, &length, "%.3La %d", 1.51L, 33, 44, 55);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
730 ASSERT (result != NULL);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
731 ASSERT (strcmp (result, "0x1.829p+0 33") == 0
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
732 || strcmp (result, "0x3.052p-1 33") == 0
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
733 || strcmp (result, "0x6.0a4p-2 33") == 0
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
734 || strcmp (result, "0xc.148p-3 33") == 0);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
735 ASSERT (length == strlen (result));
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
736 free (result);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
737 }
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
738
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
739 { /* Rounding can turn a ...FFF into a ...000. */
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
740 size_t length;
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
741 char *result =
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
742 my_asnprintf (NULL, &length, "%.3La %d", 1.49999L, 33, 44, 55);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
743 ASSERT (result != NULL);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
744 ASSERT (strcmp (result, "0x1.800p+0 33") == 0
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
745 || strcmp (result, "0x3.000p-1 33") == 0
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
746 || strcmp (result, "0x6.000p-2 33") == 0
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
747 || strcmp (result, "0xc.000p-3 33") == 0);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
748 ASSERT (length == strlen (result));
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
749 free (result);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
750 }
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
751
8344
c8055280f68e Test a corner case. Exclude two buggy implementations.
Bruno Haible <bruno@clisp.org>
parents: 8336
diff changeset
752 { /* Rounding can turn a ...FFF into a ...000.
c8055280f68e Test a corner case. Exclude two buggy implementations.
Bruno Haible <bruno@clisp.org>
parents: 8336
diff changeset
753 This shows a MacOS X 10.3.9 (Darwin 7.9) bug and a
c8055280f68e Test a corner case. Exclude two buggy implementations.
Bruno Haible <bruno@clisp.org>
parents: 8336
diff changeset
754 glibc 2.4 bug <http://sourceware.org/bugzilla/show_bug.cgi?id=2908>. */
c8055280f68e Test a corner case. Exclude two buggy implementations.
Bruno Haible <bruno@clisp.org>
parents: 8336
diff changeset
755 size_t length;
c8055280f68e Test a corner case. Exclude two buggy implementations.
Bruno Haible <bruno@clisp.org>
parents: 8336
diff changeset
756 char *result =
c8055280f68e Test a corner case. Exclude two buggy implementations.
Bruno Haible <bruno@clisp.org>
parents: 8336
diff changeset
757 my_asnprintf (NULL, &length, "%.1La %d", 1.999L, 33, 44, 55);
c8055280f68e Test a corner case. Exclude two buggy implementations.
Bruno Haible <bruno@clisp.org>
parents: 8336
diff changeset
758 ASSERT (result != NULL);
c8055280f68e Test a corner case. Exclude two buggy implementations.
Bruno Haible <bruno@clisp.org>
parents: 8336
diff changeset
759 ASSERT (strcmp (result, "0x1.0p+1 33") == 0
c8055280f68e Test a corner case. Exclude two buggy implementations.
Bruno Haible <bruno@clisp.org>
parents: 8336
diff changeset
760 || strcmp (result, "0x2.0p+0 33") == 0
c8055280f68e Test a corner case. Exclude two buggy implementations.
Bruno Haible <bruno@clisp.org>
parents: 8336
diff changeset
761 || strcmp (result, "0x4.0p-1 33") == 0
c8055280f68e Test a corner case. Exclude two buggy implementations.
Bruno Haible <bruno@clisp.org>
parents: 8336
diff changeset
762 || strcmp (result, "0x8.0p-2 33") == 0);
c8055280f68e Test a corner case. Exclude two buggy implementations.
Bruno Haible <bruno@clisp.org>
parents: 8336
diff changeset
763 ASSERT (length == strlen (result));
c8055280f68e Test a corner case. Exclude two buggy implementations.
Bruno Haible <bruno@clisp.org>
parents: 8336
diff changeset
764 free (result);
c8055280f68e Test a corner case. Exclude two buggy implementations.
Bruno Haible <bruno@clisp.org>
parents: 8336
diff changeset
765 }
c8055280f68e Test a corner case. Exclude two buggy implementations.
Bruno Haible <bruno@clisp.org>
parents: 8336
diff changeset
766
8336
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
767 { /* Width. */
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
768 size_t length;
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
769 char *result =
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
770 my_asnprintf (NULL, &length, "%10La %d", 1.75L, 33, 44, 55);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
771 ASSERT (result != NULL);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
772 ASSERT (strcmp (result, " 0x1.cp+0 33") == 0
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
773 || strcmp (result, " 0x3.8p-1 33") == 0
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
774 || strcmp (result, " 0x7p-2 33") == 0
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
775 || strcmp (result, " 0xep-3 33") == 0);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
776 ASSERT (length == strlen (result));
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
777 free (result);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
778 }
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
779
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
780 { /* Small precision. */
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
781 size_t length;
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
782 char *result =
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
783 my_asnprintf (NULL, &length, "%.10La %d", 1.75L, 33, 44, 55);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
784 ASSERT (result != NULL);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
785 ASSERT (strcmp (result, "0x1.c000000000p+0 33") == 0
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
786 || strcmp (result, "0x3.8000000000p-1 33") == 0
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
787 || strcmp (result, "0x7.0000000000p-2 33") == 0
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
788 || strcmp (result, "0xe.0000000000p-3 33") == 0);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
789 ASSERT (length == strlen (result));
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
790 free (result);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
791 }
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
792
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
793 { /* Large precision. */
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
794 size_t length;
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
795 char *result =
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
796 my_asnprintf (NULL, &length, "%.50La %d", 1.75L, 33, 44, 55);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
797 ASSERT (result != NULL);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
798 ASSERT (strcmp (result, "0x1.c0000000000000000000000000000000000000000000000000p+0 33") == 0
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
799 || strcmp (result, "0x3.80000000000000000000000000000000000000000000000000p-1 33") == 0
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
800 || strcmp (result, "0x7.00000000000000000000000000000000000000000000000000p-2 33") == 0
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
801 || strcmp (result, "0xe.00000000000000000000000000000000000000000000000000p-3 33") == 0);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
802 ASSERT (length == strlen (result));
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
803 free (result);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
804 }
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
805
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
806 { /* FLAG_LEFT. */
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
807 size_t length;
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
808 char *result =
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
809 my_asnprintf (NULL, &length, "%-10La %d", 1.75L, 33, 44, 55);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
810 ASSERT (result != NULL);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
811 ASSERT (strcmp (result, "0x1.cp+0 33") == 0
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
812 || strcmp (result, "0x3.8p-1 33") == 0
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
813 || strcmp (result, "0x7p-2 33") == 0
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
814 || strcmp (result, "0xep-3 33") == 0);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
815 ASSERT (length == strlen (result));
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
816 free (result);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
817 }
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
818
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
819 { /* FLAG_SHOWSIGN. */
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
820 size_t length;
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
821 char *result =
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
822 my_asnprintf (NULL, &length, "%+La %d", 1.75L, 33, 44, 55);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
823 ASSERT (result != NULL);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
824 ASSERT (strcmp (result, "+0x1.cp+0 33") == 0
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
825 || strcmp (result, "+0x3.8p-1 33") == 0
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
826 || strcmp (result, "+0x7p-2 33") == 0
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
827 || strcmp (result, "+0xep-3 33") == 0);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
828 ASSERT (length == strlen (result));
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
829 free (result);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
830 }
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
831
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
832 { /* FLAG_SPACE. */
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
833 size_t length;
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
834 char *result =
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
835 my_asnprintf (NULL, &length, "% La %d", 1.75L, 33, 44, 55);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
836 ASSERT (result != NULL);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
837 ASSERT (strcmp (result, " 0x1.cp+0 33") == 0
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
838 || strcmp (result, " 0x3.8p-1 33") == 0
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
839 || strcmp (result, " 0x7p-2 33") == 0
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
840 || strcmp (result, " 0xep-3 33") == 0);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
841 ASSERT (length == strlen (result));
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
842 free (result);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
843 }
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
844
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
845 { /* FLAG_ALT. */
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
846 size_t length;
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
847 char *result =
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
848 my_asnprintf (NULL, &length, "%#La %d", 1.75L, 33, 44, 55);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
849 ASSERT (result != NULL);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
850 ASSERT (strcmp (result, "0x1.cp+0 33") == 0
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
851 || strcmp (result, "0x3.8p-1 33") == 0
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
852 || strcmp (result, "0x7.p-2 33") == 0
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
853 || strcmp (result, "0xe.p-3 33") == 0);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
854 ASSERT (length == strlen (result));
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
855 free (result);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
856 }
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
857
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
858 { /* FLAG_ALT. */
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
859 size_t length;
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
860 char *result =
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
861 my_asnprintf (NULL, &length, "%#La %d", 1.0L, 33, 44, 55);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
862 ASSERT (result != NULL);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
863 ASSERT (strcmp (result, "0x1.p+0 33") == 0
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
864 || strcmp (result, "0x2.p-1 33") == 0
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
865 || strcmp (result, "0x4.p-2 33") == 0
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
866 || strcmp (result, "0x8.p-3 33") == 0);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
867 ASSERT (length == strlen (result));
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
868 free (result);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
869 }
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
870
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
871 { /* FLAG_ZERO with finite number. */
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
872 size_t length;
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
873 char *result =
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
874 my_asnprintf (NULL, &length, "%010La %d", 1.75L, 33, 44, 55);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
875 ASSERT (result != NULL);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
876 ASSERT (strcmp (result, "0x001.cp+0 33") == 0
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
877 || strcmp (result, "0x003.8p-1 33") == 0
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
878 || strcmp (result, "0x00007p-2 33") == 0
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
879 || strcmp (result, "0x0000ep-3 33") == 0);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
880 ASSERT (length == strlen (result));
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
881 free (result);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
882 }
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
883
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
884 { /* FLAG_ZERO with infinite number. */
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
885 size_t length;
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
886 char *result =
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
887 my_asnprintf (NULL, &length, "%010La %d", 1.0L / 0.0L, 33, 44, 55);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
888 ASSERT (result != NULL);
8662
023aa5c883a7 Guard against FreeBSD 6.1 bug.
Bruno Haible <bruno@clisp.org>
parents: 8648
diff changeset
889 /* "0000000inf 33" is not a valid result; see
023aa5c883a7 Guard against FreeBSD 6.1 bug.
Bruno Haible <bruno@clisp.org>
parents: 8648
diff changeset
890 <http://lists.gnu.org/archive/html/bug-gnulib/2007-04/msg00107.html> */
023aa5c883a7 Guard against FreeBSD 6.1 bug.
Bruno Haible <bruno@clisp.org>
parents: 8648
diff changeset
891 ASSERT (strcmp (result, " inf 33") == 0);
8336
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
892 ASSERT (length == strlen (result));
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
893 free (result);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
894 }
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
895
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
896 { /* FLAG_ZERO with NaN. */
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
897 size_t length;
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
898 char *result =
9854
baba3b346ab2 Use macros NaNf, NaNd, NaNl instead of NAN.
Bruno Haible <bruno@clisp.org>
parents: 9850
diff changeset
899 my_asnprintf (NULL, &length, "%050La %d", NaNl (), 33, 44, 55);
8336
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
900 ASSERT (result != NULL);
8662
023aa5c883a7 Guard against FreeBSD 6.1 bug.
Bruno Haible <bruno@clisp.org>
parents: 8648
diff changeset
901 /* "0000000nan 33" is not a valid result; see
023aa5c883a7 Guard against FreeBSD 6.1 bug.
Bruno Haible <bruno@clisp.org>
parents: 8648
diff changeset
902 <http://lists.gnu.org/archive/html/bug-gnulib/2007-04/msg00107.html> */
8870
4e1f2ea486b4 Allow for a longer printed representation of NaN.
Bruno Haible <bruno@clisp.org>
parents: 8865
diff changeset
903 ASSERT (strlen (result) == 50 + 3
8865
9e203d8ade65 Stricter check for printf result for NaN arguments.
Bruno Haible <bruno@clisp.org>
parents: 8857
diff changeset
904 && strisnan (result, strspn (result, " "), strlen (result) - 3, 0)
8850
d1fe16dfbfee Avoid test failures on IRIX 6.5.
Bruno Haible <bruno@clisp.org>
parents: 8839
diff changeset
905 && strcmp (result + strlen (result) - 3, " 33") == 0);
8336
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
906 ASSERT (length == strlen (result));
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
907 free (result);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
908 }
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
909
8684
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
910 /* Test the support of the %f format directive. */
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
911
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
912 { /* A positive number. */
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
913 size_t length;
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
914 char *result =
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
915 my_asnprintf (NULL, &length, "%f %d", 12.75, 33, 44, 55);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
916 ASSERT (result != NULL);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
917 ASSERT (strcmp (result, "12.750000 33") == 0);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
918 ASSERT (length == strlen (result));
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
919 free (result);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
920 }
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
921
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
922 { /* A larger positive number. */
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
923 size_t length;
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
924 char *result =
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
925 my_asnprintf (NULL, &length, "%f %d", 1234567.0, 33, 44, 55);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
926 ASSERT (result != NULL);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
927 ASSERT (strcmp (result, "1234567.000000 33") == 0);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
928 ASSERT (length == strlen (result));
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
929 free (result);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
930 }
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
931
8834
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
932 { /* Small and large positive numbers. */
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
933 static struct { double value; const char *string; } data[] =
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
934 {
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
935 { 1.234321234321234e-37, "0.000000" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
936 { 1.234321234321234e-36, "0.000000" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
937 { 1.234321234321234e-35, "0.000000" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
938 { 1.234321234321234e-34, "0.000000" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
939 { 1.234321234321234e-33, "0.000000" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
940 { 1.234321234321234e-32, "0.000000" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
941 { 1.234321234321234e-31, "0.000000" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
942 { 1.234321234321234e-30, "0.000000" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
943 { 1.234321234321234e-29, "0.000000" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
944 { 1.234321234321234e-28, "0.000000" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
945 { 1.234321234321234e-27, "0.000000" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
946 { 1.234321234321234e-26, "0.000000" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
947 { 1.234321234321234e-25, "0.000000" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
948 { 1.234321234321234e-24, "0.000000" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
949 { 1.234321234321234e-23, "0.000000" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
950 { 1.234321234321234e-22, "0.000000" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
951 { 1.234321234321234e-21, "0.000000" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
952 { 1.234321234321234e-20, "0.000000" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
953 { 1.234321234321234e-19, "0.000000" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
954 { 1.234321234321234e-18, "0.000000" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
955 { 1.234321234321234e-17, "0.000000" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
956 { 1.234321234321234e-16, "0.000000" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
957 { 1.234321234321234e-15, "0.000000" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
958 { 1.234321234321234e-14, "0.000000" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
959 { 1.234321234321234e-13, "0.000000" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
960 { 1.234321234321234e-12, "0.000000" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
961 { 1.234321234321234e-11, "0.000000" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
962 { 1.234321234321234e-10, "0.000000" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
963 { 1.234321234321234e-9, "0.000000" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
964 { 1.234321234321234e-8, "0.000000" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
965 { 1.234321234321234e-7, "0.000000" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
966 { 1.234321234321234e-6, "0.000001" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
967 { 1.234321234321234e-5, "0.000012" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
968 { 1.234321234321234e-4, "0.000123" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
969 { 1.234321234321234e-3, "0.001234" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
970 { 1.234321234321234e-2, "0.012343" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
971 { 1.234321234321234e-1, "0.123432" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
972 { 1.234321234321234, "1.234321" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
973 { 1.234321234321234e1, "12.343212" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
974 { 1.234321234321234e2, "123.432123" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
975 { 1.234321234321234e3, "1234.321234" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
976 { 1.234321234321234e4, "12343.212343" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
977 { 1.234321234321234e5, "123432.123432" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
978 { 1.234321234321234e6, "1234321.234321" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
979 { 1.234321234321234e7, "12343212.343212" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
980 { 1.234321234321234e8, "123432123.432123" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
981 { 1.234321234321234e9, "1234321234.321234" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
982 { 1.234321234321234e10, "12343212343.2123**" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
983 { 1.234321234321234e11, "123432123432.123***" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
984 { 1.234321234321234e12, "1234321234321.23****" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
985 { 1.234321234321234e13, "12343212343212.3*****" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
986 { 1.234321234321234e14, "123432123432123.******" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
987 { 1.234321234321234e15, "1234321234321234.000000" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
988 { 1.234321234321234e16, "123432123432123**.000000" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
989 { 1.234321234321234e17, "123432123432123***.000000" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
990 { 1.234321234321234e18, "123432123432123****.000000" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
991 { 1.234321234321234e19, "123432123432123*****.000000" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
992 { 1.234321234321234e20, "123432123432123******.000000" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
993 { 1.234321234321234e21, "123432123432123*******.000000" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
994 { 1.234321234321234e22, "123432123432123********.000000" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
995 { 1.234321234321234e23, "123432123432123*********.000000" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
996 { 1.234321234321234e24, "123432123432123**********.000000" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
997 { 1.234321234321234e25, "123432123432123***********.000000" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
998 { 1.234321234321234e26, "123432123432123************.000000" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
999 { 1.234321234321234e27, "123432123432123*************.000000" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
1000 { 1.234321234321234e28, "123432123432123**************.000000" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
1001 { 1.234321234321234e29, "123432123432123***************.000000" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
1002 { 1.234321234321234e30, "123432123432123****************.000000" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
1003 { 1.234321234321234e31, "123432123432123*****************.000000" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
1004 { 1.234321234321234e32, "123432123432123******************.000000" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
1005 { 1.234321234321234e33, "123432123432123*******************.000000" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
1006 { 1.234321234321234e34, "123432123432123********************.000000" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
1007 { 1.234321234321234e35, "123432123432123*********************.000000" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
1008 { 1.234321234321234e36, "123432123432123**********************.000000" }
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
1009 };
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
1010 size_t k;
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
1011 for (k = 0; k < SIZEOF (data); k++)
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
1012 {
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
1013 size_t length;
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
1014 char *result =
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
1015 my_asnprintf (NULL, &length, "%f", data[k].value);
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
1016 ASSERT (result != NULL);
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
1017 ASSERT (strmatch (data[k].string, result));
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
1018 ASSERT (length == strlen (result));
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
1019 free (result);
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
1020 }
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
1021 }
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
1022
8684
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1023 { /* A negative number. */
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1024 size_t length;
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1025 char *result =
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1026 my_asnprintf (NULL, &length, "%f %d", -0.03125, 33, 44, 55);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1027 ASSERT (result != NULL);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1028 ASSERT (strcmp (result, "-0.031250 33") == 0);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1029 ASSERT (length == strlen (result));
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1030 free (result);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1031 }
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1032
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1033 { /* Positive zero. */
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1034 size_t length;
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1035 char *result =
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1036 my_asnprintf (NULL, &length, "%f %d", 0.0, 33, 44, 55);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1037 ASSERT (result != NULL);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1038 ASSERT (strcmp (result, "0.000000 33") == 0);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1039 ASSERT (length == strlen (result));
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1040 free (result);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1041 }
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1042
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1043 { /* Negative zero. */
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1044 size_t length;
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1045 char *result =
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1046 my_asnprintf (NULL, &length, "%f %d", -0.0, 33, 44, 55);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1047 ASSERT (result != NULL);
8852
df0b5e8ea770 Avoid test failures on platforms where -0.0 and 0.0 are identical.
Bruno Haible <bruno@clisp.org>
parents: 8850
diff changeset
1048 if (have_minus_zero ())
df0b5e8ea770 Avoid test failures on platforms where -0.0 and 0.0 are identical.
Bruno Haible <bruno@clisp.org>
parents: 8850
diff changeset
1049 ASSERT (strcmp (result, "-0.000000 33") == 0);
8684
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1050 ASSERT (length == strlen (result));
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1051 free (result);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1052 }
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1053
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1054 { /* Positive infinity. */
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1055 size_t length;
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1056 char *result =
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1057 my_asnprintf (NULL, &length, "%f %d", 1.0 / 0.0, 33, 44, 55);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1058 ASSERT (result != NULL);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1059 ASSERT (strcmp (result, "inf 33") == 0
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1060 || strcmp (result, "infinity 33") == 0);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1061 ASSERT (length == strlen (result));
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1062 free (result);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1063 }
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1064
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1065 { /* Negative infinity. */
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1066 size_t length;
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1067 char *result =
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1068 my_asnprintf (NULL, &length, "%f %d", -1.0 / 0.0, 33, 44, 55);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1069 ASSERT (result != NULL);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1070 ASSERT (strcmp (result, "-inf 33") == 0
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1071 || strcmp (result, "-infinity 33") == 0);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1072 ASSERT (length == strlen (result));
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1073 free (result);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1074 }
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1075
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1076 { /* NaN. */
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1077 size_t length;
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1078 char *result =
9854
baba3b346ab2 Use macros NaNf, NaNd, NaNl instead of NAN.
Bruno Haible <bruno@clisp.org>
parents: 9850
diff changeset
1079 my_asnprintf (NULL, &length, "%f %d", NaNd (), 33, 44, 55);
8684
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1080 ASSERT (result != NULL);
8850
d1fe16dfbfee Avoid test failures on IRIX 6.5.
Bruno Haible <bruno@clisp.org>
parents: 8839
diff changeset
1081 ASSERT (strlen (result) >= 3 + 3
8865
9e203d8ade65 Stricter check for printf result for NaN arguments.
Bruno Haible <bruno@clisp.org>
parents: 8857
diff changeset
1082 && strisnan (result, 0, strlen (result) - 3, 0)
8850
d1fe16dfbfee Avoid test failures on IRIX 6.5.
Bruno Haible <bruno@clisp.org>
parents: 8839
diff changeset
1083 && strcmp (result + strlen (result) - 3, " 33") == 0);
8684
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1084 ASSERT (length == strlen (result));
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1085 free (result);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1086 }
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1087
8804
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1088 { /* Width. */
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1089 size_t length;
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1090 char *result =
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1091 my_asnprintf (NULL, &length, "%10f %d", 1.75, 33, 44, 55);
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1092 ASSERT (result != NULL);
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1093 ASSERT (strcmp (result, " 1.750000 33") == 0);
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1094 ASSERT (length == strlen (result));
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1095 free (result);
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1096 }
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1097
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1098 { /* FLAG_LEFT. */
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1099 size_t length;
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1100 char *result =
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1101 my_asnprintf (NULL, &length, "%-10f %d", 1.75, 33, 44, 55);
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1102 ASSERT (result != NULL);
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1103 ASSERT (strcmp (result, "1.750000 33") == 0);
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1104 ASSERT (length == strlen (result));
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1105 free (result);
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1106 }
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1107
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1108 { /* FLAG_SHOWSIGN. */
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1109 size_t length;
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1110 char *result =
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1111 my_asnprintf (NULL, &length, "%+f %d", 1.75, 33, 44, 55);
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1112 ASSERT (result != NULL);
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1113 ASSERT (strcmp (result, "+1.750000 33") == 0);
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1114 ASSERT (length == strlen (result));
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1115 free (result);
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1116 }
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1117
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1118 { /* FLAG_SPACE. */
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1119 size_t length;
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1120 char *result =
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1121 my_asnprintf (NULL, &length, "% f %d", 1.75, 33, 44, 55);
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1122 ASSERT (result != NULL);
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1123 ASSERT (strcmp (result, " 1.750000 33") == 0);
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1124 ASSERT (length == strlen (result));
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1125 free (result);
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1126 }
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1127
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1128 { /* FLAG_ALT. */
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1129 size_t length;
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1130 char *result =
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1131 my_asnprintf (NULL, &length, "%#f %d", 1.75, 33, 44, 55);
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1132 ASSERT (result != NULL);
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1133 ASSERT (strcmp (result, "1.750000 33") == 0);
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1134 ASSERT (length == strlen (result));
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1135 free (result);
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1136 }
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1137
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1138 { /* FLAG_ALT. */
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1139 size_t length;
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1140 char *result =
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1141 my_asnprintf (NULL, &length, "%#.f %d", 1.75, 33, 44, 55);
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1142 ASSERT (result != NULL);
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1143 ASSERT (strcmp (result, "2. 33") == 0);
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1144 ASSERT (length == strlen (result));
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1145 free (result);
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1146 }
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1147
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1148 { /* FLAG_ZERO with finite number. */
8684
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1149 size_t length;
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1150 char *result =
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1151 my_asnprintf (NULL, &length, "%015f %d", 1234.0, 33, 44, 55);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1152 ASSERT (result != NULL);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1153 ASSERT (strcmp (result, "00001234.000000 33") == 0);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1154 ASSERT (length == strlen (result));
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1155 free (result);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1156 }
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1157
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1158 { /* FLAG_ZERO with infinite number. */
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1159 size_t length;
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1160 char *result =
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1161 my_asnprintf (NULL, &length, "%015f %d", -1.0 / 0.0, 33, 44, 55);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1162 ASSERT (result != NULL);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1163 ASSERT (strcmp (result, " -inf 33") == 0
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1164 || strcmp (result, " -infinity 33") == 0);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1165 ASSERT (length == strlen (result));
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1166 free (result);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1167 }
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1168
8804
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1169 { /* FLAG_ZERO with NaN. */
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1170 size_t length;
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1171 char *result =
9854
baba3b346ab2 Use macros NaNf, NaNd, NaNl instead of NAN.
Bruno Haible <bruno@clisp.org>
parents: 9850
diff changeset
1172 my_asnprintf (NULL, &length, "%050f %d", NaNd (), 33, 44, 55);
8804
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1173 ASSERT (result != NULL);
8870
4e1f2ea486b4 Allow for a longer printed representation of NaN.
Bruno Haible <bruno@clisp.org>
parents: 8865
diff changeset
1174 ASSERT (strlen (result) == 50 + 3
8865
9e203d8ade65 Stricter check for printf result for NaN arguments.
Bruno Haible <bruno@clisp.org>
parents: 8857
diff changeset
1175 && strisnan (result, strspn (result, " "), strlen (result) - 3, 0)
8850
d1fe16dfbfee Avoid test failures on IRIX 6.5.
Bruno Haible <bruno@clisp.org>
parents: 8839
diff changeset
1176 && strcmp (result + strlen (result) - 3, " 33") == 0);
8804
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1177 ASSERT (length == strlen (result));
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1178 free (result);
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1179 }
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1180
8684
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1181 { /* Precision. */
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1182 size_t length;
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1183 char *result =
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1184 my_asnprintf (NULL, &length, "%.f %d", 1234.0, 33, 44, 55);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1185 ASSERT (result != NULL);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1186 ASSERT (strcmp (result, "1234 33") == 0);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1187 ASSERT (length == strlen (result));
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1188 free (result);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1189 }
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1190
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1191 { /* A positive number. */
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1192 size_t length;
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1193 char *result =
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1194 my_asnprintf (NULL, &length, "%Lf %d", 12.75L, 33, 44, 55);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1195 ASSERT (result != NULL);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1196 ASSERT (strcmp (result, "12.750000 33") == 0);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1197 ASSERT (length == strlen (result));
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1198 free (result);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1199 }
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1200
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1201 { /* A larger positive number. */
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1202 size_t length;
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1203 char *result =
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1204 my_asnprintf (NULL, &length, "%Lf %d", 1234567.0L, 33, 44, 55);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1205 ASSERT (result != NULL);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1206 ASSERT (strcmp (result, "1234567.000000 33") == 0);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1207 ASSERT (length == strlen (result));
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1208 free (result);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1209 }
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1210
8834
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
1211 { /* Small and large positive numbers. */
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
1212 static struct { long double value; const char *string; } data[] =
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
1213 {
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
1214 { 1.234321234321234e-37L, "0.000000" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
1215 { 1.234321234321234e-36L, "0.000000" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
1216 { 1.234321234321234e-35L, "0.000000" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
1217 { 1.234321234321234e-34L, "0.000000" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
1218 { 1.234321234321234e-33L, "0.000000" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
1219 { 1.234321234321234e-32L, "0.000000" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
1220 { 1.234321234321234e-31L, "0.000000" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
1221 { 1.234321234321234e-30L, "0.000000" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
1222 { 1.234321234321234e-29L, "0.000000" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
1223 { 1.234321234321234e-28L, "0.000000" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
1224 { 1.234321234321234e-27L, "0.000000" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
1225 { 1.234321234321234e-26L, "0.000000" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
1226 { 1.234321234321234e-25L, "0.000000" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
1227 { 1.234321234321234e-24L, "0.000000" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
1228 { 1.234321234321234e-23L, "0.000000" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
1229 { 1.234321234321234e-22L, "0.000000" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
1230 { 1.234321234321234e-21L, "0.000000" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
1231 { 1.234321234321234e-20L, "0.000000" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
1232 { 1.234321234321234e-19L, "0.000000" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
1233 { 1.234321234321234e-18L, "0.000000" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
1234 { 1.234321234321234e-17L, "0.000000" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
1235 { 1.234321234321234e-16L, "0.000000" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
1236 { 1.234321234321234e-15L, "0.000000" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
1237 { 1.234321234321234e-14L, "0.000000" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
1238 { 1.234321234321234e-13L, "0.000000" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
1239 { 1.234321234321234e-12L, "0.000000" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
1240 { 1.234321234321234e-11L, "0.000000" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
1241 { 1.234321234321234e-10L, "0.000000" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
1242 { 1.234321234321234e-9L, "0.000000" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
1243 { 1.234321234321234e-8L, "0.000000" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
1244 { 1.234321234321234e-7L, "0.000000" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
1245 { 1.234321234321234e-6L, "0.000001" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
1246 { 1.234321234321234e-5L, "0.000012" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
1247 { 1.234321234321234e-4L, "0.000123" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
1248 { 1.234321234321234e-3L, "0.001234" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
1249 { 1.234321234321234e-2L, "0.012343" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
1250 { 1.234321234321234e-1L, "0.123432" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
1251 { 1.234321234321234L, "1.234321" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
1252 { 1.234321234321234e1L, "12.343212" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
1253 { 1.234321234321234e2L, "123.432123" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
1254 { 1.234321234321234e3L, "1234.321234" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
1255 { 1.234321234321234e4L, "12343.212343" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
1256 { 1.234321234321234e5L, "123432.123432" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
1257 { 1.234321234321234e6L, "1234321.234321" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
1258 { 1.234321234321234e7L, "12343212.343212" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
1259 { 1.234321234321234e8L, "123432123.432123" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
1260 { 1.234321234321234e9L, "1234321234.321234" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
1261 { 1.234321234321234e10L, "12343212343.2123**" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
1262 { 1.234321234321234e11L, "123432123432.123***" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
1263 { 1.234321234321234e12L, "1234321234321.23****" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
1264 { 1.234321234321234e13L, "12343212343212.3*****" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
1265 { 1.234321234321234e14L, "123432123432123.******" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
1266 { 1.234321234321234e15L, "1234321234321234.000000" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
1267 { 1.234321234321234e16L, "123432123432123**.000000" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
1268 { 1.234321234321234e17L, "123432123432123***.000000" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
1269 { 1.234321234321234e18L, "123432123432123****.000000" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
1270 { 1.234321234321234e19L, "123432123432123*****.000000" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
1271 { 1.234321234321234e20L, "123432123432123******.000000" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
1272 { 1.234321234321234e21L, "123432123432123*******.000000" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
1273 { 1.234321234321234e22L, "123432123432123********.000000" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
1274 { 1.234321234321234e23L, "123432123432123*********.000000" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
1275 { 1.234321234321234e24L, "123432123432123**********.000000" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
1276 { 1.234321234321234e25L, "123432123432123***********.000000" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
1277 { 1.234321234321234e26L, "123432123432123************.000000" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
1278 { 1.234321234321234e27L, "123432123432123*************.000000" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
1279 { 1.234321234321234e28L, "123432123432123**************.000000" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
1280 { 1.234321234321234e29L, "123432123432123***************.000000" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
1281 { 1.234321234321234e30L, "123432123432123****************.000000" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
1282 { 1.234321234321234e31L, "123432123432123*****************.000000" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
1283 { 1.234321234321234e32L, "123432123432123******************.000000" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
1284 { 1.234321234321234e33L, "123432123432123*******************.000000" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
1285 { 1.234321234321234e34L, "123432123432123********************.000000" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
1286 { 1.234321234321234e35L, "123432123432123*********************.000000" },
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
1287 { 1.234321234321234e36L, "123432123432123**********************.000000" }
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
1288 };
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
1289 size_t k;
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
1290 for (k = 0; k < SIZEOF (data); k++)
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
1291 {
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
1292 size_t length;
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
1293 char *result =
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
1294 my_asnprintf (NULL, &length, "%Lf", data[k].value);
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
1295 ASSERT (result != NULL);
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
1296 ASSERT (strmatch (data[k].string, result));
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
1297 ASSERT (length == strlen (result));
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
1298 free (result);
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
1299 }
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
1300 }
4c705f82cd20 More tests of printf %f.
Bruno Haible <bruno@clisp.org>
parents: 8804
diff changeset
1301
8684
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1302 { /* A negative number. */
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1303 size_t length;
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1304 char *result =
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1305 my_asnprintf (NULL, &length, "%Lf %d", -0.03125L, 33, 44, 55);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1306 ASSERT (result != NULL);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1307 ASSERT (strcmp (result, "-0.031250 33") == 0);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1308 ASSERT (length == strlen (result));
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1309 free (result);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1310 }
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1311
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1312 { /* Positive zero. */
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1313 size_t length;
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1314 char *result =
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1315 my_asnprintf (NULL, &length, "%Lf %d", 0.0L, 33, 44, 55);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1316 ASSERT (result != NULL);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1317 ASSERT (strcmp (result, "0.000000 33") == 0);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1318 ASSERT (length == strlen (result));
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1319 free (result);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1320 }
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1321
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1322 { /* Negative zero. */
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1323 size_t length;
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1324 char *result =
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1325 my_asnprintf (NULL, &length, "%Lf %d", -0.0L, 33, 44, 55);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1326 ASSERT (result != NULL);
8852
df0b5e8ea770 Avoid test failures on platforms where -0.0 and 0.0 are identical.
Bruno Haible <bruno@clisp.org>
parents: 8850
diff changeset
1327 if (have_minus_zero ())
df0b5e8ea770 Avoid test failures on platforms where -0.0 and 0.0 are identical.
Bruno Haible <bruno@clisp.org>
parents: 8850
diff changeset
1328 ASSERT (strcmp (result, "-0.000000 33") == 0);
8684
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1329 ASSERT (length == strlen (result));
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1330 free (result);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1331 }
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1332
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1333 { /* Positive infinity. */
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1334 size_t length;
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1335 char *result =
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1336 my_asnprintf (NULL, &length, "%Lf %d", 1.0L / 0.0L, 33, 44, 55);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1337 ASSERT (result != NULL);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1338 ASSERT (strcmp (result, "inf 33") == 0
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1339 || strcmp (result, "infinity 33") == 0);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1340 ASSERT (length == strlen (result));
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1341 free (result);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1342 }
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1343
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1344 { /* Negative infinity. */
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1345 size_t length;
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1346 char *result =
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1347 my_asnprintf (NULL, &length, "%Lf %d", -1.0L / 0.0L, 33, 44, 55);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1348 ASSERT (result != NULL);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1349 ASSERT (strcmp (result, "-inf 33") == 0
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1350 || strcmp (result, "-infinity 33") == 0);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1351 ASSERT (length == strlen (result));
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1352 free (result);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1353 }
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1354
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1355 { /* NaN. */
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1356 size_t length;
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1357 char *result =
9854
baba3b346ab2 Use macros NaNf, NaNd, NaNl instead of NAN.
Bruno Haible <bruno@clisp.org>
parents: 9850
diff changeset
1358 my_asnprintf (NULL, &length, "%Lf %d", NaNl (), 33, 44, 55);
8684
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1359 ASSERT (result != NULL);
8850
d1fe16dfbfee Avoid test failures on IRIX 6.5.
Bruno Haible <bruno@clisp.org>
parents: 8839
diff changeset
1360 ASSERT (strlen (result) >= 3 + 3
8865
9e203d8ade65 Stricter check for printf result for NaN arguments.
Bruno Haible <bruno@clisp.org>
parents: 8857
diff changeset
1361 && strisnan (result, 0, strlen (result) - 3, 0)
8850
d1fe16dfbfee Avoid test failures on IRIX 6.5.
Bruno Haible <bruno@clisp.org>
parents: 8839
diff changeset
1362 && strcmp (result + strlen (result) - 3, " 33") == 0);
8684
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1363 ASSERT (length == strlen (result));
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1364 free (result);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1365 }
8919
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
1366 #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_))
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
1367 { /* Quiet NaN. */
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
1368 static union { unsigned int word[4]; long double value; } x =
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
1369 { LDBL80_WORDS (0xFFFF, 0xC3333333, 0x00000000) };
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
1370 size_t length;
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
1371 char *result =
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
1372 my_asnprintf (NULL, &length, "%Lf %d", x.value, 33, 44, 55);
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
1373 ASSERT (result != NULL);
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
1374 ASSERT (strlen (result) >= 3 + 3
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
1375 && strisnan (result, 0, strlen (result) - 3, 0)
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
1376 && strcmp (result + strlen (result) - 3, " 33") == 0);
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
1377 ASSERT (length == strlen (result));
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
1378 free (result);
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
1379 }
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
1380 {
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
1381 /* Signalling NaN. */
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
1382 static union { unsigned int word[4]; long double value; } x =
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
1383 { LDBL80_WORDS (0xFFFF, 0x83333333, 0x00000000) };
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
1384 size_t length;
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
1385 char *result =
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
1386 my_asnprintf (NULL, &length, "%Lf %d", x.value, 33, 44, 55);
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
1387 ASSERT (result != NULL);
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
1388 ASSERT (strlen (result) >= 3 + 3
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
1389 && strisnan (result, 0, strlen (result) - 3, 0)
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
1390 && strcmp (result + strlen (result) - 3, " 33") == 0);
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
1391 ASSERT (length == strlen (result));
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
1392 free (result);
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
1393 }
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
1394 /* The isnanl function should recognize Pseudo-NaNs, Pseudo-Infinities,
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
1395 Pseudo-Zeroes, Unnormalized Numbers, and Pseudo-Denormals, as defined in
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
1396 Intel IA-64 Architecture Software Developer's Manual, Volume 1:
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
1397 Application Architecture.
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
1398 Table 5-2 "Floating-Point Register Encodings"
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
1399 Figure 5-6 "Memory to Floating-Point Register Data Translation"
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
1400 */
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
1401 { /* Pseudo-NaN. */
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
1402 static union { unsigned int word[4]; long double value; } x =
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
1403 { LDBL80_WORDS (0xFFFF, 0x40000001, 0x00000000) };
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
1404 size_t length;
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
1405 char *result =
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
1406 my_asnprintf (NULL, &length, "%Lf %d", x.value, 33, 44, 55);
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
1407 ASSERT (result != NULL);
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
1408 ASSERT (strlen (result) >= 3 + 3
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
1409 && strisnan (result, 0, strlen (result) - 3, 0)
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
1410 && strcmp (result + strlen (result) - 3, " 33") == 0);
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
1411 ASSERT (length == strlen (result));
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
1412 free (result);
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
1413 }
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
1414 { /* Pseudo-Infinity. */
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
1415 static union { unsigned int word[4]; long double value; } x =
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
1416 { LDBL80_WORDS (0xFFFF, 0x00000000, 0x00000000) };
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
1417 size_t length;
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
1418 char *result =
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
1419 my_asnprintf (NULL, &length, "%Lf %d", x.value, 33, 44, 55);
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
1420 ASSERT (result != NULL);
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
1421 ASSERT (strlen (result) >= 3 + 3
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
1422 && strisnan (result, 0, strlen (result) - 3, 0)
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
1423 && strcmp (result + strlen (result) - 3, " 33") == 0);
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
1424 ASSERT (length == strlen (result));
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
1425 free (result);
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
1426 }
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
1427 { /* Pseudo-Zero. */
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
1428 static union { unsigned int word[4]; long double value; } x =
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
1429 { LDBL80_WORDS (0x4004, 0x00000000, 0x00000000) };
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
1430 size_t length;
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
1431 char *result =
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
1432 my_asnprintf (NULL, &length, "%Lf %d", x.value, 33, 44, 55);
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
1433 ASSERT (result != NULL);
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
1434 ASSERT (strlen (result) >= 3 + 3
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
1435 && strisnan (result, 0, strlen (result) - 3, 0)
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
1436 && strcmp (result + strlen (result) - 3, " 33") == 0);
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
1437 ASSERT (length == strlen (result));
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
1438 free (result);
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
1439 }
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
1440 { /* Unnormalized number. */
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
1441 static union { unsigned int word[4]; long double value; } x =
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
1442 { LDBL80_WORDS (0x4000, 0x63333333, 0x00000000) };
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
1443 size_t length;
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
1444 char *result =
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
1445 my_asnprintf (NULL, &length, "%Lf %d", x.value, 33, 44, 55);
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
1446 ASSERT (result != NULL);
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
1447 ASSERT (strlen (result) >= 3 + 3
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
1448 && strisnan (result, 0, strlen (result) - 3, 0)
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
1449 && strcmp (result + strlen (result) - 3, " 33") == 0);
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
1450 ASSERT (length == strlen (result));
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
1451 free (result);
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
1452 }
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
1453 { /* Pseudo-Denormal. */
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
1454 static union { unsigned int word[4]; long double value; } x =
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
1455 { LDBL80_WORDS (0x0000, 0x83333333, 0x00000000) };
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
1456 size_t length;
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
1457 char *result =
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
1458 my_asnprintf (NULL, &length, "%Lf %d", x.value, 33, 44, 55);
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
1459 ASSERT (result != NULL);
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
1460 ASSERT (strlen (result) >= 3 + 3
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
1461 && strisnan (result, 0, strlen (result) - 3, 0)
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
1462 && strcmp (result + strlen (result) - 3, " 33") == 0);
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
1463 ASSERT (length == strlen (result));
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
1464 free (result);
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
1465 }
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
1466 #endif
8684
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1467
8804
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1468 { /* Width. */
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1469 size_t length;
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1470 char *result =
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1471 my_asnprintf (NULL, &length, "%10Lf %d", 1.75L, 33, 44, 55);
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1472 ASSERT (result != NULL);
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1473 ASSERT (strcmp (result, " 1.750000 33") == 0);
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1474 ASSERT (length == strlen (result));
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1475 free (result);
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1476 }
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1477
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1478 { /* FLAG_LEFT. */
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1479 size_t length;
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1480 char *result =
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1481 my_asnprintf (NULL, &length, "%-10Lf %d", 1.75L, 33, 44, 55);
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1482 ASSERT (result != NULL);
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1483 ASSERT (strcmp (result, "1.750000 33") == 0);
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1484 ASSERT (length == strlen (result));
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1485 free (result);
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1486 }
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1487
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1488 { /* FLAG_SHOWSIGN. */
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1489 size_t length;
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1490 char *result =
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1491 my_asnprintf (NULL, &length, "%+Lf %d", 1.75L, 33, 44, 55);
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1492 ASSERT (result != NULL);
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1493 ASSERT (strcmp (result, "+1.750000 33") == 0);
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1494 ASSERT (length == strlen (result));
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1495 free (result);
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1496 }
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1497
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1498 { /* FLAG_SPACE. */
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1499 size_t length;
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1500 char *result =
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1501 my_asnprintf (NULL, &length, "% Lf %d", 1.75L, 33, 44, 55);
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1502 ASSERT (result != NULL);
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1503 ASSERT (strcmp (result, " 1.750000 33") == 0);
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1504 ASSERT (length == strlen (result));
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1505 free (result);
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1506 }
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1507
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1508 { /* FLAG_ALT. */
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1509 size_t length;
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1510 char *result =
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1511 my_asnprintf (NULL, &length, "%#Lf %d", 1.75L, 33, 44, 55);
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1512 ASSERT (result != NULL);
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1513 ASSERT (strcmp (result, "1.750000 33") == 0);
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1514 ASSERT (length == strlen (result));
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1515 free (result);
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1516 }
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1517
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1518 { /* FLAG_ALT. */
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1519 size_t length;
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1520 char *result =
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1521 my_asnprintf (NULL, &length, "%#.Lf %d", 1.75L, 33, 44, 55);
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1522 ASSERT (result != NULL);
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1523 ASSERT (strcmp (result, "2. 33") == 0);
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1524 ASSERT (length == strlen (result));
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1525 free (result);
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1526 }
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1527
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1528 { /* FLAG_ZERO with finite number. */
8684
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1529 size_t length;
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1530 char *result =
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1531 my_asnprintf (NULL, &length, "%015Lf %d", 1234.0L, 33, 44, 55);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1532 ASSERT (result != NULL);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1533 ASSERT (strcmp (result, "00001234.000000 33") == 0);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1534 ASSERT (length == strlen (result));
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1535 free (result);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1536 }
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1537
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1538 { /* FLAG_ZERO with infinite number. */
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1539 size_t length;
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1540 char *result =
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1541 my_asnprintf (NULL, &length, "%015Lf %d", -1.0L / 0.0L, 33, 44, 55);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1542 ASSERT (result != NULL);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1543 ASSERT (strcmp (result, " -inf 33") == 0
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1544 || strcmp (result, " -infinity 33") == 0);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1545 ASSERT (length == strlen (result));
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1546 free (result);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1547 }
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1548
8804
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1549 { /* FLAG_ZERO with NaN. */
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1550 size_t length;
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1551 char *result =
9854
baba3b346ab2 Use macros NaNf, NaNd, NaNl instead of NAN.
Bruno Haible <bruno@clisp.org>
parents: 9850
diff changeset
1552 my_asnprintf (NULL, &length, "%050Lf %d", NaNl (), 33, 44, 55);
8804
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1553 ASSERT (result != NULL);
8870
4e1f2ea486b4 Allow for a longer printed representation of NaN.
Bruno Haible <bruno@clisp.org>
parents: 8865
diff changeset
1554 ASSERT (strlen (result) == 50 + 3
8865
9e203d8ade65 Stricter check for printf result for NaN arguments.
Bruno Haible <bruno@clisp.org>
parents: 8857
diff changeset
1555 && strisnan (result, strspn (result, " "), strlen (result) - 3, 0)
8850
d1fe16dfbfee Avoid test failures on IRIX 6.5.
Bruno Haible <bruno@clisp.org>
parents: 8839
diff changeset
1556 && strcmp (result + strlen (result) - 3, " 33") == 0);
8804
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1557 ASSERT (length == strlen (result));
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1558 free (result);
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1559 }
6ce313658b4d Work around an incorrect implementation of the 0 flag on most platforms.
Bruno Haible <bruno@clisp.org>
parents: 8803
diff changeset
1560
8684
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1561 { /* Precision. */
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1562 size_t length;
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1563 char *result =
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1564 my_asnprintf (NULL, &length, "%.Lf %d", 1234.0L, 33, 44, 55);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1565 ASSERT (result != NULL);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1566 ASSERT (strcmp (result, "1234 33") == 0);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1567 ASSERT (length == strlen (result));
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1568 free (result);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1569 }
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1570
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1571 /* Test the support of the %F format directive. */
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1572
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1573 { /* A positive number. */
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1574 size_t length;
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1575 char *result =
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1576 my_asnprintf (NULL, &length, "%F %d", 12.75, 33, 44, 55);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1577 ASSERT (result != NULL);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1578 ASSERT (strcmp (result, "12.750000 33") == 0);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1579 ASSERT (length == strlen (result));
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1580 free (result);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1581 }
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1582
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1583 { /* A larger positive number. */
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1584 size_t length;
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1585 char *result =
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1586 my_asnprintf (NULL, &length, "%F %d", 1234567.0, 33, 44, 55);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1587 ASSERT (result != NULL);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1588 ASSERT (strcmp (result, "1234567.000000 33") == 0);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1589 ASSERT (length == strlen (result));
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1590 free (result);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1591 }
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1592
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1593 { /* A negative number. */
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1594 size_t length;
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1595 char *result =
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1596 my_asnprintf (NULL, &length, "%F %d", -0.03125, 33, 44, 55);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1597 ASSERT (result != NULL);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1598 ASSERT (strcmp (result, "-0.031250 33") == 0);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1599 ASSERT (length == strlen (result));
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1600 free (result);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1601 }
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1602
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1603 { /* Positive zero. */
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1604 size_t length;
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1605 char *result =
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1606 my_asnprintf (NULL, &length, "%F %d", 0.0, 33, 44, 55);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1607 ASSERT (result != NULL);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1608 ASSERT (strcmp (result, "0.000000 33") == 0);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1609 ASSERT (length == strlen (result));
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1610 free (result);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1611 }
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1612
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1613 { /* Negative zero. */
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1614 size_t length;
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1615 char *result =
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1616 my_asnprintf (NULL, &length, "%F %d", -0.0, 33, 44, 55);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1617 ASSERT (result != NULL);
8852
df0b5e8ea770 Avoid test failures on platforms where -0.0 and 0.0 are identical.
Bruno Haible <bruno@clisp.org>
parents: 8850
diff changeset
1618 if (have_minus_zero ())
df0b5e8ea770 Avoid test failures on platforms where -0.0 and 0.0 are identical.
Bruno Haible <bruno@clisp.org>
parents: 8850
diff changeset
1619 ASSERT (strcmp (result, "-0.000000 33") == 0);
8684
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1620 ASSERT (length == strlen (result));
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1621 free (result);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1622 }
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1623
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1624 { /* Positive infinity. */
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1625 size_t length;
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1626 char *result =
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1627 my_asnprintf (NULL, &length, "%F %d", 1.0 / 0.0, 33, 44, 55);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1628 ASSERT (result != NULL);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1629 ASSERT (strcmp (result, "INF 33") == 0
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1630 || strcmp (result, "INFINITY 33") == 0);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1631 ASSERT (length == strlen (result));
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1632 free (result);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1633 }
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1634
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1635 { /* Negative infinity. */
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1636 size_t length;
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1637 char *result =
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1638 my_asnprintf (NULL, &length, "%F %d", -1.0 / 0.0, 33, 44, 55);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1639 ASSERT (result != NULL);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1640 ASSERT (strcmp (result, "-INF 33") == 0
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1641 || strcmp (result, "-INFINITY 33") == 0);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1642 ASSERT (length == strlen (result));
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1643 free (result);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1644 }
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1645
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1646 { /* NaN. */
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1647 size_t length;
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1648 char *result =
9854
baba3b346ab2 Use macros NaNf, NaNd, NaNl instead of NAN.
Bruno Haible <bruno@clisp.org>
parents: 9850
diff changeset
1649 my_asnprintf (NULL, &length, "%F %d", NaNd (), 33, 44, 55);
8684
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1650 ASSERT (result != NULL);
8850
d1fe16dfbfee Avoid test failures on IRIX 6.5.
Bruno Haible <bruno@clisp.org>
parents: 8839
diff changeset
1651 ASSERT (strlen (result) >= 3 + 3
8865
9e203d8ade65 Stricter check for printf result for NaN arguments.
Bruno Haible <bruno@clisp.org>
parents: 8857
diff changeset
1652 && strisnan (result, 0, strlen (result) - 3, 1)
8850
d1fe16dfbfee Avoid test failures on IRIX 6.5.
Bruno Haible <bruno@clisp.org>
parents: 8839
diff changeset
1653 && strcmp (result + strlen (result) - 3, " 33") == 0);
8684
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1654 ASSERT (length == strlen (result));
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1655 free (result);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1656 }
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1657
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1658 { /* FLAG_ZERO. */
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1659 size_t length;
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1660 char *result =
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1661 my_asnprintf (NULL, &length, "%015F %d", 1234.0, 33, 44, 55);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1662 ASSERT (result != NULL);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1663 ASSERT (strcmp (result, "00001234.000000 33") == 0);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1664 ASSERT (length == strlen (result));
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1665 free (result);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1666 }
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1667
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1668 { /* FLAG_ZERO with infinite number. */
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1669 size_t length;
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1670 char *result =
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1671 my_asnprintf (NULL, &length, "%015F %d", -1.0 / 0.0, 33, 44, 55);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1672 ASSERT (result != NULL);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1673 ASSERT (strcmp (result, " -INF 33") == 0
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1674 || strcmp (result, " -INFINITY 33") == 0);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1675 ASSERT (length == strlen (result));
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1676 free (result);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1677 }
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1678
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1679 { /* Precision. */
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1680 size_t length;
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1681 char *result =
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1682 my_asnprintf (NULL, &length, "%.F %d", 1234.0, 33, 44, 55);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1683 ASSERT (result != NULL);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1684 ASSERT (strcmp (result, "1234 33") == 0);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1685 ASSERT (length == strlen (result));
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1686 free (result);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1687 }
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1688
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1689 { /* A positive number. */
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1690 size_t length;
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1691 char *result =
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1692 my_asnprintf (NULL, &length, "%LF %d", 12.75L, 33, 44, 55);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1693 ASSERT (result != NULL);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1694 ASSERT (strcmp (result, "12.750000 33") == 0);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1695 ASSERT (length == strlen (result));
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1696 free (result);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1697 }
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1698
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1699 { /* A larger positive number. */
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1700 size_t length;
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1701 char *result =
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1702 my_asnprintf (NULL, &length, "%LF %d", 1234567.0L, 33, 44, 55);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1703 ASSERT (result != NULL);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1704 ASSERT (strcmp (result, "1234567.000000 33") == 0);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1705 ASSERT (length == strlen (result));
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1706 free (result);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1707 }
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1708
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1709 { /* A negative number. */
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1710 size_t length;
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1711 char *result =
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1712 my_asnprintf (NULL, &length, "%LF %d", -0.03125L, 33, 44, 55);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1713 ASSERT (result != NULL);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1714 ASSERT (strcmp (result, "-0.031250 33") == 0);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1715 ASSERT (length == strlen (result));
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1716 free (result);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1717 }
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1718
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1719 { /* Positive zero. */
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1720 size_t length;
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1721 char *result =
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1722 my_asnprintf (NULL, &length, "%LF %d", 0.0L, 33, 44, 55);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1723 ASSERT (result != NULL);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1724 ASSERT (strcmp (result, "0.000000 33") == 0);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1725 ASSERT (length == strlen (result));
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1726 free (result);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1727 }
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1728
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1729 { /* Negative zero. */
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1730 size_t length;
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1731 char *result =
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1732 my_asnprintf (NULL, &length, "%LF %d", -0.0L, 33, 44, 55);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1733 ASSERT (result != NULL);
8852
df0b5e8ea770 Avoid test failures on platforms where -0.0 and 0.0 are identical.
Bruno Haible <bruno@clisp.org>
parents: 8850
diff changeset
1734 if (have_minus_zero ())
df0b5e8ea770 Avoid test failures on platforms where -0.0 and 0.0 are identical.
Bruno Haible <bruno@clisp.org>
parents: 8850
diff changeset
1735 ASSERT (strcmp (result, "-0.000000 33") == 0);
8684
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1736 ASSERT (length == strlen (result));
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1737 free (result);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1738 }
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1739
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1740 { /* Positive infinity. */
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1741 size_t length;
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1742 char *result =
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1743 my_asnprintf (NULL, &length, "%LF %d", 1.0L / 0.0L, 33, 44, 55);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1744 ASSERT (result != NULL);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1745 ASSERT (strcmp (result, "INF 33") == 0
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1746 || strcmp (result, "INFINITY 33") == 0);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1747 ASSERT (length == strlen (result));
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1748 free (result);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1749 }
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1750
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1751 { /* Negative infinity. */
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1752 size_t length;
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1753 char *result =
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1754 my_asnprintf (NULL, &length, "%LF %d", -1.0L / 0.0L, 33, 44, 55);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1755 ASSERT (result != NULL);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1756 ASSERT (strcmp (result, "-INF 33") == 0
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1757 || strcmp (result, "-INFINITY 33") == 0);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1758 ASSERT (length == strlen (result));
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1759 free (result);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1760 }
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1761
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1762 { /* NaN. */
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1763 size_t length;
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1764 char *result =
9854
baba3b346ab2 Use macros NaNf, NaNd, NaNl instead of NAN.
Bruno Haible <bruno@clisp.org>
parents: 9850
diff changeset
1765 my_asnprintf (NULL, &length, "%LF %d", NaNl (), 33, 44, 55);
8684
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1766 ASSERT (result != NULL);
8850
d1fe16dfbfee Avoid test failures on IRIX 6.5.
Bruno Haible <bruno@clisp.org>
parents: 8839
diff changeset
1767 ASSERT (strlen (result) >= 3 + 3
8865
9e203d8ade65 Stricter check for printf result for NaN arguments.
Bruno Haible <bruno@clisp.org>
parents: 8857
diff changeset
1768 && strisnan (result, 0, strlen (result) - 3, 1)
8850
d1fe16dfbfee Avoid test failures on IRIX 6.5.
Bruno Haible <bruno@clisp.org>
parents: 8839
diff changeset
1769 && strcmp (result + strlen (result) - 3, " 33") == 0);
8684
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1770 ASSERT (length == strlen (result));
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1771 free (result);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1772 }
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1773
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1774 { /* FLAG_ZERO. */
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1775 size_t length;
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1776 char *result =
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1777 my_asnprintf (NULL, &length, "%015LF %d", 1234.0L, 33, 44, 55);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1778 ASSERT (result != NULL);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1779 ASSERT (strcmp (result, "00001234.000000 33") == 0);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1780 ASSERT (length == strlen (result));
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1781 free (result);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1782 }
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1783
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1784 { /* FLAG_ZERO with infinite number. */
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1785 size_t length;
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1786 char *result =
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1787 my_asnprintf (NULL, &length, "%015LF %d", -1.0L / 0.0L, 33, 44, 55);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1788 ASSERT (result != NULL);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1789 ASSERT (strcmp (result, " -INF 33") == 0
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1790 || strcmp (result, " -INFINITY 33") == 0);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1791 ASSERT (length == strlen (result));
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1792 free (result);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1793 }
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1794
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1795 { /* Precision. */
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1796 size_t length;
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1797 char *result =
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1798 my_asnprintf (NULL, &length, "%.LF %d", 1234.0L, 33, 44, 55);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1799 ASSERT (result != NULL);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1800 ASSERT (strcmp (result, "1234 33") == 0);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1801 ASSERT (length == strlen (result));
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1802 free (result);
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1803 }
9ea5590b49d1 Add tests for %f and %F directives.
Bruno Haible <bruno@clisp.org>
parents: 8662
diff changeset
1804
8836
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1805 /* Test the support of the %e format directive. */
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1806
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1807 { /* A positive number. */
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1808 size_t length;
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1809 char *result =
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1810 my_asnprintf (NULL, &length, "%e %d", 12.75, 33, 44, 55);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1811 ASSERT (result != NULL);
8839
5efc1d668039 Accomodate for implementations that produce 3 exponent digits in %e and %g.
Bruno Haible <bruno@clisp.org>
parents: 8836
diff changeset
1812 ASSERT (strcmp (result, "1.275000e+01 33") == 0
5efc1d668039 Accomodate for implementations that produce 3 exponent digits in %e and %g.
Bruno Haible <bruno@clisp.org>
parents: 8836
diff changeset
1813 || strcmp (result, "1.275000e+001 33") == 0);
8836
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1814 ASSERT (length == strlen (result));
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1815 free (result);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1816 }
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1817
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1818 { /* A larger positive number. */
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1819 size_t length;
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1820 char *result =
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1821 my_asnprintf (NULL, &length, "%e %d", 1234567.0, 33, 44, 55);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1822 ASSERT (result != NULL);
8839
5efc1d668039 Accomodate for implementations that produce 3 exponent digits in %e and %g.
Bruno Haible <bruno@clisp.org>
parents: 8836
diff changeset
1823 ASSERT (strcmp (result, "1.234567e+06 33") == 0
5efc1d668039 Accomodate for implementations that produce 3 exponent digits in %e and %g.
Bruno Haible <bruno@clisp.org>
parents: 8836
diff changeset
1824 || strcmp (result, "1.234567e+006 33") == 0);
8836
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1825 ASSERT (length == strlen (result));
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1826 free (result);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1827 }
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1828
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1829 { /* Small and large positive numbers. */
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1830 static struct { double value; const char *string; } data[] =
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1831 {
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1832 { 1.234321234321234e-37, "1.234321e-37" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1833 { 1.234321234321234e-36, "1.234321e-36" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1834 { 1.234321234321234e-35, "1.234321e-35" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1835 { 1.234321234321234e-34, "1.234321e-34" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1836 { 1.234321234321234e-33, "1.234321e-33" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1837 { 1.234321234321234e-32, "1.234321e-32" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1838 { 1.234321234321234e-31, "1.234321e-31" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1839 { 1.234321234321234e-30, "1.234321e-30" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1840 { 1.234321234321234e-29, "1.234321e-29" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1841 { 1.234321234321234e-28, "1.234321e-28" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1842 { 1.234321234321234e-27, "1.234321e-27" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1843 { 1.234321234321234e-26, "1.234321e-26" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1844 { 1.234321234321234e-25, "1.234321e-25" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1845 { 1.234321234321234e-24, "1.234321e-24" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1846 { 1.234321234321234e-23, "1.234321e-23" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1847 { 1.234321234321234e-22, "1.234321e-22" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1848 { 1.234321234321234e-21, "1.234321e-21" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1849 { 1.234321234321234e-20, "1.234321e-20" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1850 { 1.234321234321234e-19, "1.234321e-19" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1851 { 1.234321234321234e-18, "1.234321e-18" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1852 { 1.234321234321234e-17, "1.234321e-17" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1853 { 1.234321234321234e-16, "1.234321e-16" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1854 { 1.234321234321234e-15, "1.234321e-15" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1855 { 1.234321234321234e-14, "1.234321e-14" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1856 { 1.234321234321234e-13, "1.234321e-13" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1857 { 1.234321234321234e-12, "1.234321e-12" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1858 { 1.234321234321234e-11, "1.234321e-11" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1859 { 1.234321234321234e-10, "1.234321e-10" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1860 { 1.234321234321234e-9, "1.234321e-09" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1861 { 1.234321234321234e-8, "1.234321e-08" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1862 { 1.234321234321234e-7, "1.234321e-07" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1863 { 1.234321234321234e-6, "1.234321e-06" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1864 { 1.234321234321234e-5, "1.234321e-05" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1865 { 1.234321234321234e-4, "1.234321e-04" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1866 { 1.234321234321234e-3, "1.234321e-03" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1867 { 1.234321234321234e-2, "1.234321e-02" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1868 { 1.234321234321234e-1, "1.234321e-01" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1869 { 1.234321234321234, "1.234321e+00" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1870 { 1.234321234321234e1, "1.234321e+01" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1871 { 1.234321234321234e2, "1.234321e+02" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1872 { 1.234321234321234e3, "1.234321e+03" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1873 { 1.234321234321234e4, "1.234321e+04" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1874 { 1.234321234321234e5, "1.234321e+05" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1875 { 1.234321234321234e6, "1.234321e+06" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1876 { 1.234321234321234e7, "1.234321e+07" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1877 { 1.234321234321234e8, "1.234321e+08" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1878 { 1.234321234321234e9, "1.234321e+09" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1879 { 1.234321234321234e10, "1.234321e+10" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1880 { 1.234321234321234e11, "1.234321e+11" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1881 { 1.234321234321234e12, "1.234321e+12" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1882 { 1.234321234321234e13, "1.234321e+13" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1883 { 1.234321234321234e14, "1.234321e+14" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1884 { 1.234321234321234e15, "1.234321e+15" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1885 { 1.234321234321234e16, "1.234321e+16" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1886 { 1.234321234321234e17, "1.234321e+17" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1887 { 1.234321234321234e18, "1.234321e+18" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1888 { 1.234321234321234e19, "1.234321e+19" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1889 { 1.234321234321234e20, "1.234321e+20" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1890 { 1.234321234321234e21, "1.234321e+21" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1891 { 1.234321234321234e22, "1.234321e+22" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1892 { 1.234321234321234e23, "1.234321e+23" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1893 { 1.234321234321234e24, "1.234321e+24" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1894 { 1.234321234321234e25, "1.234321e+25" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1895 { 1.234321234321234e26, "1.234321e+26" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1896 { 1.234321234321234e27, "1.234321e+27" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1897 { 1.234321234321234e28, "1.234321e+28" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1898 { 1.234321234321234e29, "1.234321e+29" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1899 { 1.234321234321234e30, "1.234321e+30" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1900 { 1.234321234321234e31, "1.234321e+31" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1901 { 1.234321234321234e32, "1.234321e+32" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1902 { 1.234321234321234e33, "1.234321e+33" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1903 { 1.234321234321234e34, "1.234321e+34" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1904 { 1.234321234321234e35, "1.234321e+35" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1905 { 1.234321234321234e36, "1.234321e+36" }
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1906 };
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1907 size_t k;
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1908 for (k = 0; k < SIZEOF (data); k++)
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1909 {
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1910 size_t length;
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1911 char *result =
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1912 my_asnprintf (NULL, &length, "%e", data[k].value);
8839
5efc1d668039 Accomodate for implementations that produce 3 exponent digits in %e and %g.
Bruno Haible <bruno@clisp.org>
parents: 8836
diff changeset
1913 const char *expected = data[k].string;
8836
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1914 ASSERT (result != NULL);
8839
5efc1d668039 Accomodate for implementations that produce 3 exponent digits in %e and %g.
Bruno Haible <bruno@clisp.org>
parents: 8836
diff changeset
1915 ASSERT (strcmp (result, expected) == 0
5efc1d668039 Accomodate for implementations that produce 3 exponent digits in %e and %g.
Bruno Haible <bruno@clisp.org>
parents: 8836
diff changeset
1916 /* Some implementations produce exponents with 3 digits. */
5efc1d668039 Accomodate for implementations that produce 3 exponent digits in %e and %g.
Bruno Haible <bruno@clisp.org>
parents: 8836
diff changeset
1917 || (strlen (result) == strlen (expected) + 1
5efc1d668039 Accomodate for implementations that produce 3 exponent digits in %e and %g.
Bruno Haible <bruno@clisp.org>
parents: 8836
diff changeset
1918 && memcmp (result, expected, strlen (expected) - 2) == 0
5efc1d668039 Accomodate for implementations that produce 3 exponent digits in %e and %g.
Bruno Haible <bruno@clisp.org>
parents: 8836
diff changeset
1919 && result[strlen (expected) - 2] == '0'
5efc1d668039 Accomodate for implementations that produce 3 exponent digits in %e and %g.
Bruno Haible <bruno@clisp.org>
parents: 8836
diff changeset
1920 && strcmp (result + strlen (expected) - 1,
5efc1d668039 Accomodate for implementations that produce 3 exponent digits in %e and %g.
Bruno Haible <bruno@clisp.org>
parents: 8836
diff changeset
1921 expected + strlen (expected) - 2)
5efc1d668039 Accomodate for implementations that produce 3 exponent digits in %e and %g.
Bruno Haible <bruno@clisp.org>
parents: 8836
diff changeset
1922 == 0));
8836
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1923 ASSERT (length == strlen (result));
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1924 free (result);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1925 }
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1926 }
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1927
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1928 { /* A negative number. */
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1929 size_t length;
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1930 char *result =
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1931 my_asnprintf (NULL, &length, "%e %d", -0.03125, 33, 44, 55);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1932 ASSERT (result != NULL);
8839
5efc1d668039 Accomodate for implementations that produce 3 exponent digits in %e and %g.
Bruno Haible <bruno@clisp.org>
parents: 8836
diff changeset
1933 ASSERT (strcmp (result, "-3.125000e-02 33") == 0
5efc1d668039 Accomodate for implementations that produce 3 exponent digits in %e and %g.
Bruno Haible <bruno@clisp.org>
parents: 8836
diff changeset
1934 || strcmp (result, "-3.125000e-002 33") == 0);
8836
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1935 ASSERT (length == strlen (result));
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1936 free (result);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1937 }
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1938
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1939 { /* Positive zero. */
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1940 size_t length;
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1941 char *result =
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1942 my_asnprintf (NULL, &length, "%e %d", 0.0, 33, 44, 55);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1943 ASSERT (result != NULL);
8839
5efc1d668039 Accomodate for implementations that produce 3 exponent digits in %e and %g.
Bruno Haible <bruno@clisp.org>
parents: 8836
diff changeset
1944 ASSERT (strcmp (result, "0.000000e+00 33") == 0
5efc1d668039 Accomodate for implementations that produce 3 exponent digits in %e and %g.
Bruno Haible <bruno@clisp.org>
parents: 8836
diff changeset
1945 || strcmp (result, "0.000000e+000 33") == 0);
8836
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1946 ASSERT (length == strlen (result));
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1947 free (result);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1948 }
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1949
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1950 { /* Negative zero. */
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1951 size_t length;
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1952 char *result =
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1953 my_asnprintf (NULL, &length, "%e %d", -0.0, 33, 44, 55);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1954 ASSERT (result != NULL);
8852
df0b5e8ea770 Avoid test failures on platforms where -0.0 and 0.0 are identical.
Bruno Haible <bruno@clisp.org>
parents: 8850
diff changeset
1955 if (have_minus_zero ())
df0b5e8ea770 Avoid test failures on platforms where -0.0 and 0.0 are identical.
Bruno Haible <bruno@clisp.org>
parents: 8850
diff changeset
1956 ASSERT (strcmp (result, "-0.000000e+00 33") == 0
df0b5e8ea770 Avoid test failures on platforms where -0.0 and 0.0 are identical.
Bruno Haible <bruno@clisp.org>
parents: 8850
diff changeset
1957 || strcmp (result, "-0.000000e+000 33") == 0);
8836
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1958 ASSERT (length == strlen (result));
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1959 free (result);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1960 }
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1961
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1962 { /* Positive infinity. */
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1963 size_t length;
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1964 char *result =
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1965 my_asnprintf (NULL, &length, "%e %d", 1.0 / 0.0, 33, 44, 55);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1966 ASSERT (result != NULL);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1967 ASSERT (strcmp (result, "inf 33") == 0
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1968 || strcmp (result, "infinity 33") == 0);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1969 ASSERT (length == strlen (result));
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1970 free (result);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1971 }
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1972
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1973 { /* Negative infinity. */
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1974 size_t length;
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1975 char *result =
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1976 my_asnprintf (NULL, &length, "%e %d", -1.0 / 0.0, 33, 44, 55);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1977 ASSERT (result != NULL);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1978 ASSERT (strcmp (result, "-inf 33") == 0
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1979 || strcmp (result, "-infinity 33") == 0);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1980 ASSERT (length == strlen (result));
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1981 free (result);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1982 }
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1983
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1984 { /* NaN. */
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1985 size_t length;
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1986 char *result =
9854
baba3b346ab2 Use macros NaNf, NaNd, NaNl instead of NAN.
Bruno Haible <bruno@clisp.org>
parents: 9850
diff changeset
1987 my_asnprintf (NULL, &length, "%e %d", NaNd (), 33, 44, 55);
8836
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1988 ASSERT (result != NULL);
8850
d1fe16dfbfee Avoid test failures on IRIX 6.5.
Bruno Haible <bruno@clisp.org>
parents: 8839
diff changeset
1989 ASSERT (strlen (result) >= 3 + 3
8865
9e203d8ade65 Stricter check for printf result for NaN arguments.
Bruno Haible <bruno@clisp.org>
parents: 8857
diff changeset
1990 && strisnan (result, 0, strlen (result) - 3, 0)
8850
d1fe16dfbfee Avoid test failures on IRIX 6.5.
Bruno Haible <bruno@clisp.org>
parents: 8839
diff changeset
1991 && strcmp (result + strlen (result) - 3, " 33") == 0);
8836
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1992 ASSERT (length == strlen (result));
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1993 free (result);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1994 }
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1995
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1996 { /* Width. */
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1997 size_t length;
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1998 char *result =
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
1999 my_asnprintf (NULL, &length, "%15e %d", 1.75, 33, 44, 55);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2000 ASSERT (result != NULL);
8839
5efc1d668039 Accomodate for implementations that produce 3 exponent digits in %e and %g.
Bruno Haible <bruno@clisp.org>
parents: 8836
diff changeset
2001 ASSERT (strcmp (result, " 1.750000e+00 33") == 0
5efc1d668039 Accomodate for implementations that produce 3 exponent digits in %e and %g.
Bruno Haible <bruno@clisp.org>
parents: 8836
diff changeset
2002 || strcmp (result, " 1.750000e+000 33") == 0);
8836
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2003 ASSERT (length == strlen (result));
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2004 free (result);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2005 }
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2006
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2007 { /* FLAG_LEFT. */
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2008 size_t length;
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2009 char *result =
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2010 my_asnprintf (NULL, &length, "%-15e %d", 1.75, 33, 44, 55);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2011 ASSERT (result != NULL);
8839
5efc1d668039 Accomodate for implementations that produce 3 exponent digits in %e and %g.
Bruno Haible <bruno@clisp.org>
parents: 8836
diff changeset
2012 ASSERT (strcmp (result, "1.750000e+00 33") == 0
5efc1d668039 Accomodate for implementations that produce 3 exponent digits in %e and %g.
Bruno Haible <bruno@clisp.org>
parents: 8836
diff changeset
2013 || strcmp (result, "1.750000e+000 33") == 0);
8836
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2014 ASSERT (length == strlen (result));
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2015 free (result);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2016 }
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2017
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2018 { /* FLAG_SHOWSIGN. */
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2019 size_t length;
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2020 char *result =
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2021 my_asnprintf (NULL, &length, "%+e %d", 1.75, 33, 44, 55);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2022 ASSERT (result != NULL);
8839
5efc1d668039 Accomodate for implementations that produce 3 exponent digits in %e and %g.
Bruno Haible <bruno@clisp.org>
parents: 8836
diff changeset
2023 ASSERT (strcmp (result, "+1.750000e+00 33") == 0
5efc1d668039 Accomodate for implementations that produce 3 exponent digits in %e and %g.
Bruno Haible <bruno@clisp.org>
parents: 8836
diff changeset
2024 || strcmp (result, "+1.750000e+000 33") == 0);
8836
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2025 ASSERT (length == strlen (result));
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2026 free (result);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2027 }
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2028
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2029 { /* FLAG_SPACE. */
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2030 size_t length;
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2031 char *result =
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2032 my_asnprintf (NULL, &length, "% e %d", 1.75, 33, 44, 55);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2033 ASSERT (result != NULL);
8839
5efc1d668039 Accomodate for implementations that produce 3 exponent digits in %e and %g.
Bruno Haible <bruno@clisp.org>
parents: 8836
diff changeset
2034 ASSERT (strcmp (result, " 1.750000e+00 33") == 0
5efc1d668039 Accomodate for implementations that produce 3 exponent digits in %e and %g.
Bruno Haible <bruno@clisp.org>
parents: 8836
diff changeset
2035 || strcmp (result, " 1.750000e+000 33") == 0);
8836
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2036 ASSERT (length == strlen (result));
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2037 free (result);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2038 }
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2039
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2040 { /* FLAG_ALT. */
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2041 size_t length;
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2042 char *result =
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2043 my_asnprintf (NULL, &length, "%#e %d", 1.75, 33, 44, 55);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2044 ASSERT (result != NULL);
8839
5efc1d668039 Accomodate for implementations that produce 3 exponent digits in %e and %g.
Bruno Haible <bruno@clisp.org>
parents: 8836
diff changeset
2045 ASSERT (strcmp (result, "1.750000e+00 33") == 0
5efc1d668039 Accomodate for implementations that produce 3 exponent digits in %e and %g.
Bruno Haible <bruno@clisp.org>
parents: 8836
diff changeset
2046 || strcmp (result, "1.750000e+000 33") == 0);
8836
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2047 ASSERT (length == strlen (result));
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2048 free (result);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2049 }
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2050
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2051 { /* FLAG_ALT. */
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2052 size_t length;
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2053 char *result =
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2054 my_asnprintf (NULL, &length, "%#.e %d", 1.75, 33, 44, 55);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2055 ASSERT (result != NULL);
8839
5efc1d668039 Accomodate for implementations that produce 3 exponent digits in %e and %g.
Bruno Haible <bruno@clisp.org>
parents: 8836
diff changeset
2056 ASSERT (strcmp (result, "2.e+00 33") == 0
5efc1d668039 Accomodate for implementations that produce 3 exponent digits in %e and %g.
Bruno Haible <bruno@clisp.org>
parents: 8836
diff changeset
2057 || strcmp (result, "2.e+000 33") == 0);
8836
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2058 ASSERT (length == strlen (result));
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2059 free (result);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2060 }
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2061
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2062 { /* FLAG_ALT. */
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2063 size_t length;
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2064 char *result =
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2065 my_asnprintf (NULL, &length, "%#.e %d", 9.75, 33, 44, 55);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2066 ASSERT (result != NULL);
8839
5efc1d668039 Accomodate for implementations that produce 3 exponent digits in %e and %g.
Bruno Haible <bruno@clisp.org>
parents: 8836
diff changeset
2067 ASSERT (strcmp (result, "1.e+01 33") == 0
5efc1d668039 Accomodate for implementations that produce 3 exponent digits in %e and %g.
Bruno Haible <bruno@clisp.org>
parents: 8836
diff changeset
2068 || strcmp (result, "1.e+001 33") == 0);
8836
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2069 ASSERT (length == strlen (result));
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2070 free (result);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2071 }
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2072
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2073 { /* FLAG_ZERO with finite number. */
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2074 size_t length;
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2075 char *result =
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2076 my_asnprintf (NULL, &length, "%015e %d", 1234.0, 33, 44, 55);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2077 ASSERT (result != NULL);
8839
5efc1d668039 Accomodate for implementations that produce 3 exponent digits in %e and %g.
Bruno Haible <bruno@clisp.org>
parents: 8836
diff changeset
2078 ASSERT (strcmp (result, "0001.234000e+03 33") == 0
5efc1d668039 Accomodate for implementations that produce 3 exponent digits in %e and %g.
Bruno Haible <bruno@clisp.org>
parents: 8836
diff changeset
2079 || strcmp (result, "001.234000e+003 33") == 0);
8836
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2080 ASSERT (length == strlen (result));
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2081 free (result);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2082 }
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2083
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2084 { /* FLAG_ZERO with infinite number. */
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2085 size_t length;
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2086 char *result =
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2087 my_asnprintf (NULL, &length, "%015e %d", -1.0 / 0.0, 33, 44, 55);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2088 ASSERT (result != NULL);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2089 ASSERT (strcmp (result, " -inf 33") == 0
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2090 || strcmp (result, " -infinity 33") == 0);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2091 ASSERT (length == strlen (result));
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2092 free (result);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2093 }
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2094
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2095 { /* FLAG_ZERO with NaN. */
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2096 size_t length;
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2097 char *result =
9854
baba3b346ab2 Use macros NaNf, NaNd, NaNl instead of NAN.
Bruno Haible <bruno@clisp.org>
parents: 9850
diff changeset
2098 my_asnprintf (NULL, &length, "%050e %d", NaNd (), 33, 44, 55);
8836
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2099 ASSERT (result != NULL);
8870
4e1f2ea486b4 Allow for a longer printed representation of NaN.
Bruno Haible <bruno@clisp.org>
parents: 8865
diff changeset
2100 ASSERT (strlen (result) == 50 + 3
8865
9e203d8ade65 Stricter check for printf result for NaN arguments.
Bruno Haible <bruno@clisp.org>
parents: 8857
diff changeset
2101 && strisnan (result, strspn (result, " "), strlen (result) - 3, 0)
8850
d1fe16dfbfee Avoid test failures on IRIX 6.5.
Bruno Haible <bruno@clisp.org>
parents: 8839
diff changeset
2102 && strcmp (result + strlen (result) - 3, " 33") == 0);
8836
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2103 ASSERT (length == strlen (result));
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2104 free (result);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2105 }
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2106
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2107 { /* Precision. */
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2108 size_t length;
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2109 char *result =
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2110 my_asnprintf (NULL, &length, "%.e %d", 1234.0, 33, 44, 55);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2111 ASSERT (result != NULL);
8839
5efc1d668039 Accomodate for implementations that produce 3 exponent digits in %e and %g.
Bruno Haible <bruno@clisp.org>
parents: 8836
diff changeset
2112 ASSERT (strcmp (result, "1e+03 33") == 0
5efc1d668039 Accomodate for implementations that produce 3 exponent digits in %e and %g.
Bruno Haible <bruno@clisp.org>
parents: 8836
diff changeset
2113 || strcmp (result, "1e+003 33") == 0);
8836
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2114 ASSERT (length == strlen (result));
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2115 free (result);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2116 }
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2117
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2118 { /* A positive number. */
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2119 size_t length;
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2120 char *result =
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2121 my_asnprintf (NULL, &length, "%Le %d", 12.75L, 33, 44, 55);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2122 ASSERT (result != NULL);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2123 ASSERT (strcmp (result, "1.275000e+01 33") == 0);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2124 ASSERT (length == strlen (result));
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2125 free (result);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2126 }
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2127
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2128 { /* A larger positive number. */
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2129 size_t length;
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2130 char *result =
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2131 my_asnprintf (NULL, &length, "%Le %d", 1234567.0L, 33, 44, 55);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2132 ASSERT (result != NULL);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2133 ASSERT (strcmp (result, "1.234567e+06 33") == 0);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2134 ASSERT (length == strlen (result));
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2135 free (result);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2136 }
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2137
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2138 { /* Small and large positive numbers. */
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2139 static struct { long double value; const char *string; } data[] =
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2140 {
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2141 { 1.234321234321234e-37L, "1.234321e-37" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2142 { 1.234321234321234e-36L, "1.234321e-36" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2143 { 1.234321234321234e-35L, "1.234321e-35" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2144 { 1.234321234321234e-34L, "1.234321e-34" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2145 { 1.234321234321234e-33L, "1.234321e-33" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2146 { 1.234321234321234e-32L, "1.234321e-32" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2147 { 1.234321234321234e-31L, "1.234321e-31" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2148 { 1.234321234321234e-30L, "1.234321e-30" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2149 { 1.234321234321234e-29L, "1.234321e-29" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2150 { 1.234321234321234e-28L, "1.234321e-28" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2151 { 1.234321234321234e-27L, "1.234321e-27" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2152 { 1.234321234321234e-26L, "1.234321e-26" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2153 { 1.234321234321234e-25L, "1.234321e-25" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2154 { 1.234321234321234e-24L, "1.234321e-24" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2155 { 1.234321234321234e-23L, "1.234321e-23" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2156 { 1.234321234321234e-22L, "1.234321e-22" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2157 { 1.234321234321234e-21L, "1.234321e-21" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2158 { 1.234321234321234e-20L, "1.234321e-20" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2159 { 1.234321234321234e-19L, "1.234321e-19" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2160 { 1.234321234321234e-18L, "1.234321e-18" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2161 { 1.234321234321234e-17L, "1.234321e-17" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2162 { 1.234321234321234e-16L, "1.234321e-16" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2163 { 1.234321234321234e-15L, "1.234321e-15" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2164 { 1.234321234321234e-14L, "1.234321e-14" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2165 { 1.234321234321234e-13L, "1.234321e-13" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2166 { 1.234321234321234e-12L, "1.234321e-12" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2167 { 1.234321234321234e-11L, "1.234321e-11" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2168 { 1.234321234321234e-10L, "1.234321e-10" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2169 { 1.234321234321234e-9L, "1.234321e-09" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2170 { 1.234321234321234e-8L, "1.234321e-08" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2171 { 1.234321234321234e-7L, "1.234321e-07" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2172 { 1.234321234321234e-6L, "1.234321e-06" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2173 { 1.234321234321234e-5L, "1.234321e-05" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2174 { 1.234321234321234e-4L, "1.234321e-04" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2175 { 1.234321234321234e-3L, "1.234321e-03" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2176 { 1.234321234321234e-2L, "1.234321e-02" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2177 { 1.234321234321234e-1L, "1.234321e-01" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2178 { 1.234321234321234L, "1.234321e+00" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2179 { 1.234321234321234e1L, "1.234321e+01" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2180 { 1.234321234321234e2L, "1.234321e+02" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2181 { 1.234321234321234e3L, "1.234321e+03" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2182 { 1.234321234321234e4L, "1.234321e+04" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2183 { 1.234321234321234e5L, "1.234321e+05" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2184 { 1.234321234321234e6L, "1.234321e+06" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2185 { 1.234321234321234e7L, "1.234321e+07" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2186 { 1.234321234321234e8L, "1.234321e+08" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2187 { 1.234321234321234e9L, "1.234321e+09" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2188 { 1.234321234321234e10L, "1.234321e+10" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2189 { 1.234321234321234e11L, "1.234321e+11" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2190 { 1.234321234321234e12L, "1.234321e+12" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2191 { 1.234321234321234e13L, "1.234321e+13" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2192 { 1.234321234321234e14L, "1.234321e+14" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2193 { 1.234321234321234e15L, "1.234321e+15" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2194 { 1.234321234321234e16L, "1.234321e+16" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2195 { 1.234321234321234e17L, "1.234321e+17" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2196 { 1.234321234321234e18L, "1.234321e+18" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2197 { 1.234321234321234e19L, "1.234321e+19" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2198 { 1.234321234321234e20L, "1.234321e+20" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2199 { 1.234321234321234e21L, "1.234321e+21" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2200 { 1.234321234321234e22L, "1.234321e+22" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2201 { 1.234321234321234e23L, "1.234321e+23" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2202 { 1.234321234321234e24L, "1.234321e+24" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2203 { 1.234321234321234e25L, "1.234321e+25" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2204 { 1.234321234321234e26L, "1.234321e+26" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2205 { 1.234321234321234e27L, "1.234321e+27" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2206 { 1.234321234321234e28L, "1.234321e+28" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2207 { 1.234321234321234e29L, "1.234321e+29" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2208 { 1.234321234321234e30L, "1.234321e+30" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2209 { 1.234321234321234e31L, "1.234321e+31" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2210 { 1.234321234321234e32L, "1.234321e+32" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2211 { 1.234321234321234e33L, "1.234321e+33" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2212 { 1.234321234321234e34L, "1.234321e+34" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2213 { 1.234321234321234e35L, "1.234321e+35" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2214 { 1.234321234321234e36L, "1.234321e+36" }
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2215 };
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2216 size_t k;
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2217 for (k = 0; k < SIZEOF (data); k++)
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2218 {
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2219 size_t length;
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2220 char *result =
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2221 my_asnprintf (NULL, &length, "%Le", data[k].value);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2222 ASSERT (result != NULL);
8839
5efc1d668039 Accomodate for implementations that produce 3 exponent digits in %e and %g.
Bruno Haible <bruno@clisp.org>
parents: 8836
diff changeset
2223 ASSERT (strcmp (result, data[k].string) == 0);
8836
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2224 ASSERT (length == strlen (result));
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2225 free (result);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2226 }
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2227 }
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2228
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2229 { /* A negative number. */
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2230 size_t length;
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2231 char *result =
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2232 my_asnprintf (NULL, &length, "%Le %d", -0.03125L, 33, 44, 55);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2233 ASSERT (result != NULL);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2234 ASSERT (strcmp (result, "-3.125000e-02 33") == 0);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2235 ASSERT (length == strlen (result));
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2236 free (result);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2237 }
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2238
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2239 { /* Positive zero. */
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2240 size_t length;
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2241 char *result =
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2242 my_asnprintf (NULL, &length, "%Le %d", 0.0L, 33, 44, 55);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2243 ASSERT (result != NULL);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2244 ASSERT (strcmp (result, "0.000000e+00 33") == 0);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2245 ASSERT (length == strlen (result));
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2246 free (result);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2247 }
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2248
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2249 { /* Negative zero. */
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2250 size_t length;
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2251 char *result =
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2252 my_asnprintf (NULL, &length, "%Le %d", -0.0L, 33, 44, 55);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2253 ASSERT (result != NULL);
8852
df0b5e8ea770 Avoid test failures on platforms where -0.0 and 0.0 are identical.
Bruno Haible <bruno@clisp.org>
parents: 8850
diff changeset
2254 if (have_minus_zero ())
df0b5e8ea770 Avoid test failures on platforms where -0.0 and 0.0 are identical.
Bruno Haible <bruno@clisp.org>
parents: 8850
diff changeset
2255 ASSERT (strcmp (result, "-0.000000e+00 33") == 0);
8836
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2256 ASSERT (length == strlen (result));
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2257 free (result);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2258 }
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2259
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2260 { /* Positive infinity. */
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2261 size_t length;
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2262 char *result =
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2263 my_asnprintf (NULL, &length, "%Le %d", 1.0L / 0.0L, 33, 44, 55);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2264 ASSERT (result != NULL);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2265 ASSERT (strcmp (result, "inf 33") == 0
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2266 || strcmp (result, "infinity 33") == 0);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2267 ASSERT (length == strlen (result));
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2268 free (result);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2269 }
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2270
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2271 { /* Negative infinity. */
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2272 size_t length;
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2273 char *result =
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2274 my_asnprintf (NULL, &length, "%Le %d", -1.0L / 0.0L, 33, 44, 55);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2275 ASSERT (result != NULL);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2276 ASSERT (strcmp (result, "-inf 33") == 0
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2277 || strcmp (result, "-infinity 33") == 0);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2278 ASSERT (length == strlen (result));
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2279 free (result);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2280 }
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2281
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2282 { /* NaN. */
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2283 size_t length;
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2284 char *result =
9854
baba3b346ab2 Use macros NaNf, NaNd, NaNl instead of NAN.
Bruno Haible <bruno@clisp.org>
parents: 9850
diff changeset
2285 my_asnprintf (NULL, &length, "%Le %d", NaNl (), 33, 44, 55);
8836
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2286 ASSERT (result != NULL);
8850
d1fe16dfbfee Avoid test failures on IRIX 6.5.
Bruno Haible <bruno@clisp.org>
parents: 8839
diff changeset
2287 ASSERT (strlen (result) >= 3 + 3
8865
9e203d8ade65 Stricter check for printf result for NaN arguments.
Bruno Haible <bruno@clisp.org>
parents: 8857
diff changeset
2288 && strisnan (result, 0, strlen (result) - 3, 0)
8850
d1fe16dfbfee Avoid test failures on IRIX 6.5.
Bruno Haible <bruno@clisp.org>
parents: 8839
diff changeset
2289 && strcmp (result + strlen (result) - 3, " 33") == 0);
8836
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2290 ASSERT (length == strlen (result));
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2291 free (result);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2292 }
8919
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2293 #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_))
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2294 { /* Quiet NaN. */
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2295 static union { unsigned int word[4]; long double value; } x =
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2296 { LDBL80_WORDS (0xFFFF, 0xC3333333, 0x00000000) };
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2297 size_t length;
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2298 char *result =
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2299 my_asnprintf (NULL, &length, "%Le %d", x.value, 33, 44, 55);
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2300 ASSERT (result != NULL);
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2301 ASSERT (strlen (result) >= 3 + 3
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2302 && strisnan (result, 0, strlen (result) - 3, 0)
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2303 && strcmp (result + strlen (result) - 3, " 33") == 0);
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2304 ASSERT (length == strlen (result));
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2305 free (result);
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2306 }
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2307 {
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2308 /* Signalling NaN. */
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2309 static union { unsigned int word[4]; long double value; } x =
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2310 { LDBL80_WORDS (0xFFFF, 0x83333333, 0x00000000) };
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2311 size_t length;
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2312 char *result =
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2313 my_asnprintf (NULL, &length, "%Le %d", x.value, 33, 44, 55);
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2314 ASSERT (result != NULL);
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2315 ASSERT (strlen (result) >= 3 + 3
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2316 && strisnan (result, 0, strlen (result) - 3, 0)
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2317 && strcmp (result + strlen (result) - 3, " 33") == 0);
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2318 ASSERT (length == strlen (result));
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2319 free (result);
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2320 }
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2321 /* The isnanl function should recognize Pseudo-NaNs, Pseudo-Infinities,
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2322 Pseudo-Zeroes, Unnormalized Numbers, and Pseudo-Denormals, as defined in
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2323 Intel IA-64 Architecture Software Developer's Manual, Volume 1:
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2324 Application Architecture.
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2325 Table 5-2 "Floating-Point Register Encodings"
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2326 Figure 5-6 "Memory to Floating-Point Register Data Translation"
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2327 */
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2328 { /* Pseudo-NaN. */
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2329 static union { unsigned int word[4]; long double value; } x =
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2330 { LDBL80_WORDS (0xFFFF, 0x40000001, 0x00000000) };
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2331 size_t length;
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2332 char *result =
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2333 my_asnprintf (NULL, &length, "%Le %d", x.value, 33, 44, 55);
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2334 ASSERT (result != NULL);
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2335 ASSERT (strlen (result) >= 3 + 3
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2336 && strisnan (result, 0, strlen (result) - 3, 0)
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2337 && strcmp (result + strlen (result) - 3, " 33") == 0);
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2338 ASSERT (length == strlen (result));
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2339 free (result);
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2340 }
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2341 { /* Pseudo-Infinity. */
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2342 static union { unsigned int word[4]; long double value; } x =
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2343 { LDBL80_WORDS (0xFFFF, 0x00000000, 0x00000000) };
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2344 size_t length;
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2345 char *result =
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2346 my_asnprintf (NULL, &length, "%Le %d", x.value, 33, 44, 55);
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2347 ASSERT (result != NULL);
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2348 ASSERT (strlen (result) >= 3 + 3
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2349 && strisnan (result, 0, strlen (result) - 3, 0)
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2350 && strcmp (result + strlen (result) - 3, " 33") == 0);
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2351 ASSERT (length == strlen (result));
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2352 free (result);
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2353 }
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2354 { /* Pseudo-Zero. */
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2355 static union { unsigned int word[4]; long double value; } x =
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2356 { LDBL80_WORDS (0x4004, 0x00000000, 0x00000000) };
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2357 size_t length;
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2358 char *result =
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2359 my_asnprintf (NULL, &length, "%Le %d", x.value, 33, 44, 55);
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2360 ASSERT (result != NULL);
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2361 ASSERT (strlen (result) >= 3 + 3
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2362 && strisnan (result, 0, strlen (result) - 3, 0)
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2363 && strcmp (result + strlen (result) - 3, " 33") == 0);
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2364 ASSERT (length == strlen (result));
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2365 free (result);
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2366 }
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2367 { /* Unnormalized number. */
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2368 static union { unsigned int word[4]; long double value; } x =
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2369 { LDBL80_WORDS (0x4000, 0x63333333, 0x00000000) };
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2370 size_t length;
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2371 char *result =
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2372 my_asnprintf (NULL, &length, "%Le %d", x.value, 33, 44, 55);
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2373 ASSERT (result != NULL);
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2374 ASSERT (strlen (result) >= 3 + 3
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2375 && strisnan (result, 0, strlen (result) - 3, 0)
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2376 && strcmp (result + strlen (result) - 3, " 33") == 0);
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2377 ASSERT (length == strlen (result));
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2378 free (result);
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2379 }
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2380 { /* Pseudo-Denormal. */
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2381 static union { unsigned int word[4]; long double value; } x =
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2382 { LDBL80_WORDS (0x0000, 0x83333333, 0x00000000) };
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2383 size_t length;
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2384 char *result =
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2385 my_asnprintf (NULL, &length, "%Le %d", x.value, 33, 44, 55);
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2386 ASSERT (result != NULL);
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2387 ASSERT (strlen (result) >= 3 + 3
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2388 && strisnan (result, 0, strlen (result) - 3, 0)
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2389 && strcmp (result + strlen (result) - 3, " 33") == 0);
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2390 ASSERT (length == strlen (result));
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2391 free (result);
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2392 }
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2393 #endif
8836
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2394
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2395 { /* Width. */
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2396 size_t length;
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2397 char *result =
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2398 my_asnprintf (NULL, &length, "%15Le %d", 1.75L, 33, 44, 55);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2399 ASSERT (result != NULL);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2400 ASSERT (strcmp (result, " 1.750000e+00 33") == 0);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2401 ASSERT (length == strlen (result));
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2402 free (result);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2403 }
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2404
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2405 { /* FLAG_LEFT. */
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2406 size_t length;
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2407 char *result =
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2408 my_asnprintf (NULL, &length, "%-15Le %d", 1.75L, 33, 44, 55);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2409 ASSERT (result != NULL);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2410 ASSERT (strcmp (result, "1.750000e+00 33") == 0);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2411 ASSERT (length == strlen (result));
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2412 free (result);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2413 }
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2414
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2415 { /* FLAG_SHOWSIGN. */
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2416 size_t length;
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2417 char *result =
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2418 my_asnprintf (NULL, &length, "%+Le %d", 1.75L, 33, 44, 55);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2419 ASSERT (result != NULL);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2420 ASSERT (strcmp (result, "+1.750000e+00 33") == 0);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2421 ASSERT (length == strlen (result));
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2422 free (result);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2423 }
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2424
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2425 { /* FLAG_SPACE. */
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2426 size_t length;
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2427 char *result =
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2428 my_asnprintf (NULL, &length, "% Le %d", 1.75L, 33, 44, 55);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2429 ASSERT (result != NULL);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2430 ASSERT (strcmp (result, " 1.750000e+00 33") == 0);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2431 ASSERT (length == strlen (result));
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2432 free (result);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2433 }
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2434
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2435 { /* FLAG_ALT. */
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2436 size_t length;
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2437 char *result =
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2438 my_asnprintf (NULL, &length, "%#Le %d", 1.75L, 33, 44, 55);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2439 ASSERT (result != NULL);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2440 ASSERT (strcmp (result, "1.750000e+00 33") == 0);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2441 ASSERT (length == strlen (result));
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2442 free (result);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2443 }
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2444
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2445 { /* FLAG_ALT. */
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2446 size_t length;
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2447 char *result =
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2448 my_asnprintf (NULL, &length, "%#.Le %d", 1.75L, 33, 44, 55);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2449 ASSERT (result != NULL);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2450 ASSERT (strcmp (result, "2.e+00 33") == 0);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2451 ASSERT (length == strlen (result));
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2452 free (result);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2453 }
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2454
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2455 { /* FLAG_ALT. */
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2456 size_t length;
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2457 char *result =
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2458 my_asnprintf (NULL, &length, "%#.Le %d", 9.75L, 33, 44, 55);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2459 ASSERT (result != NULL);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2460 ASSERT (strcmp (result, "1.e+01 33") == 0);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2461 ASSERT (length == strlen (result));
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2462 free (result);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2463 }
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2464
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2465 { /* FLAG_ZERO with finite number. */
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2466 size_t length;
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2467 char *result =
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2468 my_asnprintf (NULL, &length, "%015Le %d", 1234.0L, 33, 44, 55);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2469 ASSERT (result != NULL);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2470 ASSERT (strcmp (result, "0001.234000e+03 33") == 0);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2471 ASSERT (length == strlen (result));
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2472 free (result);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2473 }
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2474
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2475 { /* FLAG_ZERO with infinite number. */
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2476 size_t length;
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2477 char *result =
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2478 my_asnprintf (NULL, &length, "%015Le %d", -1.0L / 0.0L, 33, 44, 55);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2479 ASSERT (result != NULL);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2480 ASSERT (strcmp (result, " -inf 33") == 0
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2481 || strcmp (result, " -infinity 33") == 0);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2482 ASSERT (length == strlen (result));
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2483 free (result);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2484 }
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2485
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2486 { /* FLAG_ZERO with NaN. */
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2487 size_t length;
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2488 char *result =
9854
baba3b346ab2 Use macros NaNf, NaNd, NaNl instead of NAN.
Bruno Haible <bruno@clisp.org>
parents: 9850
diff changeset
2489 my_asnprintf (NULL, &length, "%050Le %d", NaNl (), 33, 44, 55);
8836
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2490 ASSERT (result != NULL);
8870
4e1f2ea486b4 Allow for a longer printed representation of NaN.
Bruno Haible <bruno@clisp.org>
parents: 8865
diff changeset
2491 ASSERT (strlen (result) == 50 + 3
8865
9e203d8ade65 Stricter check for printf result for NaN arguments.
Bruno Haible <bruno@clisp.org>
parents: 8857
diff changeset
2492 && strisnan (result, strspn (result, " "), strlen (result) - 3, 0)
8850
d1fe16dfbfee Avoid test failures on IRIX 6.5.
Bruno Haible <bruno@clisp.org>
parents: 8839
diff changeset
2493 && strcmp (result + strlen (result) - 3, " 33") == 0);
8836
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2494 ASSERT (length == strlen (result));
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2495 free (result);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2496 }
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2497
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2498 { /* Precision. */
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2499 size_t length;
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2500 char *result =
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2501 my_asnprintf (NULL, &length, "%.Le %d", 1234.0L, 33, 44, 55);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2502 ASSERT (result != NULL);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2503 ASSERT (strcmp (result, "1e+03 33") == 0);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2504 ASSERT (length == strlen (result));
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2505 free (result);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2506 }
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2507
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2508 /* Test the support of the %g format directive. */
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2509
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2510 { /* A positive number. */
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2511 size_t length;
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2512 char *result =
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2513 my_asnprintf (NULL, &length, "%g %d", 12.75, 33, 44, 55);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2514 ASSERT (result != NULL);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2515 ASSERT (strcmp (result, "12.75 33") == 0);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2516 ASSERT (length == strlen (result));
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2517 free (result);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2518 }
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2519
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2520 { /* A larger positive number. */
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2521 size_t length;
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2522 char *result =
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2523 my_asnprintf (NULL, &length, "%g %d", 1234567.0, 33, 44, 55);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2524 ASSERT (result != NULL);
8839
5efc1d668039 Accomodate for implementations that produce 3 exponent digits in %e and %g.
Bruno Haible <bruno@clisp.org>
parents: 8836
diff changeset
2525 ASSERT (strcmp (result, "1.23457e+06 33") == 0
5efc1d668039 Accomodate for implementations that produce 3 exponent digits in %e and %g.
Bruno Haible <bruno@clisp.org>
parents: 8836
diff changeset
2526 || strcmp (result, "1.23457e+006 33") == 0);
8836
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2527 ASSERT (length == strlen (result));
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2528 free (result);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2529 }
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2530
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2531 { /* Small and large positive numbers. */
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2532 static struct { double value; const char *string; } data[] =
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2533 {
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2534 { 1.234321234321234e-37, "1.23432e-37" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2535 { 1.234321234321234e-36, "1.23432e-36" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2536 { 1.234321234321234e-35, "1.23432e-35" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2537 { 1.234321234321234e-34, "1.23432e-34" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2538 { 1.234321234321234e-33, "1.23432e-33" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2539 { 1.234321234321234e-32, "1.23432e-32" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2540 { 1.234321234321234e-31, "1.23432e-31" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2541 { 1.234321234321234e-30, "1.23432e-30" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2542 { 1.234321234321234e-29, "1.23432e-29" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2543 { 1.234321234321234e-28, "1.23432e-28" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2544 { 1.234321234321234e-27, "1.23432e-27" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2545 { 1.234321234321234e-26, "1.23432e-26" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2546 { 1.234321234321234e-25, "1.23432e-25" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2547 { 1.234321234321234e-24, "1.23432e-24" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2548 { 1.234321234321234e-23, "1.23432e-23" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2549 { 1.234321234321234e-22, "1.23432e-22" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2550 { 1.234321234321234e-21, "1.23432e-21" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2551 { 1.234321234321234e-20, "1.23432e-20" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2552 { 1.234321234321234e-19, "1.23432e-19" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2553 { 1.234321234321234e-18, "1.23432e-18" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2554 { 1.234321234321234e-17, "1.23432e-17" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2555 { 1.234321234321234e-16, "1.23432e-16" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2556 { 1.234321234321234e-15, "1.23432e-15" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2557 { 1.234321234321234e-14, "1.23432e-14" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2558 { 1.234321234321234e-13, "1.23432e-13" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2559 { 1.234321234321234e-12, "1.23432e-12" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2560 { 1.234321234321234e-11, "1.23432e-11" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2561 { 1.234321234321234e-10, "1.23432e-10" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2562 { 1.234321234321234e-9, "1.23432e-09" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2563 { 1.234321234321234e-8, "1.23432e-08" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2564 { 1.234321234321234e-7, "1.23432e-07" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2565 { 1.234321234321234e-6, "1.23432e-06" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2566 { 1.234321234321234e-5, "1.23432e-05" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2567 { 1.234321234321234e-4, "0.000123432" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2568 { 1.234321234321234e-3, "0.00123432" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2569 { 1.234321234321234e-2, "0.0123432" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2570 { 1.234321234321234e-1, "0.123432" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2571 { 1.234321234321234, "1.23432" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2572 { 1.234321234321234e1, "12.3432" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2573 { 1.234321234321234e2, "123.432" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2574 { 1.234321234321234e3, "1234.32" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2575 { 1.234321234321234e4, "12343.2" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2576 { 1.234321234321234e5, "123432" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2577 { 1.234321234321234e6, "1.23432e+06" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2578 { 1.234321234321234e7, "1.23432e+07" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2579 { 1.234321234321234e8, "1.23432e+08" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2580 { 1.234321234321234e9, "1.23432e+09" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2581 { 1.234321234321234e10, "1.23432e+10" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2582 { 1.234321234321234e11, "1.23432e+11" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2583 { 1.234321234321234e12, "1.23432e+12" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2584 { 1.234321234321234e13, "1.23432e+13" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2585 { 1.234321234321234e14, "1.23432e+14" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2586 { 1.234321234321234e15, "1.23432e+15" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2587 { 1.234321234321234e16, "1.23432e+16" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2588 { 1.234321234321234e17, "1.23432e+17" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2589 { 1.234321234321234e18, "1.23432e+18" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2590 { 1.234321234321234e19, "1.23432e+19" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2591 { 1.234321234321234e20, "1.23432e+20" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2592 { 1.234321234321234e21, "1.23432e+21" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2593 { 1.234321234321234e22, "1.23432e+22" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2594 { 1.234321234321234e23, "1.23432e+23" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2595 { 1.234321234321234e24, "1.23432e+24" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2596 { 1.234321234321234e25, "1.23432e+25" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2597 { 1.234321234321234e26, "1.23432e+26" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2598 { 1.234321234321234e27, "1.23432e+27" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2599 { 1.234321234321234e28, "1.23432e+28" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2600 { 1.234321234321234e29, "1.23432e+29" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2601 { 1.234321234321234e30, "1.23432e+30" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2602 { 1.234321234321234e31, "1.23432e+31" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2603 { 1.234321234321234e32, "1.23432e+32" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2604 { 1.234321234321234e33, "1.23432e+33" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2605 { 1.234321234321234e34, "1.23432e+34" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2606 { 1.234321234321234e35, "1.23432e+35" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2607 { 1.234321234321234e36, "1.23432e+36" }
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2608 };
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2609 size_t k;
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2610 for (k = 0; k < SIZEOF (data); k++)
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2611 {
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2612 size_t length;
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2613 char *result =
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2614 my_asnprintf (NULL, &length, "%g", data[k].value);
8839
5efc1d668039 Accomodate for implementations that produce 3 exponent digits in %e and %g.
Bruno Haible <bruno@clisp.org>
parents: 8836
diff changeset
2615 const char *expected = data[k].string;
8836
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2616 ASSERT (result != NULL);
8839
5efc1d668039 Accomodate for implementations that produce 3 exponent digits in %e and %g.
Bruno Haible <bruno@clisp.org>
parents: 8836
diff changeset
2617 ASSERT (strcmp (result, expected) == 0
5efc1d668039 Accomodate for implementations that produce 3 exponent digits in %e and %g.
Bruno Haible <bruno@clisp.org>
parents: 8836
diff changeset
2618 /* Some implementations produce exponents with 3 digits. */
5efc1d668039 Accomodate for implementations that produce 3 exponent digits in %e and %g.
Bruno Haible <bruno@clisp.org>
parents: 8836
diff changeset
2619 || (expected[strlen (expected) - 4] == 'e'
5efc1d668039 Accomodate for implementations that produce 3 exponent digits in %e and %g.
Bruno Haible <bruno@clisp.org>
parents: 8836
diff changeset
2620 && strlen (result) == strlen (expected) + 1
5efc1d668039 Accomodate for implementations that produce 3 exponent digits in %e and %g.
Bruno Haible <bruno@clisp.org>
parents: 8836
diff changeset
2621 && memcmp (result, expected, strlen (expected) - 2) == 0
5efc1d668039 Accomodate for implementations that produce 3 exponent digits in %e and %g.
Bruno Haible <bruno@clisp.org>
parents: 8836
diff changeset
2622 && result[strlen (expected) - 2] == '0'
5efc1d668039 Accomodate for implementations that produce 3 exponent digits in %e and %g.
Bruno Haible <bruno@clisp.org>
parents: 8836
diff changeset
2623 && strcmp (result + strlen (expected) - 1,
5efc1d668039 Accomodate for implementations that produce 3 exponent digits in %e and %g.
Bruno Haible <bruno@clisp.org>
parents: 8836
diff changeset
2624 expected + strlen (expected) - 2)
5efc1d668039 Accomodate for implementations that produce 3 exponent digits in %e and %g.
Bruno Haible <bruno@clisp.org>
parents: 8836
diff changeset
2625 == 0));
8836
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2626 ASSERT (length == strlen (result));
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2627 free (result);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2628 }
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2629 }
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2630
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2631 { /* A negative number. */
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2632 size_t length;
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2633 char *result =
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2634 my_asnprintf (NULL, &length, "%g %d", -0.03125, 33, 44, 55);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2635 ASSERT (result != NULL);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2636 ASSERT (strcmp (result, "-0.03125 33") == 0);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2637 ASSERT (length == strlen (result));
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2638 free (result);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2639 }
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2640
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2641 { /* Positive zero. */
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2642 size_t length;
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2643 char *result =
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2644 my_asnprintf (NULL, &length, "%g %d", 0.0, 33, 44, 55);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2645 ASSERT (result != NULL);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2646 ASSERT (strcmp (result, "0 33") == 0);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2647 ASSERT (length == strlen (result));
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2648 free (result);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2649 }
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2650
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2651 { /* Negative zero. */
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2652 size_t length;
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2653 char *result =
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2654 my_asnprintf (NULL, &length, "%g %d", -0.0, 33, 44, 55);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2655 ASSERT (result != NULL);
8852
df0b5e8ea770 Avoid test failures on platforms where -0.0 and 0.0 are identical.
Bruno Haible <bruno@clisp.org>
parents: 8850
diff changeset
2656 if (have_minus_zero ())
df0b5e8ea770 Avoid test failures on platforms where -0.0 and 0.0 are identical.
Bruno Haible <bruno@clisp.org>
parents: 8850
diff changeset
2657 ASSERT (strcmp (result, "-0 33") == 0);
8836
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2658 ASSERT (length == strlen (result));
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2659 free (result);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2660 }
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2661
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2662 { /* Positive infinity. */
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2663 size_t length;
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2664 char *result =
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2665 my_asnprintf (NULL, &length, "%g %d", 1.0 / 0.0, 33, 44, 55);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2666 ASSERT (result != NULL);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2667 ASSERT (strcmp (result, "inf 33") == 0
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2668 || strcmp (result, "infinity 33") == 0);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2669 ASSERT (length == strlen (result));
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2670 free (result);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2671 }
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2672
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2673 { /* Negative infinity. */
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2674 size_t length;
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2675 char *result =
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2676 my_asnprintf (NULL, &length, "%g %d", -1.0 / 0.0, 33, 44, 55);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2677 ASSERT (result != NULL);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2678 ASSERT (strcmp (result, "-inf 33") == 0
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2679 || strcmp (result, "-infinity 33") == 0);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2680 ASSERT (length == strlen (result));
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2681 free (result);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2682 }
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2683
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2684 { /* NaN. */
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2685 size_t length;
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2686 char *result =
9854
baba3b346ab2 Use macros NaNf, NaNd, NaNl instead of NAN.
Bruno Haible <bruno@clisp.org>
parents: 9850
diff changeset
2687 my_asnprintf (NULL, &length, "%g %d", NaNd (), 33, 44, 55);
8836
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2688 ASSERT (result != NULL);
8850
d1fe16dfbfee Avoid test failures on IRIX 6.5.
Bruno Haible <bruno@clisp.org>
parents: 8839
diff changeset
2689 ASSERT (strlen (result) >= 3 + 3
8865
9e203d8ade65 Stricter check for printf result for NaN arguments.
Bruno Haible <bruno@clisp.org>
parents: 8857
diff changeset
2690 && strisnan (result, 0, strlen (result) - 3, 0)
8850
d1fe16dfbfee Avoid test failures on IRIX 6.5.
Bruno Haible <bruno@clisp.org>
parents: 8839
diff changeset
2691 && strcmp (result + strlen (result) - 3, " 33") == 0);
8836
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2692 ASSERT (length == strlen (result));
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2693 free (result);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2694 }
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2695
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2696 { /* Width. */
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2697 size_t length;
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2698 char *result =
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2699 my_asnprintf (NULL, &length, "%10g %d", 1.75, 33, 44, 55);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2700 ASSERT (result != NULL);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2701 ASSERT (strcmp (result, " 1.75 33") == 0);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2702 ASSERT (length == strlen (result));
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2703 free (result);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2704 }
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2705
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2706 { /* FLAG_LEFT. */
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2707 size_t length;
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2708 char *result =
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2709 my_asnprintf (NULL, &length, "%-10g %d", 1.75, 33, 44, 55);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2710 ASSERT (result != NULL);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2711 ASSERT (strcmp (result, "1.75 33") == 0);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2712 ASSERT (length == strlen (result));
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2713 free (result);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2714 }
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2715
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2716 { /* FLAG_SHOWSIGN. */
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2717 size_t length;
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2718 char *result =
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2719 my_asnprintf (NULL, &length, "%+g %d", 1.75, 33, 44, 55);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2720 ASSERT (result != NULL);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2721 ASSERT (strcmp (result, "+1.75 33") == 0);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2722 ASSERT (length == strlen (result));
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2723 free (result);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2724 }
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2725
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2726 { /* FLAG_SPACE. */
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2727 size_t length;
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2728 char *result =
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2729 my_asnprintf (NULL, &length, "% g %d", 1.75, 33, 44, 55);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2730 ASSERT (result != NULL);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2731 ASSERT (strcmp (result, " 1.75 33") == 0);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2732 ASSERT (length == strlen (result));
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2733 free (result);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2734 }
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2735
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2736 { /* FLAG_ALT. */
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2737 size_t length;
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2738 char *result =
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2739 my_asnprintf (NULL, &length, "%#g %d", 1.75, 33, 44, 55);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2740 ASSERT (result != NULL);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2741 ASSERT (strcmp (result, "1.75000 33") == 0);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2742 ASSERT (length == strlen (result));
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2743 free (result);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2744 }
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2745
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2746 { /* FLAG_ALT. */
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2747 size_t length;
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2748 char *result =
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2749 my_asnprintf (NULL, &length, "%#.g %d", 1.75, 33, 44, 55);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2750 ASSERT (result != NULL);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2751 ASSERT (strcmp (result, "2. 33") == 0);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2752 ASSERT (length == strlen (result));
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2753 free (result);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2754 }
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2755
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2756 { /* FLAG_ALT. */
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2757 size_t length;
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2758 char *result =
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2759 my_asnprintf (NULL, &length, "%#.g %d", 9.75, 33, 44, 55);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2760 ASSERT (result != NULL);
8839
5efc1d668039 Accomodate for implementations that produce 3 exponent digits in %e and %g.
Bruno Haible <bruno@clisp.org>
parents: 8836
diff changeset
2761 ASSERT (strcmp (result, "1.e+01 33") == 0
5efc1d668039 Accomodate for implementations that produce 3 exponent digits in %e and %g.
Bruno Haible <bruno@clisp.org>
parents: 8836
diff changeset
2762 || strcmp (result, "1.e+001 33") == 0);
8836
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2763 ASSERT (length == strlen (result));
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2764 free (result);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2765 }
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2766
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2767 { /* FLAG_ZERO with finite number. */
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2768 size_t length;
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2769 char *result =
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2770 my_asnprintf (NULL, &length, "%010g %d", 1234.0, 33, 44, 55);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2771 ASSERT (result != NULL);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2772 ASSERT (strcmp (result, "0000001234 33") == 0);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2773 ASSERT (length == strlen (result));
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2774 free (result);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2775 }
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2776
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2777 { /* FLAG_ZERO with infinite number. */
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2778 size_t length;
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2779 char *result =
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2780 my_asnprintf (NULL, &length, "%015g %d", -1.0 / 0.0, 33, 44, 55);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2781 ASSERT (result != NULL);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2782 ASSERT (strcmp (result, " -inf 33") == 0
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2783 || strcmp (result, " -infinity 33") == 0);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2784 ASSERT (length == strlen (result));
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2785 free (result);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2786 }
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2787
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2788 { /* FLAG_ZERO with NaN. */
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2789 size_t length;
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2790 char *result =
9854
baba3b346ab2 Use macros NaNf, NaNd, NaNl instead of NAN.
Bruno Haible <bruno@clisp.org>
parents: 9850
diff changeset
2791 my_asnprintf (NULL, &length, "%050g %d", NaNd (), 33, 44, 55);
8836
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2792 ASSERT (result != NULL);
8870
4e1f2ea486b4 Allow for a longer printed representation of NaN.
Bruno Haible <bruno@clisp.org>
parents: 8865
diff changeset
2793 ASSERT (strlen (result) == 50 + 3
8865
9e203d8ade65 Stricter check for printf result for NaN arguments.
Bruno Haible <bruno@clisp.org>
parents: 8857
diff changeset
2794 && strisnan (result, strspn (result, " "), strlen (result) - 3, 0)
8850
d1fe16dfbfee Avoid test failures on IRIX 6.5.
Bruno Haible <bruno@clisp.org>
parents: 8839
diff changeset
2795 && strcmp (result + strlen (result) - 3, " 33") == 0);
8836
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2796 ASSERT (length == strlen (result));
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2797 free (result);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2798 }
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2799
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2800 { /* Precision. */
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2801 size_t length;
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2802 char *result =
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2803 my_asnprintf (NULL, &length, "%.g %d", 1234.0, 33, 44, 55);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2804 ASSERT (result != NULL);
8839
5efc1d668039 Accomodate for implementations that produce 3 exponent digits in %e and %g.
Bruno Haible <bruno@clisp.org>
parents: 8836
diff changeset
2805 ASSERT (strcmp (result, "1e+03 33") == 0
5efc1d668039 Accomodate for implementations that produce 3 exponent digits in %e and %g.
Bruno Haible <bruno@clisp.org>
parents: 8836
diff changeset
2806 || strcmp (result, "1e+003 33") == 0);
8836
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2807 ASSERT (length == strlen (result));
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2808 free (result);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2809 }
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2810
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2811 { /* A positive number. */
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2812 size_t length;
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2813 char *result =
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2814 my_asnprintf (NULL, &length, "%Lg %d", 12.75L, 33, 44, 55);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2815 ASSERT (result != NULL);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2816 ASSERT (strcmp (result, "12.75 33") == 0);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2817 ASSERT (length == strlen (result));
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2818 free (result);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2819 }
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2820
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2821 { /* A larger positive number. */
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2822 size_t length;
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2823 char *result =
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2824 my_asnprintf (NULL, &length, "%Lg %d", 1234567.0L, 33, 44, 55);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2825 ASSERT (result != NULL);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2826 ASSERT (strcmp (result, "1.23457e+06 33") == 0);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2827 ASSERT (length == strlen (result));
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2828 free (result);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2829 }
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2830
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2831 { /* Small and large positive numbers. */
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2832 static struct { long double value; const char *string; } data[] =
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2833 {
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2834 { 1.234321234321234e-37L, "1.23432e-37" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2835 { 1.234321234321234e-36L, "1.23432e-36" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2836 { 1.234321234321234e-35L, "1.23432e-35" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2837 { 1.234321234321234e-34L, "1.23432e-34" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2838 { 1.234321234321234e-33L, "1.23432e-33" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2839 { 1.234321234321234e-32L, "1.23432e-32" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2840 { 1.234321234321234e-31L, "1.23432e-31" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2841 { 1.234321234321234e-30L, "1.23432e-30" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2842 { 1.234321234321234e-29L, "1.23432e-29" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2843 { 1.234321234321234e-28L, "1.23432e-28" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2844 { 1.234321234321234e-27L, "1.23432e-27" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2845 { 1.234321234321234e-26L, "1.23432e-26" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2846 { 1.234321234321234e-25L, "1.23432e-25" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2847 { 1.234321234321234e-24L, "1.23432e-24" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2848 { 1.234321234321234e-23L, "1.23432e-23" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2849 { 1.234321234321234e-22L, "1.23432e-22" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2850 { 1.234321234321234e-21L, "1.23432e-21" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2851 { 1.234321234321234e-20L, "1.23432e-20" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2852 { 1.234321234321234e-19L, "1.23432e-19" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2853 { 1.234321234321234e-18L, "1.23432e-18" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2854 { 1.234321234321234e-17L, "1.23432e-17" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2855 { 1.234321234321234e-16L, "1.23432e-16" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2856 { 1.234321234321234e-15L, "1.23432e-15" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2857 { 1.234321234321234e-14L, "1.23432e-14" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2858 { 1.234321234321234e-13L, "1.23432e-13" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2859 { 1.234321234321234e-12L, "1.23432e-12" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2860 { 1.234321234321234e-11L, "1.23432e-11" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2861 { 1.234321234321234e-10L, "1.23432e-10" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2862 { 1.234321234321234e-9L, "1.23432e-09" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2863 { 1.234321234321234e-8L, "1.23432e-08" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2864 { 1.234321234321234e-7L, "1.23432e-07" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2865 { 1.234321234321234e-6L, "1.23432e-06" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2866 { 1.234321234321234e-5L, "1.23432e-05" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2867 { 1.234321234321234e-4L, "0.000123432" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2868 { 1.234321234321234e-3L, "0.00123432" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2869 { 1.234321234321234e-2L, "0.0123432" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2870 { 1.234321234321234e-1L, "0.123432" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2871 { 1.234321234321234L, "1.23432" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2872 { 1.234321234321234e1L, "12.3432" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2873 { 1.234321234321234e2L, "123.432" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2874 { 1.234321234321234e3L, "1234.32" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2875 { 1.234321234321234e4L, "12343.2" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2876 { 1.234321234321234e5L, "123432" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2877 { 1.234321234321234e6L, "1.23432e+06" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2878 { 1.234321234321234e7L, "1.23432e+07" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2879 { 1.234321234321234e8L, "1.23432e+08" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2880 { 1.234321234321234e9L, "1.23432e+09" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2881 { 1.234321234321234e10L, "1.23432e+10" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2882 { 1.234321234321234e11L, "1.23432e+11" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2883 { 1.234321234321234e12L, "1.23432e+12" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2884 { 1.234321234321234e13L, "1.23432e+13" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2885 { 1.234321234321234e14L, "1.23432e+14" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2886 { 1.234321234321234e15L, "1.23432e+15" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2887 { 1.234321234321234e16L, "1.23432e+16" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2888 { 1.234321234321234e17L, "1.23432e+17" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2889 { 1.234321234321234e18L, "1.23432e+18" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2890 { 1.234321234321234e19L, "1.23432e+19" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2891 { 1.234321234321234e20L, "1.23432e+20" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2892 { 1.234321234321234e21L, "1.23432e+21" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2893 { 1.234321234321234e22L, "1.23432e+22" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2894 { 1.234321234321234e23L, "1.23432e+23" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2895 { 1.234321234321234e24L, "1.23432e+24" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2896 { 1.234321234321234e25L, "1.23432e+25" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2897 { 1.234321234321234e26L, "1.23432e+26" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2898 { 1.234321234321234e27L, "1.23432e+27" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2899 { 1.234321234321234e28L, "1.23432e+28" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2900 { 1.234321234321234e29L, "1.23432e+29" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2901 { 1.234321234321234e30L, "1.23432e+30" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2902 { 1.234321234321234e31L, "1.23432e+31" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2903 { 1.234321234321234e32L, "1.23432e+32" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2904 { 1.234321234321234e33L, "1.23432e+33" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2905 { 1.234321234321234e34L, "1.23432e+34" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2906 { 1.234321234321234e35L, "1.23432e+35" },
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2907 { 1.234321234321234e36L, "1.23432e+36" }
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2908 };
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2909 size_t k;
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2910 for (k = 0; k < SIZEOF (data); k++)
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2911 {
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2912 size_t length;
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2913 char *result =
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2914 my_asnprintf (NULL, &length, "%Lg", data[k].value);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2915 ASSERT (result != NULL);
8839
5efc1d668039 Accomodate for implementations that produce 3 exponent digits in %e and %g.
Bruno Haible <bruno@clisp.org>
parents: 8836
diff changeset
2916 ASSERT (strcmp (result, data[k].string) == 0);
8836
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2917 ASSERT (length == strlen (result));
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2918 free (result);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2919 }
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2920 }
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2921
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2922 { /* A negative number. */
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2923 size_t length;
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2924 char *result =
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2925 my_asnprintf (NULL, &length, "%Lg %d", -0.03125L, 33, 44, 55);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2926 ASSERT (result != NULL);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2927 ASSERT (strcmp (result, "-0.03125 33") == 0);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2928 ASSERT (length == strlen (result));
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2929 free (result);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2930 }
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2931
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2932 { /* Positive zero. */
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2933 size_t length;
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2934 char *result =
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2935 my_asnprintf (NULL, &length, "%Lg %d", 0.0L, 33, 44, 55);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2936 ASSERT (result != NULL);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2937 ASSERT (strcmp (result, "0 33") == 0);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2938 ASSERT (length == strlen (result));
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2939 free (result);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2940 }
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2941
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2942 { /* Negative zero. */
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2943 size_t length;
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2944 char *result =
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2945 my_asnprintf (NULL, &length, "%Lg %d", -0.0L, 33, 44, 55);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2946 ASSERT (result != NULL);
8852
df0b5e8ea770 Avoid test failures on platforms where -0.0 and 0.0 are identical.
Bruno Haible <bruno@clisp.org>
parents: 8850
diff changeset
2947 if (have_minus_zero ())
df0b5e8ea770 Avoid test failures on platforms where -0.0 and 0.0 are identical.
Bruno Haible <bruno@clisp.org>
parents: 8850
diff changeset
2948 ASSERT (strcmp (result, "-0 33") == 0);
8836
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2949 ASSERT (length == strlen (result));
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2950 free (result);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2951 }
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2952
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2953 { /* Positive infinity. */
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2954 size_t length;
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2955 char *result =
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2956 my_asnprintf (NULL, &length, "%Lg %d", 1.0L / 0.0L, 33, 44, 55);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2957 ASSERT (result != NULL);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2958 ASSERT (strcmp (result, "inf 33") == 0
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2959 || strcmp (result, "infinity 33") == 0);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2960 ASSERT (length == strlen (result));
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2961 free (result);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2962 }
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2963
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2964 { /* Negative infinity. */
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2965 size_t length;
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2966 char *result =
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2967 my_asnprintf (NULL, &length, "%Lg %d", -1.0L / 0.0L, 33, 44, 55);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2968 ASSERT (result != NULL);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2969 ASSERT (strcmp (result, "-inf 33") == 0
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2970 || strcmp (result, "-infinity 33") == 0);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2971 ASSERT (length == strlen (result));
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2972 free (result);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2973 }
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2974
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2975 { /* NaN. */
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2976 size_t length;
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2977 char *result =
9854
baba3b346ab2 Use macros NaNf, NaNd, NaNl instead of NAN.
Bruno Haible <bruno@clisp.org>
parents: 9850
diff changeset
2978 my_asnprintf (NULL, &length, "%Lg %d", NaNl (), 33, 44, 55);
8836
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2979 ASSERT (result != NULL);
8850
d1fe16dfbfee Avoid test failures on IRIX 6.5.
Bruno Haible <bruno@clisp.org>
parents: 8839
diff changeset
2980 ASSERT (strlen (result) >= 3 + 3
8865
9e203d8ade65 Stricter check for printf result for NaN arguments.
Bruno Haible <bruno@clisp.org>
parents: 8857
diff changeset
2981 && strisnan (result, 0, strlen (result) - 3, 0)
8850
d1fe16dfbfee Avoid test failures on IRIX 6.5.
Bruno Haible <bruno@clisp.org>
parents: 8839
diff changeset
2982 && strcmp (result + strlen (result) - 3, " 33") == 0);
8836
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2983 ASSERT (length == strlen (result));
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2984 free (result);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
2985 }
8919
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2986 #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_))
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2987 { /* Quiet NaN. */
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2988 static union { unsigned int word[4]; long double value; } x =
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2989 { LDBL80_WORDS (0xFFFF, 0xC3333333, 0x00000000) };
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2990 size_t length;
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2991 char *result =
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2992 my_asnprintf (NULL, &length, "%Lg %d", x.value, 33, 44, 55);
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2993 ASSERT (result != NULL);
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2994 ASSERT (strlen (result) >= 3 + 3
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2995 && strisnan (result, 0, strlen (result) - 3, 0)
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2996 && strcmp (result + strlen (result) - 3, " 33") == 0);
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2997 ASSERT (length == strlen (result));
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2998 free (result);
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
2999 }
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
3000 {
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
3001 /* Signalling NaN. */
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
3002 static union { unsigned int word[4]; long double value; } x =
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
3003 { LDBL80_WORDS (0xFFFF, 0x83333333, 0x00000000) };
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
3004 size_t length;
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
3005 char *result =
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
3006 my_asnprintf (NULL, &length, "%Lg %d", x.value, 33, 44, 55);
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
3007 ASSERT (result != NULL);
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
3008 ASSERT (strlen (result) >= 3 + 3
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
3009 && strisnan (result, 0, strlen (result) - 3, 0)
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
3010 && strcmp (result + strlen (result) - 3, " 33") == 0);
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
3011 ASSERT (length == strlen (result));
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
3012 free (result);
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
3013 }
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
3014 /* The isnanl function should recognize Pseudo-NaNs, Pseudo-Infinities,
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
3015 Pseudo-Zeroes, Unnormalized Numbers, and Pseudo-Denormals, as defined in
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
3016 Intel IA-64 Architecture Software Developer's Manual, Volume 1:
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
3017 Application Architecture.
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
3018 Table 5-2 "Floating-Point Register Encodings"
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
3019 Figure 5-6 "Memory to Floating-Point Register Data Translation"
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
3020 */
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
3021 { /* Pseudo-NaN. */
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
3022 static union { unsigned int word[4]; long double value; } x =
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
3023 { LDBL80_WORDS (0xFFFF, 0x40000001, 0x00000000) };
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
3024 size_t length;
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
3025 char *result =
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
3026 my_asnprintf (NULL, &length, "%Lg %d", x.value, 33, 44, 55);
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
3027 ASSERT (result != NULL);
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
3028 ASSERT (strlen (result) >= 3 + 3
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
3029 && strisnan (result, 0, strlen (result) - 3, 0)
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
3030 && strcmp (result + strlen (result) - 3, " 33") == 0);
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
3031 ASSERT (length == strlen (result));
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
3032 free (result);
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
3033 }
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
3034 { /* Pseudo-Infinity. */
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
3035 static union { unsigned int word[4]; long double value; } x =
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
3036 { LDBL80_WORDS (0xFFFF, 0x00000000, 0x00000000) };
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
3037 size_t length;
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
3038 char *result =
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
3039 my_asnprintf (NULL, &length, "%Lg %d", x.value, 33, 44, 55);
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
3040 ASSERT (result != NULL);
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
3041 ASSERT (strlen (result) >= 3 + 3
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
3042 && strisnan (result, 0, strlen (result) - 3, 0)
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
3043 && strcmp (result + strlen (result) - 3, " 33") == 0);
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
3044 ASSERT (length == strlen (result));
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
3045 free (result);
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
3046 }
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
3047 { /* Pseudo-Zero. */
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
3048 static union { unsigned int word[4]; long double value; } x =
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
3049 { LDBL80_WORDS (0x4004, 0x00000000, 0x00000000) };
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
3050 size_t length;
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
3051 char *result =
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
3052 my_asnprintf (NULL, &length, "%Lg %d", x.value, 33, 44, 55);
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
3053 ASSERT (result != NULL);
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
3054 ASSERT (strlen (result) >= 3 + 3
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
3055 && strisnan (result, 0, strlen (result) - 3, 0)
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
3056 && strcmp (result + strlen (result) - 3, " 33") == 0);
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
3057 ASSERT (length == strlen (result));
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
3058 free (result);
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
3059 }
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
3060 { /* Unnormalized number. */
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
3061 static union { unsigned int word[4]; long double value; } x =
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
3062 { LDBL80_WORDS (0x4000, 0x63333333, 0x00000000) };
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
3063 size_t length;
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
3064 char *result =
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
3065 my_asnprintf (NULL, &length, "%Lg %d", x.value, 33, 44, 55);
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
3066 ASSERT (result != NULL);
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
3067 ASSERT (strlen (result) >= 3 + 3
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
3068 && strisnan (result, 0, strlen (result) - 3, 0)
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
3069 && strcmp (result + strlen (result) - 3, " 33") == 0);
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
3070 ASSERT (length == strlen (result));
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
3071 free (result);
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
3072 }
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
3073 { /* Pseudo-Denormal. */
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
3074 static union { unsigned int word[4]; long double value; } x =
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
3075 { LDBL80_WORDS (0x0000, 0x83333333, 0x00000000) };
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
3076 size_t length;
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
3077 char *result =
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
3078 my_asnprintf (NULL, &length, "%Lg %d", x.value, 33, 44, 55);
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
3079 ASSERT (result != NULL);
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
3080 ASSERT (strlen (result) >= 3 + 3
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
3081 && strisnan (result, 0, strlen (result) - 3, 0)
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
3082 && strcmp (result + strlen (result) - 3, " 33") == 0);
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
3083 ASSERT (length == strlen (result));
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
3084 free (result);
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
3085 }
42e2847583f9 Fix *printf so that it recognizes non-IEEE numbers on i386, x86_64, ia64.
Bruno Haible <bruno@clisp.org>
parents: 8891
diff changeset
3086 #endif
8836
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
3087
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
3088 { /* Width. */
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
3089 size_t length;
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
3090 char *result =
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
3091 my_asnprintf (NULL, &length, "%10Lg %d", 1.75L, 33, 44, 55);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
3092 ASSERT (result != NULL);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
3093 ASSERT (strcmp (result, " 1.75 33") == 0);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
3094 ASSERT (length == strlen (result));
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
3095 free (result);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
3096 }
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
3097
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
3098 { /* FLAG_LEFT. */
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
3099 size_t length;
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
3100 char *result =
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
3101 my_asnprintf (NULL, &length, "%-10Lg %d", 1.75L, 33, 44, 55);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
3102 ASSERT (result != NULL);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
3103 ASSERT (strcmp (result, "1.75 33") == 0);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
3104 ASSERT (length == strlen (result));
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
3105 free (result);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
3106 }
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
3107
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
3108 { /* FLAG_SHOWSIGN. */
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
3109 size_t length;
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
3110 char *result =
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
3111 my_asnprintf (NULL, &length, "%+Lg %d", 1.75L, 33, 44, 55);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
3112 ASSERT (result != NULL);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
3113 ASSERT (strcmp (result, "+1.75 33") == 0);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
3114 ASSERT (length == strlen (result));
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
3115 free (result);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
3116 }
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
3117
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
3118 { /* FLAG_SPACE. */
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
3119 size_t length;
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
3120 char *result =
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
3121 my_asnprintf (NULL, &length, "% Lg %d", 1.75L, 33, 44, 55);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
3122 ASSERT (result != NULL);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
3123 ASSERT (strcmp (result, " 1.75 33") == 0);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
3124 ASSERT (length == strlen (result));
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
3125 free (result);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
3126 }
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
3127
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
3128 { /* FLAG_ALT. */
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
3129 size_t length;
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
3130 char *result =
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
3131 my_asnprintf (NULL, &length, "%#Lg %d", 1.75L, 33, 44, 55);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
3132 ASSERT (result != NULL);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
3133 ASSERT (strcmp (result, "1.75000 33") == 0);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
3134 ASSERT (length == strlen (result));
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
3135 free (result);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
3136 }
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
3137
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
3138 { /* FLAG_ALT. */
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
3139 size_t length;
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
3140 char *result =
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
3141 my_asnprintf (NULL, &length, "%#.Lg %d", 1.75L, 33, 44, 55);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
3142 ASSERT (result != NULL);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
3143 ASSERT (strcmp (result, "2. 33") == 0);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
3144 ASSERT (length == strlen (result));
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
3145 free (result);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
3146 }
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
3147
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
3148 { /* FLAG_ALT. */
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
3149 size_t length;
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
3150 char *result =
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
3151 my_asnprintf (NULL, &length, "%#.Lg %d", 9.75L, 33, 44, 55);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
3152 ASSERT (result != NULL);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
3153 ASSERT (strcmp (result, "1.e+01 33") == 0);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
3154 ASSERT (length == strlen (result));
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
3155 free (result);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
3156 }
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
3157
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
3158 { /* FLAG_ZERO with finite number. */
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
3159 size_t length;
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
3160 char *result =
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
3161 my_asnprintf (NULL, &length, "%010Lg %d", 1234.0L, 33, 44, 55);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
3162 ASSERT (result != NULL);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
3163 ASSERT (strcmp (result, "0000001234 33") == 0);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
3164 ASSERT (length == strlen (result));
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
3165 free (result);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
3166 }
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
3167
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
3168 { /* FLAG_ZERO with infinite number. */
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
3169 size_t length;
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
3170 char *result =
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
3171 my_asnprintf (NULL, &length, "%015Lg %d", -1.0L / 0.0L, 33, 44, 55);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
3172 ASSERT (result != NULL);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
3173 ASSERT (strcmp (result, " -inf 33") == 0
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
3174 || strcmp (result, " -infinity 33") == 0);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
3175 ASSERT (length == strlen (result));
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
3176 free (result);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
3177 }
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
3178
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
3179 { /* FLAG_ZERO with NaN. */
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
3180 size_t length;
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
3181 char *result =
9854
baba3b346ab2 Use macros NaNf, NaNd, NaNl instead of NAN.
Bruno Haible <bruno@clisp.org>
parents: 9850
diff changeset
3182 my_asnprintf (NULL, &length, "%050Lg %d", NaNl (), 33, 44, 55);
8836
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
3183 ASSERT (result != NULL);
8870
4e1f2ea486b4 Allow for a longer printed representation of NaN.
Bruno Haible <bruno@clisp.org>
parents: 8865
diff changeset
3184 ASSERT (strlen (result) == 50 + 3
8865
9e203d8ade65 Stricter check for printf result for NaN arguments.
Bruno Haible <bruno@clisp.org>
parents: 8857
diff changeset
3185 && strisnan (result, strspn (result, " "), strlen (result) - 3, 0)
8850
d1fe16dfbfee Avoid test failures on IRIX 6.5.
Bruno Haible <bruno@clisp.org>
parents: 8839
diff changeset
3186 && strcmp (result + strlen (result) - 3, " 33") == 0);
8836
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
3187 ASSERT (length == strlen (result));
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
3188 free (result);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
3189 }
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
3190
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
3191 { /* Precision. */
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
3192 size_t length;
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
3193 char *result =
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
3194 my_asnprintf (NULL, &length, "%.Lg %d", 1234.0L, 33, 44, 55);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
3195 ASSERT (result != NULL);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
3196 ASSERT (strcmp (result, "1e+03 33") == 0);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
3197 ASSERT (length == strlen (result));
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
3198 free (result);
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
3199 }
07084ab003b8 Add tests for %e and %g directives.
Bruno Haible <bruno@clisp.org>
parents: 8834
diff changeset
3200
8336
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
3201 /* Test the support of the %n format directive. */
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
3202
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
3203 {
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
3204 int count = -1;
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
3205 size_t length;
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
3206 char *result =
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
3207 my_asnprintf (NULL, &length, "%d %n", 123, &count, 33, 44, 55);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
3208 ASSERT (result != NULL);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
3209 ASSERT (strcmp (result, "123 ") == 0);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
3210 ASSERT (length == strlen (result));
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
3211 ASSERT (count == 4);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
3212 free (result);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
3213 }
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
3214
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
3215 /* Test the support of the POSIX/XSI format strings with positions. */
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
3216
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
3217 {
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
3218 size_t length;
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
3219 char *result =
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
3220 my_asnprintf (NULL, &length, "%2$d %1$d", 33, 55);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
3221 ASSERT (result != NULL);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
3222 ASSERT (strcmp (result, "55 33") == 0);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
3223 ASSERT (length == strlen (result));
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
3224 free (result);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
3225 }
8803
6c1d98929550 Work around lack of support of grouping flag.
Bruno Haible <bruno@clisp.org>
parents: 8754
diff changeset
3226
6c1d98929550 Work around lack of support of grouping flag.
Bruno Haible <bruno@clisp.org>
parents: 8754
diff changeset
3227 /* Test the support of the grouping flag. */
6c1d98929550 Work around lack of support of grouping flag.
Bruno Haible <bruno@clisp.org>
parents: 8754
diff changeset
3228
6c1d98929550 Work around lack of support of grouping flag.
Bruno Haible <bruno@clisp.org>
parents: 8754
diff changeset
3229 {
6c1d98929550 Work around lack of support of grouping flag.
Bruno Haible <bruno@clisp.org>
parents: 8754
diff changeset
3230 size_t length;
6c1d98929550 Work around lack of support of grouping flag.
Bruno Haible <bruno@clisp.org>
parents: 8754
diff changeset
3231 char *result =
6c1d98929550 Work around lack of support of grouping flag.
Bruno Haible <bruno@clisp.org>
parents: 8754
diff changeset
3232 my_asnprintf (NULL, &length, "%'d %d", 1234567, 99);
6c1d98929550 Work around lack of support of grouping flag.
Bruno Haible <bruno@clisp.org>
parents: 8754
diff changeset
3233 ASSERT (result != NULL);
6c1d98929550 Work around lack of support of grouping flag.
Bruno Haible <bruno@clisp.org>
parents: 8754
diff changeset
3234 ASSERT (result[strlen (result) - 1] == '9');
6c1d98929550 Work around lack of support of grouping flag.
Bruno Haible <bruno@clisp.org>
parents: 8754
diff changeset
3235 ASSERT (length == strlen (result));
6c1d98929550 Work around lack of support of grouping flag.
Bruno Haible <bruno@clisp.org>
parents: 8754
diff changeset
3236 free (result);
6c1d98929550 Work around lack of support of grouping flag.
Bruno Haible <bruno@clisp.org>
parents: 8754
diff changeset
3237 }
9447
6d73d8d1aecb Add tests for large precisions.
Bruno Haible <bruno@clisp.org>
parents: 9309
diff changeset
3238
9674
b69f1141e94f Fix *printf behaviour regarding the left-adjust flag on HP-UX 10.20.
Bruno Haible <bruno@clisp.org>
parents: 9447
diff changeset
3239 /* Test the support of the left-adjust flag. */
b69f1141e94f Fix *printf behaviour regarding the left-adjust flag on HP-UX 10.20.
Bruno Haible <bruno@clisp.org>
parents: 9447
diff changeset
3240
b69f1141e94f Fix *printf behaviour regarding the left-adjust flag on HP-UX 10.20.
Bruno Haible <bruno@clisp.org>
parents: 9447
diff changeset
3241 {
b69f1141e94f Fix *printf behaviour regarding the left-adjust flag on HP-UX 10.20.
Bruno Haible <bruno@clisp.org>
parents: 9447
diff changeset
3242 size_t length;
b69f1141e94f Fix *printf behaviour regarding the left-adjust flag on HP-UX 10.20.
Bruno Haible <bruno@clisp.org>
parents: 9447
diff changeset
3243 char *result =
b69f1141e94f Fix *printf behaviour regarding the left-adjust flag on HP-UX 10.20.
Bruno Haible <bruno@clisp.org>
parents: 9447
diff changeset
3244 my_asnprintf (NULL, &length, "a%*sc", -3, "b");
b69f1141e94f Fix *printf behaviour regarding the left-adjust flag on HP-UX 10.20.
Bruno Haible <bruno@clisp.org>
parents: 9447
diff changeset
3245 ASSERT (result != NULL);
b69f1141e94f Fix *printf behaviour regarding the left-adjust flag on HP-UX 10.20.
Bruno Haible <bruno@clisp.org>
parents: 9447
diff changeset
3246 ASSERT (strcmp (result, "ab c") == 0);
b69f1141e94f Fix *printf behaviour regarding the left-adjust flag on HP-UX 10.20.
Bruno Haible <bruno@clisp.org>
parents: 9447
diff changeset
3247 ASSERT (length == strlen (result));
b69f1141e94f Fix *printf behaviour regarding the left-adjust flag on HP-UX 10.20.
Bruno Haible <bruno@clisp.org>
parents: 9447
diff changeset
3248 free (result);
b69f1141e94f Fix *printf behaviour regarding the left-adjust flag on HP-UX 10.20.
Bruno Haible <bruno@clisp.org>
parents: 9447
diff changeset
3249 }
b69f1141e94f Fix *printf behaviour regarding the left-adjust flag on HP-UX 10.20.
Bruno Haible <bruno@clisp.org>
parents: 9447
diff changeset
3250
b69f1141e94f Fix *printf behaviour regarding the left-adjust flag on HP-UX 10.20.
Bruno Haible <bruno@clisp.org>
parents: 9447
diff changeset
3251 {
b69f1141e94f Fix *printf behaviour regarding the left-adjust flag on HP-UX 10.20.
Bruno Haible <bruno@clisp.org>
parents: 9447
diff changeset
3252 size_t length;
b69f1141e94f Fix *printf behaviour regarding the left-adjust flag on HP-UX 10.20.
Bruno Haible <bruno@clisp.org>
parents: 9447
diff changeset
3253 char *result =
b69f1141e94f Fix *printf behaviour regarding the left-adjust flag on HP-UX 10.20.
Bruno Haible <bruno@clisp.org>
parents: 9447
diff changeset
3254 my_asnprintf (NULL, &length, "a%-*sc", 3, "b");
b69f1141e94f Fix *printf behaviour regarding the left-adjust flag on HP-UX 10.20.
Bruno Haible <bruno@clisp.org>
parents: 9447
diff changeset
3255 ASSERT (result != NULL);
b69f1141e94f Fix *printf behaviour regarding the left-adjust flag on HP-UX 10.20.
Bruno Haible <bruno@clisp.org>
parents: 9447
diff changeset
3256 ASSERT (strcmp (result, "ab c") == 0);
b69f1141e94f Fix *printf behaviour regarding the left-adjust flag on HP-UX 10.20.
Bruno Haible <bruno@clisp.org>
parents: 9447
diff changeset
3257 ASSERT (length == strlen (result));
b69f1141e94f Fix *printf behaviour regarding the left-adjust flag on HP-UX 10.20.
Bruno Haible <bruno@clisp.org>
parents: 9447
diff changeset
3258 free (result);
b69f1141e94f Fix *printf behaviour regarding the left-adjust flag on HP-UX 10.20.
Bruno Haible <bruno@clisp.org>
parents: 9447
diff changeset
3259 }
b69f1141e94f Fix *printf behaviour regarding the left-adjust flag on HP-UX 10.20.
Bruno Haible <bruno@clisp.org>
parents: 9447
diff changeset
3260
b69f1141e94f Fix *printf behaviour regarding the left-adjust flag on HP-UX 10.20.
Bruno Haible <bruno@clisp.org>
parents: 9447
diff changeset
3261 {
b69f1141e94f Fix *printf behaviour regarding the left-adjust flag on HP-UX 10.20.
Bruno Haible <bruno@clisp.org>
parents: 9447
diff changeset
3262 size_t length;
b69f1141e94f Fix *printf behaviour regarding the left-adjust flag on HP-UX 10.20.
Bruno Haible <bruno@clisp.org>
parents: 9447
diff changeset
3263 char *result =
b69f1141e94f Fix *printf behaviour regarding the left-adjust flag on HP-UX 10.20.
Bruno Haible <bruno@clisp.org>
parents: 9447
diff changeset
3264 my_asnprintf (NULL, &length, "a%-*sc", -3, "b");
b69f1141e94f Fix *printf behaviour regarding the left-adjust flag on HP-UX 10.20.
Bruno Haible <bruno@clisp.org>
parents: 9447
diff changeset
3265 ASSERT (result != NULL);
b69f1141e94f Fix *printf behaviour regarding the left-adjust flag on HP-UX 10.20.
Bruno Haible <bruno@clisp.org>
parents: 9447
diff changeset
3266 ASSERT (strcmp (result, "ab c") == 0);
b69f1141e94f Fix *printf behaviour regarding the left-adjust flag on HP-UX 10.20.
Bruno Haible <bruno@clisp.org>
parents: 9447
diff changeset
3267 ASSERT (length == strlen (result));
b69f1141e94f Fix *printf behaviour regarding the left-adjust flag on HP-UX 10.20.
Bruno Haible <bruno@clisp.org>
parents: 9447
diff changeset
3268 free (result);
b69f1141e94f Fix *printf behaviour regarding the left-adjust flag on HP-UX 10.20.
Bruno Haible <bruno@clisp.org>
parents: 9447
diff changeset
3269 }
b69f1141e94f Fix *printf behaviour regarding the left-adjust flag on HP-UX 10.20.
Bruno Haible <bruno@clisp.org>
parents: 9447
diff changeset
3270
9447
6d73d8d1aecb Add tests for large precisions.
Bruno Haible <bruno@clisp.org>
parents: 9309
diff changeset
3271 /* Test the support of large precision. */
6d73d8d1aecb Add tests for large precisions.
Bruno Haible <bruno@clisp.org>
parents: 9309
diff changeset
3272
6d73d8d1aecb Add tests for large precisions.
Bruno Haible <bruno@clisp.org>
parents: 9309
diff changeset
3273 {
6d73d8d1aecb Add tests for large precisions.
Bruno Haible <bruno@clisp.org>
parents: 9309
diff changeset
3274 size_t length;
6d73d8d1aecb Add tests for large precisions.
Bruno Haible <bruno@clisp.org>
parents: 9309
diff changeset
3275 char *result =
6d73d8d1aecb Add tests for large precisions.
Bruno Haible <bruno@clisp.org>
parents: 9309
diff changeset
3276 my_asnprintf (NULL, &length, "%.4000d %d", 1234567, 99);
6d73d8d1aecb Add tests for large precisions.
Bruno Haible <bruno@clisp.org>
parents: 9309
diff changeset
3277 size_t i;
6d73d8d1aecb Add tests for large precisions.
Bruno Haible <bruno@clisp.org>
parents: 9309
diff changeset
3278 ASSERT (result != NULL);
6d73d8d1aecb Add tests for large precisions.
Bruno Haible <bruno@clisp.org>
parents: 9309
diff changeset
3279 for (i = 0; i < 4000 - 7; i++)
6d73d8d1aecb Add tests for large precisions.
Bruno Haible <bruno@clisp.org>
parents: 9309
diff changeset
3280 ASSERT (result[i] == '0');
6d73d8d1aecb Add tests for large precisions.
Bruno Haible <bruno@clisp.org>
parents: 9309
diff changeset
3281 ASSERT (strcmp (result + 4000 - 7, "1234567 99") == 0);
6d73d8d1aecb Add tests for large precisions.
Bruno Haible <bruno@clisp.org>
parents: 9309
diff changeset
3282 ASSERT (length == strlen (result));
6d73d8d1aecb Add tests for large precisions.
Bruno Haible <bruno@clisp.org>
parents: 9309
diff changeset
3283 free (result);
6d73d8d1aecb Add tests for large precisions.
Bruno Haible <bruno@clisp.org>
parents: 9309
diff changeset
3284 }
6d73d8d1aecb Add tests for large precisions.
Bruno Haible <bruno@clisp.org>
parents: 9309
diff changeset
3285
6d73d8d1aecb Add tests for large precisions.
Bruno Haible <bruno@clisp.org>
parents: 9309
diff changeset
3286 {
6d73d8d1aecb Add tests for large precisions.
Bruno Haible <bruno@clisp.org>
parents: 9309
diff changeset
3287 size_t length;
6d73d8d1aecb Add tests for large precisions.
Bruno Haible <bruno@clisp.org>
parents: 9309
diff changeset
3288 char *result =
6d73d8d1aecb Add tests for large precisions.
Bruno Haible <bruno@clisp.org>
parents: 9309
diff changeset
3289 my_asnprintf (NULL, &length, "%.4000d %d", -1234567, 99);
6d73d8d1aecb Add tests for large precisions.
Bruno Haible <bruno@clisp.org>
parents: 9309
diff changeset
3290 size_t i;
6d73d8d1aecb Add tests for large precisions.
Bruno Haible <bruno@clisp.org>
parents: 9309
diff changeset
3291 ASSERT (result != NULL);
6d73d8d1aecb Add tests for large precisions.
Bruno Haible <bruno@clisp.org>
parents: 9309
diff changeset
3292 ASSERT (result[0] == '-');
6d73d8d1aecb Add tests for large precisions.
Bruno Haible <bruno@clisp.org>
parents: 9309
diff changeset
3293 for (i = 0; i < 4000 - 7; i++)
6d73d8d1aecb Add tests for large precisions.
Bruno Haible <bruno@clisp.org>
parents: 9309
diff changeset
3294 ASSERT (result[1 + i] == '0');
6d73d8d1aecb Add tests for large precisions.
Bruno Haible <bruno@clisp.org>
parents: 9309
diff changeset
3295 ASSERT (strcmp (result + 1 + 4000 - 7, "1234567 99") == 0);
6d73d8d1aecb Add tests for large precisions.
Bruno Haible <bruno@clisp.org>
parents: 9309
diff changeset
3296 ASSERT (length == strlen (result));
6d73d8d1aecb Add tests for large precisions.
Bruno Haible <bruno@clisp.org>
parents: 9309
diff changeset
3297 free (result);
6d73d8d1aecb Add tests for large precisions.
Bruno Haible <bruno@clisp.org>
parents: 9309
diff changeset
3298 }
6d73d8d1aecb Add tests for large precisions.
Bruno Haible <bruno@clisp.org>
parents: 9309
diff changeset
3299
6d73d8d1aecb Add tests for large precisions.
Bruno Haible <bruno@clisp.org>
parents: 9309
diff changeset
3300 {
6d73d8d1aecb Add tests for large precisions.
Bruno Haible <bruno@clisp.org>
parents: 9309
diff changeset
3301 size_t length;
6d73d8d1aecb Add tests for large precisions.
Bruno Haible <bruno@clisp.org>
parents: 9309
diff changeset
3302 char *result =
6d73d8d1aecb Add tests for large precisions.
Bruno Haible <bruno@clisp.org>
parents: 9309
diff changeset
3303 my_asnprintf (NULL, &length, "%.4000u %d", 1234567, 99);
6d73d8d1aecb Add tests for large precisions.
Bruno Haible <bruno@clisp.org>
parents: 9309
diff changeset
3304 size_t i;
6d73d8d1aecb Add tests for large precisions.
Bruno Haible <bruno@clisp.org>
parents: 9309
diff changeset
3305 ASSERT (result != NULL);
6d73d8d1aecb Add tests for large precisions.
Bruno Haible <bruno@clisp.org>
parents: 9309
diff changeset
3306 for (i = 0; i < 4000 - 7; i++)
6d73d8d1aecb Add tests for large precisions.
Bruno Haible <bruno@clisp.org>
parents: 9309
diff changeset
3307 ASSERT (result[i] == '0');
6d73d8d1aecb Add tests for large precisions.
Bruno Haible <bruno@clisp.org>
parents: 9309
diff changeset
3308 ASSERT (strcmp (result + 4000 - 7, "1234567 99") == 0);
6d73d8d1aecb Add tests for large precisions.
Bruno Haible <bruno@clisp.org>
parents: 9309
diff changeset
3309 ASSERT (length == strlen (result));
6d73d8d1aecb Add tests for large precisions.
Bruno Haible <bruno@clisp.org>
parents: 9309
diff changeset
3310 free (result);
6d73d8d1aecb Add tests for large precisions.
Bruno Haible <bruno@clisp.org>
parents: 9309
diff changeset
3311 }
6d73d8d1aecb Add tests for large precisions.
Bruno Haible <bruno@clisp.org>
parents: 9309
diff changeset
3312
6d73d8d1aecb Add tests for large precisions.
Bruno Haible <bruno@clisp.org>
parents: 9309
diff changeset
3313 {
6d73d8d1aecb Add tests for large precisions.
Bruno Haible <bruno@clisp.org>
parents: 9309
diff changeset
3314 size_t length;
6d73d8d1aecb Add tests for large precisions.
Bruno Haible <bruno@clisp.org>
parents: 9309
diff changeset
3315 char *result =
6d73d8d1aecb Add tests for large precisions.
Bruno Haible <bruno@clisp.org>
parents: 9309
diff changeset
3316 my_asnprintf (NULL, &length, "%.4000o %d", 1234567, 99);
6d73d8d1aecb Add tests for large precisions.
Bruno Haible <bruno@clisp.org>
parents: 9309
diff changeset
3317 size_t i;
6d73d8d1aecb Add tests for large precisions.
Bruno Haible <bruno@clisp.org>
parents: 9309
diff changeset
3318 ASSERT (result != NULL);
6d73d8d1aecb Add tests for large precisions.
Bruno Haible <bruno@clisp.org>
parents: 9309
diff changeset
3319 for (i = 0; i < 4000 - 7; i++)
6d73d8d1aecb Add tests for large precisions.
Bruno Haible <bruno@clisp.org>
parents: 9309
diff changeset
3320 ASSERT (result[i] == '0');
6d73d8d1aecb Add tests for large precisions.
Bruno Haible <bruno@clisp.org>
parents: 9309
diff changeset
3321 ASSERT (strcmp (result + 4000 - 7, "4553207 99") == 0);
6d73d8d1aecb Add tests for large precisions.
Bruno Haible <bruno@clisp.org>
parents: 9309
diff changeset
3322 ASSERT (length == strlen (result));
6d73d8d1aecb Add tests for large precisions.
Bruno Haible <bruno@clisp.org>
parents: 9309
diff changeset
3323 free (result);
6d73d8d1aecb Add tests for large precisions.
Bruno Haible <bruno@clisp.org>
parents: 9309
diff changeset
3324 }
6d73d8d1aecb Add tests for large precisions.
Bruno Haible <bruno@clisp.org>
parents: 9309
diff changeset
3325
6d73d8d1aecb Add tests for large precisions.
Bruno Haible <bruno@clisp.org>
parents: 9309
diff changeset
3326 {
6d73d8d1aecb Add tests for large precisions.
Bruno Haible <bruno@clisp.org>
parents: 9309
diff changeset
3327 size_t length;
6d73d8d1aecb Add tests for large precisions.
Bruno Haible <bruno@clisp.org>
parents: 9309
diff changeset
3328 char *result =
6d73d8d1aecb Add tests for large precisions.
Bruno Haible <bruno@clisp.org>
parents: 9309
diff changeset
3329 my_asnprintf (NULL, &length, "%.4000x %d", 1234567, 99);
6d73d8d1aecb Add tests for large precisions.
Bruno Haible <bruno@clisp.org>
parents: 9309
diff changeset
3330 size_t i;
6d73d8d1aecb Add tests for large precisions.
Bruno Haible <bruno@clisp.org>
parents: 9309
diff changeset
3331 ASSERT (result != NULL);
6d73d8d1aecb Add tests for large precisions.
Bruno Haible <bruno@clisp.org>
parents: 9309
diff changeset
3332 for (i = 0; i < 4000 - 6; i++)
6d73d8d1aecb Add tests for large precisions.
Bruno Haible <bruno@clisp.org>
parents: 9309
diff changeset
3333 ASSERT (result[i] == '0');
6d73d8d1aecb Add tests for large precisions.
Bruno Haible <bruno@clisp.org>
parents: 9309
diff changeset
3334 ASSERT (strcmp (result + 4000 - 6, "12d687 99") == 0);
6d73d8d1aecb Add tests for large precisions.
Bruno Haible <bruno@clisp.org>
parents: 9309
diff changeset
3335 ASSERT (length == strlen (result));
6d73d8d1aecb Add tests for large precisions.
Bruno Haible <bruno@clisp.org>
parents: 9309
diff changeset
3336 free (result);
6d73d8d1aecb Add tests for large precisions.
Bruno Haible <bruno@clisp.org>
parents: 9309
diff changeset
3337 }
6d73d8d1aecb Add tests for large precisions.
Bruno Haible <bruno@clisp.org>
parents: 9309
diff changeset
3338
6d73d8d1aecb Add tests for large precisions.
Bruno Haible <bruno@clisp.org>
parents: 9309
diff changeset
3339 {
6d73d8d1aecb Add tests for large precisions.
Bruno Haible <bruno@clisp.org>
parents: 9309
diff changeset
3340 size_t length;
6d73d8d1aecb Add tests for large precisions.
Bruno Haible <bruno@clisp.org>
parents: 9309
diff changeset
3341 char *result =
6d73d8d1aecb Add tests for large precisions.
Bruno Haible <bruno@clisp.org>
parents: 9309
diff changeset
3342 my_asnprintf (NULL, &length, "%#.4000x %d", 1234567, 99);
6d73d8d1aecb Add tests for large precisions.
Bruno Haible <bruno@clisp.org>
parents: 9309
diff changeset
3343 size_t i;
6d73d8d1aecb Add tests for large precisions.
Bruno Haible <bruno@clisp.org>
parents: 9309
diff changeset
3344 ASSERT (result != NULL);
6d73d8d1aecb Add tests for large precisions.
Bruno Haible <bruno@clisp.org>
parents: 9309
diff changeset
3345 ASSERT (result[0] == '0');
6d73d8d1aecb Add tests for large precisions.
Bruno Haible <bruno@clisp.org>
parents: 9309
diff changeset
3346 ASSERT (result[1] == 'x');
6d73d8d1aecb Add tests for large precisions.
Bruno Haible <bruno@clisp.org>
parents: 9309
diff changeset
3347 for (i = 0; i < 4000 - 6; i++)
6d73d8d1aecb Add tests for large precisions.
Bruno Haible <bruno@clisp.org>
parents: 9309
diff changeset
3348 ASSERT (result[2 + i] == '0');
6d73d8d1aecb Add tests for large precisions.
Bruno Haible <bruno@clisp.org>
parents: 9309
diff changeset
3349 ASSERT (strcmp (result + 2 + 4000 - 6, "12d687 99") == 0);
6d73d8d1aecb Add tests for large precisions.
Bruno Haible <bruno@clisp.org>
parents: 9309
diff changeset
3350 ASSERT (length == strlen (result));
6d73d8d1aecb Add tests for large precisions.
Bruno Haible <bruno@clisp.org>
parents: 9309
diff changeset
3351 free (result);
6d73d8d1aecb Add tests for large precisions.
Bruno Haible <bruno@clisp.org>
parents: 9309
diff changeset
3352 }
6d73d8d1aecb Add tests for large precisions.
Bruno Haible <bruno@clisp.org>
parents: 9309
diff changeset
3353
6d73d8d1aecb Add tests for large precisions.
Bruno Haible <bruno@clisp.org>
parents: 9309
diff changeset
3354 {
6d73d8d1aecb Add tests for large precisions.
Bruno Haible <bruno@clisp.org>
parents: 9309
diff changeset
3355 char input[5000];
6d73d8d1aecb Add tests for large precisions.
Bruno Haible <bruno@clisp.org>
parents: 9309
diff changeset
3356 size_t length;
6d73d8d1aecb Add tests for large precisions.
Bruno Haible <bruno@clisp.org>
parents: 9309
diff changeset
3357 char *result;
6d73d8d1aecb Add tests for large precisions.
Bruno Haible <bruno@clisp.org>
parents: 9309
diff changeset
3358 size_t i;
6d73d8d1aecb Add tests for large precisions.
Bruno Haible <bruno@clisp.org>
parents: 9309
diff changeset
3359
6d73d8d1aecb Add tests for large precisions.
Bruno Haible <bruno@clisp.org>
parents: 9309
diff changeset
3360 for (i = 0; i < sizeof (input) - 1; i++)
6d73d8d1aecb Add tests for large precisions.
Bruno Haible <bruno@clisp.org>
parents: 9309
diff changeset
3361 input[i] = 'a' + ((1000000 / (i + 1)) % 26);
6d73d8d1aecb Add tests for large precisions.
Bruno Haible <bruno@clisp.org>
parents: 9309
diff changeset
3362 input[i] = '\0';
6d73d8d1aecb Add tests for large precisions.
Bruno Haible <bruno@clisp.org>
parents: 9309
diff changeset
3363 result = my_asnprintf (NULL, &length, "%.4000s %d", input, 99);
6d73d8d1aecb Add tests for large precisions.
Bruno Haible <bruno@clisp.org>
parents: 9309
diff changeset
3364 ASSERT (result != NULL);
6d73d8d1aecb Add tests for large precisions.
Bruno Haible <bruno@clisp.org>
parents: 9309
diff changeset
3365 ASSERT (memcmp (result, input, 4000) == 0);
6d73d8d1aecb Add tests for large precisions.
Bruno Haible <bruno@clisp.org>
parents: 9309
diff changeset
3366 ASSERT (strcmp (result + 4000, " 99") == 0);
6d73d8d1aecb Add tests for large precisions.
Bruno Haible <bruno@clisp.org>
parents: 9309
diff changeset
3367 ASSERT (length == strlen (result));
6d73d8d1aecb Add tests for large precisions.
Bruno Haible <bruno@clisp.org>
parents: 9309
diff changeset
3368 free (result);
6d73d8d1aecb Add tests for large precisions.
Bruno Haible <bruno@clisp.org>
parents: 9309
diff changeset
3369 }
8336
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
3370 }
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
3371
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
3372 static char *
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
3373 my_asnprintf (char *resultbuf, size_t *lengthp, const char *format, ...)
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
3374 {
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
3375 va_list args;
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
3376 char *ret;
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
3377
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
3378 va_start (args, format);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
3379 ret = vasnprintf (resultbuf, lengthp, format, args);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
3380 va_end (args);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
3381 return ret;
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
3382 }
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
3383
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
3384 static void
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
3385 test_vasnprintf ()
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
3386 {
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
3387 test_function (my_asnprintf);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
3388 }
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
3389
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
3390 static void
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
3391 test_asnprintf ()
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
3392 {
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
3393 test_function (asnprintf);
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
3394 }
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
3395
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
3396 int
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
3397 main (int argc, char *argv[])
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
3398 {
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
3399 test_vasnprintf ();
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
3400 test_asnprintf ();
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
3401 return 0;
493708637f61 Tests for module 'vasnprintf-posix'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
3402 }