|
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 |
}
|