Example #1
0
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);
}
Example #2
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);
}