1#include <math.h> 2#include <fenv.h> 3 4extern void abort(void); 5 6#define C99_MATH_TESTS(nan, inf, huge, norm1, norm2, norm3, sub, zero, neg) \ 7{ \ 8 if (feclearexcept (FE_ALL_EXCEPT) != 0) \ 9 abort(); \ 10 \ 11 \ 12 if (fpclassify (nan) != FP_NAN) \ 13 abort (); \ 14 \ 15 if (fpclassify (inf) != FP_INFINITE) \ 16 abort (); \ 17 \ 18 if (fpclassify (huge) != FP_INFINITE) \ 19 abort (); \ 20 \ 21 if (fpclassify (norm1) != FP_NORMAL) \ 22 abort (); \ 23 \ 24 if (fpclassify (norm2) != FP_NORMAL) \ 25 abort (); \ 26 \ 27 if (fpclassify (norm3) != FP_NORMAL) \ 28 abort (); \ 29 \ 30 if (fpclassify (sub) != FP_SUBNORMAL) \ 31 abort (); \ 32 \ 33 if (fpclassify (zero) != FP_ZERO) \ 34 abort (); \ 35 \ 36 \ 37 if (!isnan (nan)) \ 38 abort (); \ 39 \ 40 if (isnan (inf)) \ 41 abort (); \ 42 \ 43 if (isnan (huge)) \ 44 abort (); \ 45 \ 46 if (isnan (norm1)) \ 47 abort (); \ 48 \ 49 if (isnan (norm2)) \ 50 abort (); \ 51 \ 52 if (isnan (norm3)) \ 53 abort (); \ 54 \ 55 if (isnan (sub)) \ 56 abort (); \ 57 \ 58 if (isnan (zero)) \ 59 abort (); \ 60 \ 61 \ 62 if (isinf (nan)) \ 63 abort (); \ 64 \ 65 if (!isinf (inf)) \ 66 abort (); \ 67 \ 68 if (!isinf (huge)) \ 69 abort (); \ 70 \ 71 if (isinf (norm1)) \ 72 abort (); \ 73 \ 74 if (isinf (norm2)) \ 75 abort (); \ 76 \ 77 if (isinf (norm3)) \ 78 abort (); \ 79 \ 80 if (isinf (sub)) \ 81 abort (); \ 82 \ 83 if (isinf (zero)) \ 84 abort (); \ 85 \ 86 \ 87 if (isfinite (nan)) \ 88 abort (); \ 89 \ 90 if (isfinite (inf)) \ 91 abort (); \ 92 \ 93 if (isfinite (huge)) \ 94 abort (); \ 95 \ 96 if (!isfinite (norm1)) \ 97 abort (); \ 98 \ 99 if (!isfinite (norm2)) \ 100 abort (); \ 101 \ 102 if (!isfinite (norm3)) \ 103 abort (); \ 104 \ 105 if (!isfinite (sub)) \ 106 abort (); \ 107 \ 108 if (!isfinite (zero)) \ 109 abort (); \ 110 \ 111 \ 112 if (isnormal (nan)) \ 113 abort (); \ 114 \ 115 if (isnormal (inf)) \ 116 abort (); \ 117 \ 118 if (isnormal (huge)) \ 119 abort (); \ 120 \ 121 if (!isnormal (norm1)) \ 122 abort (); \ 123 \ 124 if (!isnormal (norm2)) \ 125 abort (); \ 126 \ 127 if (!isnormal (norm3)) \ 128 abort (); \ 129 \ 130 if (isnormal (sub)) \ 131 abort (); \ 132 \ 133 if (isnormal (zero)) \ 134 abort (); \ 135 \ 136 \ 137 if (!!signbit (nan) != neg) \ 138 abort (); \ 139 \ 140 if (!!signbit (inf) != neg) \ 141 abort (); \ 142 \ 143 if (!!signbit (huge) != neg) \ 144 abort (); \ 145 \ 146 if (!!signbit (norm1) != neg) \ 147 abort (); \ 148 \ 149 if (!!signbit (norm2) != neg) \ 150 abort (); \ 151 \ 152 if (!!signbit (norm3) != neg) \ 153 abort (); \ 154 \ 155 if (!!signbit (sub) != neg) \ 156 abort (); \ 157 \ 158 if (!!signbit (zero) != neg) \ 159 abort (); \ 160 \ 161 \ 162 if (neg) \ 163 { \ 164 if (!isless ((inf), (norm1))) \ 165 abort (); \ 166 \ 167 if (!isless ((inf), (norm2))) \ 168 abort (); \ 169 \ 170 if (!isless ((inf), (norm3))) \ 171 abort (); \ 172 \ 173 if (!islessequal ((inf), (huge))) \ 174 abort (); \ 175 \ 176 if (!isgreater ((norm1), (inf))) \ 177 abort (); \ 178 \ 179 if (!isgreater ((norm2), (inf))) \ 180 abort (); \ 181 \ 182 if (!isgreater ((norm3), (inf))) \ 183 abort (); \ 184 \ 185 if (!isgreaterequal ((huge), (inf))) \ 186 abort (); \ 187 } \ 188 else \ 189 { \ 190 if (!isgreater ((inf), (norm1))) \ 191 abort (); \ 192 \ 193 if (!isgreater ((inf), (norm2))) \ 194 abort (); \ 195 \ 196 if (!isgreater ((inf), (norm3))) \ 197 abort (); \ 198 \ 199 if (!isgreaterequal ((inf), (huge))) \ 200 abort (); \ 201 \ 202 if (!isless ((norm1), (inf))) \ 203 abort (); \ 204 \ 205 if (!isless ((norm2), (inf))) \ 206 abort (); \ 207 \ 208 if (!isless ((norm3), (inf))) \ 209 abort (); \ 210 \ 211 if (!islessequal ((huge), (inf))) \ 212 abort (); \ 213 } \ 214 \ 215 if (!islessgreater ((inf), (norm1))) \ 216 abort (); \ 217 \ 218 if (!islessgreater ((inf), (norm2))) \ 219 abort (); \ 220 \ 221 if (!islessgreater ((inf), (norm3))) \ 222 abort (); \ 223 \ 224 if (!isunordered ((nan), (norm1))) \ 225 abort (); \ 226 \ 227 if (!isunordered ((nan), (norm2))) \ 228 abort (); \ 229 \ 230 if (!isunordered ((nan), (norm3))) \ 231 abort (); \ 232 \ 233 \ 234 if (fetestexcept (FE_ALL_EXCEPT) != 0) \ 235 abort(); \ 236} 237