Module Name: src
Committed By: riastradh
Date: Thu May 2 00:00:47 UTC 2024
Modified Files:
src/tests/lib/libm: t_fe_round.c
Log Message:
tests/lib/libm/t_fe_round: Tidy up nearbyint test.
Prompted by PR lib/58054.
To generate a diff of this commit:
cvs rdiff -u -r1.9 -r1.10 src/tests/lib/libm/t_fe_round.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_fe_round.c
diff -u src/tests/lib/libm/t_fe_round.c:1.9 src/tests/lib/libm/t_fe_round.c:1.10
--- src/tests/lib/libm/t_fe_round.c:1.9 Mon Aug 21 17:11:18 2017
+++ src/tests/lib/libm/t_fe_round.c Thu May 2 00:00:47 2024
@@ -18,6 +18,23 @@
#define EPSILON 0.001
+static const char *
+rmname(int rm)
+{
+ switch (rm) {
+ case FE_TOWARDZERO:
+ return "FE_TOWARDZERO";
+ case FE_DOWNWARD:
+ return "FE_DOWNWARD";
+ case FE_UPWARD:
+ return "FE_UPWARD";
+ case FE_TONEAREST:
+ return "FE_TONEAREST";
+ default:
+ return "unknown";
+ }
+}
+
static const struct {
int round_mode;
double input;
@@ -96,29 +113,33 @@ ATF_TC_BODY(fe_round, tc)
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_set_md_var(tc, "descr",
+ "Checking IEEE 754 rounding modes using nearbyint");
}
ATF_TC_BODY(fe_nearbyint, tc)
{
- double received;
+ double received, ipart, fpart;
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);
+ fpart = modf(received, &ipart);
+ ATF_CHECK_MSG(fpart == 0,
+ "%s nearbyint(%f) has fractional part %f",
+ rmname(values[i].round_mode), values[i].input, fpart);
+ ATF_CHECK_MSG((long int)received == values[i].expected,
+ "%s [%u] nearbyint(%f) got %f, expected %ld\n",
+ rmname(values[i].round_mode),
+ i, values[i].input, 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_CHECK_MSG(fegetround() == values[i].round_mode,
+ "[%u] set %d (%s), got %d (%s)",
+ i,
+ values[i].round_mode, rmname(values[i].round_mode),
+ fegetround(), rmname(fegetround()));
}
}