| ! { dg-do run } |
| ! { dg-add-options ieee } |
| ! |
| ! PR fortran/34209 |
| ! |
| ! Test run-time implementation of NEAREST |
| ! |
| program test |
| implicit none |
| real(4), volatile :: r4 |
| real(8), volatile :: r8 |
| |
| ! Single precision with single-precision sign |
| |
| r4 = 0.0_4 |
| ! 0+ > 0 |
| if (nearest(r4, 1.0) & |
| <= r4) & |
| STOP 1 |
| ! 0++ > 0+ |
| if (nearest(nearest(r4, 1.0), 1.0) & |
| <= nearest(r4, 1.0)) & |
| STOP 2 |
| ! 0+++ > 0++ |
| if (nearest(nearest(nearest(r4, 1.0), 1.0), 1.0) & |
| <= nearest(nearest(r4, 1.0), 1.0)) & |
| STOP 3 |
| ! 0+- = 0 |
| if (nearest(nearest(r4, 1.0), -1.0) & |
| /= r4) & |
| STOP 4 |
| ! 0++- = 0+ |
| if (nearest(nearest(nearest(r4, 1.0), 1.0), -1.0) & |
| /= nearest(r4, 1.0)) & |
| STOP 5 |
| ! 0++-- = 0 |
| if (nearest(nearest(nearest(nearest(r4, 1.0), 1.0), -1.0), -1.0) & |
| /= r4) & |
| STOP 6 |
| |
| ! 0- < 0 |
| if (nearest(r4, -1.0) & |
| >= r4) & |
| STOP 7 |
| ! 0-- < 0+ |
| if (nearest(nearest(r4, -1.0), -1.0) & |
| >= nearest(r4, -1.0)) & |
| STOP 8 |
| ! 0--- < 0-- |
| if (nearest(nearest(nearest(r4, -1.0), -1.0), -1.0) & |
| >= nearest(nearest(r4, -1.0), -1.0)) & |
| STOP 9 |
| ! 0-+ = 0 |
| if (nearest(nearest(r4, -1.0), 1.0) & |
| /= r4) & |
| STOP 10 |
| ! 0--+ = 0- |
| if (nearest(nearest(nearest(r4, -1.0), -1.0), 1.0) & |
| /= nearest(r4, -1.0)) & |
| STOP 11 |
| ! 0--++ = 0 |
| if (nearest(nearest(nearest(nearest(r4, -1.0), -1.0), 1.0), 1.0) & |
| /= r4) & |
| STOP 12 |
| |
| r4 = 42.0_4 |
| ! 42++ > 42+ |
| if (nearest(nearest(r4, 1.0), 1.0) & |
| <= nearest(r4, 1.0)) & |
| STOP 13 |
| ! 42-- < 42- |
| if (nearest(nearest(r4, -1.0), -1.0) & |
| >= nearest(r4, -1.0)) & |
| STOP 14 |
| ! 42-+ = 42 |
| if (nearest(nearest(r4, -1.0), 1.0) & |
| /= r4) & |
| STOP 15 |
| ! 42+- = 42 |
| if (nearest(nearest(r4, 1.0), -1.0) & |
| /= r4) & |
| STOP 16 |
| |
| r4 = 0.0 |
| ! INF+ = INF |
| if (nearest(1.0/r4, 1.0) /= 1.0/r4) STOP 17 |
| ! -INF- = -INF |
| if (nearest(-1.0/r4, -1.0) /= -1.0/r4) STOP 18 |
| ! NAN- = NAN |
| if (.not.isnan(nearest(0.0/r4, 1.0))) STOP 19 |
| ! NAN+ = NAN |
| if (.not.isnan(nearest(0.0/r4, -1.0))) STOP 20 |
| |
| ! Double precision with single-precision sign |
| |
| r8 = 0.0_8 |
| ! 0+ > 0 |
| if (nearest(r8, 1.0) & |
| <= r8) & |
| STOP 21 |
| ! 0++ > 0+ |
| if (nearest(nearest(r8, 1.0), 1.0) & |
| <= nearest(r8, 1.0)) & |
| STOP 22 |
| ! 0+++ > 0++ |
| if (nearest(nearest(nearest(r8, 1.0), 1.0), 1.0) & |
| <= nearest(nearest(r8, 1.0), 1.0)) & |
| STOP 23 |
| ! 0+- = 0 |
| if (nearest(nearest(r8, 1.0), -1.0) & |
| /= r8) & |
| STOP 24 |
| ! 0++- = 0+ |
| if (nearest(nearest(nearest(r8, 1.0), 1.0), -1.0) & |
| /= nearest(r8, 1.0)) & |
| STOP 25 |
| ! 0++-- = 0 |
| if (nearest(nearest(nearest(nearest(r8, 1.0), 1.0), -1.0), -1.0) & |
| /= r8) & |
| STOP 26 |
| |
| ! 0- < 0 |
| if (nearest(r8, -1.0) & |
| >= r8) & |
| STOP 27 |
| ! 0-- < 0+ |
| if (nearest(nearest(r8, -1.0), -1.0) & |
| >= nearest(r8, -1.0)) & |
| STOP 28 |
| ! 0--- < 0-- |
| if (nearest(nearest(nearest(r8, -1.0), -1.0), -1.0) & |
| >= nearest(nearest(r8, -1.0), -1.0)) & |
| STOP 29 |
| ! 0-+ = 0 |
| if (nearest(nearest(r8, -1.0), 1.0) & |
| /= r8) & |
| STOP 30 |
| ! 0--+ = 0- |
| if (nearest(nearest(nearest(r8, -1.0), -1.0), 1.0) & |
| /= nearest(r8, -1.0)) & |
| STOP 31 |
| ! 0--++ = 0 |
| if (nearest(nearest(nearest(nearest(r8, -1.0), -1.0), 1.0), 1.0) & |
| /= r8) & |
| STOP 32 |
| |
| r8 = 42.0_8 |
| ! 42++ > 42+ |
| if (nearest(nearest(r8, 1.0), 1.0) & |
| <= nearest(r8, 1.0)) & |
| STOP 33 |
| ! 42-- < 42- |
| if (nearest(nearest(r8, -1.0), -1.0) & |
| >= nearest(r8, -1.0)) & |
| STOP 34 |
| ! 42-+ = 42 |
| if (nearest(nearest(r8, -1.0), 1.0) & |
| /= r8) & |
| STOP 35 |
| ! 42+- = 42 |
| if (nearest(nearest(r8, 1.0), -1.0) & |
| /= r8) & |
| STOP 36 |
| |
| r4 = 0.0 |
| ! INF+ = INF |
| if (nearest(1.0/r4, 1.0) /= 1.0/r4) STOP 37 |
| ! -INF- = -INF |
| if (nearest(-1.0/r4, -1.0) /= -1.0/r4) STOP 38 |
| ! NAN- = NAN |
| if (.not.isnan(nearest(0.0/r4, 1.0))) STOP 39 |
| ! NAN+ = NAN |
| if (.not.isnan(nearest(0.0/r4, -1.0))) STOP 40 |
| |
| |
| ! Single precision with double-precision sign |
| |
| r4 = 0.0_4 |
| ! 0+ > 0 |
| if (nearest(r4, 1.0d0) & |
| <= r4) & |
| STOP 41 |
| ! 0++ > 0+ |
| if (nearest(nearest(r4, 1.0d0), 1.0d0) & |
| <= nearest(r4, 1.0d0)) & |
| STOP 42 |
| ! 0+++ > 0++ |
| if (nearest(nearest(nearest(r4, 1.0d0), 1.0d0), 1.0d0) & |
| <= nearest(nearest(r4, 1.0d0), 1.0d0)) & |
| STOP 43 |
| ! 0+- = 0 |
| if (nearest(nearest(r4, 1.0d0), -1.0d0) & |
| /= r4) & |
| STOP 44 |
| ! 0++- = 0+ |
| if (nearest(nearest(nearest(r4, 1.0d0), 1.0d0), -1.0d0) & |
| /= nearest(r4, 1.0d0)) & |
| STOP 45 |
| ! 0++-- = 0 |
| if (nearest(nearest(nearest(nearest(r4, 1.0d0), 1.0d0), -1.0d0), -1.0d0) & |
| /= r4) & |
| STOP 46 |
| |
| ! 0- < 0 |
| if (nearest(r4, -1.0d0) & |
| >= r4) & |
| STOP 47 |
| ! 0-- < 0+ |
| if (nearest(nearest(r4, -1.0d0), -1.0d0) & |
| >= nearest(r4, -1.0d0)) & |
| STOP 48 |
| ! 0--- < 0-- |
| if (nearest(nearest(nearest(r4, -1.0d0), -1.0d0), -1.0d0) & |
| >= nearest(nearest(r4, -1.0d0), -1.0d0)) & |
| STOP 49 |
| ! 0-+ = 0 |
| if (nearest(nearest(r4, -1.0d0), 1.0d0) & |
| /= r4) & |
| STOP 50 |
| ! 0--+ = 0- |
| if (nearest(nearest(nearest(r4, -1.0d0), -1.0d0), 1.0d0) & |
| /= nearest(r4, -1.0d0)) & |
| STOP 51 |
| ! 0--++ = 0 |
| if (nearest(nearest(nearest(nearest(r4, -1.0d0), -1.0d0), 1.0d0), 1.0d0) & |
| /= r4) & |
| STOP 52 |
| |
| r4 = 42.0_4 |
| ! 42++ > 42+ |
| if (nearest(nearest(r4, 1.0d0), 1.0d0) & |
| <= nearest(r4, 1.0d0)) & |
| STOP 53 |
| ! 42-- < 42- |
| if (nearest(nearest(r4, -1.0d0), -1.0d0) & |
| >= nearest(r4, -1.0d0)) & |
| STOP 54 |
| ! 42-+ = 42 |
| if (nearest(nearest(r4, -1.0d0), 1.0d0) & |
| /= r4) & |
| STOP 55 |
| ! 42+- = 42 |
| if (nearest(nearest(r4, 1.0d0), -1.0d0) & |
| /= r4) & |
| STOP 56 |
| |
| r4 = 0.0 |
| ! INF+ = INF |
| if (nearest(1.0d0/r4, 1.0d0) /= 1.0d0/r4) STOP 57 |
| ! -INF- = -INF |
| if (nearest(-1.0d0/r4, -1.0d0) /= -1.0d0/r4) STOP 58 |
| ! NAN- = NAN |
| if (.not.isnan(nearest(0.0/r4, 1.0d0))) STOP 59 |
| ! NAN+ = NAN |
| if (.not.isnan(nearest(0.0/r4, -1.0d0))) STOP 60 |
| |
| ! Double precision with double-precision sign |
| |
| r8 = 0.0_8 |
| ! 0+ > 0 |
| if (nearest(r8, 1.0d0) & |
| <= r8) & |
| STOP 61 |
| ! 0++ > 0+ |
| if (nearest(nearest(r8, 1.0d0), 1.0d0) & |
| <= nearest(r8, 1.0d0)) & |
| STOP 62 |
| ! 0+++ > 0++ |
| if (nearest(nearest(nearest(r8, 1.0d0), 1.0d0), 1.0d0) & |
| <= nearest(nearest(r8, 1.0d0), 1.0d0)) & |
| STOP 63 |
| ! 0+- = 0 |
| if (nearest(nearest(r8, 1.0d0), -1.0d0) & |
| /= r8) & |
| STOP 64 |
| ! 0++- = 0+ |
| if (nearest(nearest(nearest(r8, 1.0d0), 1.0d0), -1.0d0) & |
| /= nearest(r8, 1.0d0)) & |
| STOP 65 |
| ! 0++-- = 0 |
| if (nearest(nearest(nearest(nearest(r8, 1.0d0), 1.0d0), -1.0d0), -1.0d0) & |
| /= r8) & |
| STOP 66 |
| |
| ! 0- < 0 |
| if (nearest(r8, -1.0d0) & |
| >= r8) & |
| STOP 67 |
| ! 0-- < 0+ |
| if (nearest(nearest(r8, -1.0d0), -1.0d0) & |
| >= nearest(r8, -1.0d0)) & |
| STOP 68 |
| ! 0--- < 0-- |
| if (nearest(nearest(nearest(r8, -1.0d0), -1.0d0), -1.0d0) & |
| >= nearest(nearest(r8, -1.0d0), -1.0d0)) & |
| STOP 69 |
| ! 0-+ = 0 |
| if (nearest(nearest(r8, -1.0d0), 1.0d0) & |
| /= r8) & |
| STOP 70 |
| ! 0--+ = 0- |
| if (nearest(nearest(nearest(r8, -1.0d0), -1.0d0), 1.0d0) & |
| /= nearest(r8, -1.0d0)) & |
| STOP 71 |
| ! 0--++ = 0 |
| if (nearest(nearest(nearest(nearest(r8, -1.0d0), -1.0d0), 1.0d0), 1.0d0) & |
| /= r8) & |
| STOP 72 |
| |
| r8 = 42.0_8 |
| ! 42++ > 42+ |
| if (nearest(nearest(r8, 1.0d0), 1.0d0) & |
| <= nearest(r8, 1.0d0)) & |
| STOP 73 |
| ! 42-- < 42- |
| if (nearest(nearest(r8, -1.0d0), -1.0d0) & |
| >= nearest(r8, -1.0d0)) & |
| STOP 74 |
| ! 42-+ = 42 |
| if (nearest(nearest(r8, -1.0d0), 1.0d0) & |
| /= r8) & |
| STOP 75 |
| ! 42+- = 42 |
| if (nearest(nearest(r8, 1.0d0), -1.0d0) & |
| /= r8) & |
| STOP 76 |
| |
| r4 = 0.0 |
| ! INF+ = INF |
| if (nearest(1.0d0/r4, 1.0d0) /= 1.0d0/r4) STOP 77 |
| ! -INF- = -INF |
| if (nearest(-1.0d0/r4, -1.0d0) /= -1.0d0/r4) STOP 78 |
| ! NAN- = NAN |
| if (.not.isnan(nearest(0.0/r4, 1.0d0))) STOP 79 |
| ! NAN+ = NAN |
| if (.not.isnan(nearest(0.0/r4, -1.0d0))) STOP 80 |
| |
| end program test |