Remove finite-math tests
[platform/upstream/glibc.git] / math / bug-nextafter.c
1 #include <fenv.h>
2 #include <math.h>
3 #include <float.h>
4 #include <stdlib.h>
5 #include <stdio.h>
6 #include <math-tests.h>
7
8 #if !defined(FE_OVERFLOW) && !defined(FE_UNDERFLOW)
9 /* If there's no support for the exceptions this test is checking,
10    then just return success and allow the test to be compiled.  */
11 # define fetestexcept(e) 1
12 #endif
13
14 float zero = 0.0;
15 float inf = INFINITY;
16
17 int
18 main (void)
19 {
20   int result = 0;
21
22   float i = INFINITY;
23   float m = FLT_MAX;
24   feclearexcept (FE_ALL_EXCEPT);
25   if (nextafterf (m, i) != i)
26     {
27       puts ("nextafterf+ failed");
28       ++result;
29     }
30   if (EXCEPTION_TESTS (float) && fetestexcept (FE_OVERFLOW) == 0)
31     {
32       puts ("nextafterf+ did not overflow");
33       ++result;
34     }
35   feclearexcept (FE_ALL_EXCEPT);
36   if (nextafterf (-m, -i) != -i)
37     {
38       puts ("nextafterf- failed");
39       ++result;
40     }
41   if (EXCEPTION_TESTS (float) && fetestexcept (FE_OVERFLOW) == 0)
42     {
43       puts ("nextafterf- did not overflow");
44       ++result;
45     }
46
47   i = 0;
48   m = FLT_MIN;
49   feclearexcept (FE_ALL_EXCEPT);
50   i = nextafterf (m, i);
51   if (i < 0 || i >= FLT_MIN)
52     {
53       puts ("nextafterf+ failed");
54       ++result;
55     }
56   if (EXCEPTION_TESTS (float) && fetestexcept (FE_UNDERFLOW) == 0)
57     {
58       puts ("nextafterf+ did not underflow");
59       ++result;
60     }
61   i = 0;
62   feclearexcept (FE_ALL_EXCEPT);
63   i = nextafterf (-m, -i);
64   if (i > 0 || i <= -FLT_MIN)
65     {
66       puts ("nextafterf- failed");
67       ++result;
68     }
69   if (EXCEPTION_TESTS (float) && fetestexcept (FE_UNDERFLOW) == 0)
70     {
71       puts ("nextafterf- did not underflow");
72       ++result;
73     }
74   i = -INFINITY;
75   feclearexcept (FE_ALL_EXCEPT);
76   m = nextafterf (zero, inf);
77   if (m < 0.0 || m >= FLT_MIN)
78     {
79       puts ("nextafterf+ failed");
80       ++result;
81     }
82   if (EXCEPTION_TESTS (float) && fetestexcept (FE_UNDERFLOW) == 0)
83     {
84       puts ("nextafterf+ did not underflow");
85       ++result;
86     }
87   feclearexcept (FE_ALL_EXCEPT);
88   if (nextafterf (m, i) != 0.0)
89     {
90       puts ("nextafterf+ failed");
91       ++result;
92     }
93   if (EXCEPTION_TESTS (float) && fetestexcept (FE_UNDERFLOW) == 0)
94     {
95       puts ("nextafterf+ did not underflow");
96       ++result;
97     }
98   feclearexcept (FE_ALL_EXCEPT);
99   m = nextafterf (copysignf (zero, -1.0), -inf);
100   if (m > 0.0 || m <= -FLT_MIN)
101     {
102       puts ("nextafterf- failed");
103       ++result;
104     }
105   if (EXCEPTION_TESTS (float) && fetestexcept (FE_UNDERFLOW) == 0)
106     {
107       puts ("nextafterf- did not underflow");
108       ++result;
109     }
110   feclearexcept (FE_ALL_EXCEPT);
111   if (nextafterf (m, -i) != 0.0)
112     {
113       puts ("nextafterf- failed");
114       ++result;
115     }
116   if (EXCEPTION_TESTS (float) && fetestexcept (FE_UNDERFLOW) == 0)
117     {
118       puts ("nextafterf- did not underflow");
119       ++result;
120     }
121
122   double di = INFINITY;
123   double dm = DBL_MAX;
124   feclearexcept (FE_ALL_EXCEPT);
125   if (nextafter (dm, di) != di)
126     {
127       puts ("nextafter+ failed");
128       ++result;
129     }
130   if (EXCEPTION_TESTS (double) && fetestexcept (FE_OVERFLOW) == 0)
131     {
132       puts ("nextafter+ did not overflow");
133       ++result;
134     }
135   feclearexcept (FE_ALL_EXCEPT);
136   if (nextafter (-dm, -di) != -di)
137     {
138       puts ("nextafter failed");
139       ++result;
140     }
141   if (EXCEPTION_TESTS (double) && fetestexcept (FE_OVERFLOW) == 0)
142     {
143       puts ("nextafter- did not overflow");
144       ++result;
145     }
146
147   di = 0;
148   dm = DBL_MIN;
149   feclearexcept (FE_ALL_EXCEPT);
150   di = nextafter (dm, di);
151   if (di < 0 || di >= DBL_MIN)
152     {
153       puts ("nextafter+ failed");
154       ++result;
155     }
156   if (EXCEPTION_TESTS (double) && fetestexcept (FE_UNDERFLOW) == 0)
157     {
158       puts ("nextafter+ did not underflow");
159       ++result;
160     }
161   di = 0;
162   feclearexcept (FE_ALL_EXCEPT);
163   di = nextafter (-dm, -di);
164   if (di > 0 || di <= -DBL_MIN)
165     {
166       puts ("nextafter- failed");
167       ++result;
168     }
169   if (EXCEPTION_TESTS (double) && fetestexcept (FE_UNDERFLOW) == 0)
170     {
171       puts ("nextafter- did not underflow");
172       ++result;
173     }
174   di = -INFINITY;
175   feclearexcept (FE_ALL_EXCEPT);
176   dm = nextafter (zero, inf);
177   if (dm < 0.0 || dm >= DBL_MIN)
178     {
179       puts ("nextafter+ failed");
180       ++result;
181     }
182   if (EXCEPTION_TESTS (double) && fetestexcept (FE_UNDERFLOW) == 0)
183     {
184       puts ("nextafter+ did not underflow");
185       ++result;
186     }
187   feclearexcept (FE_ALL_EXCEPT);
188   if (nextafter (dm, di) != 0.0)
189     {
190       puts ("nextafter+ failed");
191       ++result;
192     }
193   if (EXCEPTION_TESTS (double) && fetestexcept (FE_UNDERFLOW) == 0)
194     {
195       puts ("nextafter+ did not underflow");
196       ++result;
197     }
198   feclearexcept (FE_ALL_EXCEPT);
199   dm = nextafter (copysign (zero, -1.0), -inf);
200   if (dm > 0.0 || dm <= -DBL_MIN)
201     {
202       puts ("nextafter- failed");
203       ++result;
204     }
205   if (EXCEPTION_TESTS (double) && fetestexcept (FE_UNDERFLOW) == 0)
206     {
207       puts ("nextafter- did not underflow");
208       ++result;
209     }
210   feclearexcept (FE_ALL_EXCEPT);
211   if (nextafter (dm, -di) != 0.0)
212     {
213       puts ("nextafter- failed");
214       ++result;
215     }
216   if (EXCEPTION_TESTS (double) && fetestexcept (FE_UNDERFLOW) == 0)
217     {
218       puts ("nextafter- did not underflow");
219       ++result;
220     }
221
222   long double li = INFINITY;
223   long double lm = LDBL_MAX;
224   feclearexcept (FE_ALL_EXCEPT);
225   if (nextafterl (lm, li) != li)
226     {
227       puts ("nextafterl+ failed");
228       ++result;
229     }
230   if (EXCEPTION_TESTS (long double) && fetestexcept (FE_OVERFLOW) == 0)
231     {
232       puts ("nextafterl+ did not overflow");
233       ++result;
234     }
235   feclearexcept (FE_ALL_EXCEPT);
236   if (nextafterl (-lm, -li) != -li)
237     {
238       puts ("nextafterl failed");
239       ++result;
240     }
241   if (EXCEPTION_TESTS (long double) && fetestexcept (FE_OVERFLOW) == 0)
242     {
243       puts ("nextafterl- did not overflow");
244       ++result;
245     }
246
247   li = 0;
248   lm = LDBL_MIN;
249   feclearexcept (FE_ALL_EXCEPT);
250   li = nextafterl (lm, li);
251   if (li < 0 || li >= LDBL_MIN)
252     {
253       puts ("nextafterl+ failed");
254       ++result;
255     }
256   if (EXCEPTION_TESTS (long double) && fetestexcept (FE_UNDERFLOW) == 0)
257     {
258       puts ("nextafterl+ did not underflow");
259       ++result;
260     }
261   li = 0;
262   feclearexcept (FE_ALL_EXCEPT);
263   li = nextafterl (-lm, -li);
264   if (li > 0 || li <= -LDBL_MIN)
265     {
266       puts ("nextafterl- failed");
267       ++result;
268     }
269   if (EXCEPTION_TESTS (long double) && fetestexcept (FE_UNDERFLOW) == 0)
270     {
271       puts ("nextafterl- did not underflow");
272       ++result;
273     }
274   li = -INFINITY;
275   feclearexcept (FE_ALL_EXCEPT);
276   lm = nextafterl (zero, inf);
277   if (lm < 0.0 || lm >= LDBL_MIN)
278     {
279       puts ("nextafterl+ failed");
280       ++result;
281     }
282   if (EXCEPTION_TESTS (long double) && fetestexcept (FE_UNDERFLOW) == 0)
283     {
284       puts ("nextafterl+ did not underflow");
285       ++result;
286     }
287   feclearexcept (FE_ALL_EXCEPT);
288   if (nextafterl (lm, li) != 0.0)
289     {
290       puts ("nextafterl+ failed");
291       ++result;
292     }
293   if (EXCEPTION_TESTS (long double) && fetestexcept (FE_UNDERFLOW) == 0)
294     {
295       puts ("nextafterl+ did not underflow");
296       ++result;
297     }
298   feclearexcept (FE_ALL_EXCEPT);
299   lm = nextafterl (copysign (zero, -1.0), -inf);
300   if (lm > 0.0 || lm <= -LDBL_MIN)
301     {
302       puts ("nextafterl- failed");
303       ++result;
304     }
305   if (EXCEPTION_TESTS (long double) && fetestexcept (FE_UNDERFLOW) == 0)
306     {
307       puts ("nextafterl- did not underflow");
308       ++result;
309     }
310   feclearexcept (FE_ALL_EXCEPT);
311   if (nextafterl (lm, -li) != 0.0)
312     {
313       puts ("nextafterl- failed");
314       ++result;
315     }
316   if (EXCEPTION_TESTS (long double) && fetestexcept (FE_UNDERFLOW) == 0)
317     {
318       puts ("nextafterl- did not underflow");
319       ++result;
320     }
321
322   return result;
323 }