Module Name: src Committed By: riastradh Date: Sun Nov 5 21:13:07 UTC 2023
Modified Files: src/tests/lib/libm: t_fenv.c Log Message: t_fenv: Improve diagnostics when rounding mode tests fail. Print the correct input, and print the rounding mode for clarity so you don't have to cross-reference it by line number. PR port-mips/57680 XXX pullup-10 To generate a diff of this commit: cvs rdiff -u -r1.10 -r1.11 src/tests/lib/libm/t_fenv.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_fenv.c diff -u src/tests/lib/libm/t_fenv.c:1.10 src/tests/lib/libm/t_fenv.c:1.11 --- src/tests/lib/libm/t_fenv.c:1.10 Sun Nov 5 16:28:05 2023 +++ src/tests/lib/libm/t_fenv.c Sun Nov 5 21:13:06 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: t_fenv.c,v 1.10 2023/11/05 16:28:05 riastradh Exp $ */ +/* $NetBSD: t_fenv.c,v 1.11 2023/11/05 21:13:06 riastradh Exp $ */ /*- * Copyright (c) 2014 The NetBSD Foundation, Inc. @@ -29,7 +29,7 @@ * POSSIBILITY OF SUCH DAMAGE. */ #include <sys/cdefs.h> -__RCSID("$NetBSD: t_fenv.c,v 1.10 2023/11/05 16:28:05 riastradh Exp $"); +__RCSID("$NetBSD: t_fenv.c,v 1.11 2023/11/05 21:13:06 riastradh Exp $"); #include <atf-c.h> @@ -37,7 +37,7 @@ __RCSID("$NetBSD: t_fenv.c,v 1.10 2023/1 #ifdef __HAVE_FENV /* XXXGCC gcc lacks #pragma STDC FENV_ACCESS */ -/* XXXCLANG clang lacks #pragma STDC FENV_ACCESS on some ports */ +/* XXXclang clang lacks #pragma STDC FENV_ACCESS on some ports */ #if !defined(__GNUC__) #pragma STDC FENV_ACCESS ON #endif @@ -111,7 +111,7 @@ checkfltrounds(void) } static void -checkrounding(int feround) +checkrounding(int feround, const char *name) { volatile double ulp1 = DBL_EPSILON; double y1 = -1 + ulp1/4; @@ -121,29 +121,45 @@ checkrounding(int feround) case FE_TONEAREST: { double z1 = -1; double z2 = 1 + 2*ulp1; - ATF_CHECK_EQ_MSG(y1, z1, "expected=%a actual=%a", y1, z1); - ATF_CHECK_EQ_MSG(y2, z2, "expected=%a actual=%a", y1, z2); + ATF_CHECK_EQ_MSG(y1, z1, "%s[-1 + ulp(1)/4]" + " expected=%a actual=%a", + name, y1, z1); + ATF_CHECK_EQ_MSG(y2, z2, "%s[1 + 3*(ulp(1)/2)]" + " expected=%a actual=%a", + name, y2, z2); break; } case FE_TOWARDZERO: { double z1 = -1 + ulp1/2; double z2 = 1 + ulp1; - ATF_CHECK_EQ_MSG(y1, z1, "expected=%a actual=%a", y1, z1); - ATF_CHECK_EQ_MSG(y2, z2, "expected=%a actual=%a", y1, z2); + ATF_CHECK_EQ_MSG(y1, z1, "%s[-1 + ulp(1)/4]" + " expected=%a actual=%a", + name, y1, z1); + ATF_CHECK_EQ_MSG(y2, z2, "%s[1 + 3*(ulp(1)/2)]" + " expected=%a actual=%a", + name, y2, z2); break; } case FE_UPWARD: { double z1 = -1 + ulp1/2; double z2 = 1 + 2*ulp1; - ATF_CHECK_EQ_MSG(y1, z1, "expected=%a actual=%a", y1, z1); - ATF_CHECK_EQ_MSG(y2, z2, "expected=%a actual=%a", y1, z2); + ATF_CHECK_EQ_MSG(y1, z1, "%s[-1 + ulp(1)/4]" + " expected=%a actual=%a", + name, y1, z1); + ATF_CHECK_EQ_MSG(y2, z2, "%s[1 + 3*(ulp(1)/2)]" + " expected=%a actual=%a", + name, y2, z2); break; } case FE_DOWNWARD: { double z1 = -1; double z2 = 1 + ulp1; - ATF_CHECK_EQ_MSG(y1, z1, "expected=%a actual=%a", y1, z1); - ATF_CHECK_EQ_MSG(y2, z2, "expected=%a actual=%a", y1, z2); + ATF_CHECK_EQ_MSG(y1, z1, "%s[-1 + ulp(1)/4]" + " expected=%a actual=%a", + name, y1, z1); + ATF_CHECK_EQ_MSG(y2, z2, "%s[1 + 3*(ulp(1)/2)]" + " expected=%a actual=%a", + name, y2, z2); break; } } @@ -162,35 +178,35 @@ ATF_TC_BODY(fegetround, tc) { FPU_RND_PREREQ(); - checkrounding(FE_TONEAREST); + checkrounding(FE_TONEAREST, "FE_TONEAREST"); fpsetround(FP_RZ); ATF_CHECK_EQ_MSG(fegetround(), FE_TOWARDZERO, "fegetround()=%d FE_TOWARDZERO=%d", fegetround(), FE_TOWARDZERO); checkfltrounds(); - checkrounding(FE_TOWARDZERO); + checkrounding(FE_TOWARDZERO, "FE_TOWARDZERO"); fpsetround(FP_RM); ATF_CHECK_EQ_MSG(fegetround(), FE_DOWNWARD, "fegetround()=%d FE_DOWNWARD=%d", fegetround(), FE_DOWNWARD); checkfltrounds(); - checkrounding(FE_DOWNWARD); + checkrounding(FE_DOWNWARD, "FE_DOWNWARD"); fpsetround(FP_RN); ATF_CHECK_EQ_MSG(fegetround(), FE_TONEAREST, "fegetround()=%d FE_TONEAREST=%d", fegetround(), FE_TONEAREST); checkfltrounds(); - checkrounding(FE_TONEAREST); + checkrounding(FE_TONEAREST, "FE_TONEAREST"); fpsetround(FP_RP); ATF_CHECK_EQ_MSG(fegetround(), FE_UPWARD, "fegetround()=%d FE_UPWARD=%d", fegetround(), FE_UPWARD); checkfltrounds(); - checkrounding(FE_UPWARD); + checkrounding(FE_UPWARD, "FE_UPWARD"); } ATF_TC(fesetround); @@ -206,35 +222,35 @@ ATF_TC_BODY(fesetround, tc) { FPU_RND_PREREQ(); - checkrounding(FE_TONEAREST); + checkrounding(FE_TONEAREST, "FE_TONEAREST"); fesetround(FE_TOWARDZERO); ATF_CHECK_EQ_MSG(fpgetround(), FP_RZ, "fpgetround()=%d FP_RZ=%d", (int)fpgetround(), (int)FP_RZ); checkfltrounds(); - checkrounding(FE_TOWARDZERO); + checkrounding(FE_TOWARDZERO, "FE_TOWARDZERO"); fesetround(FE_DOWNWARD); ATF_CHECK_EQ_MSG(fpgetround(), FP_RM, "fpgetround()=%d FP_RM=%d", (int)fpgetround(), (int)FP_RM); checkfltrounds(); - checkrounding(FE_DOWNWARD); + checkrounding(FE_DOWNWARD, "FE_DOWNWARD"); fesetround(FE_TONEAREST); ATF_CHECK_EQ_MSG(fpgetround(), FP_RN, "fpgetround()=%d FP_RN=%d", (int)fpgetround(), (int)FP_RN); checkfltrounds(); - checkrounding(FE_TONEAREST); + checkrounding(FE_TONEAREST, "FE_TONEAREST"); fesetround(FE_UPWARD); ATF_CHECK_EQ_MSG(fpgetround(), FP_RP, "fpgetround()=%d FP_RP=%d", (int)fpgetround(), (int)FP_RP); checkfltrounds(); - checkrounding(FE_UPWARD); + checkrounding(FE_UPWARD, "FE_UPWARD"); } ATF_TC(fegetexcept);