bug-gnulib
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: RFT: *printf-posix modules


From: Bruno Haible
Subject: Re: RFT: *printf-posix modules
Date: Tue, 22 May 2007 03:10:07 +0200
User-agent: KMail/1.5.4

Eric Blake wrote:
> I noticed you added a patch that allows "nan0x7fffffff" instead of "nan".  My 
> reading of POSIX says this is illegal and that IRIX has a bug; if the n-char-
> sequence form of NaN is used, it must be in the style "nan(0x7fffffff)", with 
> the ( and ) as literal characters.  Compare the wording in C99 and POSIX for 
> strtod() and nan().

Indeed. I was seeing angle brackets instead of parentheses... Together with
the description of strtod(), it's clear, however. Here is a fix.


2007-05-21  Bruno Haible  <address@hidden>

        * m4/printf.m4 (gl_PRINTF_INFINITE, gl_PRINTF_INFINITE_LONG_DOUBLE):
        Check also the output for NaN arguments. When cross-compiling, guess
        no on IRIX.
        * lib/vasnprintf.c: Update comments.
        * tests/test-vasnprintf-posix.c (strisnan): New function.
        (test_function): Use it.
        * tests/test-vasprintf-posix.c (strisnan): New function.
        (test_function): Use it.
        * tests/test-snprintf-posix.h (strisnan): New function.
        (test_function): Use it.
        * tests/test-sprintf-posix.h (strisnan): New function.
        (test_function): Use it.
        Reported by Eric Blake.

*** m4/printf.m4        20 May 2007 21:51:27 -0000      1.32
--- m4/printf.m4        22 May 2007 01:02:09 -0000
***************
*** 1,4 ****
! # printf.m4 serial 12
  dnl Copyright (C) 2003, 2007 Free Software Foundation, Inc.
  dnl This file is free software; the Free Software Foundation
  dnl gives unlimited permission to copy and/or distribute it,
--- 1,4 ----
! # printf.m4 serial 13
  dnl Copyright (C) 2003, 2007 Free Software Foundation, Inc.
  dnl This file is free software; the Free Software Foundation
  dnl gives unlimited permission to copy and/or distribute it,
***************
*** 124,131 ****
      ])
  ])
  
! dnl Test whether the *printf family of functions supports infinite 'double'
! dnl arguments in the %f, %e, %g directives. (ISO C99, POSIX:2001)
  dnl Result is gl_cv_func_printf_infinite.
  
  AC_DEFUN([gl_PRINTF_INFINITE],
--- 124,131 ----
      ])
  ])
  
! dnl Test whether the *printf family of functions supports infinite and NaN
! dnl 'double' arguments in the %f, %e, %g directives. (ISO C99, POSIX:2001)
  dnl Result is gl_cv_func_printf_infinite.
  
  AC_DEFUN([gl_PRINTF_INFINITE],
***************
*** 138,144 ****
--- 138,163 ----
        AC_TRY_RUN([
  #include <stdio.h>
  #include <string.h>
+ static int
+ strisnan (const char *string, size_t start_index, size_t end_index)
+ {
+   if (start_index < end_index)
+     {
+       if (string[start_index] == '-')
+         start_index++;
+       if (start_index + 3 <= end_index
+           && memcmp (string + start_index, "nan", 3) == 0)
+         {
+           start_index += 3;
+           if (start_index == end_index
+               || (string[start_index] == '(' && string[end_index - 1] == ')'))
+             return 1;
+         }
+     }
+   return 0;
+ }
  static char buf[100];
+ static double zero = 0.0;
  int main ()
  {
    if (sprintf (buf, "%f", 1.0 / 0.0) < 0
***************
*** 147,164 ****
--- 166,192 ----
    if (sprintf (buf, "%f", -1.0 / 0.0) < 0
        || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0))
      return 1;
+   if (sprintf (buf, "%f", zero / zero) < 0
+       || !strisnan (buf, 0, strlen (buf)))
+     return 1;
    if (sprintf (buf, "%e", 1.0 / 0.0) < 0
        || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0))
      return 1;
    if (sprintf (buf, "%e", -1.0 / 0.0) < 0
        || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0))
      return 1;
+   if (sprintf (buf, "%e", zero / zero) < 0
+       || !strisnan (buf, 0, strlen (buf)))
+     return 1;
    if (sprintf (buf, "%g", 1.0 / 0.0) < 0
        || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0))
      return 1;
    if (sprintf (buf, "%g", -1.0 / 0.0) < 0
        || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0))
      return 1;
+   if (sprintf (buf, "%g", zero / zero) < 0
+       || !strisnan (buf, 0, strlen (buf)))
+     return 1;
    return 0;
  }], [gl_cv_func_printf_infinite=yes], [gl_cv_func_printf_infinite=no],
        [
***************
*** 175,182 ****
                                 # Guess yes on HP-UX >= 11.
           hpux[7-9]* | hpux10*) gl_cv_func_printf_infinite="guessing no";;
           hpux*)                gl_cv_func_printf_infinite="guessing yes";;
-                                # Guess yes on IRIX >= 6.5.
-          irix6.5)              gl_cv_func_printf_infinite="guessing yes";;
                                 # Guess yes on NetBSD >= 3.
           netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*)
                                 gl_cv_func_printf_infinite="guessing no";;
--- 203,208 ----
***************
*** 191,198 ****
      ])
  ])
  
! dnl Test whether the *printf family of functions supports infinite 'long 
double'
! dnl arguments in the %f, %e, %g directives. (ISO C99, POSIX:2001)
  dnl Result is gl_cv_func_printf_infinite_long_double.
  
  AC_DEFUN([gl_PRINTF_INFINITE_LONG_DOUBLE],
--- 217,224 ----
      ])
  ])
  
! dnl Test whether the *printf family of functions supports infinite and NaN
! dnl 'long double' arguments in the %f, %e, %g directives. (ISO C99, 
POSIX:2001)
  dnl Result is gl_cv_func_printf_infinite_long_double.
  
  AC_DEFUN([gl_PRINTF_INFINITE_LONG_DOUBLE],
***************
*** 208,214 ****
--- 234,259 ----
            AC_TRY_RUN([
  #include <stdio.h>
  #include <string.h>
+ static int
+ strisnan (const char *string, size_t start_index, size_t end_index)
+ {
+   if (start_index < end_index)
+     {
+       if (string[start_index] == '-')
+         start_index++;
+       if (start_index + 3 <= end_index
+           && memcmp (string + start_index, "nan", 3) == 0)
+         {
+           start_index += 3;
+           if (start_index == end_index
+               || (string[start_index] == '(' && string[end_index - 1] == ')'))
+             return 1;
+         }
+     }
+   return 0;
+ }
  static char buf[100];
+ static long double zeroL = 0.0L;
  int main ()
  {
    if (sprintf (buf, "%Lf", 1.0L / 0.0L) < 0
***************
*** 217,234 ****
--- 262,288 ----
    if (sprintf (buf, "%Lf", -1.0L / 0.0L) < 0
        || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0))
      return 1;
+   if (sprintf (buf, "%Lf", zeroL / zeroL) < 0
+       || !strisnan (buf, 0, strlen (buf)))
+     return 1;
    if (sprintf (buf, "%Le", 1.0L / 0.0L) < 0
        || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0))
      return 1;
    if (sprintf (buf, "%Le", -1.0L / 0.0L) < 0
        || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0))
      return 1;
+   if (sprintf (buf, "%Le", zeroL / zeroL) < 0
+       || !strisnan (buf, 0, strlen (buf)))
+     return 1;
    if (sprintf (buf, "%Lg", 1.0L / 0.0L) < 0
        || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0))
      return 1;
    if (sprintf (buf, "%Lg", -1.0L / 0.0L) < 0
        || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0))
      return 1;
+   if (sprintf (buf, "%Lg", zeroL / zeroL) < 0
+       || !strisnan (buf, 0, strlen (buf)))
+     return 1;
    return 0;
  }],
            [gl_cv_func_printf_infinite_long_double=yes],
***************
*** 247,254 ****
                                     # Guess yes on HP-UX >= 11.
               hpux[7-9]* | hpux10*) 
gl_cv_func_printf_infinite_long_double="guessing no";;
               hpux*)                
