]> git.ipfire.org Git - thirdparty/glibc.git/blame - sysdeps/ieee754/ldbl-128ibm-compat/test-printf-ldbl-compat.c
Update copyright dates with scripts/update-copyrights.
[thirdparty/glibc.git] / sysdeps / ieee754 / ldbl-128ibm-compat / test-printf-ldbl-compat.c
CommitLineData
421a1d34 1/* Test for the long double variants of *printf functions.
d614a753 2 Copyright (C) 2019-2020 Free Software Foundation, Inc.
421a1d34
GG
3 This file is part of the GNU C Library.
4
5 The GNU C Library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Lesser General Public
7 License as published by the Free Software Foundation; either
8 version 2.1 of the License, or (at your option) any later version.
9
10 The GNU C Library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Lesser General Public License for more details.
14
15 You should have received a copy of the GNU Lesser General Public
16 License along with the GNU C Library; if not, see
5d39f37b 17 <https://www.gnu.org/licenses/>. */
421a1d34
GG
18
19#include <stdarg.h>
20#include <stdint.h>
21#include <stdio.h>
22#include <stdlib.h>
23
24#include <support/capture_subprocess.h>
25#include <support/check.h>
26
27static void
28do_test_call_varg (FILE *stream, const char *format, ...)
29{
30 char *buffer = NULL;
31 char string[128];
32 va_list args;
33
34 printf ("%15s", "vasprintf: ");
35 va_start (args, format);
36 vasprintf (&buffer, format, args);
37 va_end (args);
38 if (buffer == NULL)
39 printf ("Error using vasprintf\n");
40 else
41 {
42 printf ("%s", buffer);
43 free (buffer);
44 }
45 printf ("\n");
46
47 printf ("%15s", "vdprintf: ");
48 va_start (args, format);
49 vdprintf (fileno (stream), format, args);
50 va_end (args);
51 printf ("\n");
52
53 printf ("%15s", "vfprintf: ");
54 va_start (args, format);
55 vfprintf (stream, format, args);
56 va_end (args);
57 printf ("\n");
58
59 printf ("%15s", "vprintf: ");
60 va_start (args, format);
61 vprintf (format, args);
62 va_end (args);
63 printf ("\n");
64
65 printf ("%15s", "vsnprintf: ");
66 va_start (args, format);
67 vsnprintf (string, 127, format, args);
68 va_end (args);
69 printf ("%s", string);
70 printf ("\n");
71
72 printf ("%15s", "vsprintf: ");
73 va_start (args, format);
74 vsprintf (string, format, args);
75 va_end (args);
76 printf ("%s", string);
77 printf ("\n");
78}
79
80static void
5bbbd5ae 81do_test_call_rarg (FILE *stream, const char *format, long double ld, double d)
421a1d34
GG
82{
83 char *buffer = NULL;
84 char string[128];
85
86 printf ("%15s", "asprintf: ");
5bbbd5ae 87 asprintf (&buffer, format, ld, d);
421a1d34
GG
88 if (buffer == NULL)
89 printf ("Error using asprintf\n");
90 else
91 {
92 printf ("%s", buffer);
93 free (buffer);
94 }
95 printf ("\n");
96
97 printf ("%15s", "dprintf: ");
5bbbd5ae 98 dprintf (fileno (stream), format, ld, d);
421a1d34
GG
99 printf ("\n");
100
101 printf ("%15s", "fprintf: ");
5bbbd5ae 102 fprintf (stream, format, ld, d);
421a1d34
GG
103 printf ("\n");
104
105 printf ("%15s", "printf: ");
5bbbd5ae 106 printf (format, ld, d);
421a1d34
GG
107 printf ("\n");
108
109 printf ("%15s", "snprintf: ");
5bbbd5ae 110 snprintf (string, 127, format, ld, d);
421a1d34
GG
111 printf ("%s", string);
112 printf ("\n");
113
114 printf ("%15s", "sprintf: ");
5bbbd5ae 115 sprintf (string, format, ld, d);
421a1d34
GG
116 printf ("%s", string);
117 printf ("\n");
118}
119
120static void
121do_test_call (void)
122{
123 long double ld = -1;
5bbbd5ae 124 double d = -1;
421a1d34
GG
125
126 /* Print in decimal notation. */
5bbbd5ae
GG
127 do_test_call_rarg (stdout, "%.10Lf, %.10f", ld, d);
128 do_test_call_varg (stdout, "%.10Lf, %.10f", ld, d);
421a1d34
GG
129
130 /* Print in hexadecimal notation. */
5bbbd5ae
GG
131 do_test_call_rarg (stdout, "%.10La, %.10a", ld, d);
132 do_test_call_varg (stdout, "%.10La, %.10a", ld, d);
c2f959ed
GG
133
134 /* Test positional parameters. */
135 do_test_call_varg (stdout, "%3$Lf, %2$Lf, %1$f",
136 (double) 1, (long double) 2, (long double) 3);
421a1d34
GG
137}
138
139static int
140do_test (void)
141{
142 struct support_capture_subprocess result;
143 result = support_capture_subprocess ((void *) &do_test_call, NULL);
144
145 /* Compare against the expected output. */
146 const char *expected =
5bbbd5ae
GG
147 " asprintf: -1.0000000000, -1.0000000000\n"
148 " dprintf: -1.0000000000, -1.0000000000\n"
149 " fprintf: -1.0000000000, -1.0000000000\n"
150 " printf: -1.0000000000, -1.0000000000\n"
151 " snprintf: -1.0000000000, -1.0000000000\n"
152 " sprintf: -1.0000000000, -1.0000000000\n"
153 " vasprintf: -1.0000000000, -1.0000000000\n"
154 " vdprintf: -1.0000000000, -1.0000000000\n"
155 " vfprintf: -1.0000000000, -1.0000000000\n"
156 " vprintf: -1.0000000000, -1.0000000000\n"
157 " vsnprintf: -1.0000000000, -1.0000000000\n"
158 " vsprintf: -1.0000000000, -1.0000000000\n"
159 " asprintf: -0x1.0000000000p+0, -0x1.0000000000p+0\n"
160 " dprintf: -0x1.0000000000p+0, -0x1.0000000000p+0\n"
161 " fprintf: -0x1.0000000000p+0, -0x1.0000000000p+0\n"
162 " printf: -0x1.0000000000p+0, -0x1.0000000000p+0\n"
163 " snprintf: -0x1.0000000000p+0, -0x1.0000000000p+0\n"
164 " sprintf: -0x1.0000000000p+0, -0x1.0000000000p+0\n"
165 " vasprintf: -0x1.0000000000p+0, -0x1.0000000000p+0\n"
166 " vdprintf: -0x1.0000000000p+0, -0x1.0000000000p+0\n"
167 " vfprintf: -0x1.0000000000p+0, -0x1.0000000000p+0\n"
168 " vprintf: -0x1.0000000000p+0, -0x1.0000000000p+0\n"
169 " vsnprintf: -0x1.0000000000p+0, -0x1.0000000000p+0\n"
c2f959ed
GG
170 " vsprintf: -0x1.0000000000p+0, -0x1.0000000000p+0\n"
171 " vasprintf: 3.000000, 2.000000, 1.000000\n"
172 " vdprintf: 3.000000, 2.000000, 1.000000\n"
173 " vfprintf: 3.000000, 2.000000, 1.000000\n"
174 " vprintf: 3.000000, 2.000000, 1.000000\n"
175 " vsnprintf: 3.000000, 2.000000, 1.000000\n"
176 " vsprintf: 3.000000, 2.000000, 1.000000\n";
421a1d34
GG
177 TEST_COMPARE_STRING (expected, result.out.buffer);
178
179 return 0;
180}
181
182#include <support/test-driver.c>