1! { dg-do run }
2! Tests for the constant folding of the NEAREST intrinsic
3! We compare against the results of the runtime implementation,
4! thereby making sure that they remain consistent
5REAL, PARAMETER :: x(10) = (/ 1., 0.49999997, 0.5, 8388609.0, -1., &
6                                      -0.49999997, -0.5, -8388609.0, &
7                                      0., 0. /), &
8                 dir(10) = (/ -1.,       +1., -1.,       -1., +1., &
9                                             -1.,  +1.,        +1., &
10                                     +1.,-1./)
11REAL :: a(10)
12
13a = x
14if (nearest (x(1), dir(1)) /= nearest (a(1), dir(1))) call abort ()
15if (nearest (x(2), dir(2)) /= nearest (a(2), dir(2))) call abort ()
16if (nearest (x(3), dir(3)) /= nearest (a(3), dir(3))) call abort ()
17if (nearest (x(4), dir(4)) /= nearest (a(4), dir(4))) call abort ()
18if (nearest (x(5), dir(5)) /= nearest (a(5), dir(5))) call abort ()
19if (nearest (x(6), dir(6)) /= nearest (a(6), dir(6))) call abort ()
20if (nearest (x(7), dir(7)) /= nearest (a(7), dir(7))) call abort ()
21if (nearest (x(8), dir(8)) /= nearest (a(8), dir(8))) call abort ()
22! These last two tests are commented out because mpfr provides no support
23! for denormals, and therefore we get TINY instead of the correct result.
24!if (nearest (x(9), dir(9)) /= nearest (a(9), dir(9))) call abort ()
25!if (nearest (x(10), dir(10)) /= nearest (a(10), dir(10))) call abort ()
26
27end
28