]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
Improve libm test coverage of classification macros / functions.
authorJoseph Myers <joseph@codesourcery.com>
Mon, 8 Oct 2012 22:22:23 +0000 (22:22 +0000)
committerJoseph Myers <joseph@codesourcery.com>
Mon, 8 Oct 2012 22:22:23 +0000 (22:22 +0000)
ChangeLog
math/gen-libm-test.pl
math/libm-test.inc

index ff1583e79a72a98cb514686989ac748b921e0153..c4f561d832b783c75939b3391ab486783f0b3fbd 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -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]
index 03b235254121989c4904c5519428fe45d50ad933..67227c46f5d0b38128b090844ecf46bfd6184a99 100755 (executable)
@@ -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]) (";
index 6cc0407d57b52d0a77afa983eb593573b49aa384..2562bb124a62dd755dd3863092577c7c4aba3dd6 100644 (file)
@@ -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,
@@ -4413,6 +4411,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)
 {
@@ -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);
@@ -5120,6 +5137,38 @@ isfinite_test (void)
   END (isfinite);
 }
 
+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)
 {
@@ -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 ();