Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/tests/lib/libm Add a test checking nearbyint(), using the sa...



details:   https://anonhg.NetBSD.org/src/rev/077113283718
branches:  trunk
changeset: 825603:077113283718
user:      he <he%NetBSD.org@localhost>
date:      Mon Jul 24 18:14:46 2017 +0000

description:
Add a test checking nearbyint(), using the same table as used by
the existing lrint() test.

diffstat:

 tests/lib/libm/t_fe_round.c |  44 +++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 43 insertions(+), 1 deletions(-)

diffs (73 lines):

diff -r 003535c7808d -r 077113283718 tests/lib/libm/t_fe_round.c
--- a/tests/lib/libm/t_fe_round.c       Mon Jul 24 18:13:36 2017 +0000
+++ b/tests/lib/libm/t_fe_round.c       Mon Jul 24 18:14:46 2017 +0000
@@ -93,10 +93,40 @@
        }
 }
 
+ATF_TC(fe_nearbyint);
+ATF_TC_HEAD(fe_nearbyint, tc)
+{
+       atf_tc_set_md_var(tc, "descr","Checking IEEE 754 rounding modes using nearbyint");
+}
+
+ATF_TC_BODY(fe_nearbyint, tc)
+{
+       double received;
+
+       for (unsigned int i = 0; i < __arraycount(values); i++) {
+               fesetround(values[i].round_mode);
+
+               received = nearbyint(values[i].input);
+               ATF_CHECK_MSG(
+                   (fabs(received - values[i].expected) < EPSILON),
+                   "nearbyint rounding wrong, difference too large\n"
+                   "input: %f (index %d): got %f, expected %ld\n",
+                   values[i].input, i, received, values[i].expected);
+
+               /* Do we get the same rounding mode out? */
+               ATF_CHECK_MSG(
+                   (fegetround() == values[i].round_mode),
+                   "Didn't get the same rounding mode out!\n"
+                   "(index %d) fed in %d rounding mode, got %d out\n",
+                   i, values[i].round_mode, fegetround());
+       }
+}
+
 ATF_TP_ADD_TCS(tp)
 {
 
        ATF_TP_ADD_TC(tp, fe_round);
+       ATF_TP_ADD_TC(tp, fe_nearbyint);
 
        return atf_no_error();
 }
@@ -109,15 +139,27 @@
            "dummy test case - no fenv.h support");
 }
 
-
 ATF_TC_BODY(t_nofe_round, tc)
 {
        atf_tc_skip("no fenv.h support on this architecture");
 }
 
+ATF_TC_HEAD(t_nofe_nearbyint, tc)
+{
+       atf_tc_set_md_var(tc, "descr",
+           "dummy test case - no fenv.h support");
+}
+
+ATF_TC_BODY(t_nofe_nearbyint, tc)
+{
+       atf_tc_skip("no fenv.h support on this architecture");
+}
+
+
 ATF_TP_ADD_TCS(tp)
 {
        ATF_TP_ADD_TC(tp, t_nofe_round);
+       ATF_TP_ADD_TC(tp, t_nofe_nearbyint);
        return atf_no_error();
 }
 



Home | Main Index | Thread Index | Old Index