]> git.ipfire.org Git - thirdparty/gcc.git/blob - gcc/testsuite/gfortran.dg/ieee/comparisons_3.F90
c15678fec35445abfe4bba76ef52fd8c022293b6
[thirdparty/gcc.git] / gcc / testsuite / gfortran.dg / ieee / comparisons_3.F90
1 ! { dg-do run }
2 ! { dg-options "-ffree-line-length-none" }
3 program foo
4 use ieee_arithmetic
5 use iso_fortran_env
6 implicit none
7
8 ! This allows us to test REAL128 if it exists, and still compile
9 ! on platforms were it is not present
10 ! https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89639
11 integer, parameter :: large = merge(real128, real64, real128 > 0)
12
13 real, volatile :: rnan, rinf
14 double precision, volatile :: dnan, dinf
15 real(kind=large), volatile :: lnan, linf
16
17 logical :: flag
18
19 rinf = ieee_value(0., ieee_positive_inf)
20 rnan = ieee_value(0., ieee_quiet_nan)
21
22 dinf = ieee_value(0.d0, ieee_positive_inf)
23 dnan = ieee_value(0.d0, ieee_quiet_nan)
24
25 linf = ieee_value(0._large, ieee_positive_inf)
26 lnan = ieee_value(0._large, ieee_quiet_nan)
27
28 #define CHECK_INVALID(expected) \
29 call ieee_get_flag(ieee_invalid, flag) ; \
30 if (flag .neqv. expected) then ; \
31 write (*,*) "Check failed at ", __LINE__ ; \
32 stop 1; \
33 end if ; \
34 call ieee_set_flag(ieee_invalid, .false.)
35
36 !! REAL
37
38 ! Signaling versions
39
40 CHECK_INVALID(.false.)
41 if (.not. ieee_signaling_eq (0., 0.)) stop 11
42 CHECK_INVALID(.false.)
43 if (.not. ieee_signaling_eq (0., -0.)) stop 12
44 CHECK_INVALID(.false.)
45 if (ieee_signaling_eq (0., rnan)) stop 13
46 CHECK_INVALID(.true.)
47 if (ieee_signaling_eq (0., rinf)) stop 14
48 CHECK_INVALID(.false.)
49 if (ieee_signaling_eq (rnan, rnan)) stop 15
50 CHECK_INVALID(.true.)
51
52 CHECK_INVALID(.false.)
53 if (ieee_signaling_ne (0., 0.)) stop 11
54 CHECK_INVALID(.false.)
55 if (ieee_signaling_ne (0., -0.)) stop 12
56 CHECK_INVALID(.false.)
57 if (.not. ieee_signaling_ne (0., rnan)) stop 13
58 CHECK_INVALID(.true.)
59 if (.not. ieee_signaling_ne (0., rinf)) stop 14
60 CHECK_INVALID(.false.)
61 if (.not. ieee_signaling_ne (rnan, rnan)) stop 15
62 CHECK_INVALID(.true.)
63
64 CHECK_INVALID(.false.)
65 if (.not. ieee_signaling_le (0., 0.)) stop 11
66 CHECK_INVALID(.false.)
67 if (.not. ieee_signaling_le (0., -0.)) stop 12
68 CHECK_INVALID(.false.)
69 if (ieee_signaling_le (0., rnan)) stop 13
70 CHECK_INVALID(.true.)
71 if (.not. ieee_signaling_le (0., rinf)) stop 14
72 CHECK_INVALID(.false.)
73 if (ieee_signaling_le (rnan, rnan)) stop 15
74 CHECK_INVALID(.true.)
75
76 CHECK_INVALID(.false.)
77 if (ieee_signaling_lt (0., 0.)) stop 11
78 CHECK_INVALID(.false.)
79 if (ieee_signaling_lt (0., -0.)) stop 12
80 CHECK_INVALID(.false.)
81 if (ieee_signaling_lt (0., rnan)) stop 13
82 CHECK_INVALID(.true.)
83 if (.not. ieee_signaling_lt (0., rinf)) stop 14
84 CHECK_INVALID(.false.)
85 if (ieee_signaling_lt (rnan, rnan)) stop 15
86 CHECK_INVALID(.true.)
87
88 CHECK_INVALID(.false.)
89 if (.not. ieee_signaling_ge (0., 0.)) stop 11
90 CHECK_INVALID(.false.)
91 if (.not. ieee_signaling_ge (0., -0.)) stop 12
92 CHECK_INVALID(.false.)
93 if (ieee_signaling_ge (0., rnan)) stop 13
94 CHECK_INVALID(.true.)
95 if (ieee_signaling_ge (0., rinf)) stop 14
96 CHECK_INVALID(.false.)
97 if (ieee_signaling_ge (rnan, rnan)) stop 15
98 CHECK_INVALID(.true.)
99
100 CHECK_INVALID(.false.)
101 if (ieee_signaling_gt (0., 0.)) stop 11
102 CHECK_INVALID(.false.)
103 if (ieee_signaling_gt (0., -0.)) stop 12
104 CHECK_INVALID(.false.)
105 if (ieee_signaling_gt (0., rnan)) stop 13
106 CHECK_INVALID(.true.)
107 if (ieee_signaling_gt (0., rinf)) stop 14
108 CHECK_INVALID(.false.)
109 if (ieee_signaling_gt (rnan, rnan)) stop 15
110 CHECK_INVALID(.true.)
111
112 ! Quiet versions
113
114 CHECK_INVALID(.false.)
115 if (.not. ieee_quiet_eq (0., 0.)) stop 11
116 CHECK_INVALID(.false.)
117 if (.not. ieee_quiet_eq (0., -0.)) stop 12
118 CHECK_INVALID(.false.)
119 if (ieee_quiet_eq (0., rnan)) stop 13
120 CHECK_INVALID(.false.)
121 if (ieee_quiet_eq (0., rinf)) stop 14
122 CHECK_INVALID(.false.)
123 if (ieee_quiet_eq (rnan, rnan)) stop 15
124 CHECK_INVALID(.false.)
125
126 CHECK_INVALID(.false.)
127 if (ieee_quiet_ne (0., 0.)) stop 11
128 CHECK_INVALID(.false.)
129 if (ieee_quiet_ne (0., -0.)) stop 12
130 CHECK_INVALID(.false.)
131 if (.not. ieee_quiet_ne (0., rnan)) stop 13
132 CHECK_INVALID(.false.)
133 if (.not. ieee_quiet_ne (0., rinf)) stop 14
134 CHECK_INVALID(.false.)
135 if (.not. ieee_quiet_ne (rnan, rnan)) stop 15
136 CHECK_INVALID(.false.)
137
138 CHECK_INVALID(.false.)
139 if (.not. ieee_quiet_le (0., 0.)) stop 11
140 CHECK_INVALID(.false.)
141 if (.not. ieee_quiet_le (0., -0.)) stop 12
142 CHECK_INVALID(.false.)
143 if (ieee_quiet_le (0., rnan)) stop 13
144 CHECK_INVALID(.false.)
145 if (.not. ieee_quiet_le (0., rinf)) stop 14
146 CHECK_INVALID(.false.)
147 if (ieee_quiet_le (rnan, rnan)) stop 15
148 CHECK_INVALID(.false.)
149
150 CHECK_INVALID(.false.)
151 if (ieee_quiet_lt (0., 0.)) stop 11
152 CHECK_INVALID(.false.)
153 if (ieee_quiet_lt (0., -0.)) stop 12
154 CHECK_INVALID(.false.)
155 if (ieee_quiet_lt (0., rnan)) stop 13
156 CHECK_INVALID(.false.)
157 if (.not. ieee_quiet_lt (0., rinf)) stop 14
158 CHECK_INVALID(.false.)
159 if (ieee_quiet_lt (rnan, rnan)) stop 15
160 CHECK_INVALID(.false.)
161
162 CHECK_INVALID(.false.)
163 if (.not. ieee_quiet_ge (0., 0.)) stop 11
164 CHECK_INVALID(.false.)
165 if (.not. ieee_quiet_ge (0., -0.)) stop 12
166 CHECK_INVALID(.false.)
167 if (ieee_quiet_ge (0., rnan)) stop 13
168 CHECK_INVALID(.false.)
169 if (ieee_quiet_ge (0., rinf)) stop 14
170 CHECK_INVALID(.false.)
171 if (ieee_quiet_ge (rnan, rnan)) stop 15
172 CHECK_INVALID(.false.)
173
174 CHECK_INVALID(.false.)
175 if (ieee_quiet_gt (0., 0.)) stop 11
176 CHECK_INVALID(.false.)
177 if (ieee_quiet_gt (0., -0.)) stop 12
178 CHECK_INVALID(.false.)
179 if (ieee_quiet_gt (0., rnan)) stop 13
180 CHECK_INVALID(.false.)
181 if (ieee_quiet_gt (0., rinf)) stop 14
182 CHECK_INVALID(.false.)
183 if (ieee_quiet_gt (rnan, rnan)) stop 15
184 CHECK_INVALID(.false.)
185
186 !! DOUBLE PRECISION
187
188 ! Signaling versions
189
190 CHECK_INVALID(.false.)
191 if (.not. ieee_signaling_eq (0.d0, 0.d0)) stop 11
192 CHECK_INVALID(.false.)
193 if (.not. ieee_signaling_eq (0.d0, -0.d0)) stop 12
194 CHECK_INVALID(.false.)
195 if (ieee_signaling_eq (0.d0, dnan)) stop 13
196 CHECK_INVALID(.true.)
197 if (ieee_signaling_eq (0.d0, dinf)) stop 14
198 CHECK_INVALID(.false.)
199 if (ieee_signaling_eq (dnan, dnan)) stop 15
200 CHECK_INVALID(.true.)
201
202 CHECK_INVALID(.false.)
203 if (ieee_signaling_ne (0.d0, 0.d0)) stop 11
204 CHECK_INVALID(.false.)
205 if (ieee_signaling_ne (0.d0, -0.d0)) stop 12
206 CHECK_INVALID(.false.)
207 if (.not. ieee_signaling_ne (0.d0, dnan)) stop 13
208 CHECK_INVALID(.true.)
209 if (.not. ieee_signaling_ne (0.d0, dinf)) stop 14
210 CHECK_INVALID(.false.)
211 if (.not. ieee_signaling_ne (dnan, dnan)) stop 15
212 CHECK_INVALID(.true.)
213
214 CHECK_INVALID(.false.)
215 if (.not. ieee_signaling_le (0.d0, 0.d0)) stop 11
216 CHECK_INVALID(.false.)
217 if (.not. ieee_signaling_le (0.d0, -0.d0)) stop 12
218 CHECK_INVALID(.false.)
219 if (ieee_signaling_le (0.d0, dnan)) stop 13
220 CHECK_INVALID(.true.)
221 if (.not. ieee_signaling_le (0.d0, dinf)) stop 14
222 CHECK_INVALID(.false.)
223 if (ieee_signaling_le (dnan, dnan)) stop 15
224 CHECK_INVALID(.true.)
225
226 CHECK_INVALID(.false.)
227 if (ieee_signaling_lt (0.d0, 0.d0)) stop 11
228 CHECK_INVALID(.false.)
229 if (ieee_signaling_lt (0.d0, -0.d0)) stop 12
230 CHECK_INVALID(.false.)
231 if (ieee_signaling_lt (0.d0, dnan)) stop 13
232 CHECK_INVALID(.true.)
233 if (.not. ieee_signaling_lt (0.d0, dinf)) stop 14
234 CHECK_INVALID(.false.)
235 if (ieee_signaling_lt (dnan, dnan)) stop 15
236 CHECK_INVALID(.true.)
237
238 CHECK_INVALID(.false.)
239 if (.not. ieee_signaling_ge (0.d0, 0.d0)) stop 11
240 CHECK_INVALID(.false.)
241 if (.not. ieee_signaling_ge (0.d0, -0.d0)) stop 12
242 CHECK_INVALID(.false.)
243 if (ieee_signaling_ge (0.d0, dnan)) stop 13
244 CHECK_INVALID(.true.)
245 if (ieee_signaling_ge (0.d0, dinf)) stop 14
246 CHECK_INVALID(.false.)
247 if (ieee_signaling_ge (dnan, dnan)) stop 15
248 CHECK_INVALID(.true.)
249
250 CHECK_INVALID(.false.)
251 if (ieee_signaling_gt (0.d0, 0.d0)) stop 11
252 CHECK_INVALID(.false.)
253 if (ieee_signaling_gt (0.d0, -0.d0)) stop 12
254 CHECK_INVALID(.false.)
255 if (ieee_signaling_gt (0.d0, dnan)) stop 13
256 CHECK_INVALID(.true.)
257 if (ieee_signaling_gt (0.d0, dinf)) stop 14
258 CHECK_INVALID(.false.)
259 if (ieee_signaling_gt (dnan, dnan)) stop 15
260 CHECK_INVALID(.true.)
261
262 ! Quiet versions
263
264 CHECK_INVALID(.false.)
265 if (.not. ieee_quiet_eq (0.d0, 0.d0)) stop 11
266 CHECK_INVALID(.false.)
267 if (.not. ieee_quiet_eq (0.d0, -0.d0)) stop 12
268 CHECK_INVALID(.false.)
269 if (ieee_quiet_eq (0.d0, dnan)) stop 13
270 CHECK_INVALID(.false.)
271 if (ieee_quiet_eq (0.d0, dinf)) stop 14
272 CHECK_INVALID(.false.)
273 if (ieee_quiet_eq (dnan, dnan)) stop 15
274 CHECK_INVALID(.false.)
275
276 CHECK_INVALID(.false.)
277 if (ieee_quiet_ne (0.d0, 0.d0)) stop 11
278 CHECK_INVALID(.false.)
279 if (ieee_quiet_ne (0.d0, -0.d0)) stop 12
280 CHECK_INVALID(.false.)
281 if (.not. ieee_quiet_ne (0.d0, dnan)) stop 13
282 CHECK_INVALID(.false.)
283 if (.not. ieee_quiet_ne (0.d0, dinf)) stop 14
284 CHECK_INVALID(.false.)
285 if (.not. ieee_quiet_ne (dnan, dnan)) stop 15
286 CHECK_INVALID(.false.)
287
288 CHECK_INVALID(.false.)
289 if (.not. ieee_quiet_le (0.d0, 0.d0)) stop 11
290 CHECK_INVALID(.false.)
291 if (.not. ieee_quiet_le (0.d0, -0.d0)) stop 12
292 CHECK_INVALID(.false.)
293 if (ieee_quiet_le (0.d0, dnan)) stop 13
294 CHECK_INVALID(.false.)
295 if (.not. ieee_quiet_le (0.d0, dinf)) stop 14
296 CHECK_INVALID(.false.)
297 if (ieee_quiet_le (dnan, dnan)) stop 15
298 CHECK_INVALID(.false.)
299
300 CHECK_INVALID(.false.)
301 if (ieee_quiet_lt (0.d0, 0.d0)) stop 11
302 CHECK_INVALID(.false.)
303 if (ieee_quiet_lt (0.d0, -0.d0)) stop 12
304 CHECK_INVALID(.false.)
305 if (ieee_quiet_lt (0.d0, dnan)) stop 13
306 CHECK_INVALID(.false.)
307 if (.not. ieee_quiet_lt (0.d0, dinf)) stop 14
308 CHECK_INVALID(.false.)
309 if (ieee_quiet_lt (dnan, dnan)) stop 15
310 CHECK_INVALID(.false.)
311
312 CHECK_INVALID(.false.)
313 if (.not. ieee_quiet_ge (0.d0, 0.d0)) stop 11
314 CHECK_INVALID(.false.)
315 if (.not. ieee_quiet_ge (0.d0, -0.d0)) stop 12
316 CHECK_INVALID(.false.)
317 if (ieee_quiet_ge (0.d0, dnan)) stop 13
318 CHECK_INVALID(.false.)
319 if (ieee_quiet_ge (0.d0, dinf)) stop 14
320 CHECK_INVALID(.false.)
321 if (ieee_quiet_ge (dnan, dnan)) stop 15
322 CHECK_INVALID(.false.)
323
324 CHECK_INVALID(.false.)
325 if (ieee_quiet_gt (0.d0, 0.d0)) stop 11
326 CHECK_INVALID(.false.)
327 if (ieee_quiet_gt (0.d0, -0.d0)) stop 12
328 CHECK_INVALID(.false.)
329 if (ieee_quiet_gt (0.d0, dnan)) stop 13
330 CHECK_INVALID(.false.)
331 if (ieee_quiet_gt (0.d0, dinf)) stop 14
332 CHECK_INVALID(.false.)
333 if (ieee_quiet_gt (dnan, dnan)) stop 15
334 CHECK_INVALID(.false.)
335
336 !! LARGE KIND
337
338 ! Signaling versions
339
340 CHECK_INVALID(.false.)
341 if (.not. ieee_signaling_eq (0._large, 0._large)) stop 11
342 CHECK_INVALID(.false.)
343 if (.not. ieee_signaling_eq (0._large, -0._large)) stop 12
344 CHECK_INVALID(.false.)
345 if (ieee_signaling_eq (0._large, lnan)) stop 13
346 CHECK_INVALID(.true.)
347 if (ieee_signaling_eq (0._large, linf)) stop 14
348 CHECK_INVALID(.false.)
349 if (ieee_signaling_eq (lnan, lnan)) stop 15
350 CHECK_INVALID(.true.)
351
352 CHECK_INVALID(.false.)
353 if (ieee_signaling_ne (0._large, 0._large)) stop 11
354 CHECK_INVALID(.false.)
355 if (ieee_signaling_ne (0._large, -0._large)) stop 12
356 CHECK_INVALID(.false.)
357 if (.not. ieee_signaling_ne (0._large, lnan)) stop 13
358 CHECK_INVALID(.true.)
359 if (.not. ieee_signaling_ne (0._large, linf)) stop 14
360 CHECK_INVALID(.false.)
361 if (.not. ieee_signaling_ne (lnan, lnan)) stop 15
362 CHECK_INVALID(.true.)
363
364 CHECK_INVALID(.false.)
365 if (.not. ieee_signaling_le (0._large, 0._large)) stop 11
366 CHECK_INVALID(.false.)
367 if (.not. ieee_signaling_le (0._large, -0._large)) stop 12
368 CHECK_INVALID(.false.)
369 if (ieee_signaling_le (0._large, lnan)) stop 13
370 CHECK_INVALID(.true.)
371 if (.not. ieee_signaling_le (0._large, linf)) stop 14
372 CHECK_INVALID(.false.)
373 if (ieee_signaling_le (lnan, lnan)) stop 15
374 CHECK_INVALID(.true.)
375
376 CHECK_INVALID(.false.)
377 if (ieee_signaling_lt (0._large, 0._large)) stop 11
378 CHECK_INVALID(.false.)
379 if (ieee_signaling_lt (0._large, -0._large)) stop 12
380 CHECK_INVALID(.false.)
381 if (ieee_signaling_lt (0._large, lnan)) stop 13
382 CHECK_INVALID(.true.)
383 if (.not. ieee_signaling_lt (0._large, linf)) stop 14
384 CHECK_INVALID(.false.)
385 if (ieee_signaling_lt (lnan, lnan)) stop 15
386 CHECK_INVALID(.true.)
387
388 CHECK_INVALID(.false.)
389 if (.not. ieee_signaling_ge (0._large, 0._large)) stop 11
390 CHECK_INVALID(.false.)
391 if (.not. ieee_signaling_ge (0._large, -0._large)) stop 12
392 CHECK_INVALID(.false.)
393 if (ieee_signaling_ge (0._large, lnan)) stop 13
394 CHECK_INVALID(.true.)
395 if (ieee_signaling_ge (0._large, linf)) stop 14
396 CHECK_INVALID(.false.)
397 if (ieee_signaling_ge (lnan, lnan)) stop 15
398 CHECK_INVALID(.true.)
399
400 CHECK_INVALID(.false.)
401 if (ieee_signaling_gt (0._large, 0._large)) stop 11
402 CHECK_INVALID(.false.)
403 if (ieee_signaling_gt (0._large, -0._large)) stop 12
404 CHECK_INVALID(.false.)
405 if (ieee_signaling_gt (0._large, lnan)) stop 13
406 CHECK_INVALID(.true.)
407 if (ieee_signaling_gt (0._large, linf)) stop 14
408 CHECK_INVALID(.false.)
409 if (ieee_signaling_gt (lnan, lnan)) stop 15
410 CHECK_INVALID(.true.)
411
412 ! Quiet versions
413
414 CHECK_INVALID(.false.)
415 if (.not. ieee_quiet_eq (0._large, 0._large)) stop 11
416 CHECK_INVALID(.false.)
417 if (.not. ieee_quiet_eq (0._large, -0._large)) stop 12
418 CHECK_INVALID(.false.)
419 if (ieee_quiet_eq (0._large, lnan)) stop 13
420 CHECK_INVALID(.false.)
421 if (ieee_quiet_eq (0._large, linf)) stop 14
422 CHECK_INVALID(.false.)
423 if (ieee_quiet_eq (lnan, lnan)) stop 15
424 CHECK_INVALID(.false.)
425
426 CHECK_INVALID(.false.)
427 if (ieee_quiet_ne (0._large, 0._large)) stop 11
428 CHECK_INVALID(.false.)
429 if (ieee_quiet_ne (0._large, -0._large)) stop 12
430 CHECK_INVALID(.false.)
431 if (.not. ieee_quiet_ne (0._large, lnan)) stop 13
432 CHECK_INVALID(.false.)
433 if (.not. ieee_quiet_ne (0._large, linf)) stop 14
434 CHECK_INVALID(.false.)
435 if (.not. ieee_quiet_ne (lnan, lnan)) stop 15
436 CHECK_INVALID(.false.)
437
438 CHECK_INVALID(.false.)
439 if (.not. ieee_quiet_le (0._large, 0._large)) stop 11
440 CHECK_INVALID(.false.)
441 if (.not. ieee_quiet_le (0._large, -0._large)) stop 12
442 CHECK_INVALID(.false.)
443 if (ieee_quiet_le (0._large, lnan)) stop 13
444 CHECK_INVALID(.false.)
445 if (.not. ieee_quiet_le (0._large, linf)) stop 14
446 CHECK_INVALID(.false.)
447 if (ieee_quiet_le (lnan, lnan)) stop 15
448 CHECK_INVALID(.false.)
449
450 CHECK_INVALID(.false.)
451 if (ieee_quiet_lt (0._large, 0._large)) stop 11
452 CHECK_INVALID(.false.)
453 if (ieee_quiet_lt (0._large, -0._large)) stop 12
454 CHECK_INVALID(.false.)
455 if (ieee_quiet_lt (0._large, lnan)) stop 13
456 CHECK_INVALID(.false.)
457 if (.not. ieee_quiet_lt (0._large, linf)) stop 14
458 CHECK_INVALID(.false.)
459 if (ieee_quiet_lt (lnan, lnan)) stop 15
460 CHECK_INVALID(.false.)
461
462 CHECK_INVALID(.false.)
463 if (.not. ieee_quiet_ge (0._large, 0._large)) stop 11
464 CHECK_INVALID(.false.)
465 if (.not. ieee_quiet_ge (0._large, -0._large)) stop 12
466 CHECK_INVALID(.false.)
467 if (ieee_quiet_ge (0._large, lnan)) stop 13
468 CHECK_INVALID(.false.)
469 if (ieee_quiet_ge (0._large, linf)) stop 14
470 CHECK_INVALID(.false.)
471 if (ieee_quiet_ge (lnan, lnan)) stop 15
472 CHECK_INVALID(.false.)
473
474 CHECK_INVALID(.false.)
475 if (ieee_quiet_gt (0._large, 0._large)) stop 11
476 CHECK_INVALID(.false.)
477 if (ieee_quiet_gt (0._large, -0._large)) stop 12
478 CHECK_INVALID(.false.)
479 if (ieee_quiet_gt (0._large, lnan)) stop 13
480 CHECK_INVALID(.false.)
481 if (ieee_quiet_gt (0._large, linf)) stop 14
482 CHECK_INVALID(.false.)
483 if (ieee_quiet_gt (lnan, lnan)) stop 15
484 CHECK_INVALID(.false.)
485
486
487 end program foo