Module Name: src
Committed By: martin
Date: Fri Aug 23 15:41:12 UTC 2024
Modified Files:
src/tests/lib/libc/gen [netbsd-10]: t_fpclassify.c
Log Message:
Pull up following revision(s) (requested by riastradh in ticket #790):
tests/lib/libc/gen/t_fpclassify.c: revision 1.4
tests/lib/libc/gen/t_fpclassify.c: revision 1.5
tests/lib/libc/gen/t_fpclassify: Enable long double tests.
The necessary long double symbols should all be available now. If
there are any architectures where they're not, we can fix those
architectures.
tests/lib/libc/gen/t_fpclassify: Spruce this up a bit.
Provide more useful diagnostics when tests fail.
To generate a diff of this commit:
cvs rdiff -u -r1.3 -r1.3.52.1 src/tests/lib/libc/gen/t_fpclassify.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/libc/gen/t_fpclassify.c
diff -u src/tests/lib/libc/gen/t_fpclassify.c:1.3 src/tests/lib/libc/gen/t_fpclassify.c:1.3.52.1
--- src/tests/lib/libc/gen/t_fpclassify.c:1.3 Sat Oct 1 21:47:08 2011
+++ src/tests/lib/libc/gen/t_fpclassify.c Fri Aug 23 15:41:12 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: t_fpclassify.c,v 1.3 2011/10/01 21:47:08 christos Exp $ */
+/* $NetBSD: t_fpclassify.c,v 1.3.52.1 2024/08/23 15:41:12 martin Exp $ */
/*-
* Copyright (c) 2011 The NetBSD Foundation, Inc.
@@ -61,35 +61,67 @@ ATF_TC_BODY(fpclassify_float, tc)
int e, i;
d0 = FLT_MIN;
- ATF_REQUIRE_EQ(fpclassify(d0), FP_NORMAL);
+ ATF_CHECK_EQ_MSG(fpclassify(d0), FP_NORMAL,
+ "fpclassify(%a)=%d FP_NORMAL=%d",
+ d0, fpclassify(d0), FP_NORMAL);
f = frexpf(d0, &e);
- ATF_REQUIRE_EQ(e, FLT_MIN_EXP);
- ATF_REQUIRE_EQ(f, 0.5);
+ ATF_CHECK_EQ_MSG(e, FLT_MIN_EXP,
+ "frexpf(%a) returned normalized %a, exponent %d;"
+ " expected normalized %a, exponent %d",
+ d0, f, e, 0.5, FLT_MIN_EXP);
+ ATF_CHECK_EQ_MSG(f, 0.5,
+ "frexpf(%a) returned normalized %a, exponent %d;"
+ " expected normalized %a, exponent %d",
+ d0, f, e, 0.5, FLT_MIN_EXP);
d1 = d0;
/* shift a "1" bit through the mantissa (skip the implicit bit) */
for (i = 1; i < FLT_MANT_DIG; i++) {
d1 /= 2;
- ATF_REQUIRE_EQ(fpclassify(d1), FP_SUBNORMAL);
- ATF_REQUIRE(d1 > 0 && d1 < d0);
+ ATF_CHECK_EQ_MSG(fpclassify(d1), FP_SUBNORMAL,
+ "[%d] fpclassify(%a)=%d FP_SUBNORMAL=%d",
+ i, d1, fpclassify(d1), FP_SUBNORMAL);
+ ATF_CHECK_MSG(d1 > 0 && d1 < d0,
+ "[%d] d1=%a d0=%a", i, d1, d0);
d2 = ldexpf(d0, -i);
- ATF_REQUIRE_EQ(d2, d1);
+ ATF_CHECK_EQ_MSG(d2, d1, "[%d] ldexpf(%a, -%d)=%a != %a",
+ i, d0, i, d2, d1);
d2 = modff(d1, &ip);
- ATF_REQUIRE_EQ(d2, d1);
- ATF_REQUIRE_EQ(ip, 0);
+ ATF_CHECK_EQ_MSG(d2, d1,
+ "[%d] modff(%a) returned int %a, frac %a;"
+ " expected int %a, frac %a",
+ i, d1, ip, d2, 0., d1);
+ ATF_CHECK_EQ_MSG(ip, 0,
+ "[%d] modff(%a) returned int %a, frac %a;"
+ " expected int %a, frac %a",
+ i, d1, ip, d2, 0., d1);
f = frexpf(d1, &e);
- ATF_REQUIRE_EQ(e, FLT_MIN_EXP - i);
- ATF_REQUIRE_EQ(f, 0.5);
+ ATF_CHECK_EQ_MSG(e, FLT_MIN_EXP - i,
+ "[%d] frexpf(%a) returned normalized %a, exponent %d;"
+ " expected normalized %a, exponent %d",
+ i, d1, f, e, 0.5, FLT_MIN_EXP - i);
+ ATF_CHECK_EQ_MSG(f, 0.5,
+ "[%d] frexpf(%a) returned normalized %a, exponent %d;"
+ " expected normalized %a, exponent %d",
+ i, d1, f, e, 0.5, FLT_MIN_EXP - i);
}
d1 /= 2;
- ATF_REQUIRE_EQ(fpclassify(d1), FP_ZERO);
+ ATF_CHECK_EQ_MSG(fpclassify(d1), FP_ZERO,
+ "fpclassify(%a)=%d FP_ZERO=%d",
+ d1, fpclassify(d1), FP_ZERO);
f = frexpf(d1, &e);
- ATF_REQUIRE_EQ(e, 0);
- ATF_REQUIRE_EQ(f, 0);
+ ATF_CHECK_EQ_MSG(e, 0,
+ "frexpf(%a) returned normalized %a, exponent %d;"
+ " expected normalized %a, exponent %d",
+ d1, f, e, 0., 0);
+ ATF_CHECK_EQ_MSG(f, 0,
+ "frexpf(%a) returned normalized %a, exponent %d;"
+ " expected normalized %a, exponent %d",
+ d1, f, e, 0., 0);
}
ATF_TC(fpclassify_double);
@@ -105,44 +137,69 @@ ATF_TC_BODY(fpclassify_double, tc)
int e, i;
d0 = DBL_MIN;
- ATF_REQUIRE_EQ(fpclassify(d0), FP_NORMAL);
+ ATF_CHECK_EQ_MSG(fpclassify(d0), FP_NORMAL,
+ "fpclassify(%a)=%d FP_NORMAL=%d",
+ d0, fpclassify(d0), FP_NORMAL);
f = frexp(d0, &e);
- ATF_REQUIRE_EQ(e, DBL_MIN_EXP);
- ATF_REQUIRE_EQ(f, 0.5);
+ ATF_CHECK_EQ_MSG(e, DBL_MIN_EXP,
+ "frexp(%a) returned normalized %a, exponent %d;"
+ " expected normalized %a, exponent %d",
+ d0, f, e, 0.5, DBL_MIN_EXP);
+ ATF_CHECK_EQ_MSG(f, 0.5,
+ "frexp(%a) returned normalized %a, exponent %d;"
+ " expected normalized %a, exponent %d",
+ d0, f, e, 0.5, DBL_MIN_EXP);
d1 = d0;
/* shift a "1" bit through the mantissa (skip the implicit bit) */
for (i = 1; i < DBL_MANT_DIG; i++) {
d1 /= 2;
- ATF_REQUIRE_EQ(fpclassify(d1), FP_SUBNORMAL);
- ATF_REQUIRE(d1 > 0 && d1 < d0);
+ ATF_CHECK_EQ_MSG(fpclassify(d1), FP_SUBNORMAL,
+ "[%d] fpclassify(%a)=%d FP_SUBNORMAL=%d",
+ i, d1, fpclassify(d1), FP_SUBNORMAL);
+ ATF_CHECK_MSG(d1 > 0 && d1 < d0,
+ "[%d] d1=%a d0=%a", i, d1, d0);
d2 = ldexp(d0, -i);
- ATF_REQUIRE_EQ(d2, d1);
+ ATF_CHECK_EQ_MSG(d2, d1, "[%d] ldexp(%a, -%d)=%a != %a",
+ i, d0, i, d2, d1);
d2 = modf(d1, &ip);
- ATF_REQUIRE_EQ(d2, d1);
- ATF_REQUIRE_EQ(ip, 0);
+ ATF_CHECK_EQ_MSG(d2, d1,
+ "[%d] modf(%a) returned int %a, frac %a;"
+ " expected int %a, frac %a",
+ i, d1, ip, d2, 0., d1);
+ ATF_CHECK_EQ_MSG(ip, 0,
+ "[%d] modf(%a) returned int %a, frac %a;"
+ " expected int %a, frac %a",
+ i, d1, ip, d2, 0., d1);
f = frexp(d1, &e);
- ATF_REQUIRE_EQ(e, DBL_MIN_EXP - i);
- ATF_REQUIRE_EQ(f, 0.5);
+ ATF_CHECK_EQ_MSG(e, DBL_MIN_EXP - i,
+ "[%d] frexp(%a) returned normalized %a, exponent %d;"
+ " expected normalized %a, exponent %d",
+ i, d1, f, e, 0.5, DBL_MIN_EXP - i);
+ ATF_CHECK_EQ_MSG(f, 0.5,
+ "[%d] frexp(%a) returned normalized %a, exponent %d;"
+ " expected normalized %a, exponent %d",
+ i, d1, f, e, 0.5, DBL_MIN_EXP - i);
}
d1 /= 2;
- ATF_REQUIRE_EQ(fpclassify(d1), FP_ZERO);
+ ATF_CHECK_EQ_MSG(fpclassify(d1), FP_ZERO,
+ "fpclassify(%a)=%d FP_ZERO=%d",
+ d1, fpclassify(d1), FP_ZERO);
f = frexp(d1, &e);
- ATF_REQUIRE_EQ(e, 0);
- ATF_REQUIRE_EQ(f, 0);
+ ATF_CHECK_EQ_MSG(e, 0,
+ "frexp(%a) returned normalized %a, exponent %d;"
+ " expected normalized %a, exponent %d",
+ d1, f, e, 0., 0);
+ ATF_CHECK_EQ_MSG(f, 0,
+ "frexp(%a) returned normalized %a, exponent %d;"
+ " expected normalized %a, exponent %d",
+ d1, f, e, 0., 0);
}
-/*
- * XXX NetBSD doesn't have long-double flavors of frexp, ldexp, and modf,
- * XXX so this test is disabled.
- */
-
-#ifdef TEST_LONG_DOUBLE
-
ATF_TC(fpclassify_long_double);
ATF_TC_HEAD(fpclassify_long_double, tc)
{
@@ -156,37 +213,69 @@ ATF_TC_BODY(fpclassify_long_double, tc)
int e, i;
d0 = LDBL_MIN;
- ATF_REQUIRE_EQ(fpclassify(d0), FP_NORMAL);
+ ATF_CHECK_EQ_MSG(fpclassify(d0), FP_NORMAL,
+ "fpclassify(%La)=%d FP_NORMAL=%d",
+ d0, fpclassify(d0), FP_NORMAL);
f = frexpl(d0, &e);
- ATF_REQUIRE_EQ(e, LDBL_MIN_EXP);
- ATF_REQUIRE_EQ(f, 0.5);
+ ATF_CHECK_EQ_MSG(e, LDBL_MIN_EXP,
+ "frexpl(%La) returned normalized %La, exponent %d;"
+ " expected normalized %La, exponent %d",
+ d0, f, e, 0.5L, LDBL_MIN_EXP);
+ ATF_CHECK_EQ_MSG(f, 0.5,
+ "frexpl(%La) returned normalized %La, exponent %d;"
+ " expected normalized %La, exponent %d",
+ d0, f, e, 0.5L, LDBL_MIN_EXP);
d1 = d0;
/* shift a "1" bit through the mantissa (skip the implicit bit) */
for (i = 1; i < LDBL_MANT_DIG; i++) {
d1 /= 2;
- ATF_REQUIRE_EQ(fpclassify(d1), FP_SUBNORMAL);
- ATF_REQUIRE(d1 > 0 && d1 < d0);
+ ATF_CHECK_EQ_MSG(fpclassify(d1), FP_SUBNORMAL,
+ "[%d] fpclassify(%La)=%d FP_SUBNORMAL=%d",
+ i, d1, fpclassify(d1), FP_SUBNORMAL);
+ ATF_CHECK_MSG(d1 > 0 && d1 < d0,
+ "[%d] d1=%La d0=%La", i, d1, d0);
d2 = ldexpl(d0, -i);
- ATF_REQUIRE_EQ(d2, d1);
+ ATF_CHECK_EQ_MSG(d2, d1, "[%d] ldexpl(%La, -%d)=%La != %La",
+ i, d0, i, d2, d1);
d2 = modfl(d1, &ip);
- ATF_REQUIRE_EQ(d2, d1);
- ATF_REQUIRE_EQ(ip, 0);
+ ATF_CHECK_EQ_MSG(d2, d1,
+ "[%d] modfl(%La) returned int %La, frac %La;"
+ " expected int %La, frac %La",
+ i, d1, ip, d2, 0.L, d1);
+ ATF_CHECK_EQ_MSG(ip, 0,
+ "[%d] modfl(%La) returned int %La, frac %La;"
+ " expected int %La, frac %La",
+ i, d1, ip, d2, 0.L, d1);
f = frexpl(d1, &e);
- ATF_REQUIRE_EQ(e, LDBL_MIN_EXP - i);
- ATF_REQUIRE_EQ(f, 0.5);
+ ATF_CHECK_EQ_MSG(e, LDBL_MIN_EXP - i,
+ "[%d] frexpl(%La) returned normalized %La, exponent %d;"
+ " expected normalized %La, exponent %d",
+ i, d1, f, e, 0.5L, LDBL_MIN_EXP - i);
+ ATF_CHECK_EQ_MSG(f, 0.5,
+ "[%d] frexpl(%La) returned normalized %La, exponent %d;"
+ " expected normalized %La, exponent %d",
+ i, d1, f, e, 0.5L, LDBL_MIN_EXP - i);
}
d1 /= 2;
- ATF_REQUIRE_EQ(fpclassify(d1), FP_ZERO);
+ ATF_CHECK_EQ_MSG(fpclassify(d1), FP_ZERO,
+ "fpclassify(%La)=%d FP_ZERO=%d",
+ d1, fpclassify(d1), FP_ZERO);
f = frexpl(d1, &e);
- ATF_REQUIRE_EQ(e, 0);
- ATF_REQUIRE_EQ(f, 0);
+ ATF_CHECK_EQ_MSG(e, 0,
+ "frexpl(%La) returned normalized %La, exponent %d;"
+ " expected normalized %La, exponent %d",
+ d1, f, e, 0.L, 0);
+ ATF_CHECK_EQ_MSG(f, 0,
+ "frexpl(%La) returned normalized %La, exponent %d;"
+ " expected normalized %La, exponent %d",
+ d1, f, e, 0.L, 0);
}
-#endif /* TEST_LONG_DOUBLE */
+
#endif /* _FLOAT_IEEE754 */
ATF_TP_ADD_TCS(tp)
@@ -197,9 +286,7 @@ ATF_TP_ADD_TCS(tp)
#else
ATF_TP_ADD_TC(tp, fpclassify_float);
ATF_TP_ADD_TC(tp, fpclassify_double);
-#ifdef TEST_LONG_DOUBLE
ATF_TP_ADD_TC(tp, fpclassify_long_double);
-#endif /* TEST_LONG_DOUBLE */
#endif /* _FLOAT_IEEE754 */
return atf_no_error();