gl_cv_func_printf_infinite_long_double="guessing yes";;
-                                    # Guess yes on IRIX >= 6.5.
-              irix6.5)              
gl_cv_func_printf_infinite_long_double="guessing yes";;
                                     # Guess yes on NetBSD >= 3.
               netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | 
netbsdcoff[1-2]*)
                                     
gl_cv_func_printf_infinite_long_double="guessing no";;
--- 301,306 ----
***************
*** 895,901 ****
  dnl   AIX 4.3.2, 5.1                 #  .  #  #  #  #  .  .  .  #  .  .  .  . 
 .
  dnl   HP-UX 11.31                    .  .  .  .  #  .  .  .  .  #  .  .  #  # 
 .
  dnl   HP-UX 10.20, 11.{00,11,23}     #  .  .  .  #  #  .  .  .  #  .  .  #  # 
 #
! dnl   IRIX 6.5                       #  .  .  .  #  #  .  .  .  #  .  .  #  . 
 .
  dnl   OSF/1 5.1                      #  .  #  #  #  #  .  .  .  #  .  .  #  . 
 #
  dnl   OSF/1 4.0d                     #  .  #  #  #  #  .  .  .  #  #  #  #  # 
 #
  dnl   NetBSD 4.0                     .  ?  ?  ?  ?  ?  .  .  ?  ?  .  .  .  ? 
 ?
--- 947,953 ----
  dnl   AIX 4.3.2, 5.1                 #  .  #  #  #  #  .  .  .  #  .  .  .  . 
 .
  dnl   HP-UX 11.31                    .  .  .  .  #  .  .  .  .  #  .  .  #  # 
 .
  dnl   HP-UX 10.20, 11.{00,11,23}     #  .  .  .  #  #  .  .  .  #  .  .  #  # 
 #
! dnl   IRIX 6.5                       #  .  #  #  #  #  .  .  .  #  .  .  #  . 
 .
  dnl   OSF/1 5.1                      #  .  #  #  #  #  .  .  .  #  .  .  #  . 
 #
  dnl   OSF/1 4.0d                     #  .  #  #  #  #  .  .  .  #  #  #  #  # 
 #
  dnl   NetBSD 4.0                     .  ?  ?  ?  ?  ?  .  .  ?  ?  .  .  .  ? 
 ?
*** lib/vasnprintf.c    20 May 2007 09:01:49 -0000      1.51
--- lib/vasnprintf.c    22 May 2007 01:02:09 -0000
***************
*** 1297,1313 ****
  # if NEED_PRINTF_INFINITE_DOUBLE
                         || (a.arg[dp->arg_index].type == TYPE_DOUBLE
                             /* The systems (mingw) which produce wrong output
!                               for Inf and -Inf also do so for NaN and -0.0.
!                               Therefore we treat these cases here as well.  */
                             && is_infinite_or_zero 
(a.arg[dp->arg_index].a.a_double))
  # endif
  # if NEED_PRINTF_LONG_DOUBLE
                         || a.arg[dp->arg_index].type == TYPE_LONGDOUBLE
  # elif NEED_PRINTF_INFINITE_LONG_DOUBLE
                         || (a.arg[dp->arg_index].type == TYPE_LONGDOUBLE
!                            /* The systems which produce wrong output for Inf
!                               and -Inf also do so for NaN.  Therefore treat
!                               this case here as well.  */
                             && is_infinitel 
(a.arg[dp->arg_index].a.a_longdouble))
  # endif
                        ))
--- 1297,1312 ----
  # if NEED_PRINTF_INFINITE_DOUBLE
                         || (a.arg[dp->arg_index].type == TYPE_DOUBLE
                             /* The systems (mingw) which produce wrong output
!                               for Inf, -Inf, and NaN also do so for -0.0.
!                               Therefore we treat this case here as well.  */
                             && is_infinite_or_zero 
(a.arg[dp->arg_index].a.a_double))
  # endif
  # if NEED_PRINTF_LONG_DOUBLE
                         || a.arg[dp->arg_index].type == TYPE_LONGDOUBLE
  # elif NEED_PRINTF_INFINITE_LONG_DOUBLE
                         || (a.arg[dp->arg_index].type == TYPE_LONGDOUBLE
!                            /* Some systems produce wrong output for Inf,
!                               -Inf, and NaN.  */
                             && is_infinitel 
(a.arg[dp->arg_index].a.a_longdouble))
  # endif
                        ))
*** tests/test-snprintf-posix.h 20 May 2007 08:12:26 -0000      1.14
--- tests/test-snprintf-posix.h 22 May 2007 01:02:10 -0000
***************
*** 49,54 ****
--- 49,75 ----
    return 1;
  }
  
