From 4b4849e54740efe153632dfb14052d7210cea6c6 Mon Sep 17 00:00:00 2001 From: Szabolcs Nagy Date: Aug 16 2013 23:50:14 +0000 Subject: remove accidentally committed core, add festenv, fegetenv test --- diff --git a/src/math/core b/src/math/core deleted file mode 100644 index b59d43f..0000000 Binary files a/src/math/core and /dev/null differ diff --git a/src/math/fenv.c b/src/math/fenv.c index ef358f0..e15f0bc 100644 --- a/src/math/fenv.c +++ b/src/math/fenv.c @@ -43,6 +43,7 @@ static void test_except() { #pragma STDC FENV_ACCESS ON int i,r; + fenv_t env; for (i=0; i < sizeof te/sizeof*te; i++) { feclearexcept(FE_ALL_EXCEPT); @@ -55,6 +56,23 @@ static void test_except() error("feraiseexcept(%s) want %d got %d\n", te[i].name, te[i].i, r); } + + r = fegetenv(&env); + if (r != 0) + error("fegetenv(&env) = %d\n", r); + i = fetestexcept(FE_ALL_EXCEPT); + r = fesetenv(FE_DFL_ENV); + if (r != 0) + error("fesetenv(FE_DFL_ENV) = %d\n", r); + r = fetestexcept(FE_ALL_EXCEPT); + if (r != 0) + error("fesetenv(FE_DFL_ENV) did not clear exceptions: 0x%x\n", r); + r = fesetenv(&env); + if (r != 0) + error("fesetenv(&env) = %d\n", r); + r = fetestexcept(FE_ALL_EXCEPT); + if (r != i) + error("fesetenv(&env) did not restore exceptions: 0x%x\n", r); } static struct { @@ -77,6 +95,7 @@ static void test_round() { #pragma STDC FENV_ACCESS ON int i,r; + fenv_t env; for (i=0; i < sizeof tr/sizeof*tr; i++) { if (tr[i].i < 0) @@ -90,11 +109,28 @@ static void test_round() for (i=0; i < sizeof tr/sizeof*tr; i++) { r = fesetround(tr[i].i); if (r != 0) - error("fesetround %d\n", r); + error("fesetround(%s) = %d\n", tr[i].name, r); r = fegetround(); if (r != tr[i].i) - error("fegetround %x wanted %x\n", r, tr[i].i); + error("fegetround() = 0x%x, wanted 0x%x (%s)\n", r, tr[i].i, tr[i].name); } + + r = fegetenv(&env); + if (r != 0) + error("fegetenv(&env) = %d\n", r); + i = fegetround(); + r = fesetenv(FE_DFL_ENV); + if (r != 0) + error("fesetenv(FE_DFL_ENV) = %d\n", r); + r = fegetround(); + if (r != FE_TONEAREST) + error("fesetenv(FE_DFL_ENV) did not set FE_TONEAREST (0x%x), got 0x%x\n", FE_TONEAREST, r); + r = fesetenv(&env); + if (r != 0) + error("fesetenv(&env) = %d\n", r); + r = fegetround(); + if (r != i) + error("fesetenv(&env) did not restore 0x%x, got 0x%x\n", i, r); } /* ieee double precision add operation */