about summary refs log tree commit diff
diff options
context:
space:
mode:
authorJoseph Myers <joseph@codesourcery.com>2012-10-08 22:22:23 +0000
committerJoseph Myers <joseph@codesourcery.com>2012-10-08 22:22:23 +0000
commitef1bb3618c77f92a5ab1a98f907e5bb5149dc3dc (patch)
tree37d9c36837ed5fe4907848c4f0ae7cbfe1f6f41b
parenta76148d712d6c88b2f58044a422efb605154a1c9 (diff)
downloadglibc-ef1bb3618c77f92a5ab1a98f907e5bb5149dc3dc.tar.gz
glibc-ef1bb3618c77f92a5ab1a98f907e5bb5149dc3dc.tar.xz
glibc-ef1bb3618c77f92a5ab1a98f907e5bb5149dc3dc.zip
Improve libm test coverage of classification macros / functions.
-rw-r--r--ChangeLog14
-rwxr-xr-xmath/gen-libm-test.pl2
-rw-r--r--math/libm-test.inc61
3 files changed, 72 insertions, 5 deletions
diff --git a/ChangeLog b/ChangeLog
index ff1583e79a..c4f561d832 100644
--- 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]
diff --git a/math/gen-libm-test.pl b/math/gen-libm-test.pl
index 03b2352541..67227c46f5 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 6cc0407d57..2562bb124a 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 ();