Blame src/math/fenv.c

nsz 0c7d46
#include "test.h"
nsz 0c7d46
#include <math.h>
nsz 0c7d46
#include <stdint.h>
nsz 0c7d46
#include <fenv.h>
nsz 0c7d46
#include <stdio.h>
nsz 0c7d46
#include <float.h>
nsz 0c7d46
nsz 0c7d46
nsz 0c7d46
void test_fenv()
nsz 0c7d46
{
nsz 0c7d46
	int r;
nsz 0c7d46
nsz 0c7d46
	r = fesetround(FE_UPWARD);
nsz 0c7d46
	if (r != 0)
nsz 0c7d46
		error("fesetround %d\n", r);
nsz 0c7d46
	r = fegetround();
nsz 0c7d46
	if (r != FE_UPWARD)
nsz 0c7d46
		error("fegetround %x wanted %x\n", r, FE_UPWARD);
nsz 0c7d46
	r = fesetround(FE_TONEAREST);
nsz 0c7d46
	if (r != 0)
nsz 0c7d46
		error("fesetround %d\n", r);
nsz 0c7d46
	r = fegetround();
nsz 0c7d46
	if (r != FE_TONEAREST)
nsz 0c7d46
		error("fegetround %x wanted %x\n", r, FE_TONEAREST);
nsz 0c7d46
}
nsz 0c7d46
nsz 0c7d46
void test_fenv_except()
nsz 0c7d46
{
nsz 0c7d46
	int i,r;
nsz 0c7d46
nsz 0c7d46
	for (i = 0; i < 64; i++) {
nsz 0c7d46
		feclearexcept(FE_ALL_EXCEPT);
nsz 0c7d46
nsz 0c7d46
		r = feraiseexcept(i);
nsz 0c7d46
		if (r)
nsz 0c7d46
			error("feraise %d returned %d\n", i, r);
nsz 0c7d46
		r = fetestexcept(FE_ALL_EXCEPT);
nsz 0c7d46
		if (r != i)
nsz 0c7d46
			error("feraise want %d got %d\n", i, r);
nsz 0c7d46
	}
nsz 0c7d46
}
nsz 0c7d46
nsz 0c7d46
void bench_feraiseexcept(int N)
nsz 0c7d46
{
nsz 0c7d46
	int i;
nsz 0c7d46
	for (i = 0; i < N; i++) {
nsz 0c7d46
		feraiseexcept(i&63);
nsz 0c7d46
	}
nsz 0c7d46
}
nsz 0c7d46
nsz 0c7d46
void bench_fesetround(int N)
nsz 0c7d46
{
nsz 0c7d46
	int i;
nsz 0c7d46
	int r = 0;
nsz 0c7d46
nsz 0c7d46
	for (i = 0; i < N; i++) {
nsz 0c7d46
		r ^= 0x400;
nsz 0c7d46
		fesetround(r);
nsz 0c7d46
	}
nsz 0c7d46
}