2 ! { dg-options "-pedantic-errors -mieee" { target sh*-*-* } }
6 ! Test run-time implementation of NEAREST
10 real(4), volatile :: r4
11 real(8), volatile :: r8
13 ! Single precision with single-precision sign
17 if (nearest(r4
, 1.0) &
21 if (nearest(nearest(r4
, 1.0), 1.0) &
22 <= nearest(r4
, 1.0)) &
25 if (nearest(nearest(nearest(r4
, 1.0), 1.0), 1.0) &
26 <= nearest(nearest(r4
, 1.0), 1.0)) &
29 if (nearest(nearest(r4
, 1.0), -1.0) &
33 if (nearest(nearest(nearest(r4
, 1.0), 1.0), -1.0) &
34 /= nearest(r4
, 1.0)) &
37 if (nearest(nearest(nearest(nearest(r4
, 1.0), 1.0), -1.0), -1.0) &
42 if (nearest(r4
, -1.0) &
46 if (nearest(nearest(r4
, -1.0), -1.0) &
47 >= nearest(r4
, -1.0)) &
50 if (nearest(nearest(nearest(r4
, -1.0), -1.0), -1.0) &
51 >= nearest(nearest(r4
, -1.0), -1.0)) &
54 if (nearest(nearest(r4
, -1.0), 1.0) &
58 if (nearest(nearest(nearest(r4
, -1.0), -1.0), 1.0) &
59 /= nearest(r4
, -1.0)) &
62 if (nearest(nearest(nearest(nearest(r4
, -1.0), -1.0), 1.0), 1.0) &
68 if (nearest(nearest(r4
, 1.0), 1.0) &
69 <= nearest(r4
, 1.0)) &
72 if (nearest(nearest(r4
, -1.0), -1.0) &
73 >= nearest(r4
, -1.0)) &
76 if (nearest(nearest(r4
, -1.0), 1.0) &
80 if (nearest(nearest(r4
, 1.0), -1.0) &
86 if (nearest(1.0/r4
, 1.0) /= 1.0/r4
) call abort()
88 if (nearest(-1.0/r4
, -1.0) /= -1.0/r4
) call abort()
90 if (.not
.isnan(nearest(0.0/r4
, 1.0))) call abort()
92 if (.not
.isnan(nearest(0.0/r4
, -1.0))) call abort()
94 ! Double precision with single-precision sign
98 if (nearest(r8
, 1.0) &
102 if (nearest(nearest(r8
, 1.0), 1.0) &
103 <= nearest(r8
, 1.0)) &
106 if (nearest(nearest(nearest(r8
, 1.0), 1.0), 1.0) &
107 <= nearest(nearest(r8
, 1.0), 1.0)) &
110 if (nearest(nearest(r8
, 1.0), -1.0) &
114 if (nearest(nearest(nearest(r8
, 1.0), 1.0), -1.0) &
115 /= nearest(r8
, 1.0)) &
118 if (nearest(nearest(nearest(nearest(r8
, 1.0), 1.0), -1.0), -1.0) &
123 if (nearest(r8
, -1.0) &
127 if (nearest(nearest(r8
, -1.0), -1.0) &
128 >= nearest(r8
, -1.0)) &
131 if (nearest(nearest(nearest(r8
, -1.0), -1.0), -1.0) &
132 >= nearest(nearest(r8
, -1.0), -1.0)) &
135 if (nearest(nearest(r8
, -1.0), 1.0) &
139 if (nearest(nearest(nearest(r8
, -1.0), -1.0), 1.0) &
140 /= nearest(r8
, -1.0)) &
143 if (nearest(nearest(nearest(nearest(r8
, -1.0), -1.0), 1.0), 1.0) &
149 if (nearest(nearest(r8
, 1.0), 1.0) &
150 <= nearest(r8
, 1.0)) &
153 if (nearest(nearest(r8
, -1.0), -1.0) &
154 >= nearest(r8
, -1.0)) &
157 if (nearest(nearest(r8
, -1.0), 1.0) &
161 if (nearest(nearest(r8
, 1.0), -1.0) &
167 if (nearest(1.0/r4
, 1.0) /= 1.0/r4
) call abort()
169 if (nearest(-1.0/r4
, -1.0) /= -1.0/r4
) call abort()
171 if (.not
.isnan(nearest(0.0/r4
, 1.0))) call abort()
173 if (.not
.isnan(nearest(0.0/r4
, -1.0))) call abort()
176 ! Single precision with double-precision sign
180 if (nearest(r4
, 1.0d0) &
184 if (nearest(nearest(r4
, 1.0d0), 1.0d0) &
185 <= nearest(r4
, 1.0d0)) &
188 if (nearest(nearest(nearest(r4
, 1.0d0), 1.0d0), 1.0d0) &
189 <= nearest(nearest(r4
, 1.0d0), 1.0d0)) &
192 if (nearest(nearest(r4
, 1.0d0), -1.0d0) &
196 if (nearest(nearest(nearest(r4
, 1.0d0), 1.0d0), -1.0d0) &
197 /= nearest(r4
, 1.0d0)) &
200 if (nearest(nearest(nearest(nearest(r4
, 1.0d0), 1.0d0), -1.0d0), -1.0d0) &
205 if (nearest(r4
, -1.0d0) &
209 if (nearest(nearest(r4
, -1.0d0), -1.0d0) &
210 >= nearest(r4
, -1.0d0)) &
213 if (nearest(nearest(nearest(r4
, -1.0d0), -1.0d0), -1.0d0) &
214 >= nearest(nearest(r4
, -1.0d0), -1.0d0)) &
217 if (nearest(nearest(r4
, -1.0d0), 1.0d0) &
221 if (nearest(nearest(nearest(r4
, -1.0d0), -1.0d0), 1.0d0) &
222 /= nearest(r4
, -1.0d0)) &
225 if (nearest(nearest(nearest(nearest(r4
, -1.0d0), -1.0d0), 1.0d0), 1.0d0) &
231 if (nearest(nearest(r4
, 1.0d0), 1.0d0) &
232 <= nearest(r4
, 1.0d0)) &
235 if (nearest(nearest(r4
, -1.0d0), -1.0d0) &
236 >= nearest(r4
, -1.0d0)) &
239 if (nearest(nearest(r4
, -1.0d0), 1.0d0) &
243 if (nearest(nearest(r4
, 1.0d0), -1.0d0) &
249 if (nearest(1.0d0/r4
, 1.0d0) /= 1.0d0/r4
) call abort()
251 if (nearest(-1.0d0/r4
, -1.0d0) /= -1.0d0/r4
) call abort()
253 if (.not
.isnan(nearest(0.0/r4
, 1.0d0))) call abort()
255 if (.not
.isnan(nearest(0.0/r4
, -1.0d0))) call abort()
257 ! Double precision with double-precision sign
261 if (nearest(r8
, 1.0d0) &
265 if (nearest(nearest(r8
, 1.0d0), 1.0d0) &
266 <= nearest(r8
, 1.0d0)) &
269 if (nearest(nearest(nearest(r8
, 1.0d0), 1.0d0), 1.0d0) &
270 <= nearest(nearest(r8
, 1.0d0), 1.0d0)) &
273 if (nearest(nearest(r8
, 1.0d0), -1.0d0) &
277 if (nearest(nearest(nearest(r8
, 1.0d0), 1.0d0), -1.0d0) &
278 /= nearest(r8
, 1.0d0)) &
281 if (nearest(nearest(nearest(nearest(r8
, 1.0d0), 1.0d0), -1.0d0), -1.0d0) &
286 if (nearest(r8
, -1.0d0) &
290 if (nearest(nearest(r8
, -1.0d0), -1.0d0) &
291 >= nearest(r8
, -1.0d0)) &
294 if (nearest(nearest(nearest(r8
, -1.0d0), -1.0d0), -1.0d0) &
295 >= nearest(nearest(r8
, -1.0d0), -1.0d0)) &
298 if (nearest(nearest(r8
, -1.0d0), 1.0d0) &
302 if (nearest(nearest(nearest(r8
, -1.0d0), -1.0d0), 1.0d0) &
303 /= nearest(r8
, -1.0d0)) &
306 if (nearest(nearest(nearest(nearest(r8
, -1.0d0), -1.0d0), 1.0d0), 1.0d0) &
312 if (nearest(nearest(r8
, 1.0d0), 1.0d0) &
313 <= nearest(r8
, 1.0d0)) &
316 if (nearest(nearest(r8
, -1.0d0), -1.0d0) &
317 >= nearest(r8
, -1.0d0)) &
320 if (nearest(nearest(r8
, -1.0d0), 1.0d0) &
324 if (nearest(nearest(r8
, 1.0d0), -1.0d0) &
330 if (nearest(1.0d0/r4
, 1.0d0) /= 1.0d0/r4
) call abort()
332 if (nearest(-1.0d0/r4
, -1.0d0) /= -1.0d0/r4
) call abort()
334 if (.not
.isnan(nearest(0.0/r4
, 1.0d0))) call abort()
336 if (.not
.isnan(nearest(0.0/r4
, -1.0d0))) call abort()