diff options
-rw-r--r-- | ChangeLog | 14 | ||||
-rwxr-xr-x | math/gen-libm-test.pl | 2 | ||||
-rw-r--r-- | math/libm-test.inc | 61 |
3 files changed, 72 insertions, 5 deletions
@@ -1,3 +1,17 @@ +2012-10-08 Joseph Myers <joseph@codesourcery.com> + + * math/gen-libm-test.pl (parse_args): Handle isinf and isnan as + type-generic. + * math/libm-test.inc: Update comment listing what functions and + macros are tested. + (finite_test): New function. + (isinf_test): Likewise. + (isnan_test): Likewise. + (fpclassify_test): Test subnormal input. + (isfinite_test): Likewise. + (isnormal_test): Likewise. + (main): Call the new functions. + 2012-10-08 Jonathan Nieder <jrnieder@gmail.com> [BZ #14660] diff --git a/math/gen-libm-test.pl b/math/gen-libm-test.pl index 03b2352..67227c4 100755 --- a/math/gen-libm-test.pl +++ b/math/gen-libm-test.pl @@ -320,7 +320,7 @@ sub parse_args { } # Special handling for some macros: $cline .= " (\"$str\", "; - if ($args[0] =~ /fpclassify|isnormal|isfinite|signbit/) { + if ($args[0] =~ /fpclassify|isnormal|isfinite|isinf|isnan|signbit/) { $c_call = "$args[0] ("; } else { $c_call = " FUNC($args[0]) ("; diff --git a/math/libm-test.inc b/math/libm-test.inc index 6cc0407..2562bb1 100644 --- a/math/libm-test.inc +++ b/math/libm-test.inc @@ -40,9 +40,9 @@ /* This testsuite has currently tests for: acos, acosh, asin, asinh, atan, atan2, atanh, cbrt, ceil, copysign, cos, cosh, erf, erfc, exp, exp10, exp2, expm1, - fabs, fdim, floor, fma, fmax, fmin, fmod, fpclassify, + fabs, fdim, finite, floor, fma, fmax, fmin, fmod, fpclassify, frexp, gamma, hypot, - ilogb, isfinite, isnormal, + ilogb, isfinite, isinf, isnan, isnormal, j0, j1, jn, ldexp, lgamma, log, log10, log1p, log2, logb, modf, nearbyint, nextafter, nexttoward, @@ -58,8 +58,6 @@ At the moment the following functions and macros aren't tested: drem (alias for remainder), - finite (functions equivalent to isfinite macro), - isinf, isnan, isless, islessequal, isgreater, isgreaterequal, islessgreater, isunordered, lgamma_r, nan, @@ -4414,6 +4412,23 @@ fdim_test (void) static void +finite_test (void) +{ + START (finite); + + TEST_f_b (finite, 0, 1); + TEST_f_b (finite, minus_zero, 1); + TEST_f_b (finite, 10, 1); + TEST_f_b (finite, min_subnorm_value, 1); + TEST_f_b (finite, plus_infty, 0); + TEST_f_b (finite, minus_infty, 0); + TEST_f_b (finite, nan_value, 0); + + END (finite); +} + + +static void floor_test (void) { START (floor); @@ -4964,6 +4979,7 @@ fpclassify_test (void) TEST_f_i (fpclassify, plus_zero, FP_ZERO); TEST_f_i (fpclassify, minus_zero, FP_ZERO); TEST_f_i (fpclassify, 1000, FP_NORMAL); + TEST_f_i (fpclassify, min_subnorm_value, FP_SUBNORMAL); END (fpclassify); } @@ -5113,6 +5129,7 @@ isfinite_test (void) TEST_f_b (isfinite, 0, 1); TEST_f_b (isfinite, minus_zero, 1); TEST_f_b (isfinite, 10, 1); + TEST_f_b (isfinite, min_subnorm_value, 1); TEST_f_b (isfinite, plus_infty, 0); TEST_f_b (isfinite, minus_infty, 0); TEST_f_b (isfinite, nan_value, 0); @@ -5121,6 +5138,38 @@ isfinite_test (void) } static void +isinf_test (void) +{ + START (isinf); + + TEST_f_b (isinf, 0, 0); + TEST_f_b (isinf, minus_zero, 0); + TEST_f_b (isinf, 10, 0); + TEST_f_b (isinf, min_subnorm_value, 0); + TEST_f_b (isinf, plus_infty, 1); + TEST_f_b (isinf, minus_infty, 1); + TEST_f_b (isinf, nan_value, 0); + + END (isinf); +} + +static void +isnan_test (void) +{ + START (isnan); + + TEST_f_b (isnan, 0, 0); + TEST_f_b (isnan, minus_zero, 0); + TEST_f_b (isnan, 10, 0); + TEST_f_b (isnan, min_subnorm_value, 0); + TEST_f_b (isnan, plus_infty, 0); + TEST_f_b (isnan, minus_infty, 0); + TEST_f_b (isnan, nan_value, 1); + + END (isnan); +} + +static void isnormal_test (void) { START (isnormal); @@ -5128,6 +5177,7 @@ isnormal_test (void) TEST_f_b (isnormal, 0, 0); TEST_f_b (isnormal, minus_zero, 0); TEST_f_b (isnormal, 10, 1); + TEST_f_b (isnormal, min_subnorm_value, 0); TEST_f_b (isnormal, plus_infty, 0); TEST_f_b (isnormal, minus_infty, 0); TEST_f_b (isnormal, nan_value, 0); @@ -9627,8 +9677,11 @@ main (int argc, char **argv) /* Keep the tests a wee bit ordered (according to ISO C99). */ /* Classification macros: */ + finite_test (); fpclassify_test (); isfinite_test (); + isinf_test (); + isnan_test (); isnormal_test (); signbit_test (); |