Module Name: src Committed By: maya Date: Sun Jun 3 08:39:00 UTC 2018
Modified Files: src/tests/lib/libm: t_scalbn.c Log Message: Test and clear exception around scalbn calls. Second part of PR bin/51834. ifdef out vax to avoid netbsd-specific macros. To generate a diff of this commit: cvs rdiff -u -r1.14 -r1.15 src/tests/lib/libm/t_scalbn.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/tests/lib/libm/t_scalbn.c diff -u src/tests/lib/libm/t_scalbn.c:1.14 src/tests/lib/libm/t_scalbn.c:1.15 --- src/tests/lib/libm/t_scalbn.c:1.14 Fri Jan 13 21:09:12 2017 +++ src/tests/lib/libm/t_scalbn.c Sun Jun 3 08:39:00 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: t_scalbn.c,v 1.14 2017/01/13 21:09:12 agc Exp $ */ +/* $NetBSD: t_scalbn.c,v 1.15 2018/06/03 08:39:00 maya Exp $ */ /*- * Copyright (c) 2011 The NetBSD Foundation, Inc. @@ -29,12 +29,13 @@ * POSSIBILITY OF SUCH DAMAGE. */ #include <sys/cdefs.h> -__RCSID("$NetBSD: t_scalbn.c,v 1.14 2017/01/13 21:09:12 agc Exp $"); +__RCSID("$NetBSD: t_scalbn.c,v 1.15 2018/06/03 08:39:00 maya Exp $"); #include <math.h> #include <limits.h> #include <float.h> #include <errno.h> +#include <fenv.h> #include <atf-c.h> @@ -46,16 +47,17 @@ struct testcase { double inval; double result; int error; + int except; }; struct testcase test_vals[] = { - { 0, 1.00085, 1.00085, 0 }, - { 0, 0.99755, 0.99755, 0 }, - { 0, -1.00085, -1.00085, 0 }, - { 0, -0.99755, -0.99755, 0 }, - { 1, 1.00085, 2.0* 1.00085, 0 }, - { 1, 0.99755, 2.0* 0.99755, 0 }, - { 1, -1.00085, 2.0* -1.00085, 0 }, - { 1, -0.99755, 2.0* -0.99755, 0 }, + { 0, 1.00085, 1.00085, 0, 0 }, + { 0, 0.99755, 0.99755, 0, 0 }, + { 0, -1.00085, -1.00085, 0, 0 }, + { 0, -0.99755, -0.99755, 0, 0 }, + { 1, 1.00085, 2.0* 1.00085, 0, 0 }, + { 1, 0.99755, 2.0* 0.99755, 0, 0 }, + { 1, -1.00085, 2.0* -1.00085, 0, 0 }, + { 1, -0.99755, 2.0* -0.99755, 0, 0 }, /* * We could add more corner test cases here, but we would have to @@ -82,10 +84,19 @@ ATF_TC_BODY(scalbn_val, tc) for (i = 0; i < tcnt; i++) { errno = 0; +#ifndef __vax__ + feclearexcept(FE_ALL_EXCEPT); +#endif rv = scalbn(tests[i].inval, tests[i].exp); ATF_CHECK_EQ_MSG(errno, tests[i].error, "test %zu: errno %d instead of %d", i, errno, tests[i].error); +#ifndef __vax__ + ATF_CHECK_EQ_MSG(errno, tests[i].error, + "test %zu: fetestexcept %d instead of %d", i, + fetestexcept(FE_INVALID | FE_DIVBYZERO | FE_OVERFLOW | FE_UNDERFLOW), + tests[i].except); +#endif ATF_CHECK_MSG(fabs(rv-tests[i].result)<2.0*DBL_EPSILON, "test %zu: return value %g instead of %g (difference %g)", i, rv, tests[i].result, tests[i].result-rv);