]> sourceware.org Git - glibc.git/commitdiff
Fix libm-test.inc:print_complex_max_error handling of some error cases.
authorJoseph Myers <joseph@codesourcery.com>
Tue, 4 Mar 2014 14:16:25 +0000 (14:16 +0000)
committerJoseph Myers <joseph@codesourcery.com>
Tue, 4 Mar 2014 14:16:25 +0000 (14:16 +0000)
When regenerating ulps incrementally with "make regen-ulps", the
resulting diffs should only increase existing ulps, never decrease
them.  This allows successive uses of "make regen-ulps" on different
hardware or with different compiler configurations to accumulate ulps
that are sufficient for tests to pass in a variety of configurations.

However, sometimes changes that decrease ulps are wrongly generated;
thus, when applying
<https://sourceware.org/ml/libc-alpha/2014-02/msg00605.html> I had to
remove such changes manually.  The problem is
print_complex_max_error.  If the ulps for either the real or the
imaginary part of a function are out of range, this function prints
the maximum ulps seen for both parts, which then replace those
previously in libm-test-ulps.  So if the ulps for one part are bigger
than recorded before, but those for the other part are smaller, the
diffs reduce existing ulps.

This patch fixes the logic so that only increased ulps get printed.

Tested x86_64 ("make math/tests", and "make regen-ulps" in a situation
with ulps manually modified so one part would go up and the other
down, to confirm the changes have the intended effect then).

* math/libm-test.inc (print_complex_max_error): Check separately
whether real and imaginary errors are within allowed range and
pass 0 to print_complex_function_ulps instead of value within
allowed range.

ChangeLog
math/libm-test.inc

index cdb5b85830c13898ed2f4314b9c0a7840827cae2..a808e73b15f807a008846266102014a8894e0586 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2014-03-04  Joseph Myers  <joseph@codesourcery.com>
+
+       * math/libm-test.inc (print_complex_max_error): Check separately
+       whether real and imaginary errors are within allowed range and
+       pass 0 to print_complex_function_ulps instead of value within
+       allowed range.
+
 2014-03-04  Siddhesh Poyarekar  <siddhesh@redhat.com>
 
        * libio/tst-ftell-active-handler.c (get_handles_fdopen): Fix
index 371229238d250725bbf8ff6a52aaf65a36f016cb..4cb239f12a69c8571c032c29ec420e259960c848 100644 (file)
@@ -568,19 +568,26 @@ static void
 print_complex_max_error (const char *func_name)
 {
   __complex__ FLOAT allowed = find_complex_function_ulps (func_name);
-  int ok = 0;
+  int real_ok = 0, imag_ok = 0, ok;
 
-  if ((real_max_error == 0 && imag_max_error == 0)
-      || (real_max_error <= __real__ allowed
-         && imag_max_error <= __imag__ allowed
-         && !ignore_max_ulp))
+  if (real_max_error == 0
+      || (real_max_error <= __real__ allowed && !ignore_max_ulp))
     {
-      ok = 1;
+      real_ok = 1;
     }
 
-  if (!ok)
-    print_complex_function_ulps (func_name, real_max_error, imag_max_error);
+  if (imag_max_error == 0
+      || (imag_max_error <= __imag__ allowed && !ignore_max_ulp))
+    {
+      imag_ok = 1;
+    }
+
+  ok = real_ok && imag_ok;
 
+  if (!ok)
+    print_complex_function_ulps (func_name,
+                                real_ok ? 0 : real_max_error,
+                                imag_ok ? 0 : imag_max_error);
 
   if (print_screen_max_error (ok))
     {
This page took 0.137404 seconds and 5 git commands to generate.