]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - test/Headers/float.c
Vendor import of clang trunk r351319 (just before the release_80 branch
[FreeBSD/FreeBSD.git] / test / Headers / float.c
1 // RUN: %clang_cc1 -fsyntax-only -verify -std=c89 -ffreestanding %s
2 // RUN: %clang_cc1 -fsyntax-only -verify -std=c99 -ffreestanding %s
3 // RUN: %clang_cc1 -fsyntax-only -verify -std=c11 -ffreestanding %s
4 // expected-no-diagnostics
5
6 /* Basic floating point conformance checks against:
7     - N1570 draft of C11 Std.
8     - N1256 draft of C99 Std.
9     - http://port70.net/~nsz/c/c89/c89-draft.html draft of C89/C90 Std.
10 */
11 /*
12     C11,    5.2.4.2.2p11,   pp. 30
13     C99,    5.2.4.2.2p9,    pp. 25
14     C89,    2.2.4.2 
15 */
16 #include <float.h>
17
18 #ifndef FLT_RADIX
19     #error "Mandatory macro FLT_RADIX is missing."
20 #elif   FLT_RADIX < 2
21     #error "Mandatory macro FLT_RADIX is invalid."
22 #endif
23
24
25 #ifndef FLT_MANT_DIG
26     #error "Mandatory macro FLT_MANT_DIG is missing."
27 #elif   FLT_MANT_DIG < 2
28     #error "Mandatory macro FLT_MANT_DIG is invalid."
29 #endif
30 #ifndef DBL_MANT_DIG
31     #error "Mandatory macro DBL_MANT_DIG is missing."
32 #elif   DBL_MANT_DIG < 2
33     #error "Mandatory macro DBL_MANT_DIG is invalid."
34 #endif
35 #ifndef LDBL_MANT_DIG
36     #error "Mandatory macro LDBL_MANT_DIG is missing."
37 #elif   LDBL_MANT_DIG < 2
38     #error "Mandatory macro LDBL_MANT_DIG is invalid."
39 #endif
40 #if ((FLT_MANT_DIG > DBL_MANT_DIG) || (DBL_MANT_DIG > LDBL_MANT_DIG))
41     #error "Mandatory macros {FLT,DBL,LDBL}_MANT_DIG are invalid."
42 #endif
43
44
45 #if __STDC_VERSION__ >= 201112L || !defined(__STRICT_ANSI__)
46     #ifndef FLT_DECIMAL_DIG
47         #error "Mandatory macro FLT_DECIMAL_DIG is missing."
48     #elif   FLT_DECIMAL_DIG < 6
49         #error "Mandatory macro FLT_DECIMAL_DIG is invalid."
50     #endif
51     #ifndef DBL_DECIMAL_DIG
52         #error "Mandatory macro DBL_DECIMAL_DIG is missing."
53     #elif   DBL_DECIMAL_DIG < 10
54         #error "Mandatory macro DBL_DECIMAL_DIG is invalid."
55     #endif
56     #ifndef LDBL_DECIMAL_DIG
57         #error "Mandatory macro LDBL_DECIMAL_DIG is missing."
58     #elif   LDBL_DECIMAL_DIG < 10
59         #error "Mandatory macro LDBL_DECIMAL_DIG is invalid."
60     #endif
61     #if ((FLT_DECIMAL_DIG > DBL_DECIMAL_DIG) || (DBL_DECIMAL_DIG > LDBL_DECIMAL_DIG))
62         #error "Mandatory macros {FLT,DBL,LDBL}_DECIMAL_DIG are invalid."
63     #endif
64     #ifndef FLT_HAS_SUBNORM
65         #error "Mandatory macro FLT_HAS_SUBNORM is missing."
66     #elif FLT_HAS_SUBNORM != __FLT_HAS_DENORM__
67         #error "Mandatory macro FLT_HAS_SUBNORM is invalid."
68     #endif
69     #ifndef LDBL_HAS_SUBNORM
70         #error "Mandatory macro LDBL_HAS_SUBNORM is missing."
71     #elif LDBL_HAS_SUBNORM != __LDBL_HAS_DENORM__
72         #error "Mandatory macro LDBL_HAS_SUBNORM is invalid."
73     #endif
74     #ifndef DBL_HAS_SUBNORM
75         #error "Mandatory macro DBL_HAS_SUBNORM is missing."
76     #elif DBL_HAS_SUBNORM != __DBL_HAS_DENORM__
77         #error "Mandatory macro DBL_HAS_SUBNORM is invalid."
78     #endif
79 #else
80     #ifdef FLT_DECIMAL_DIG
81         #error "Macro FLT_DECIMAL_DIG should not be defined."
82     #endif
83     #ifdef DBL_DECIMAL_DIG
84         #error "Macro DBL_DECIMAL_DIG should not be defined."
85     #endif
86     #ifdef LDBL_DECIMAL_DIG
87         #error "Macro LDBL_DECIMAL_DIG should not be defined."
88     #endif
89     #ifdef FLT_HAS_SUBNORM
90         #error "Macro FLT_HAS_SUBNORM should not be defined."
91     #endif
92     #ifdef DBL_HAS_SUBNORM
93         #error "Macro DBL_HAS_SUBNORM should not be defined."
94     #endif
95     #ifdef LDBL_HAS_SUBNORM
96         #error "Macro LDBL_HAS_SUBNORM should not be defined."
97     #endif
98 #endif
99
100
101 #if __STDC_VERSION__ >= 199901L || !defined(__STRICT_ANSI__)
102     #ifndef DECIMAL_DIG
103         #error "Mandatory macro DECIMAL_DIG is missing."
104     #elif   DECIMAL_DIG < 10
105         #error "Mandatory macro DECIMAL_DIG is invalid."
106     #endif
107 #else
108     #ifdef DECIMAL_DIG
109         #error "Macro DECIMAL_DIG should not be defined."
110     #endif
111 #endif
112
113
114 #ifndef FLT_DIG
115     #error "Mandatory macro FLT_DIG is missing."
116 #elif   FLT_DIG < 6
117     #error "Mandatory macro FLT_DIG is invalid."
118 #endif
119 #ifndef DBL_DIG
120     #error "Mandatory macro DBL_DIG is missing."
121 #elif   DBL_DIG < 10
122     #error "Mandatory macro DBL_DIG is invalid."
123 #endif
124 #ifndef LDBL_DIG
125     #error "Mandatory macro LDBL_DIG is missing."
126 #elif   LDBL_DIG < 10
127     #error "Mandatory macro LDBL_DIG is invalid."
128 #endif
129 #if ((FLT_DIG > DBL_DIG) || (DBL_DIG > LDBL_DIG))
130     #error "Mandatory macros {FLT,DBL,LDBL}_DIG, are invalid."
131 #endif
132
133
134 #ifndef FLT_MIN_EXP
135     #error "Mandatory macro FLT_MIN_EXP is missing."
136 #elif   FLT_MIN_EXP > -1
137     #error "Mandatory macro FLT_MIN_EXP is invalid."
138 #endif
139 #ifndef DBL_MIN_EXP
140     #error "Mandatory macro DBL_MIN_EXP is missing."
141 #elif   DBL_MIN_EXP > -1
142     #error "Mandatory macro DBL_MIN_EXP is invalid."
143 #endif
144 #ifndef LDBL_MIN_EXP
145     #error "Mandatory macro LDBL_MIN_EXP is missing."
146 #elif   LDBL_MIN_EXP > -1
147     #error "Mandatory macro LDBL_MIN_EXP is invalid."
148 #endif
149
150
151 #ifndef FLT_MIN_10_EXP
152     #error "Mandatory macro FLT_MIN_10_EXP is missing."
153 #elif   FLT_MIN_10_EXP > -37
154     #error "Mandatory macro FLT_MIN_10_EXP is invalid."
155 #endif
156 #ifndef DBL_MIN_10_EXP
157     #error "Mandatory macro DBL_MIN_10_EXP is missing."
158 #elif   DBL_MIN_10_EXP > -37
159     #error "Mandatory macro DBL_MIN_10_EXP is invalid."
160 #endif
161 #ifndef LDBL_MIN_10_EXP
162     #error "Mandatory macro LDBL_MIN_10_EXP is missing."
163 #elif   LDBL_MIN_10_EXP > -37
164     #error "Mandatory macro LDBL_MIN_10_EXP is invalid."
165 #endif
166
167
168 #ifndef FLT_MAX_EXP
169     #error "Mandatory macro FLT_MAX_EXP is missing."
170 #elif   FLT_MAX_EXP < 1
171     #error "Mandatory macro FLT_MAX_EXP is invalid."
172 #endif
173 #ifndef DBL_MAX_EXP
174     #error "Mandatory macro DBL_MAX_EXP is missing."
175 #elif   DBL_MAX_EXP < 1
176     #error "Mandatory macro DBL_MAX_EXP is invalid."
177 #endif
178 #ifndef LDBL_MAX_EXP
179     #error "Mandatory macro LDBL_MAX_EXP is missing."
180 #elif   LDBL_MAX_EXP < 1
181     #error "Mandatory macro LDBL_MAX_EXP is invalid."
182 #endif
183 #if ((FLT_MAX_EXP > DBL_MAX_EXP) || (DBL_MAX_EXP > LDBL_MAX_EXP))
184     #error "Mandatory macros {FLT,DBL,LDBL}_MAX_EXP are invalid."
185 #endif
186
187
188 #ifndef FLT_MAX_10_EXP
189     #error "Mandatory macro FLT_MAX_10_EXP is missing."
190 #elif   FLT_MAX_10_EXP < 37
191     #error "Mandatory macro FLT_MAX_10_EXP is invalid."
192 #endif
193 #ifndef DBL_MAX_10_EXP
194     #error "Mandatory macro DBL_MAX_10_EXP is missing."
195 #elif   DBL_MAX_10_EXP < 37
196     #error "Mandatory macro DBL_MAX_10_EXP is invalid."
197 #endif
198 #ifndef LDBL_MAX_10_EXP
199     #error "Mandatory macro LDBL_MAX_10_EXP is missing."
200 #elif   LDBL_MAX_10_EXP < 37
201     #error "Mandatory macro LDBL_MAX_10_EXP is invalid."
202 #endif
203 #if ((FLT_MAX_10_EXP > DBL_MAX_10_EXP) || (DBL_MAX_10_EXP > LDBL_MAX_10_EXP))
204     #error "Mandatory macros {FLT,DBL,LDBL}_MAX_10_EXP are invalid."
205 #endif
206
207
208 /* Internal consistency checks */
209 _Static_assert(FLT_RADIX == __FLT_RADIX__, "");
210
211 _Static_assert(FLT_MANT_DIG == __FLT_MANT_DIG__, "");
212 _Static_assert(DBL_MANT_DIG == __DBL_MANT_DIG__, "");
213 _Static_assert(LDBL_MANT_DIG == __LDBL_MANT_DIG__, "");
214
215 #if __STDC_VERSION__ >= 201112L || !defined(__STRICT_ANSI__)
216 _Static_assert(FLT_DECIMAL_DIG == __FLT_DECIMAL_DIG__, "");
217 _Static_assert(DBL_DECIMAL_DIG == __DBL_DECIMAL_DIG__, "");
218 _Static_assert(LDBL_DECIMAL_DIG == __LDBL_DECIMAL_DIG__, "");
219 #endif
220
221 #if __STDC_VERSION__ >= 199901L || !defined(__STRICT_ANSI__)
222 _Static_assert(DECIMAL_DIG == __DECIMAL_DIG__, "");
223 #endif
224
225 _Static_assert(FLT_DIG == __FLT_DIG__, "");
226 _Static_assert(DBL_DIG == __DBL_DIG__, "");
227 _Static_assert(LDBL_DIG == __LDBL_DIG__, "");
228
229 _Static_assert(FLT_MIN_EXP == __FLT_MIN_EXP__, "");
230 _Static_assert(DBL_MIN_EXP == __DBL_MIN_EXP__, "");
231 _Static_assert(LDBL_MIN_EXP == __LDBL_MIN_EXP__, "");
232
233 _Static_assert(FLT_MIN_10_EXP == __FLT_MIN_10_EXP__, "");
234 _Static_assert(DBL_MIN_10_EXP == __DBL_MIN_10_EXP__, "");
235 _Static_assert(LDBL_MIN_10_EXP == __LDBL_MIN_10_EXP__, "");
236
237 _Static_assert(FLT_MAX_EXP == __FLT_MAX_EXP__, "");
238 _Static_assert(DBL_MAX_EXP == __DBL_MAX_EXP__, "");
239 _Static_assert(LDBL_MAX_EXP == __LDBL_MAX_EXP__, "");
240
241 _Static_assert(FLT_MAX_10_EXP == __FLT_MAX_10_EXP__, "");
242 _Static_assert(DBL_MAX_10_EXP == __DBL_MAX_10_EXP__, "");
243 _Static_assert(LDBL_MAX_10_EXP == __LDBL_MAX_10_EXP__, "");