2017-12-08 Richard Biener <rguenther@suse.de>
[official-gcc.git] / gcc / testsuite / gfortran.dg / nearest_2.f90
blobc5977415bc3c1eeb3c3bd935d2eee70ba951ed69
1 ! { dg-do run }
2 ! { dg-options "-fno-range-check" }
3 ! { dg-add-options ieee }
5 ! PR fortran/34192
7 ! Test compile-time implementation of NEAREST
9 program test
10 implicit none
12 ! Single precision
14 ! 0+ > 0
15 if (nearest(0.0, 1.0) &
16 <= 0.0) &
17 call abort()
18 ! 0++ > 0+
19 if (nearest(nearest(0.0, 1.0), 1.0) &
20 <= nearest(0.0, 1.0)) &
21 call abort()
22 ! 0+++ > 0++
23 if (nearest(nearest(nearest(0.0, 1.0), 1.0), 1.0) &
24 <= nearest(nearest(0.0, 1.0), 1.0)) &
25 call abort()
26 ! 0+- = 0
27 if (nearest(nearest(0.0, 1.0), -1.0) &
28 /= 0.0) &
29 call abort()
30 ! 0++- = 0+
31 if (nearest(nearest(nearest(0.0, 1.0), 1.0), -1.0) &
32 /= nearest(0.0, 1.0)) &
33 call abort()
34 ! 0++-- = 0
35 if (nearest(nearest(nearest(nearest(0.0, 1.0), 1.0), -1.0), -1.0) &
36 /= 0.0) &
37 call abort()
39 ! 0- < 0
40 if (nearest(0.0, -1.0) &
41 >= 0.0) &
42 call abort()
43 ! 0-- < 0+
44 if (nearest(nearest(0.0, -1.0), -1.0) &
45 >= nearest(0.0, -1.0)) &
46 call abort()
47 ! 0--- < 0--
48 if (nearest(nearest(nearest(0.0, -1.0), -1.0), -1.0) &
49 >= nearest(nearest(0.0, -1.0), -1.0)) &
50 call abort()
51 ! 0-+ = 0
52 if (nearest(nearest(0.0, -1.0), 1.0) &
53 /= 0.0) &
54 call abort()
55 ! 0--+ = 0-
56 if (nearest(nearest(nearest(0.0, -1.0), -1.0), 1.0) &
57 /= nearest(0.0, -1.0)) &
58 call abort()
59 ! 0--++ = 0
60 if (nearest(nearest(nearest(nearest(0.0, -1.0), -1.0), 1.0), 1.0) &
61 /= 0.0) &
62 call abort()
64 ! 42++ > 42+
65 if (nearest(nearest(42.0, 1.0), 1.0) &
66 <= nearest(42.0, 1.0)) &
67 call abort()
68 ! 42-- < 42-
69 if (nearest(nearest(42.0, -1.0), -1.0) &
70 >= nearest(42.0, -1.0)) &
71 call abort()
72 ! 42-+ = 42
73 if (nearest(nearest(42.0, -1.0), 1.0) &
74 /= 42.0) &
75 call abort()
76 ! 42+- = 42
77 if (nearest(nearest(42.0, 1.0), -1.0) &
78 /= 42.0) &
79 call abort()
81 ! INF+ = INF
82 if (nearest(1.0/0.0, 1.0) /= 1.0/0.0) call abort()
83 ! -INF- = -INF
84 if (nearest(-1.0/0.0, -1.0) /= -1.0/0.0) call abort()
85 ! NAN- = NAN
86 if (.not.isnan(nearest(0.0d0/0.0, 1.0))) call abort()
87 ! NAN+ = NAN
88 if (.not.isnan(nearest(0.0d0/0.0, -1.0))) call abort()
90 ! Double precision
92 ! 0+ > 0
93 if (nearest(0.0d0, 1.0) &
94 <= 0.0d0) &
95 call abort()
96 ! 0++ > 0+
97 if (nearest(nearest(0.0d0, 1.0), 1.0) &
98 <= nearest(0.0d0, 1.0)) &
99 call abort()
100 ! 0+++ > 0++
101 if (nearest(nearest(nearest(0.0d0, 1.0), 1.0), 1.0) &
102 <= nearest(nearest(0.0d0, 1.0), 1.0)) &
103 call abort()
104 ! 0+- = 0
105 if (nearest(nearest(0.0d0, 1.0), -1.0) &
106 /= 0.0d0) &
107 call abort()
108 ! 0++- = 0+
109 if (nearest(nearest(nearest(0.0d0, 1.0), 1.0), -1.0) &
110 /= nearest(0.0d0, 1.0)) &
111 call abort()
112 ! 0++-- = 0
113 if (nearest(nearest(nearest(nearest(0.0d0, 1.0), 1.0), -1.0), -1.0) &
114 /= 0.0d0) &
115 call abort()
117 ! 0- < 0
118 if (nearest(0.0d0, -1.0) &
119 >= 0.0d0) &
120 call abort()
121 ! 0-- < 0+
122 if (nearest(nearest(0.0d0, -1.0), -1.0) &
123 >= nearest(0.0d0, -1.0)) &
124 call abort()
125 ! 0--- < 0--
126 if (nearest(nearest(nearest(0.0d0, -1.0), -1.0), -1.0) &
127 >= nearest(nearest(0.0d0, -1.0), -1.0)) &
128 call abort()
129 ! 0-+ = 0
130 if (nearest(nearest(0.0d0, -1.0), 1.0) &
131 /= 0.0d0) &
132 call abort()
133 ! 0--+ = 0-
134 if (nearest(nearest(nearest(0.0d0, -1.0), -1.0), 1.0) &
135 /= nearest(0.0d0, -1.0)) &
136 call abort()
137 ! 0--++ = 0
138 if (nearest(nearest(nearest(nearest(0.0d0, -1.0), -1.0), 1.0), 1.0) &
139 /= 0.0d0) &
140 call abort()
142 ! 42++ > 42+
143 if (nearest(nearest(42.0d0, 1.0), 1.0) &
144 <= nearest(42.0d0, 1.0)) &
145 call abort()
146 ! 42-- < 42-
147 if (nearest(nearest(42.0d0, -1.0), -1.0) &
148 >= nearest(42.0d0, -1.0)) &
149 call abort()
150 ! 42-+ = 42
151 if (nearest(nearest(42.0d0, -1.0), 1.0) &
152 /= 42.0d0) &
153 call abort()
154 ! 42+- = 42
155 if (nearest(nearest(42.0d0, 1.0), -1.0) &
156 /= 42.0d0) &
157 call abort()
159 ! INF+ = INF
160 if (nearest(1.0d0/0.0d0, 1.0) /= 1.0d0/0.0d0) call abort()
161 ! -INF- = -INF
162 if (nearest(-1.0d0/0.0d0, -1.0) /= -1.0d0/0.0d0) call abort()
163 ! NAN- = NAN
164 if (.not.isnan(nearest(0.0d0/0.0, 1.0))) call abort()
165 ! NAN+ = NAN
166 if (.not.isnan(nearest(0.0d0/0.0, -1.0))) call abort()
167 end program test