1! { dg-do run } 2! { dg-options "-fno-range-check" } 3! { dg-add-options ieee } 4! 5! PR fortran/34192 6! 7! Test compile-time implementation of NEAREST 8! 9program test 10 implicit none 11 12! Single precision 13 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() 38 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() 63 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() 80 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() 89 90! Double precision 91 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() 116 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() 141 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() 158 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() 167end program test 168