! { dg-do run } ! { dg-options "-fno-range-check" } ! { dg-options "-fno-range-check -mieee" { target alpha*-*-* sh*-*-* } } ! ! PR fortran/34192 ! ! Test compile-time implementation of NEAREST ! program test implicit none ! Single precision ! 0+ > 0 if (nearest(0.0, 1.0) & <= 0.0) & call abort() ! 0++ > 0+ if (nearest(nearest(0.0, 1.0), 1.0) & <= nearest(0.0, 1.0)) & call abort() ! 0+++ > 0++ if (nearest(nearest(nearest(0.0, 1.0), 1.0), 1.0) & <= nearest(nearest(0.0, 1.0), 1.0)) & call abort() ! 0+- = 0 if (nearest(nearest(0.0, 1.0), -1.0) & /= 0.0) & call abort() ! 0++- = 0+ if (nearest(nearest(nearest(0.0, 1.0), 1.0), -1.0) & /= nearest(0.0, 1.0)) & call abort() ! 0++-- = 0 if (nearest(nearest(nearest(nearest(0.0, 1.0), 1.0), -1.0), -1.0) & /= 0.0) & call abort() ! 0- < 0 if (nearest(0.0, -1.0) & >= 0.0) & call abort() ! 0-- < 0+ if (nearest(nearest(0.0, -1.0), -1.0) & >= nearest(0.0, -1.0)) & call abort() ! 0--- < 0-- if (nearest(nearest(nearest(0.0, -1.0), -1.0), -1.0) & >= nearest(nearest(0.0, -1.0), -1.0)) & call abort() ! 0-+ = 0 if (nearest(nearest(0.0, -1.0), 1.0) & /= 0.0) & call abort() ! 0--+ = 0- if (nearest(nearest(nearest(0.0, -1.0), -1.0), 1.0) & /= nearest(0.0, -1.0)) & call abort() ! 0--++ = 0 if (nearest(nearest(nearest(nearest(0.0, -1.0), -1.0), 1.0), 1.0) & /= 0.0) & call abort() ! 42++ > 42+ if (nearest(nearest(42.0, 1.0), 1.0) & <= nearest(42.0, 1.0)) & call abort() ! 42-- < 42- if (nearest(nearest(42.0, -1.0), -1.0) & >= nearest(42.0, -1.0)) & call abort() ! 42-+ = 42 if (nearest(nearest(42.0, -1.0), 1.0) & /= 42.0) & call abort() ! 42+- = 42 if (nearest(nearest(42.0, 1.0), -1.0) & /= 42.0) & call abort() ! INF+ = INF if (nearest(1.0/0.0, 1.0) /= 1.0/0.0) call abort() ! -INF- = -INF if (nearest(-1.0/0.0, -1.0) /= -1.0/0.0) call abort() ! NAN- = NAN if (.not.isnan(nearest(0.0d0/0.0, 1.0))) call abort() ! NAN+ = NAN if (.not.isnan(nearest(0.0d0/0.0, -1.0))) call abort() ! Double precision ! 0+ > 0 if (nearest(0.0d0, 1.0) & <= 0.0d0) & call abort() ! 0++ > 0+ if (nearest(nearest(0.0d0, 1.0), 1.0) & <= nearest(0.0d0, 1.0)) & call abort() ! 0+++ > 0++ if (nearest(nearest(nearest(0.0d0, 1.0), 1.0), 1.0) & <= nearest(nearest(0.0d0, 1.0), 1.0)) & call abort() ! 0+- = 0 if (nearest(nearest(0.0d0, 1.0), -1.0) & /= 0.0d0) & call abort() ! 0++- = 0+ if (nearest(nearest(nearest(0.0d0, 1.0), 1.0), -1.0) & /= nearest(0.0d0, 1.0)) & call abort() ! 0++-- = 0 if (nearest(nearest(nearest(nearest(0.0d0, 1.0), 1.0), -1.0), -1.0) & /= 0.0d0) & call abort() ! 0- < 0 if (nearest(0.0d0, -1.0) & >= 0.0d0) & call abort() ! 0-- < 0+ if (nearest(nearest(0.0d0, -1.0), -1.0) & >= nearest(0.0d0, -1.0)) & call abort() ! 0--- < 0-- if (nearest(nearest(nearest(0.0d0, -1.0), -1.0), -1.0) & >= nearest(nearest(0.0d0, -1.0), -1.0)) & call abort() ! 0-+ = 0 if (nearest(nearest(0.0d0, -1.0), 1.0) & /= 0.0d0) & call abort() ! 0--+ = 0- if (nearest(nearest(nearest(0.0d0, -1.0), -1.0), 1.0) & /= nearest(0.0d0, -1.0)) & call abort() ! 0--++ = 0 if (nearest(nearest(nearest(nearest(0.0d0, -1.0), -1.0), 1.0), 1.0) & /= 0.0d0) & call abort() ! 42++ > 42+ if (nearest(nearest(42.0d0, 1.0), 1.0) & <= nearest(42.0d0, 1.0)) & call abort() ! 42-- < 42- if (nearest(nearest(42.0d0, -1.0), -1.0) & >= nearest(42.0d0, -1.0)) & call abort() ! 42-+ = 42 if (nearest(nearest(42.0d0, -1.0), 1.0) & /= 42.0d0) & call abort() ! 42+- = 42 if (nearest(nearest(42.0d0, 1.0), -1.0) & /= 42.0d0) & call abort() ! INF+ = INF if (nearest(1.0d0/0.0d0, 1.0) /= 1.0d0/0.0d0) call abort() ! -INF- = -INF if (nearest(-1.0d0/0.0d0, -1.0) /= -1.0d0/0.0d0) call abort() ! NAN- = NAN if (.not.isnan(nearest(0.0d0/0.0, 1.0))) call abort() ! NAN+ = NAN if (.not.isnan(nearest(0.0d0/0.0, -1.0))) call abort() end program test