+ /* Test whether string[start_index..end_index-1] is a valid textual
+    representation of NaN.  */
+ static int
+ strisnan (const char *string, size_t start_index, size_t end_index, int 
uppercase)
+ {
+   if (start_index < end_index)
+     {
+       if (string[start_index] == '-')
+       start_index++;
+       if (start_index + 3 <= end_index
+         && memcmp (string + start_index, uppercase ? "NAN" : "nan", 3) == 0)
+       {
+         start_index += 3;
+         if (start_index == end_index
+             || (string[start_index] == '(' && string[end_index - 1] == ')'))
+           return 1;
+       }
+     }
+   return 0;
+ }
+         
  static void
  test_function (int (*my_snprintf) (char *, size_t, const char *, ...))
  {
***************
*** 176,183 ****
      int retval =
        my_snprintf (result, sizeof (result), "%a %d", NaN (), 33, 44, 55);
      ASSERT (strlen (result) >= 3 + 3
!           && (memcmp (result, "nan", 3) == 0
!               || memcmp (result, "-nan", 4) == 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (retval == strlen (result));
    }
--- 197,203 ----
      int retval =
        my_snprintf (result, sizeof (result), "%a %d", NaN (), 33, 44, 55);
      ASSERT (strlen (result) >= 3 + 3
!           && strisnan (result, 0, strlen (result) - 3, 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (retval == strlen (result));
    }
***************
*** 376,383 ****
      /* "0000000nan 33" is not a valid result; see
         <http://lists.gnu.org/archive/html/bug-gnulib/2007-04/msg00107.html> */
      ASSERT (strlen (result) == 20 + 3
!           && (memcmp (result + strspn (result, " "), "nan", 3) == 0
!               || memcmp (result + strspn (result, " "), "-nan", 4) == 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (retval == strlen (result));
    }
--- 396,402 ----
      /* "0000000nan 33" is not a valid result; see
         <http://lists.gnu.org/archive/html/bug-gnulib/2007-04/msg00107.html> */
      ASSERT (strlen (result) == 20 + 3
!           && strisnan (result, strspn (result, " "), strlen (result) - 3, 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (retval == strlen (result));
    }
***************
*** 442,449 ****
      int retval =
        my_snprintf (result, sizeof (result), "%La %d", 0.0L / 0.0L, 33, 44, 
55);
      ASSERT (strlen (result) >= 3 + 3
!           && (memcmp (result, "nan", 3) == 0
!               || memcmp (result, "-nan", 4) == 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (retval == strlen (result));
    }
--- 461,467 ----
      int retval =
        my_snprintf (result, sizeof (result), "%La %d", 0.0L / 0.0L, 33, 44, 
55);
      ASSERT (strlen (result) >= 3 + 3
!           && strisnan (result, 0, strlen (result) - 3, 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (retval == strlen (result));
    }
***************
*** 643,650 ****
      /* "0000000nan 33" is not a valid result; see
         <http://lists.gnu.org/archive/html/bug-gnulib/2007-04/msg00107.html> */
      ASSERT (strlen (result) == 20 + 3
!           && (memcmp (result + strspn (result, " "), "nan", 3) == 0
!               || memcmp (result + strspn (result, " "), "-nan", 4) == 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (retval == strlen (result));
    }
--- 661,667 ----
      /* "0000000nan 33" is not a valid result; see
         <http://lists.gnu.org/archive/html/bug-gnulib/2007-04/msg00107.html> */
      ASSERT (strlen (result) == 20 + 3
!           && strisnan (result, strspn (result, " "), strlen (result) - 3, 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (retval == strlen (result));
    }
***************
*** 804,811 ****
      int retval =
        my_snprintf (result, sizeof (result), "%f %d", NaN (), 33, 44, 55);
      ASSERT (strlen (result) >= 3 + 3
!           && (memcmp (result, "nan", 3) == 0
!               || memcmp (result, "-nan", 4) == 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (retval == strlen (result));
    }
--- 821,827 ----
      int retval =
        my_snprintf (result, sizeof (result), "%f %d", NaN (), 33, 44, 55);
      ASSERT (strlen (result) >= 3 + 3
!           && strisnan (result, 0, strlen (result) - 3, 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (retval == strlen (result));
    }
***************
*** 886,893 ****
      int retval =
        my_snprintf (result, sizeof (result), "%020f %d", NaN (), 33, 44, 55);
      ASSERT (strlen (result) == 20 + 3
!           && (memcmp (result + strspn (result, " "), "nan", 3) == 0
!               || memcmp (result + strspn (result, " "), "-nan", 4) == 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (retval == strlen (result));
    }
--- 902,908 ----
      int retval =
        my_snprintf (result, sizeof (result), "%020f %d", NaN (), 33, 44, 55);
      ASSERT (strlen (result) == 20 + 3
!           && strisnan (result, strspn (result, " "), strlen (result) - 3, 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (retval == strlen (result));
    }
***************
*** 1054,1061 ****
      int retval =
        my_snprintf (result, sizeof (result), "%Lf %d", zero / zero, 33, 44, 
55);
      ASSERT (strlen (result) >= 3 + 3
!           && (memcmp (result, "nan", 3) == 0
!               || memcmp (result, "-nan", 4) == 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (retval == strlen (result));
    }
--- 1069,1075 ----
      int retval =
        my_snprintf (result, sizeof (result), "%Lf %d", zero / zero, 33, 44, 
55);
      ASSERT (strlen (result) >= 3 + 3
!           && strisnan (result, 0, strlen (result) - 3, 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (retval == strlen (result));
    }
***************
*** 1137,1144 ****
      int retval =
        my_snprintf (result, sizeof (result), "%020Lf %d", zero / zero, 33, 44, 
55);
      ASSERT (strlen (result) == 20 + 3
!           && (memcmp (result + strspn (result, " "), "nan", 3) == 0
!               || memcmp (result + strspn (result, " "), "-nan", 4) == 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (retval == strlen (result));
    }
--- 1151,1157 ----
      int retval =
        my_snprintf (result, sizeof (result), "%020Lf %d", zero / zero, 33, 44, 
55);
      ASSERT (strlen (result) == 20 + 3
!           && strisnan (result, strspn (result, " "), strlen (result) - 3, 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (retval == strlen (result));
    }
***************
*** 1217,1224 ****
      int retval =
        my_snprintf (result, sizeof (result), "%F %d", NaN (), 33, 44, 55);
      ASSERT (strlen (result) >= 3 + 3
!           && (memcmp (result, "NAN", 3) == 0
!               || memcmp (result, "-NAN", 4) == 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (retval == strlen (result));
    }
--- 1230,1236 ----
      int retval =
        my_snprintf (result, sizeof (result), "%F %d", NaN (), 33, 44, 55);
      ASSERT (strlen (result) >= 3 + 3
!           && strisnan (result, 0, strlen (result) - 3, 1)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (retval == strlen (result));
    }
***************
*** 1313,1320 ****
      int retval =
        my_snprintf (result, sizeof (result), "%LF %d", zero / zero, 33, 44, 
55);
      ASSERT (strlen (result) >= 3 + 3
!           && (memcmp (result, "NAN", 3) == 0
!               || memcmp (result, "-NAN", 4) == 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (retval == strlen (result));
    }
--- 1325,1331 ----
      int retval =
        my_snprintf (result, sizeof (result), "%LF %d", zero / zero, 33, 44, 
55);
      ASSERT (strlen (result) >= 3 + 3
!           && strisnan (result, 0, strlen (result) - 3, 1)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (retval == strlen (result));
    }
***************
*** 1513,1520 ****
      int retval =
        my_snprintf (result, sizeof (result), "%e %d", NaN (), 33, 44, 55);
      ASSERT (strlen (result) >= 3 + 3
!           && (memcmp (result, "nan", 3) == 0
!               || memcmp (result, "-nan", 4) == 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (retval == strlen (result));
    }
--- 1524,1530 ----
      int retval =
        my_snprintf (result, sizeof (result), "%e %d", NaN (), 33, 44, 55);
      ASSERT (strlen (result) >= 3 + 3
!           && strisnan (result, 0, strlen (result) - 3, 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (retval == strlen (result));
    }
***************
*** 1605,1612 ****
      int retval =
        my_snprintf (result, sizeof (result), "%020e %d", NaN (), 33, 44, 55);
      ASSERT (strlen (result) == 20 + 3
!           && (memcmp (result + strspn (result, " "), "nan", 3) == 0
!               || memcmp (result + strspn (result, " "), "-nan", 4) == 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (retval == strlen (result));
    }
--- 1615,1621 ----
      int retval =
        my_snprintf (result, sizeof (result), "%020e %d", NaN (), 33, 44, 55);
      ASSERT (strlen (result) == 20 + 3
!           && strisnan (result, strspn (result, " "), strlen (result) - 3, 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (retval == strlen (result));
    }
***************
*** 1774,1781 ****
      int retval =
        my_snprintf (result, sizeof (result), "%Le %d", zero / zero, 33, 44, 
55);
      ASSERT (strlen (result) >= 3 + 3
!           && (memcmp (result, "nan", 3) == 0
!               || memcmp (result, "-nan", 4) == 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (retval == strlen (result));
    }
--- 1783,1789 ----
      int retval =
        my_snprintf (result, sizeof (result), "%Le %d", zero / zero, 33, 44, 
55);
      ASSERT (strlen (result) >= 3 + 3
!           && strisnan (result, 0, strlen (result) - 3, 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (retval == strlen (result));
    }
***************
*** 1859,1866 ****
      int retval =
        my_snprintf (result, sizeof (result), "%020Le %d", zero / zero, 33, 44, 
55);
      ASSERT (strlen (result) == 20 + 3
!           && (memcmp (result + strspn (result, " "), "nan", 3) == 0
!               || memcmp (result + strspn (result, " "), "-nan", 4) == 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (retval == strlen (result));
    }
--- 1867,1873 ----
      int retval =
        my_snprintf (result, sizeof (result), "%020Le %d", zero / zero, 33, 44, 
55);
      ASSERT (strlen (result) == 20 + 3
!           && strisnan (result, strspn (result, " "), strlen (result) - 3, 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (retval == strlen (result));
    }
***************
*** 2038,2045 ****
      int retval =
        my_snprintf (result, sizeof (result), "%g %d", NaN (), 33, 44, 55);
      ASSERT (strlen (result) >= 3 + 3
!           && (memcmp (result, "nan", 3) == 0
!               || memcmp (result, "-nan", 4) == 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (retval == strlen (result));
    }
--- 2045,2051 ----
      int retval =
        my_snprintf (result, sizeof (result), "%g %d", NaN (), 33, 44, 55);
      ASSERT (strlen (result) >= 3 + 3
!           && strisnan (result, 0, strlen (result) - 3, 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (retval == strlen (result));
    }
***************
*** 2123,2130 ****
      int retval =
        my_snprintf (result, sizeof (result), "%020g %d", NaN (), 33, 44, 55);
      ASSERT (strlen (result) == 20 + 3
!           && (memcmp (result + strspn (result, " "), "nan", 3) == 0
!               || memcmp (result + strspn (result, " "), "-nan", 4) == 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (retval == strlen (result));
    }
--- 2129,2135 ----
      int retval =
        my_snprintf (result, sizeof (result), "%020g %d", NaN (), 33, 44, 55);
      ASSERT (strlen (result) == 20 + 3
!           && strisnan (result, strspn (result, " "), strlen (result) - 3, 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (retval == strlen (result));
    }
***************
*** 2292,2299 ****
      int retval =
        my_snprintf (result, sizeof (result), "%Lg %d", zero / zero, 33, 44, 
55);
      ASSERT (strlen (result) >= 3 + 3
!           && (memcmp (result, "nan", 3) == 0
!               || memcmp (result, "-nan", 4) == 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (retval == strlen (result));
    }
--- 2297,2303 ----
      int retval =
        my_snprintf (result, sizeof (result), "%Lg %d", zero / zero, 33, 44, 
55);
      ASSERT (strlen (result) >= 3 + 3
!           && strisnan (result, 0, strlen (result) - 3, 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (retval == strlen (result));
    }
***************
*** 2377,2384 ****
      int retval =
        my_snprintf (result, sizeof (result), "%020Lg %d", zero / zero, 33, 44, 
55);
      ASSERT (strlen (result) == 20 + 3
!           && (memcmp (result + strspn (result, " "), "nan", 3) == 0
!               || memcmp (result + strspn (result, " "), "-nan", 4) == 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (retval == strlen (result));
    }
--- 2381,2387 ----
      int retval =
        my_snprintf (result, sizeof (result), "%020Lg %d", zero / zero, 33, 44, 
55);
      ASSERT (strlen (result) == 20 + 3
!           && strisnan (result, strspn (result, " "), strlen (result) - 3, 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (retval == strlen (result));
    }
*** tests/test-sprintf-posix.h  20 May 2007 08:12:26 -0000      1.14
--- tests/test-sprintf-posix.h  22 May 2007 01:02:10 -0000
***************
*** 49,54 ****
--- 49,75 ----
    return 1;
  }
  
+ /* Test whether string[start_index..end_index-1] is a valid textual
+    representation of NaN.  */
+ static int
+ strisnan (const char *string, size_t start_index, size_t end_index, int 
uppercase)
+ {
+   if (start_index < end_index)
+     {
+       if (string[start_index] == '-')
+       start_index++;
+       if (start_index + 3 <= end_index
+         && memcmp (string + start_index, uppercase ? "NAN" : "nan", 3) == 0)
+       {
+         start_index += 3;
+         if (start_index == end_index
+             || (string[start_index] == '(' && string[end_index - 1] == ')'))
+           return 1;
+       }
+     }
+   return 0;
+ }
+         
  static void
  test_function (int (*my_sprintf) (char *, const char *, ...))
  {
***************
*** 162,169 ****
      int retval =
        my_sprintf (result, "%a %d", NaN (), 33, 44, 55);
      ASSERT (strlen (result) >= 3 + 3
!           && (memcmp (result, "nan", 3) == 0
!               || memcmp (result, "-nan", 4) == 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (retval == strlen (result));
    }
--- 183,189 ----
      int retval =
        my_sprintf (result, "%a %d", NaN (), 33, 44, 55);
      ASSERT (strlen (result) >= 3 + 3
!           && strisnan (result, 0, strlen (result) - 3, 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (retval == strlen (result));
    }
***************
*** 362,369 ****
      /* "0000000nan 33" is not a valid result; see
         <http://lists.gnu.org/archive/html/bug-gnulib/2007-04/msg00107.html> */
      ASSERT (strlen (result) == 20 + 3
!           && (memcmp (result + strspn (result, " "), "nan", 3) == 0
!               || memcmp (result + strspn (result, " "), "-nan", 4) == 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (retval == strlen (result));
    }
--- 382,388 ----
      /* "0000000nan 33" is not a valid result; see
         <http://lists.gnu.org/archive/html/bug-gnulib/2007-04/msg00107.html> */
      ASSERT (strlen (result) == 20 + 3
!           && strisnan (result, strspn (result, " "), strlen (result) - 3, 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (retval == strlen (result));
    }
***************
*** 428,435 ****
      int retval =
        my_sprintf (result, "%La %d", 0.0L / 0.0L, 33, 44, 55);
      ASSERT (strlen (result) >= 3 + 3
!           && (memcmp (result, "nan", 3) == 0
!               || memcmp (result, "-nan", 4) == 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (retval == strlen (result));
    }
--- 447,453 ----
      int retval =
        my_sprintf (result, "%La %d", 0.0L / 0.0L, 33, 44, 55);
      ASSERT (strlen (result) >= 3 + 3
!           && strisnan (result, 0, strlen (result) - 3, 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (retval == strlen (result));
    }
***************
*** 629,636 ****
      /* "0000000nan 33" is not a valid result; see
         <http://lists.gnu.org/archive/html/bug-gnulib/2007-04/msg00107.html> */
      ASSERT (strlen (result) == 20 + 3
!           && (memcmp (result + strspn (result, " "), "nan", 3) == 0
!               || memcmp (result + strspn (result, " "), "-nan", 4) == 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (retval == strlen (result));
    }
--- 647,653 ----
      /* "0000000nan 33" is not a valid result; see
         <http://lists.gnu.org/archive/html/bug-gnulib/2007-04/msg00107.html> */
      ASSERT (strlen (result) == 20 + 3
!           && strisnan (result, strspn (result, " "), strlen (result) - 3, 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (retval == strlen (result));
    }
***************
*** 790,797 ****
      int retval =
        my_sprintf (result, "%f %d", NaN (), 33, 44, 55);
      ASSERT (strlen (result) >= 3 + 3
!           && (memcmp (result, "nan", 3) == 0
!               || memcmp (result, "-nan", 4) == 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (retval == strlen (result));
    }
--- 807,813 ----
      int retval =
        my_sprintf (result, "%f %d", NaN (), 33, 44, 55);
      ASSERT (strlen (result) >= 3 + 3
!           && strisnan (result, 0, strlen (result) - 3, 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (retval == strlen (result));
    }
***************
*** 866,873 ****
      int retval =
        my_sprintf (result, "%020f %d", NaN (), 33, 44, 55);
      ASSERT (strlen (result) == 20 + 3
!           && (memcmp (result + strspn (result, " "), "nan", 3) == 0
!               || memcmp (result + strspn (result, " "), "-nan", 4) == 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (retval == strlen (result));
    }
--- 882,888 ----
      int retval =
        my_sprintf (result, "%020f %d", NaN (), 33, 44, 55);
      ASSERT (strlen (result) == 20 + 3
!           && strisnan (result, strspn (result, " "), strlen (result) - 3, 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (retval == strlen (result));
    }
***************
*** 1034,1041 ****
      int retval =
        my_sprintf (result, "%Lf %d", zero / zero, 33, 44, 55);
      ASSERT (strlen (result) >= 3 + 3
!           && (memcmp (result, "nan", 3) == 0
!               || memcmp (result, "-nan", 4) == 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (retval == strlen (result));
    }
--- 1049,1055 ----
      int retval =
        my_sprintf (result, "%Lf %d", zero / zero, 33, 44, 55);
      ASSERT (strlen (result) >= 3 + 3
!           && strisnan (result, 0, strlen (result) - 3, 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (retval == strlen (result));
    }
***************
*** 1111,1118 ****
      int retval =
        my_sprintf (result, "%020Lf %d", zero / zero, 33, 44, 55);
      ASSERT (strlen (result) == 20 + 3
!           && (memcmp (result + strspn (result, " "), "nan", 3) == 0
!               || memcmp (result + strspn (result, " "), "-nan", 4) == 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (retval == strlen (result));
    }
--- 1125,1131 ----
      int retval =
        my_sprintf (result, "%020Lf %d", zero / zero, 33, 44, 55);
      ASSERT (strlen (result) == 20 + 3
!           && strisnan (result, strspn (result, " "), strlen (result) - 3, 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (retval == strlen (result));
    }
***************
*** 1191,1198 ****
      int retval =
        my_sprintf (result, "%F %d", NaN (), 33, 44, 55);
      ASSERT (strlen (result) >= 3 + 3
!           && (memcmp (result, "NAN", 3) == 0
!               || memcmp (result, "-NAN", 4) == 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (retval == strlen (result));
    }
--- 1204,1210 ----
      int retval =
        my_sprintf (result, "%F %d", NaN (), 33, 44, 55);
      ASSERT (strlen (result) >= 3 + 3
!           && strisnan (result, 0, strlen (result) - 3, 1)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (retval == strlen (result));
    }
***************
*** 1287,1294 ****
      int retval =
        my_sprintf (result, "%LF %d", zero / zero, 33, 44, 55);
      ASSERT (strlen (result) >= 3 + 3
!           && (memcmp (result, "NAN", 3) == 0
!               || memcmp (result, "-NAN", 4) == 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (retval == strlen (result));
    }
--- 1299,1305 ----
      int retval =
        my_sprintf (result, "%LF %d", zero / zero, 33, 44, 55);
      ASSERT (strlen (result) >= 3 + 3
!           && strisnan (result, 0, strlen (result) - 3, 1)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (retval == strlen (result));
    }
***************
*** 1487,1494 ****
      int retval =
        my_sprintf (result, "%e %d", NaN (), 33, 44, 55);
      ASSERT (strlen (result) >= 3 + 3
!           && (memcmp (result, "nan", 3) == 0
!               || memcmp (result, "-nan", 4) == 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (retval == strlen (result));
    }
--- 1498,1504 ----
      int retval =
        my_sprintf (result, "%e %d", NaN (), 33, 44, 55);
      ASSERT (strlen (result) >= 3 + 3
!           && strisnan (result, 0, strlen (result) - 3, 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (retval == strlen (result));
    }
***************
*** 1579,1586 ****
      int retval =
        my_sprintf (result, "%020e %d", NaN (), 33, 44, 55);
      ASSERT (strlen (result) == 20 + 3
!           && (memcmp (result + strspn (result, " "), "nan", 3) == 0
!               || memcmp (result + strspn (result, " "), "-nan", 4) == 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (retval == strlen (result));
    }
--- 1589,1595 ----
      int retval =
        my_sprintf (result, "%020e %d", NaN (), 33, 44, 55);
      ASSERT (strlen (result) == 20 + 3
!           && strisnan (result, strspn (result, " "), strlen (result) - 3, 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (retval == strlen (result));
    }
***************
*** 1748,1755 ****
      int retval =
        my_sprintf (result, "%Le %d", zero / zero, 33, 44, 55);
      ASSERT (strlen (result) >= 3 + 3
!           && (memcmp (result, "nan", 3) == 0
!               || memcmp (result, "-nan", 4) == 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (retval == strlen (result));
    }
--- 1757,1763 ----
      int retval =
        my_sprintf (result, "%Le %d", zero / zero, 33, 44, 55);
      ASSERT (strlen (result) >= 3 + 3
!           && strisnan (result, 0, strlen (result) - 3, 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (retval == strlen (result));
    }
***************
*** 1833,1840 ****
      int retval =
        my_sprintf (result, "%020Le %d", zero / zero, 33, 44, 55);
      ASSERT (strlen (result) == 20 + 3
!           && (memcmp (result + strspn (result, " "), "nan", 3) == 0
!               || memcmp (result + strspn (result, " "), "-nan", 4) == 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (retval == strlen (result));
    }
--- 1841,1847 ----
      int retval =
        my_sprintf (result, "%020Le %d", zero / zero, 33, 44, 55);
      ASSERT (strlen (result) == 20 + 3
!           && strisnan (result, strspn (result, " "), strlen (result) - 3, 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (retval == strlen (result));
    }
***************
*** 2012,2019 ****
      int retval =
        my_sprintf (result, "%g %d", NaN (), 33, 44, 55);
      ASSERT (strlen (result) >= 3 + 3
!           && (memcmp (result, "nan", 3) == 0
!               || memcmp (result, "-nan", 4) == 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (retval == strlen (result));
    }
--- 2019,2025 ----
      int retval =
        my_sprintf (result, "%g %d", NaN (), 33, 44, 55);
      ASSERT (strlen (result) >= 3 + 3
!           && strisnan (result, 0, strlen (result) - 3, 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (retval == strlen (result));
    }
***************
*** 2097,2104 ****
      int retval =
        my_sprintf (result, "%020g %d", NaN (), 33, 44, 55);
      ASSERT (strlen (result) == 20 + 3
!           && (memcmp (result + strspn (result, " "), "nan", 3) == 0
!               || memcmp (result + strspn (result, " "), "-nan", 4) == 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (retval == strlen (result));
    }
--- 2103,2109 ----
      int retval =
        my_sprintf (result, "%020g %d", NaN (), 33, 44, 55);
      ASSERT (strlen (result) == 20 + 3
!           && strisnan (result, strspn (result, " "), strlen (result) - 3, 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (retval == strlen (result));
    }
***************
*** 2266,2273 ****
      int retval =
        my_sprintf (result, "%Lg %d", zero / zero, 33, 44, 55);
      ASSERT (strlen (result) >= 3 + 3
!           && (memcmp (result, "nan", 3) == 0
!               || memcmp (result, "-nan", 4) == 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (retval == strlen (result));
    }
--- 2271,2277 ----
      int retval =
        my_sprintf (result, "%Lg %d", zero / zero, 33, 44, 55);
      ASSERT (strlen (result) >= 3 + 3
!           && strisnan (result, 0, strlen (result) - 3, 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (retval == strlen (result));
    }
***************
*** 2351,2358 ****
      int retval =
        my_sprintf (result, "%020Lg %d", zero / zero, 33, 44, 55);
      ASSERT (strlen (result) == 20 + 3
!           && (memcmp (result + strspn (result, " "), "nan", 3) == 0
!               || memcmp (result + strspn (result, " "), "-nan", 4) == 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (retval == strlen (result));
    }
--- 2355,2361 ----
      int retval =
        my_sprintf (result, "%020Lg %d", zero / zero, 33, 44, 55);
      ASSERT (strlen (result) == 20 + 3
!           && strisnan (result, strspn (result, " "), strlen (result) - 3, 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (retval == strlen (result));
    }
*** tests/test-vasnprintf-posix.c       20 May 2007 08:12:26 -0000      1.17
--- tests/test-vasnprintf-posix.c       22 May 2007 01:02:10 -0000
***************
*** 74,79 ****
--- 74,100 ----
    return 1;
  }
  
+ /* Test whether string[start_index..end_index-1] is a valid textual
+    representation of NaN.  */
+ static int
+ strisnan (const char *string, size_t start_index, size_t end_index, int 
uppercase)
+ {
+   if (start_index < end_index)
+     {
+       if (string[start_index] == '-')
+       start_index++;
+       if (start_index + 3 <= end_index
+         && memcmp (string + start_index, uppercase ? "NAN" : "nan", 3) == 0)
+       {
+         start_index += 3;
+         if (start_index == end_index
+             || (string[start_index] == '(' && string[end_index - 1] == ')'))
+           return 1;
+       }
+     }
+   return 0;
+ }
+         
  static void
  test_function (char * (*my_asnprintf) (char *, size_t *, const char *, ...))
  {
***************
*** 228,235 ****
        my_asnprintf (NULL, &length, "%a %d", NaN (), 33, 44, 55);
      ASSERT (result != NULL);
      ASSERT (strlen (result) >= 3 + 3
!           && (memcmp (result, "nan", 3) == 0
!               || memcmp (result, "-nan", 4) == 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (length == strlen (result));
      free (result);
--- 249,255 ----
        my_asnprintf (NULL, &length, "%a %d", NaN (), 33, 44, 55);
      ASSERT (result != NULL);
      ASSERT (strlen (result) >= 3 + 3
!           && strisnan (result, 0, strlen (result) - 3, 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (length == strlen (result));
      free (result);
***************
*** 464,471 ****
      /* "0000000nan 33" is not a valid result; see
         <http://lists.gnu.org/archive/html/bug-gnulib/2007-04/msg00107.html> */
      ASSERT (strlen (result) == 20 + 3
!           && (memcmp (result + strspn (result, " "), "nan", 3) == 0
!               || memcmp (result + strspn (result, " "), "-nan", 4) == 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (length == strlen (result));
      free (result);
--- 484,490 ----
      /* "0000000nan 33" is not a valid result; see
         <http://lists.gnu.org/archive/html/bug-gnulib/2007-04/msg00107.html> */
      ASSERT (strlen (result) == 20 + 3
!           && strisnan (result, strspn (result, " "), strlen (result) - 3, 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (length == strlen (result));
      free (result);
***************
*** 544,551 ****
        my_asnprintf (NULL, &length, "%La %d", 0.0L / 0.0L, 33, 44, 55);
      ASSERT (result != NULL);
      ASSERT (strlen (result) >= 3 + 3
!           && (memcmp (result, "nan", 3) == 0
!               || memcmp (result, "-nan", 4) == 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (length == strlen (result));
      free (result);
--- 563,569 ----
        my_asnprintf (NULL, &length, "%La %d", 0.0L / 0.0L, 33, 44, 55);
      ASSERT (result != NULL);
      ASSERT (strlen (result) >= 3 + 3
!           && strisnan (result, 0, strlen (result) - 3, 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (length == strlen (result));
      free (result);
***************
*** 781,788 ****
      /* "0000000nan 33" is not a valid result; see
         <http://lists.gnu.org/archive/html/bug-gnulib/2007-04/msg00107.html> */
      ASSERT (strlen (result) == 20 + 3
!           && (memcmp (result + strspn (result, " "), "nan", 3) == 0
!               || memcmp (result + strspn (result, " "), "-nan", 4) == 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (length == strlen (result));
      free (result);
--- 799,805 ----
      /* "0000000nan 33" is not a valid result; see
         <http://lists.gnu.org/archive/html/bug-gnulib/2007-04/msg00107.html> */
      ASSERT (strlen (result) == 20 + 3
!           && strisnan (result, strspn (result, " "), strlen (result) - 3, 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (length == strlen (result));
      free (result);
***************
*** 960,967 ****
        my_asnprintf (NULL, &length, "%f %d", NaN (), 33, 44, 55);
      ASSERT (result != NULL);
      ASSERT (strlen (result) >= 3 + 3
!           && (memcmp (result, "nan", 3) == 0
!               || memcmp (result, "-nan", 4) == 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (length == strlen (result));
      free (result);
--- 977,983 ----
        my_asnprintf (NULL, &length, "%f %d", NaN (), 33, 44, 55);
      ASSERT (result != NULL);
      ASSERT (strlen (result) >= 3 + 3
!           && strisnan (result, 0, strlen (result) - 3, 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (length == strlen (result));
      free (result);
***************
*** 1054,1061 ****
        my_asnprintf (NULL, &length, "%020f %d", NaN (), 33, 44, 55);
      ASSERT (result != NULL);
      ASSERT (strlen (result) == 20 + 3
!           && (memcmp (result + strspn (result, " "), "nan", 3) == 0
!               || memcmp (result + strspn (result, " "), "-nan", 4) == 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (length == strlen (result));
      free (result);
--- 1070,1076 ----
        my_asnprintf (NULL, &length, "%020f %d", NaN (), 33, 44, 55);
      ASSERT (result != NULL);
      ASSERT (strlen (result) == 20 + 3
!           && strisnan (result, strspn (result, " "), strlen (result) - 3, 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (length == strlen (result));
      free (result);
***************
*** 1242,1249 ****
        my_asnprintf (NULL, &length, "%Lf %d", zero / zero, 33, 44, 55);
      ASSERT (result != NULL);
      ASSERT (strlen (result) >= 3 + 3
!           && (memcmp (result, "nan", 3) == 0
!               || memcmp (result, "-nan", 4) == 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (length == strlen (result));
      free (result);
--- 1257,1263 ----
        my_asnprintf (NULL, &length, "%Lf %d", zero / zero, 33, 44, 55);
      ASSERT (result != NULL);
      ASSERT (strlen (result) >= 3 + 3
!           && strisnan (result, 0, strlen (result) - 3, 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (length == strlen (result));
      free (result);
***************
*** 1337,1344 ****
        my_asnprintf (NULL, &length, "%020Lf %d", zero / zero, 33, 44, 55);
      ASSERT (result != NULL);
      ASSERT (strlen (result) == 20 + 3
!           && (memcmp (result + strspn (result, " "), "nan", 3) == 0
!               || memcmp (result + strspn (result, " "), "-nan", 4) == 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (length == strlen (result));
      free (result);
--- 1351,1357 ----
        my_asnprintf (NULL, &length, "%020Lf %d", zero / zero, 33, 44, 55);
      ASSERT (result != NULL);
      ASSERT (strlen (result) == 20 + 3
!           && strisnan (result, strspn (result, " "), strlen (result) - 3, 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (length == strlen (result));
      free (result);
***************
*** 1435,1442 ****
        my_asnprintf (NULL, &length, "%F %d", NaN (), 33, 44, 55);
      ASSERT (result != NULL);
      ASSERT (strlen (result) >= 3 + 3
!           && (memcmp (result, "NAN", 3) == 0
!               || memcmp (result, "-NAN", 4) == 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (length == strlen (result));
      free (result);
--- 1448,1454 ----
        my_asnprintf (NULL, &length, "%F %d", NaN (), 33, 44, 55);
      ASSERT (result != NULL);
      ASSERT (strlen (result) >= 3 + 3
!           && strisnan (result, 0, strlen (result) - 3, 1)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (length == strlen (result));
      free (result);
***************
*** 1553,1560 ****
        my_asnprintf (NULL, &length, "%LF %d", zero / zero, 33, 44, 55);
      ASSERT (result != NULL);
      ASSERT (strlen (result) >= 3 + 3
!           && (memcmp (result, "NAN", 3) == 0
!               || memcmp (result, "-NAN", 4) == 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (length == strlen (result));
      free (result);
--- 1565,1571 ----
        my_asnprintf (NULL, &length, "%LF %d", zero / zero, 33, 44, 55);
      ASSERT (result != NULL);
      ASSERT (strlen (result) >= 3 + 3
!           && strisnan (result, 0, strlen (result) - 3, 1)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (length == strlen (result));
      free (result);
***************
*** 1776,1783 ****
        my_asnprintf (NULL, &length, "%e %d", NaN (), 33, 44, 55);
      ASSERT (result != NULL);
      ASSERT (strlen (result) >= 3 + 3
!           && (memcmp (result, "nan", 3) == 0
!               || memcmp (result, "-nan", 4) == 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (length == strlen (result));
      free (result);
--- 1787,1793 ----
        my_asnprintf (NULL, &length, "%e %d", NaN (), 33, 44, 55);
      ASSERT (result != NULL);
      ASSERT (strlen (result) >= 3 + 3
!           && strisnan (result, 0, strlen (result) - 3, 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (length == strlen (result));
      free (result);
***************
*** 1888,1895 ****
        my_asnprintf (NULL, &length, "%020e %d", NaN (), 33, 44, 55);
      ASSERT (result != NULL);
      ASSERT (strlen (result) == 20 + 3
!           && (memcmp (result + strspn (result, " "), "nan", 3) == 0
!               || memcmp (result + strspn (result, " "), "-nan", 4) == 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (length == strlen (result));
      free (result);
--- 1898,1904 ----
        my_asnprintf (NULL, &length, "%020e %d", NaN (), 33, 44, 55);
      ASSERT (result != NULL);
      ASSERT (strlen (result) == 20 + 3
!           && strisnan (result, strspn (result, " "), strlen (result) - 3, 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (length == strlen (result));
      free (result);
***************
*** 2077,2084 ****
        my_asnprintf (NULL, &length, "%Le %d", zero / zero, 33, 44, 55);
      ASSERT (result != NULL);
      ASSERT (strlen (result) >= 3 + 3
!           && (memcmp (result, "nan", 3) == 0
!               || memcmp (result, "-nan", 4) == 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (length == strlen (result));
      free (result);
--- 2086,2092 ----
        my_asnprintf (NULL, &length, "%Le %d", zero / zero, 33, 44, 55);
      ASSERT (result != NULL);
      ASSERT (strlen (result) >= 3 + 3
!           && strisnan (result, 0, strlen (result) - 3, 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (length == strlen (result));
      free (result);
***************
*** 2182,2189 ****
        my_asnprintf (NULL, &length, "%020Le %d", zero / zero, 33, 44, 55);
      ASSERT (result != NULL);
      ASSERT (strlen (result) == 20 + 3
!           && (memcmp (result + strspn (result, " "), "nan", 3) == 0
!               || memcmp (result + strspn (result, " "), "-nan", 4) == 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (length == strlen (result));
      free (result);
--- 2190,2196 ----
        my_asnprintf (NULL, &length, "%020Le %d", zero / zero, 33, 44, 55);
      ASSERT (result != NULL);
      ASSERT (strlen (result) == 20 + 3
!           && strisnan (result, strspn (result, " "), strlen (result) - 3, 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (length == strlen (result));
      free (result);
***************
*** 2381,2388 ****
        my_asnprintf (NULL, &length, "%g %d", NaN (), 33, 44, 55);
      ASSERT (result != NULL);
      ASSERT (strlen (result) >= 3 + 3
!           && (memcmp (result, "nan", 3) == 0
!               || memcmp (result, "-nan", 4) == 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (length == strlen (result));
      free (result);
--- 2388,2394 ----
        my_asnprintf (NULL, &length, "%g %d", NaN (), 33, 44, 55);
      ASSERT (result != NULL);
      ASSERT (strlen (result) >= 3 + 3
!           && strisnan (result, 0, strlen (result) - 3, 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (length == strlen (result));
      free (result);
***************
*** 2486,2493 ****
        my_asnprintf (NULL, &length, "%020g %d", NaN (), 33, 44, 55);
      ASSERT (result != NULL);
      ASSERT (strlen (result) == 20 + 3
!           && (memcmp (result + strspn (result, " "), "nan", 3) == 0
!               || memcmp (result + strspn (result, " "), "-nan", 4) == 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (length == strlen (result));
      free (result);
--- 2492,2498 ----
        my_asnprintf (NULL, &length, "%020g %d", NaN (), 33, 44, 55);
      ASSERT (result != NULL);
      ASSERT (strlen (result) == 20 + 3
!           && strisnan (result, strspn (result, " "), strlen (result) - 3, 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (length == strlen (result));
      free (result);
***************
*** 2675,2682 ****
        my_asnprintf (NULL, &length, "%Lg %d", zero / zero, 33, 44, 55);
      ASSERT (result != NULL);
      ASSERT (strlen (result) >= 3 + 3
!           && (memcmp (result, "nan", 3) == 0
!               || memcmp (result, "-nan", 4) == 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (length == strlen (result));
      free (result);
--- 2680,2686 ----
        my_asnprintf (NULL, &length, "%Lg %d", zero / zero, 33, 44, 55);
      ASSERT (result != NULL);
      ASSERT (strlen (result) >= 3 + 3
!           && strisnan (result, 0, strlen (result) - 3, 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (length == strlen (result));
      free (result);
***************
*** 2780,2787 ****
        my_asnprintf (NULL, &length, "%020Lg %d", zero / zero, 33, 44, 55);
      ASSERT (result != NULL);
      ASSERT (strlen (result) == 20 + 3
!           && (memcmp (result + strspn (result, " "), "nan", 3) == 0
!               || memcmp (result + strspn (result, " "), "-nan", 4) == 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (length == strlen (result));
      free (result);
--- 2784,2790 ----
        my_asnprintf (NULL, &length, "%020Lg %d", zero / zero, 33, 44, 55);
      ASSERT (result != NULL);
      ASSERT (strlen (result) == 20 + 3
!           && strisnan (result, strspn (result, " "), strlen (result) - 3, 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (length == strlen (result));
      free (result);
*** tests/test-vasprintf-posix.c        20 May 2007 08:12:26 -0000      1.17
--- tests/test-vasprintf-posix.c        22 May 2007 01:02:10 -0000
***************
*** 74,79 ****
--- 74,100 ----
    return 1;
  }
  
+ /* Test whether string[start_index..end_index-1] is a valid textual
+    representation of NaN.  */
+ static int
+ strisnan (const char *string, size_t start_index, size_t end_index, int 
uppercase)
+ {
+   if (start_index < end_index)
+     {
+       if (string[start_index] == '-')
+       start_index++;
+       if (start_index + 3 <= end_index
+         && memcmp (string + start_index, uppercase ? "NAN" : "nan", 3) == 0)
+       {
+         start_index += 3;
+         if (start_index == end_index
+             || (string[start_index] == '(' && string[end_index - 1] == ')'))
+           return 1;
+       }
+     }
+   return 0;
+ }
+         
  static void
  test_function (int (*my_asprintf) (char **, const char *, ...))
  {
***************
*** 209,216 ****
        my_asprintf (&result, "%a %d", NaN (), 33, 44, 55);
      ASSERT (result != NULL);
      ASSERT (strlen (result) >= 3 + 3
!           && (memcmp (result, "nan", 3) == 0
!               || memcmp (result, "-nan", 4) == 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (retval == strlen (result));
      free (result);
--- 230,236 ----
        my_asprintf (&result, "%a %d", NaN (), 33, 44, 55);
      ASSERT (result != NULL);
      ASSERT (strlen (result) >= 3 + 3
!           && strisnan (result, 0, strlen (result) - 3, 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (retval == strlen (result));
      free (result);
***************
*** 445,452 ****
      /* "0000000nan 33" is not a valid result; see
         <http://lists.gnu.org/archive/html/bug-gnulib/2007-04/msg00107.html> */
      ASSERT (strlen (result) == 20 + 3
!           && (memcmp (result + strspn (result, " "), "nan", 3) == 0
!               || memcmp (result + strspn (result, " "), "-nan", 4) == 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (retval == strlen (result));
      free (result);
--- 465,471 ----
      /* "0000000nan 33" is not a valid result; see
         <http://lists.gnu.org/archive/html/bug-gnulib/2007-04/msg00107.html> */
      ASSERT (strlen (result) == 20 + 3
!           && strisnan (result, strspn (result, " "), strlen (result) - 3, 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (retval == strlen (result));
      free (result);
***************
*** 525,532 ****
        my_asprintf (&result, "%La %d", 0.0L / 0.0L, 33, 44, 55);
      ASSERT (result != NULL);
      ASSERT (strlen (result) >= 3 + 3
!           && (memcmp (result, "nan", 3) == 0
!               || memcmp (result, "-nan", 4) == 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (retval == strlen (result));
      free (result);
--- 544,550 ----
        my_asprintf (&result, "%La %d", 0.0L / 0.0L, 33, 44, 55);
      ASSERT (result != NULL);
      ASSERT (strlen (result) >= 3 + 3
!           && strisnan (result, 0, strlen (result) - 3, 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (retval == strlen (result));
      free (result);
***************
*** 762,769 ****
      /* "0000000nan 33" is not a valid result; see
         <http://lists.gnu.org/archive/html/bug-gnulib/2007-04/msg00107.html> */
      ASSERT (strlen (result) == 20 + 3
!           && (memcmp (result + strspn (result, " "), "nan", 3) == 0
!               || memcmp (result + strspn (result, " "), "-nan", 4) == 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (retval == strlen (result));
      free (result);
--- 780,786 ----
      /* "0000000nan 33" is not a valid result; see
         <http://lists.gnu.org/archive/html/bug-gnulib/2007-04/msg00107.html> */
      ASSERT (strlen (result) == 20 + 3
!           && strisnan (result, strspn (result, " "), strlen (result) - 3, 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (retval == strlen (result));
      free (result);
***************
*** 941,948 ****
        my_asprintf (&result, "%f %d", NaN (), 33, 44, 55);
      ASSERT (result != NULL);
      ASSERT (strlen (result) >= 3 + 3
!           && (memcmp (result, "nan", 3) == 0
!               || memcmp (result, "-nan", 4) == 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (retval == strlen (result));
      free (result);
--- 958,964 ----
        my_asprintf (&result, "%f %d", NaN (), 33, 44, 55);
      ASSERT (result != NULL);
      ASSERT (strlen (result) >= 3 + 3
!           && strisnan (result, 0, strlen (result) - 3, 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (retval == strlen (result));
      free (result);
***************
*** 1035,1042 ****
        my_asprintf (&result, "%020f %d", NaN (), 33, 44, 55);
      ASSERT (result != NULL);
      ASSERT (strlen (result) == 20 + 3
!           && (memcmp (result + strspn (result, " "), "nan", 3) == 0
!               || memcmp (result + strspn (result, " "), "-nan", 4) == 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (retval == strlen (result));
      free (result);
--- 1051,1057 ----
        my_asprintf (&result, "%020f %d", NaN (), 33, 44, 55);
      ASSERT (result != NULL);
      ASSERT (strlen (result) == 20 + 3
!           && strisnan (result, strspn (result, " "), strlen (result) - 3, 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (retval == strlen (result));
      free (result);
***************
*** 1223,1230 ****
        my_asprintf (&result, "%Lf %d", zero / zero, 33, 44, 55);
      ASSERT (result != NULL);
      ASSERT (strlen (result) >= 3 + 3
!           && (memcmp (result, "nan", 3) == 0
!               || memcmp (result, "-nan", 4) == 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (retval == strlen (result));
      free (result);
--- 1238,1244 ----
        my_asprintf (&result, "%Lf %d", zero / zero, 33, 44, 55);
      ASSERT (result != NULL);
      ASSERT (strlen (result) >= 3 + 3
!           && strisnan (result, 0, strlen (result) - 3, 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (retval == strlen (result));
      free (result);
***************
*** 1318,1325 ****
        my_asprintf (&result, "%020Lf %d", zero / zero, 33, 44, 55);
      ASSERT (result != NULL);
      ASSERT (strlen (result) == 20 + 3
!           && (memcmp (result + strspn (result, " "), "nan", 3) == 0
!               || memcmp (result + strspn (result, " "), "-nan", 4) == 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (retval == strlen (result));
      free (result);
--- 1332,1338 ----
        my_asprintf (&result, "%020Lf %d", zero / zero, 33, 44, 55);
      ASSERT (result != NULL);
      ASSERT (strlen (result) == 20 + 3
!           && strisnan (result, strspn (result, " "), strlen (result) - 3, 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (retval == strlen (result));
      free (result);
***************
*** 1416,1423 ****
        my_asprintf (&result, "%F %d", NaN (), 33, 44, 55);
      ASSERT (result != NULL);
      ASSERT (strlen (result) >= 3 + 3
!           && (memcmp (result, "NAN", 3) == 0
!               || memcmp (result, "-NAN", 4) == 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (retval == strlen (result));
      free (result);
--- 1429,1435 ----
        my_asprintf (&result, "%F %d", NaN (), 33, 44, 55);
      ASSERT (result != NULL);
      ASSERT (strlen (result) >= 3 + 3
!           && strisnan (result, 0, strlen (result) - 3, 1)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (retval == strlen (result));
      free (result);
***************
*** 1534,1541 ****
        my_asprintf (&result, "%LF %d", zero / zero, 33, 44, 55);
      ASSERT (result != NULL);
      ASSERT (strlen (result) >= 3 + 3
!           && (memcmp (result, "NAN", 3) == 0
!               || memcmp (result, "-NAN", 4) == 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (retval == strlen (result));
      free (result);
--- 1546,1552 ----
        my_asprintf (&result, "%LF %d", zero / zero, 33, 44, 55);
      ASSERT (result != NULL);
      ASSERT (strlen (result) >= 3 + 3
!           && strisnan (result, 0, strlen (result) - 3, 1)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (retval == strlen (result));
      free (result);
***************
*** 1757,1764 ****
        my_asprintf (&result, "%e %d", NaN (), 33, 44, 55);
      ASSERT (result != NULL);
      ASSERT (strlen (result) >= 3 + 3
!           && (memcmp (result, "nan", 3) == 0
!               || memcmp (result, "-nan", 4) == 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (retval == strlen (result));
      free (result);
--- 1768,1774 ----
        my_asprintf (&result, "%e %d", NaN (), 33, 44, 55);
      ASSERT (result != NULL);
      ASSERT (strlen (result) >= 3 + 3
!           && strisnan (result, 0, strlen (result) - 3, 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (retval == strlen (result));
      free (result);
***************
*** 1869,1876 ****
        my_asprintf (&result, "%020e %d", NaN (), 33, 44, 55);
      ASSERT (result != NULL);
      ASSERT (strlen (result) == 20 + 3
!           && (memcmp (result + strspn (result, " "), "nan", 3) == 0
!               || memcmp (result + strspn (result, " "), "-nan", 4) == 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (retval == strlen (result));
      free (result);
--- 1879,1885 ----
        my_asprintf (&result, "%020e %d", NaN (), 33, 44, 55);
      ASSERT (result != NULL);
      ASSERT (strlen (result) == 20 + 3
!           && strisnan (result, strspn (result, " "), strlen (result) - 3, 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (retval == strlen (result));
      free (result);
***************
*** 2058,2065 ****
        my_asprintf (&result, "%Le %d", zero / zero, 33, 44, 55);
      ASSERT (result != NULL);
      ASSERT (strlen (result) >= 3 + 3
!           && (memcmp (result, "nan", 3) == 0
!               || memcmp (result, "-nan", 4) == 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (retval == strlen (result));
      free (result);
--- 2067,2073 ----
        my_asprintf (&result, "%Le %d", zero / zero, 33, 44, 55);
      ASSERT (result != NULL);
      ASSERT (strlen (result) >= 3 + 3
!           && strisnan (result, 0, strlen (result) - 3, 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (retval == strlen (result));
      free (result);
***************
*** 2163,2170 ****
        my_asprintf (&result, "%020Le %d", zero / zero, 33, 44, 55);
      ASSERT (result != NULL);
      ASSERT (strlen (result) == 20 + 3
!           && (memcmp (result + strspn (result, " "), "nan", 3) == 0
!               || memcmp (result + strspn (result, " "), "-nan", 4) == 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (retval == strlen (result));
      free (result);
--- 2171,2177 ----
        my_asprintf (&result, "%020Le %d", zero / zero, 33, 44, 55);
      ASSERT (result != NULL);
      ASSERT (strlen (result) == 20 + 3
!           && strisnan (result, strspn (result, " "), strlen (result) - 3, 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (retval == strlen (result));
      free (result);
***************
*** 2362,2369 ****
        my_asprintf (&result, "%g %d", NaN (), 33, 44, 55);
      ASSERT (result != NULL);
      ASSERT (strlen (result) >= 3 + 3
!           && (memcmp (result, "nan", 3) == 0
!               || memcmp (result, "-nan", 4) == 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (retval == strlen (result));
      free (result);
--- 2369,2375 ----
        my_asprintf (&result, "%g %d", NaN (), 33, 44, 55);
      ASSERT (result != NULL);
      ASSERT (strlen (result) >= 3 + 3
!           && strisnan (result, 0, strlen (result) - 3, 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (retval == strlen (result));
      free (result);
***************
*** 2467,2474 ****
        my_asprintf (&result, "%020g %d", NaN (), 33, 44, 55);
      ASSERT (result != NULL);
      ASSERT (strlen (result) == 20 + 3
!           && (memcmp (result + strspn (result, " "), "nan", 3) == 0
!               || memcmp (result + strspn (result, " "), "-nan", 4) == 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (retval == strlen (result));
      free (result);
--- 2473,2479 ----
        my_asprintf (&result, "%020g %d", NaN (), 33, 44, 55);
      ASSERT (result != NULL);
      ASSERT (strlen (result) == 20 + 3
!           && strisnan (result, strspn (result, " "), strlen (result) - 3, 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (retval == strlen (result));
      free (result);
***************
*** 2656,2663 ****
        my_asprintf (&result, "%Lg %d", zero / zero, 33, 44, 55);
      ASSERT (result != NULL);
      ASSERT (strlen (result) >= 3 + 3
!           && (memcmp (result, "nan", 3) == 0
!               || memcmp (result, "-nan", 4) == 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (retval == strlen (result));
      free (result);
--- 2661,2667 ----
        my_asprintf (&result, "%Lg %d", zero / zero, 33, 44, 55);
      ASSERT (result != NULL);
      ASSERT (strlen (result) >= 3 + 3
!           && strisnan (result, 0, strlen (result) - 3, 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (retval == strlen (result));
      free (result);
***************
*** 2761,2768 ****
        my_asprintf (&result, "%020Lg %d", zero / zero, 33, 44, 55);
      ASSERT (result != NULL);
      ASSERT (strlen (result) == 20 + 3
!           && (memcmp (result + strspn (result, " "), "nan", 3) == 0
!               || memcmp (result + strspn (result, " "), "-nan", 4) == 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (retval == strlen (result));
      free (result);
--- 2765,2771 ----
        my_asprintf (&result, "%020Lg %d", zero / zero, 33, 44, 55);
      ASSERT (result != NULL);
      ASSERT (strlen (result) == 20 + 3
!           && strisnan (result, strspn (result, " "), strlen (result) - 3, 0)
            && strcmp (result + strlen (result) - 3, " 33") == 0);
      ASSERT (retval == strlen (result));
      free (result);





reply via email to

[Prev in Thread] Current Thread [Next in Thread]