
1: #include <fenv.h> 2: #include <math.h> 3: #include <float.h> 4: #include <stdlib.h> 5: #include <stdio.h> 6: 7: float zero = 0.0; 8: float inf = INFINITY; 9: 10: int 11: main (void) 12: { 13: int result = 0; 14: 15: float i = INFINITY; 16: float m = FLT_MAX; 17: feclearexcept (FE_ALL_EXCEPT); 18: if (nextafterf (m, i) != i) 19: { 20: puts ("nextafterf+ failed"); 21: ++result; 22: } 23: if (fetestexcept (FE_OVERFLOW) == 0) 24: { 25: puts ("nextafterf+ did not overflow"); 26: ++result; 27: } 28: feclearexcept (FE_ALL_EXCEPT); 29: if (nextafterf (-m, -i) != -i) 30: { 31: puts ("nextafterf- failed"); 32: ++result; 33: } 34: if (fetestexcept (FE_OVERFLOW) == 0) 35: { 36: puts ("nextafterf- did not overflow"); 37: ++result; 38: } 39: 40: i = 0; 41: m = FLT_MIN; 42: feclearexcept (FE_ALL_EXCEPT); 43: i = nextafterf (m, i); 44: if (i < 0 || i >= FLT_MIN) 45: { 46: puts ("nextafterf+ failed"); 47: ++result; 48: } 49: if (fetestexcept (FE_UNDERFLOW) == 0) 50: { 51: puts ("nextafterf+ did not underflow"); 52: ++result; 53: } 54: i = 0; 55: feclearexcept (FE_ALL_EXCEPT); 56: i = nextafterf (-m, -i); 57: if (i > 0 || i <= -FLT_MIN) 58: { 59: puts ("nextafterf- failed"); 60: ++result; 61: } 62: if (fetestexcept (FE_UNDERFLOW) == 0) 63: { 64: puts ("nextafterf- did not underflow"); 65: ++result; 66: } 67: i = -INFINITY; 68: feclearexcept (FE_ALL_EXCEPT); 69: m = nextafterf (zero, inf); 70: if (m < 0.0 || m >= FLT_MIN) 71: { 72: puts ("nextafterf+ failed"); 73: ++result; 74: } 75: if (fetestexcept (FE_UNDERFLOW) == 0) 76: { 77: puts ("nextafterf+ did not underflow"); 78: ++result; 79: } 80: feclearexcept (FE_ALL_EXCEPT); 81: if (nextafterf (m, i) != 0.0) 82: { 83: puts ("nextafterf+ failed"); 84: ++result; 85: } 86: if (fetestexcept (FE_UNDERFLOW) == 0) 87: { 88: puts ("nextafterf+ did not underflow"); 89: ++result; 90: } 91: feclearexcept (FE_ALL_EXCEPT); 92: m = nextafterf (copysignf (zero, -1.0), -inf); 93: if (m > 0.0 || m <= -FLT_MIN) 94: { 95: puts ("nextafterf- failed"); 96: ++result; 97: } 98: if (fetestexcept (FE_UNDERFLOW) == 0) 99: { 100: puts ("nextafterf- did not underflow"); 101: ++result; 102: } 103: feclearexcept (FE_ALL_EXCEPT); 104: if (nextafterf (m, -i) != 0.0) 105: { 106: puts ("nextafterf- failed"); 107: ++result; 108: } 109: if (fetestexcept (FE_UNDERFLOW) == 0) 110: { 111: puts ("nextafterf- did not underflow"); 112: ++result; 113: } 114: 115: double di = INFINITY; 116: double dm = DBL_MAX; 117: feclearexcept (FE_ALL_EXCEPT); 118: if (nextafter (dm, di) != di) 119: { 120: puts ("nextafter+ failed"); 121: ++result; 122: } 123: if (fetestexcept (FE_OVERFLOW) == 0) 124: { 125: puts ("nextafter+ did not overflow"); 126: ++result; 127: } 128: feclearexcept (FE_ALL_EXCEPT); 129: if (nextafter (-dm, -di) != -di) 130: { 131: puts ("nextafter failed"); 132: ++result; 133: } 134: if (fetestexcept (FE_OVERFLOW) == 0) 135: { 136: puts ("nextafter- did not overflow"); 137: ++result; 138: } 139: 140: di = 0; 141: dm = DBL_MIN; 142: feclearexcept (FE_ALL_EXCEPT); 143: di = nextafter (dm, di); 144: if (di < 0 || di >= DBL_MIN) 145: { 146: puts ("nextafter+ failed"); 147: ++result; 148: } 149: if (fetestexcept (FE_UNDERFLOW) == 0) 150: { 151: puts ("nextafter+ did not underflow"); 152: ++result; 153: } 154: di = 0; 155: feclearexcept (FE_ALL_EXCEPT); 156: di = nextafter (-dm, -di); 157: if (di > 0 || di <= -DBL_MIN) 158: { 159: puts ("nextafter- failed"); 160: ++result; 161: } 162: if (fetestexcept (FE_UNDERFLOW) == 0) 163: { 164: puts ("nextafter- did not underflow"); 165: ++result; 166: } 167: di = -INFINITY; 168: feclearexcept (FE_ALL_EXCEPT); 169: dm = nextafter (zero, inf); 170: if (dm < 0.0 || dm >= DBL_MIN) 171: { 172: puts ("nextafter+ failed"); 173: ++result; 174: } 175: if (fetestexcept (FE_UNDERFLOW) == 0) 176: { 177: puts ("nextafter+ did not underflow"); 178: ++result; 179: } 180: feclearexcept (FE_ALL_EXCEPT); 181: if (nextafter (dm, di) != 0.0) 182: { 183: puts ("nextafter+ failed"); 184: ++result; 185: } 186: if (fetestexcept (FE_UNDERFLOW) == 0) 187: { 188: puts ("nextafter+ did not underflow"); 189: ++result; 190: } 191: feclearexcept (FE_ALL_EXCEPT); 192: dm = nextafter (copysign (zero, -1.0), -inf); 193: if (dm > 0.0 || dm <= -DBL_MIN) 194: { 195: puts ("nextafter- failed"); 196: ++result; 197: } 198: if (fetestexcept (FE_UNDERFLOW) == 0) 199: { 200: puts ("nextafter- did not underflow"); 201: ++result; 202: } 203: feclearexcept (FE_ALL_EXCEPT); 204: if (nextafter (dm, -di) != 0.0) 205: { 206: puts ("nextafter- failed"); 207: ++result; 208: } 209: if (fetestexcept (FE_UNDERFLOW) == 0) 210: { 211: puts ("nextafter- did not underflow"); 212: ++result; 213: } 214: 215: #ifndef NO_LONG_DOUBLE 216: long double li = INFINITY; 217: long double lm = LDBL_MAX; 218: feclearexcept (FE_ALL_EXCEPT); 219: if (nextafterl (lm, li) != li) 220: { 221: puts ("nextafterl+ failed"); 222: ++result; 223: } 224: if (fetestexcept (FE_OVERFLOW) == 0) 225: { 226: puts ("nextafterl+ did not overflow"); 227: ++result; 228: } 229: feclearexcept (FE_ALL_EXCEPT); 230: if (nextafterl (-lm, -li) != -li) 231: { 232: puts ("nextafterl failed"); 233: ++result; 234: } 235: if (fetestexcept (FE_OVERFLOW) == 0) 236: { 237: puts ("nextafterl- did not overflow"); 238: ++result; 239: } 240: 241: li = 0; 242: lm = LDBL_MIN; 243: feclearexcept (FE_ALL_EXCEPT); 244: li = nextafterl (lm, li); 245: if (li < 0 || li >= LDBL_MIN) 246: { 247: puts ("nextafterl+ failed"); 248: ++result; 249: } 250: if (fetestexcept (FE_UNDERFLOW) == 0) 251: { 252: puts ("nextafterl+ did not underflow"); 253: ++result; 254: } 255: li = 0; 256: feclearexcept (FE_ALL_EXCEPT); 257: li = nextafterl (-lm, -li); 258: if (li > 0 || li <= -LDBL_MIN) 259: { 260: puts ("nextafterl- failed"); 261: ++result; 262: } 263: if (fetestexcept (FE_UNDERFLOW) == 0) 264: { 265: puts ("nextafterl- did not underflow"); 266: ++result; 267: } 268: li = -INFINITY; 269: feclearexcept (FE_ALL_EXCEPT); 270: lm = nextafterl (zero, inf); 271: if (lm < 0.0 || lm >= LDBL_MIN) 272: { 273: puts ("nextafterl+ failed"); 274: ++result; 275: } 276: if (fetestexcept (FE_UNDERFLOW) == 0) 277: { 278: puts ("nextafterl+ did not underflow"); 279: ++result; 280: } 281: feclearexcept (FE_ALL_EXCEPT); 282: if (nextafterl (lm, li) != 0.0) 283: { 284: puts ("nextafterl+ failed"); 285: ++result; 286: } 287: if (fetestexcept (FE_UNDERFLOW) == 0) 288: { 289: puts ("nextafterl+ did not underflow"); 290: ++result; 291: } 292: feclearexcept (FE_ALL_EXCEPT); 293: lm = nextafterl (copysign (zero, -1.0), -inf); 294: if (lm > 0.0 || lm <= -LDBL_MIN) 295: { 296: puts ("nextafterl- failed"); 297: ++result; 298: } 299: if (fetestexcept (FE_UNDERFLOW) == 0) 300: { 301: puts ("nextafterl- did not underflow"); 302: ++result; 303: } 304: feclearexcept (FE_ALL_EXCEPT); 305: if (nextafterl (lm, -li) != 0.0) 306: { 307: puts ("nextafterl- failed"); 308: ++result; 309: } 310: if (fetestexcept (FE_UNDERFLOW) == 0) 311: { 312: puts ("nextafterl- did not underflow"); 313: ++result; 314: } 315: #endif 316: 317: return result; 318: }