int main(int argc, char *argv[]) { int rmodes[] = { FE_TONEAREST, FE_UPWARD, FE_DOWNWARD, FE_TOWARDZERO }; int i; printf("1..19\n"); for (i = 0; i < 4; i++) { fesetround(rmodes[i]); test_zeroes(); printf("ok %d - fma zeroes\n", i + 1); } for (i = 0; i < 4; i++) { fesetround(rmodes[i]); test_infinities(); printf("ok %d - fma infinities\n", i + 5); } fesetround(FE_TONEAREST); test_nans(); printf("ok 9 - fma NaNs\n"); for (i = 0; i < 4; i++) { fesetround(rmodes[i]); test_small_z(); printf("ok %d - fma small z\n", i + 10); } for (i = 0; i < 4; i++) { fesetround(rmodes[i]); test_big_z(); printf("ok %d - fma big z\n", i + 14); } fesetround(FE_TONEAREST); test_accuracy(); printf("ok 18 - fma accuracy\n"); test_double_rounding(); printf("ok 19 - fma double rounding\n"); /* * TODO: * - Tests for subnormals * - Cancellation tests (e.g., z = (double)x*y, but x*y is inexact) */ return (0); }
int main(void) { int rmodes[] = { FE_TONEAREST, FE_UPWARD, FE_DOWNWARD, FE_TOWARDZERO }; unsigned i, j; #if defined(__i386__) printf("1..0 # SKIP all testcases fail on i386\n"); exit(0); #endif j = 1; printf("1..19\n"); for (i = 0; i < nitems(rmodes); i++, j++) { printf("rmode = %d\n", rmodes[i]); fesetround(rmodes[i]); test_zeroes(); printf("ok %d - fma zeroes\n", j); } for (i = 0; i < nitems(rmodes); i++, j++) { #if defined(__amd64__) printf("ok %d # SKIP testcase fails assertion on " "amd64\n", j); continue; #else printf("rmode = %d\n", rmodes[i]); fesetround(rmodes[i]); test_infinities(); printf("ok %d - fma infinities\n", j); #endif } fesetround(FE_TONEAREST); test_nans(); printf("ok %d - fma NaNs\n", j); j++; for (i = 0; i < nitems(rmodes); i++, j++) { printf("rmode = %d\n", rmodes[i]); fesetround(rmodes[i]); test_small_z(); printf("ok %d - fma small z\n", j); } for (i = 0; i < nitems(rmodes); i++, j++) { printf("rmode = %d\n", rmodes[i]); fesetround(rmodes[i]); test_big_z(); printf("ok %d - fma big z\n", j); } fesetround(FE_TONEAREST); test_accuracy(); printf("ok %d - fma accuracy\n", j); j++; test_double_rounding(); printf("ok %d - fma double rounding\n", j); j++; /* * TODO: * - Tests for subnormals * - Cancellation tests (e.g., z = (double)x*y, but x*y is inexact) */ return (0); }