1
0
mirror of https://git.savannah.gnu.org/git/gnulib.git synced 2025-08-08 17:22:05 +03:00

Guarantee a definition of NAN.

* lib/math.in.h (NAN): Define if missing.
* tests/test-math.c (main): Test it.
* doc/posix-headers/math.texi (math.h): Document this.
* lib/isnan.c (rpl_isnand): Use it.
* tests/test-ceilf1.c (NaN): Delete, and use NAN instead.
* tests/test-floorf1.c (NaN): Likewise.
* tests/test-frexp.c (NaN): Likewise.
* tests/test-isnand.c (NaN): Likewise.
* tests/test-isnanf.c (NaN): Likewise.
* tests/test-round1.c (NaN): Likewise.
* tests/test-roundf1.c (NaN): Likewise.
* tests/test-snprintf-posix.h (NaN): Likewise.
* tests/test-sprintf-posix.h (NaN): Likewise.
* tests/test-trunc1.c (NaN): Likewise.
* tests/test-truncf1.c (NaN): Likewise.
* tests/test-vasnprintf-posix.c (NaN): Likewise.
* tests/test-vasprintf-posix.c (NaN): Likewise.
* modules/isnand-nolibm (Depends-on): Add math.
* modules/isnanf-nolibm (Depends-on): Likewise.
* modules/isnanl (Depends-on): Likewise.
* modules/isnanl-nolibm (Depends-on): Likewise.
* modules/snprintf-posix-tests (Depends-on): Likewise.
* modules/sprintf-posix-tests (Depends-on): Likewise.
* modules/vsnprintf-posix-tests (Depends-on): Likewise.
* modules/vsprintf-posix-tests (Depends-on): Likewise.
* modules/vasnprintf-posix-tests (Depends-on): Likewise.
* modules/vasprintf-posix-tests (Depends-on): Likewise.

Signed-off-by: Eric Blake <ebb9@byu.net>
This commit is contained in:
Eric Blake
2008-03-31 20:56:25 -06:00
parent 4dd6fc750d
commit 06945b7c07
28 changed files with 139 additions and 216 deletions

View File

@@ -1,3 +1,34 @@
2008-03-31 Eric Blake <ebb9@byu.net>
Guarantee a definition of NAN.
* lib/math.in.h (NAN): Define if missing.
* tests/test-math.c (main): Test it.
* doc/posix-headers/math.texi (math.h): Document this.
* lib/isnan.c (rpl_isnand): Use it.
* tests/test-ceilf1.c (NaN): Delete, and use NAN instead.
* tests/test-floorf1.c (NaN): Likewise.
* tests/test-frexp.c (NaN): Likewise.
* tests/test-isnand.c (NaN): Likewise.
* tests/test-isnanf.c (NaN): Likewise.
* tests/test-round1.c (NaN): Likewise.
* tests/test-roundf1.c (NaN): Likewise.
* tests/test-snprintf-posix.h (NaN): Likewise.
* tests/test-sprintf-posix.h (NaN): Likewise.
* tests/test-trunc1.c (NaN): Likewise.
* tests/test-truncf1.c (NaN): Likewise.
* tests/test-vasnprintf-posix.c (NaN): Likewise.
* tests/test-vasprintf-posix.c (NaN): Likewise.
* modules/isnand-nolibm (Depends-on): Add math.
* modules/isnanf-nolibm (Depends-on): Likewise.
* modules/isnanl (Depends-on): Likewise.
* modules/isnanl-nolibm (Depends-on): Likewise.
* modules/snprintf-posix-tests (Depends-on): Likewise.
* modules/sprintf-posix-tests (Depends-on): Likewise.
* modules/vsnprintf-posix-tests (Depends-on): Likewise.
* modules/vsprintf-posix-tests (Depends-on): Likewise.
* modules/vasnprintf-posix-tests (Depends-on): Likewise.
* modules/vasprintf-posix-tests (Depends-on): Likewise.
2008-03-31 Bruno Haible <bruno@clisp.org> 2008-03-31 Bruno Haible <bruno@clisp.org>
* tests/test-strtod.c (main): Update results for OSF/1 platforms. * tests/test-strtod.c (main): Update results for OSF/1 platforms.

View File

@@ -7,8 +7,14 @@ Gnulib module: math
Portability problems fixed by Gnulib: Portability problems fixed by Gnulib:
@itemize @itemize
@item
Some platforms do not provide a definition of NAN:
Solaris 8.
@end itemize @end itemize
Portability problems not fixed by Gnulib: Portability problems not fixed by Gnulib:
@itemize @itemize
NAN is not a compile time constant with some broken compilers:
Compaq (ex-DEC) C 6.4
@end itemize @end itemize

View File

@@ -19,6 +19,7 @@
#include <config.h> #include <config.h>
#include <float.h> #include <float.h>
#include <math.h>
#include <string.h> #include <string.h>
#include "float+.h" #include "float+.h"
@@ -111,11 +112,10 @@ FUNC (DOUBLE x)
also fails when constant-folding 0.0 / 0.0 even when constant-folding is also fails when constant-folding 0.0 / 0.0 even when constant-folding is
not required. The SGI MIPSpro C compiler complains about "floating-point not required. The SGI MIPSpro C compiler complains about "floating-point
operation result is out of range". */ operation result is out of range". */
static DOUBLE zero = L_(0.0);
memory_double nan; memory_double nan;
DOUBLE plus_inf = L_(1.0) / L_(0.0); DOUBLE plus_inf = L_(1.0) / L_(0.0);
DOUBLE minus_inf = -L_(1.0) / L_(0.0); DOUBLE minus_inf = -L_(1.0) / L_(0.0);
nan.value = zero / zero; nan.value = NAN;
# else # else
static memory_double nan = { L_(0.0) / L_(0.0) }; static memory_double nan = { L_(0.0) / L_(0.0) };
static DOUBLE plus_inf = L_(1.0) / L_(0.0); static DOUBLE plus_inf = L_(1.0) / L_(0.0);

View File

@@ -1,6 +1,6 @@
/* A GNU-like <math.h>. /* A GNU-like <math.h>.
Copyright (C) 2002-2003, 2007 Free Software Foundation, Inc. Copyright (C) 2002-2003, 2007, 2008 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
@@ -32,6 +32,24 @@ extern "C" {
#endif #endif
/* POSIX allows platforms that don't support NAN. But all major
machines in the past 15 years have supported something close to
IEEE NaN, so we define this unconditionally. */
#ifndef NAN
/* The Compaq (ex-DEC) C 6.4 compiler chokes on the expression 0.0 / 0.0. */
# ifdef __DECC
static float
_NaN ()
{
static float zero = 0.0f;
return zero / zero;
}
# define NAN (_NaN())
# else
# define NAN (0.0f / 0.0f)
# endif
#endif
/* Write x as /* Write x as
x = mantissa * 2^exp x = mantissa * 2^exp
where where

View File

@@ -10,6 +10,7 @@ m4/isnand.m4
Depends-on: Depends-on:
fpieee fpieee
math
configure.ac: configure.ac:
gl_FUNC_ISNAND_NO_LIBM gl_FUNC_ISNAND_NO_LIBM

View File

@@ -10,6 +10,7 @@ m4/isnanf.m4
Depends-on: Depends-on:
fpieee fpieee
math
configure.ac: configure.ac:
gl_FUNC_ISNANF_NO_LIBM gl_FUNC_ISNANF_NO_LIBM

View File

@@ -11,6 +11,7 @@ m4/isnanl.m4
Depends-on: Depends-on:
float float
fpieee fpieee
math
configure.ac: configure.ac:
gl_FUNC_ISNANL gl_FUNC_ISNANL

View File

@@ -11,6 +11,7 @@ m4/isnanl.m4
Depends-on: Depends-on:
float float
fpieee fpieee
math
configure.ac: configure.ac:
gl_FUNC_ISNANL_NO_LIBM gl_FUNC_ISNANL_NO_LIBM

View File

@@ -4,6 +4,7 @@ tests/test-snprintf-posix.h
tests/test-snprintf.c tests/test-snprintf.c
Depends-on: Depends-on:
math
stdint stdint
configure.ac: configure.ac:

View File

@@ -3,6 +3,7 @@ tests/test-sprintf-posix.c
tests/test-sprintf-posix.h tests/test-sprintf-posix.h
Depends-on: Depends-on:
math
stdint stdint
configure.ac: configure.ac:

View File

@@ -5,6 +5,7 @@ tests/test-vasnprintf-posix2.c
m4/locale-fr.m4 m4/locale-fr.m4
Depends-on: Depends-on:
math
stdint stdint
configure.ac: configure.ac:

View File

@@ -2,6 +2,7 @@ Files:
tests/test-vasprintf-posix.c tests/test-vasprintf-posix.c
Depends-on: Depends-on:
math
stdint stdint
configure.ac: configure.ac:

View File

@@ -4,6 +4,7 @@ tests/test-snprintf-posix.h
tests/test-vsnprintf.c tests/test-vsnprintf.c
Depends-on: Depends-on:
math
stdint stdint
configure.ac: configure.ac:

View File

@@ -3,6 +3,7 @@ tests/test-vsprintf-posix.c
tests/test-sprintf-posix.h tests/test-sprintf-posix.h
Depends-on: Depends-on:
math
stdint stdint
configure.ac: configure.ac:

View File

@@ -1,5 +1,5 @@
/* Test of rounding towards positive infinity. /* Test of rounding towards positive infinity.
Copyright (C) 2007 Free Software Foundation, Inc. Copyright (C) 2007, 2008 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
@@ -36,18 +36,6 @@
} \ } \
while (0) while (0)
/* The Compaq (ex-DEC) C 6.4 compiler chokes on the expression 0.0 / 0.0. */
#ifdef __DECC
static float
NaN ()
{
static float zero = 0.0f;
return zero / zero;
}
#else
# define NaN() (0.0f / 0.0f)
#endif
int int
main () main ()
{ {
@@ -79,7 +67,7 @@ main ()
ASSERT (ceilf (1.0f / 0.0f) == 1.0f / 0.0f); ASSERT (ceilf (1.0f / 0.0f) == 1.0f / 0.0f);
ASSERT (ceilf (-1.0f / 0.0f) == -1.0f / 0.0f); ASSERT (ceilf (-1.0f / 0.0f) == -1.0f / 0.0f);
/* NaNs. */ /* NaNs. */
ASSERT (isnanf (ceilf (NaN ()))); ASSERT (isnanf (ceilf (NAN)));
return 0; return 0;
} }

View File

@@ -1,5 +1,5 @@
/* Test of rounding towards negative infinity. /* Test of rounding towards negative infinity.
Copyright (C) 2007 Free Software Foundation, Inc. Copyright (C) 2007, 2008 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
@@ -36,18 +36,6 @@
} \ } \
while (0) while (0)
/* The Compaq (ex-DEC) C 6.4 compiler chokes on the expression 0.0 / 0.0. */
#ifdef __DECC
static float
NaN ()
{
static float zero = 0.0f;
return zero / zero;
}
#else
# define NaN() (0.0f / 0.0f)
#endif
int int
main () main ()
{ {
@@ -79,7 +67,7 @@ main ()
ASSERT (floorf (1.0f / 0.0f) == 1.0f / 0.0f); ASSERT (floorf (1.0f / 0.0f) == 1.0f / 0.0f);
ASSERT (floorf (-1.0f / 0.0f) == -1.0f / 0.0f); ASSERT (floorf (-1.0f / 0.0f) == -1.0f / 0.0f);
/* NaNs. */ /* NaNs. */
ASSERT (isnanf (floorf (NaN ()))); ASSERT (isnanf (floorf (NAN)));
return 0; return 0;
} }

View File

@@ -37,18 +37,6 @@
} \ } \
while (0) while (0)
/* The Compaq (ex-DEC) C 6.4 compiler chokes on the expression 0.0 / 0.0. */
#ifdef __DECC
static double
NaN ()
{
static double zero = 0.0;
return zero / zero;
}
#else
# define NaN() (0.0 / 0.0)
#endif
static double static double
my_ldexp (double x, int d) my_ldexp (double x, int d)
{ {
@@ -73,7 +61,7 @@ main ()
{ /* NaN. */ { /* NaN. */
int exp = -9999; int exp = -9999;
double mantissa; double mantissa;
x = NaN (); x = NAN;
mantissa = frexp (x, &exp); mantissa = frexp (x, &exp);
ASSERT (isnand (mantissa)); ASSERT (isnand (mantissa));
} }

View File

@@ -21,6 +21,7 @@
#include "isnand.h" #include "isnand.h"
#include <limits.h> #include <limits.h>
#include <math.h>
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
@@ -35,18 +36,6 @@
} \ } \
while (0) while (0)
/* The Compaq (ex-DEC) C 6.4 compiler chokes on the expression 0.0 / 0.0. */
#ifdef __DECC
static double
NaN ()
{
static double zero = 0.0;
return zero / zero;
}
#else
# define NaN() (0.0 / 0.0)
#endif
int int
main () main ()
{ {
@@ -63,7 +52,7 @@ main ()
ASSERT (!isnand (1.0 / 0.0)); ASSERT (!isnand (1.0 / 0.0));
ASSERT (!isnand (-1.0 / 0.0)); ASSERT (!isnand (-1.0 / 0.0));
/* Quiet NaN. */ /* Quiet NaN. */
ASSERT (isnand (NaN ())); ASSERT (isnand (NAN));
#if defined DBL_EXPBIT0_WORD && defined DBL_EXPBIT0_BIT #if defined DBL_EXPBIT0_WORD && defined DBL_EXPBIT0_BIT
/* Signalling NaN. */ /* Signalling NaN. */
{ {
@@ -71,7 +60,7 @@ main ()
((sizeof (double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) ((sizeof (double) + sizeof (unsigned int) - 1) / sizeof (unsigned int))
typedef union { double value; unsigned int word[NWORDS]; } memory_double; typedef union { double value; unsigned int word[NWORDS]; } memory_double;
memory_double m; memory_double m;
m.value = NaN (); m.value = NAN;
# if DBL_EXPBIT0_BIT > 0 # if DBL_EXPBIT0_BIT > 0
m.word[DBL_EXPBIT0_WORD] ^= (unsigned int) 1 << (DBL_EXPBIT0_BIT - 1); m.word[DBL_EXPBIT0_WORD] ^= (unsigned int) 1 << (DBL_EXPBIT0_BIT - 1);
# else # else

View File

@@ -1,5 +1,5 @@
/* Test of isnanf() substitute. /* Test of isnanf() substitute.
Copyright (C) 2007 Free Software Foundation, Inc. Copyright (C) 2007, 2008 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
@@ -21,6 +21,7 @@
#include "isnanf.h" #include "isnanf.h"
#include <limits.h> #include <limits.h>
#include <math.h>
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
@@ -35,18 +36,6 @@
} \ } \
while (0) while (0)
/* The Compaq (ex-DEC) C 6.4 compiler chokes on the expression 0.0 / 0.0. */
#ifdef __DECC
static float
NaN ()
{
static float zero = 0.0f;
return zero / zero;
}
#else
# define NaN() (0.0f / 0.0f)
#endif
int int
main () main ()
{ {
@@ -63,7 +52,7 @@ main ()
ASSERT (!isnanf (1.0f / 0.0f)); ASSERT (!isnanf (1.0f / 0.0f));
ASSERT (!isnanf (-1.0f / 0.0f)); ASSERT (!isnanf (-1.0f / 0.0f));
/* Quiet NaN. */ /* Quiet NaN. */
ASSERT (isnanf (NaN ())); ASSERT (isnanf (NAN));
#if defined FLT_EXPBIT0_WORD && defined FLT_EXPBIT0_BIT #if defined FLT_EXPBIT0_WORD && defined FLT_EXPBIT0_BIT
/* Signalling NaN. */ /* Signalling NaN. */
{ {
@@ -71,7 +60,7 @@ main ()
((sizeof (float) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) ((sizeof (float) + sizeof (unsigned int) - 1) / sizeof (unsigned int))
typedef union { float value; unsigned int word[NWORDS]; } memory_float; typedef union { float value; unsigned int word[NWORDS]; } memory_float;
memory_float m; memory_float m;
m.value = NaN (); m.value = NAN;
# if FLT_EXPBIT0_BIT > 0 # if FLT_EXPBIT0_BIT > 0
m.word[FLT_EXPBIT0_WORD] ^= (unsigned int) 1 << (FLT_EXPBIT0_BIT - 1); m.word[FLT_EXPBIT0_WORD] ^= (unsigned int) 1 << (FLT_EXPBIT0_BIT - 1);
# else # else

View File

@@ -1,5 +1,5 @@
/* Test of <math.h> substitute. /* Test of <math.h> substitute.
Copyright (C) 2007 Free Software Foundation, Inc. Copyright (C) 2007, 2008 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
@@ -20,8 +20,14 @@
#include <math.h> #include <math.h>
#ifndef NAN
# error NAN should be defined
choke me
#endif
int int
main () main ()
{ {
return 0; double d = NAN;
return d == d;
} }

View File

@@ -3,7 +3,7 @@
This program is free software; you can redistribute it and/or modify This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option) the Free Software Foundation; either version 3, or (at your option)
any later version. any later version.
This program is distributed in the hope that it will be useful, This program is distributed in the hope that it will be useful,
@@ -38,18 +38,6 @@
} \ } \
while (0) while (0)
/* The Compaq (ex-DEC) C 6.4 compiler chokes on the expression 0.0 / 0.0. */
#ifdef __DECC
static double
NaN ()
{
static double zero = 0.0;
return zero / zero;
}
#else
# define NaN() (0.0 / 0.0)
#endif
int int
main () main ()
{ {
@@ -86,7 +74,7 @@ main ()
ASSERT (round (1.0 / 0.0) == 1.0 / 0.0); ASSERT (round (1.0 / 0.0) == 1.0 / 0.0);
ASSERT (round (-1.0 / 0.0) == -1.0 / 0.0); ASSERT (round (-1.0 / 0.0) == -1.0 / 0.0);
/* NaNs. */ /* NaNs. */
ASSERT (isnand (round (NaN ()))); ASSERT (isnand (round (NAN)));
return 0; return 0;
} }

View File

@@ -1,9 +1,9 @@
/* Test of rounding to nearest, breaking ties away from zero. /* Test of rounding to nearest, breaking ties away from zero.
Copyright (C) 2007 Free Software Foundation, Inc. Copyright (C) 2007, 2008 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option) the Free Software Foundation; either version 3, or (at your option)
any later version. any later version.
This program is distributed in the hope that it will be useful, This program is distributed in the hope that it will be useful,
@@ -38,18 +38,6 @@
} \ } \
while (0) while (0)
/* The Compaq (ex-DEC) C 6.4 compiler chokes on the expression 0.0 / 0.0. */
#ifdef __DECC
static float
NaN ()
{
static float zero = 0.0f;
return zero / zero;
}
#else
# define NaN() (0.0f / 0.0f)
#endif
int int
main () main ()
{ {
@@ -86,7 +74,7 @@ main ()
ASSERT (roundf (1.0 / 0.0f) == 1.0 / 0.0f); ASSERT (roundf (1.0 / 0.0f) == 1.0 / 0.0f);
ASSERT (roundf (-1.0 / 0.0f) == -1.0 / 0.0f); ASSERT (roundf (-1.0 / 0.0f) == -1.0 / 0.0f);
/* NaNs. */ /* NaNs. */
ASSERT (isnanf (roundf (NaN ()))); ASSERT (isnanf (roundf (NAN)));
return 0; return 0;
} }

View File

@@ -16,17 +16,7 @@
/* Written by Bruno Haible <bruno@clisp.org>, 2007. */ /* Written by Bruno Haible <bruno@clisp.org>, 2007. */
/* The Compaq (ex-DEC) C 6.4 compiler chokes on the expression 0.0 / 0.0. */ #include <math.h>
#ifdef __DECC
static double
NaN ()
{
static double zero = 0.0;
return zero / zero;
}
#else
# define NaN() (0.0 / 0.0)
#endif
/* The SGI MIPS floating-point format does not distinguish 0.0 and -0.0. */ /* The SGI MIPS floating-point format does not distinguish 0.0 and -0.0. */
static int static int
@@ -81,7 +71,7 @@ strisnan (const char *string, size_t start_index, size_t end_index, int uppercas
} }
return 0; return 0;
} }
static void static void
test_function (int (*my_snprintf) (char *, size_t, const char *, ...)) test_function (int (*my_snprintf) (char *, size_t, const char *, ...))
{ {
@@ -207,7 +197,7 @@ test_function (int (*my_snprintf) (char *, size_t, const char *, ...))
{ /* NaN. */ { /* NaN. */
char result[100]; char result[100];
int retval = int retval =
my_snprintf (result, sizeof (result), "%a %d", NaN (), 33, 44, 55); my_snprintf (result, sizeof (result), "%a %d", NAN, 33, 44, 55);
ASSERT (strlen (result) >= 3 + 3 ASSERT (strlen (result) >= 3 + 3
&& strisnan (result, 0, strlen (result) - 3, 0) && strisnan (result, 0, strlen (result) - 3, 0)
&& strcmp (result + strlen (result) - 3, " 33") == 0); && strcmp (result + strlen (result) - 3, " 33") == 0);
@@ -404,7 +394,7 @@ test_function (int (*my_snprintf) (char *, size_t, const char *, ...))
{ /* FLAG_ZERO with NaN. */ { /* FLAG_ZERO with NaN. */
char result[100]; char result[100];
int retval = int retval =
my_snprintf (result, sizeof (result), "%050a %d", NaN (), 33, 44, 55); my_snprintf (result, sizeof (result), "%050a %d", NAN, 33, 44, 55);
/* "0000000nan 33" is not a valid result; see /* "0000000nan 33" is not a valid result; see
<http://lists.gnu.org/archive/html/bug-gnulib/2007-04/msg00107.html> */ <http://lists.gnu.org/archive/html/bug-gnulib/2007-04/msg00107.html> */
ASSERT (strlen (result) == 50 + 3 ASSERT (strlen (result) == 50 + 3
@@ -918,7 +908,7 @@ test_function (int (*my_snprintf) (char *, size_t, const char *, ...))
{ /* NaN. */ { /* NaN. */
char result[100]; char result[100];
int retval = int retval =
my_snprintf (result, sizeof (result), "%f %d", NaN (), 33, 44, 55); my_snprintf (result, sizeof (result), "%f %d", NAN, 33, 44, 55);
ASSERT (strlen (result) >= 3 + 3 ASSERT (strlen (result) >= 3 + 3
&& strisnan (result, 0, strlen (result) - 3, 0) && strisnan (result, 0, strlen (result) - 3, 0)
&& strcmp (result + strlen (result) - 3, " 33") == 0); && strcmp (result + strlen (result) - 3, " 33") == 0);
@@ -999,7 +989,7 @@ test_function (int (*my_snprintf) (char *, size_t, const char *, ...))
{ /* FLAG_ZERO with NaN. */ { /* FLAG_ZERO with NaN. */
char result[100]; char result[100];
int retval = int retval =
my_snprintf (result, sizeof (result), "%050f %d", NaN (), 33, 44, 55); my_snprintf (result, sizeof (result), "%050f %d", NAN, 33, 44, 55);
ASSERT (strlen (result) == 50 + 3 ASSERT (strlen (result) == 50 + 3
&& strisnan (result, strspn (result, " "), strlen (result) - 3, 0) && strisnan (result, strspn (result, " "), strlen (result) - 3, 0)
&& strcmp (result + strlen (result) - 3, " 33") == 0); && strcmp (result + strlen (result) - 3, " 33") == 0);
@@ -1414,7 +1404,7 @@ test_function (int (*my_snprintf) (char *, size_t, const char *, ...))
{ /* NaN. */ { /* NaN. */
char result[100]; char result[100];
int retval = int retval =
my_snprintf (result, sizeof (result), "%F %d", NaN (), 33, 44, 55); my_snprintf (result, sizeof (result), "%F %d", NAN, 33, 44, 55);
ASSERT (strlen (result) >= 3 + 3 ASSERT (strlen (result) >= 3 + 3
&& strisnan (result, 0, strlen (result) - 3, 1) && strisnan (result, 0, strlen (result) - 3, 1)
&& strcmp (result + strlen (result) - 3, " 33") == 0); && strcmp (result + strlen (result) - 3, " 33") == 0);
@@ -1708,7 +1698,7 @@ test_function (int (*my_snprintf) (char *, size_t, const char *, ...))
{ /* NaN. */ { /* NaN. */
char result[100]; char result[100];
int retval = int retval =
my_snprintf (result, sizeof (result), "%e %d", NaN (), 33, 44, 55); my_snprintf (result, sizeof (result), "%e %d", NAN, 33, 44, 55);
ASSERT (strlen (result) >= 3 + 3 ASSERT (strlen (result) >= 3 + 3
&& strisnan (result, 0, strlen (result) - 3, 0) && strisnan (result, 0, strlen (result) - 3, 0)
&& strcmp (result + strlen (result) - 3, " 33") == 0); && strcmp (result + strlen (result) - 3, " 33") == 0);
@@ -1799,7 +1789,7 @@ test_function (int (*my_snprintf) (char *, size_t, const char *, ...))
{ /* FLAG_ZERO with NaN. */ { /* FLAG_ZERO with NaN. */
char result[100]; char result[100];
int retval = int retval =
my_snprintf (result, sizeof (result), "%050e %d", NaN (), 33, 44, 55); my_snprintf (result, sizeof (result), "%050e %d", NAN, 33, 44, 55);
ASSERT (strlen (result) == 50 + 3 ASSERT (strlen (result) == 50 + 3
&& strisnan (result, strspn (result, " "), strlen (result) - 3, 0) && strisnan (result, strspn (result, " "), strlen (result) - 3, 0)
&& strcmp (result + strlen (result) - 3, " 33") == 0); && strcmp (result + strlen (result) - 3, " 33") == 0);
@@ -2316,7 +2306,7 @@ test_function (int (*my_snprintf) (char *, size_t, const char *, ...))
{ /* NaN. */ { /* NaN. */
char result[100]; char result[100];
int retval = int retval =
my_snprintf (result, sizeof (result), "%g %d", NaN (), 33, 44, 55); my_snprintf (result, sizeof (result), "%g %d", NAN, 33, 44, 55);
ASSERT (strlen (result) >= 3 + 3 ASSERT (strlen (result) >= 3 + 3
&& strisnan (result, 0, strlen (result) - 3, 0) && strisnan (result, 0, strlen (result) - 3, 0)
&& strcmp (result + strlen (result) - 3, " 33") == 0); && strcmp (result + strlen (result) - 3, " 33") == 0);
@@ -2400,7 +2390,7 @@ test_function (int (*my_snprintf) (char *, size_t, const char *, ...))
{ /* FLAG_ZERO with NaN. */ { /* FLAG_ZERO with NaN. */
char result[100]; char result[100];
int retval = int retval =
my_snprintf (result, sizeof (result), "%050g %d", NaN (), 33, 44, 55); my_snprintf (result, sizeof (result), "%050g %d", NAN, 33, 44, 55);
ASSERT (strlen (result) == 50 + 3 ASSERT (strlen (result) == 50 + 3
&& strisnan (result, strspn (result, " "), strlen (result) - 3, 0) && strisnan (result, strspn (result, " "), strlen (result) - 3, 0)
&& strcmp (result + strlen (result) - 3, " 33") == 0); && strcmp (result + strlen (result) - 3, " 33") == 0);

View File

@@ -16,17 +16,7 @@
/* Written by Bruno Haible <bruno@clisp.org>, 2007. */ /* Written by Bruno Haible <bruno@clisp.org>, 2007. */
/* The Compaq (ex-DEC) C 6.4 compiler chokes on the expression 0.0 / 0.0. */ #include <math.h>
#ifdef __DECC
static double
NaN ()
{
static double zero = 0.0;
return zero / zero;
}
#else
# define NaN() (0.0 / 0.0)
#endif
/* The SGI MIPS floating-point format does not distinguish 0.0 and -0.0. */ /* The SGI MIPS floating-point format does not distinguish 0.0 and -0.0. */
static int static int
@@ -193,7 +183,7 @@ test_function (int (*my_sprintf) (char *, const char *, ...))
{ /* NaN. */ { /* NaN. */
char result[1000]; char result[1000];
int retval = int retval =
my_sprintf (result, "%a %d", NaN (), 33, 44, 55); my_sprintf (result, "%a %d", NAN, 33, 44, 55);
ASSERT (strlen (result) >= 3 + 3 ASSERT (strlen (result) >= 3 + 3
&& strisnan (result, 0, strlen (result) - 3, 0) && strisnan (result, 0, strlen (result) - 3, 0)
&& strcmp (result + strlen (result) - 3, " 33") == 0); && strcmp (result + strlen (result) - 3, " 33") == 0);
@@ -390,7 +380,7 @@ test_function (int (*my_sprintf) (char *, const char *, ...))
{ /* FLAG_ZERO with NaN. */ { /* FLAG_ZERO with NaN. */
char result[1000]; char result[1000];
int retval = int retval =
my_sprintf (result, "%050a %d", NaN (), 33, 44, 55); my_sprintf (result, "%050a %d", NAN, 33, 44, 55);
/* "0000000nan 33" is not a valid result; see /* "0000000nan 33" is not a valid result; see
<http://lists.gnu.org/archive/html/bug-gnulib/2007-04/msg00107.html> */ <http://lists.gnu.org/archive/html/bug-gnulib/2007-04/msg00107.html> */
ASSERT (strlen (result) == 50 + 3 ASSERT (strlen (result) == 50 + 3
@@ -904,7 +894,7 @@ test_function (int (*my_sprintf) (char *, const char *, ...))
{ /* NaN. */ { /* NaN. */
char result[1000]; char result[1000];
int retval = int retval =
my_sprintf (result, "%f %d", NaN (), 33, 44, 55); my_sprintf (result, "%f %d", NAN, 33, 44, 55);
ASSERT (strlen (result) >= 3 + 3 ASSERT (strlen (result) >= 3 + 3
&& strisnan (result, 0, strlen (result) - 3, 0) && strisnan (result, 0, strlen (result) - 3, 0)
&& strcmp (result + strlen (result) - 3, " 33") == 0); && strcmp (result + strlen (result) - 3, " 33") == 0);
@@ -979,7 +969,7 @@ test_function (int (*my_sprintf) (char *, const char *, ...))
{ /* FLAG_ZERO with NaN. */ { /* FLAG_ZERO with NaN. */
char result[1000]; char result[1000];
int retval = int retval =
my_sprintf (result, "%050f %d", NaN (), 33, 44, 55); my_sprintf (result, "%050f %d", NAN, 33, 44, 55);
ASSERT (strlen (result) == 50 + 3 ASSERT (strlen (result) == 50 + 3
&& strisnan (result, strspn (result, " "), strlen (result) - 3, 0) && strisnan (result, strspn (result, " "), strlen (result) - 3, 0)
&& strcmp (result + strlen (result) - 3, " 33") == 0); && strcmp (result + strlen (result) - 3, " 33") == 0);
@@ -1388,7 +1378,7 @@ test_function (int (*my_sprintf) (char *, const char *, ...))
{ /* NaN. */ { /* NaN. */
char result[1000]; char result[1000];
int retval = int retval =
my_sprintf (result, "%F %d", NaN (), 33, 44, 55); my_sprintf (result, "%F %d", NAN, 33, 44, 55);
ASSERT (strlen (result) >= 3 + 3 ASSERT (strlen (result) >= 3 + 3
&& strisnan (result, 0, strlen (result) - 3, 1) && strisnan (result, 0, strlen (result) - 3, 1)
&& strcmp (result + strlen (result) - 3, " 33") == 0); && strcmp (result + strlen (result) - 3, " 33") == 0);
@@ -1682,7 +1672,7 @@ test_function (int (*my_sprintf) (char *, const char *, ...))
{ /* NaN. */ { /* NaN. */
char result[1000]; char result[1000];
int retval = int retval =
my_sprintf (result, "%e %d", NaN (), 33, 44, 55); my_sprintf (result, "%e %d", NAN, 33, 44, 55);
ASSERT (strlen (result) >= 3 + 3 ASSERT (strlen (result) >= 3 + 3
&& strisnan (result, 0, strlen (result) - 3, 0) && strisnan (result, 0, strlen (result) - 3, 0)
&& strcmp (result + strlen (result) - 3, " 33") == 0); && strcmp (result + strlen (result) - 3, " 33") == 0);
@@ -1773,7 +1763,7 @@ test_function (int (*my_sprintf) (char *, const char *, ...))
{ /* FLAG_ZERO with NaN. */ { /* FLAG_ZERO with NaN. */
char result[1000]; char result[1000];
int retval = int retval =
my_sprintf (result, "%050e %d", NaN (), 33, 44, 55); my_sprintf (result, "%050e %d", NAN, 33, 44, 55);
ASSERT (strlen (result) == 50 + 3 ASSERT (strlen (result) == 50 + 3
&& strisnan (result, strspn (result, " "), strlen (result) - 3, 0) && strisnan (result, strspn (result, " "), strlen (result) - 3, 0)
&& strcmp (result + strlen (result) - 3, " 33") == 0); && strcmp (result + strlen (result) - 3, " 33") == 0);
@@ -2290,7 +2280,7 @@ test_function (int (*my_sprintf) (char *, const char *, ...))
{ /* NaN. */ { /* NaN. */
char result[1000]; char result[1000];
int retval = int retval =
my_sprintf (result, "%g %d", NaN (), 33, 44, 55); my_sprintf (result, "%g %d", NAN, 33, 44, 55);
ASSERT (strlen (result) >= 3 + 3 ASSERT (strlen (result) >= 3 + 3
&& strisnan (result, 0, strlen (result) - 3, 0) && strisnan (result, 0, strlen (result) - 3, 0)
&& strcmp (result + strlen (result) - 3, " 33") == 0); && strcmp (result + strlen (result) - 3, " 33") == 0);
@@ -2374,7 +2364,7 @@ test_function (int (*my_sprintf) (char *, const char *, ...))
{ /* FLAG_ZERO with NaN. */ { /* FLAG_ZERO with NaN. */
char result[1000]; char result[1000];
int retval = int retval =
my_sprintf (result, "%050g %d", NaN (), 33, 44, 55); my_sprintf (result, "%050g %d", NAN, 33, 44, 55);
ASSERT (strlen (result) == 50 + 3 ASSERT (strlen (result) == 50 + 3
&& strisnan (result, strspn (result, " "), strlen (result) - 3, 0) && strisnan (result, strspn (result, " "), strlen (result) - 3, 0)
&& strcmp (result + strlen (result) - 3, " 33") == 0); && strcmp (result + strlen (result) - 3, " 33") == 0);

View File

@@ -36,18 +36,6 @@
} \ } \
while (0) while (0)
/* The Compaq (ex-DEC) C 6.4 compiler chokes on the expression 0.0 / 0.0. */
#ifdef __DECC
static double
NaN ()
{
static double zero = 0.0;
return zero / zero;
}
#else
# define NaN() (0.0 / 0.0)
#endif
int int
main () main ()
{ {
@@ -78,7 +66,7 @@ main ()
ASSERT (trunc (1.0 / 0.0) == 1.0 / 0.0); ASSERT (trunc (1.0 / 0.0) == 1.0 / 0.0);
ASSERT (trunc (-1.0 / 0.0) == -1.0 / 0.0); ASSERT (trunc (-1.0 / 0.0) == -1.0 / 0.0);
/* NaNs. */ /* NaNs. */
ASSERT (isnand (trunc (NaN ()))); ASSERT (isnand (trunc (NAN)));
return 0; return 0;
} }

View File

@@ -1,5 +1,5 @@
/* Test of rounding towards zero. /* Test of rounding towards zero.
Copyright (C) 2007 Free Software Foundation, Inc. Copyright (C) 2007, 2008 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
@@ -36,18 +36,6 @@
} \ } \
while (0) while (0)
/* The Compaq (ex-DEC) C 6.4 compiler chokes on the expression 0.0 / 0.0. */
#ifdef __DECC
static float
NaN ()
{
static float zero = 0.0f;
return zero / zero;
}
#else
# define NaN() (0.0f / 0.0f)
#endif
int int
main () main ()
{ {
@@ -78,7 +66,7 @@ main ()
ASSERT (truncf (1.0f / 0.0f) == 1.0f / 0.0f); ASSERT (truncf (1.0f / 0.0f) == 1.0f / 0.0f);
ASSERT (truncf (-1.0f / 0.0f) == -1.0f / 0.0f); ASSERT (truncf (-1.0f / 0.0f) == -1.0f / 0.0f);
/* NaNs. */ /* NaNs. */
ASSERT (isnanf (truncf (NaN ()))); ASSERT (isnanf (truncf (NAN)));
return 0; return 0;
} }

View File

@@ -21,6 +21,7 @@
#include "vasnprintf.h" #include "vasnprintf.h"
#include <float.h> #include <float.h>
#include <math.h>
#include <stdarg.h> #include <stdarg.h>
#include <stddef.h> #include <stddef.h>
#include <stdio.h> #include <stdio.h>
@@ -40,18 +41,6 @@
} \ } \
while (0) while (0)
/* The Compaq (ex-DEC) C 6.4 compiler chokes on the expression 0.0 / 0.0. */
#ifdef __DECC
static double
NaN ()
{
static double zero = 0.0;
return zero / zero;
}
#else
# define NaN() (0.0 / 0.0)
#endif
/* The SGI MIPS floating-point format does not distinguish 0.0 and -0.0. */ /* The SGI MIPS floating-point format does not distinguish 0.0 and -0.0. */
static int static int
have_minus_zero () have_minus_zero ()
@@ -105,7 +94,7 @@ strisnan (const char *string, size_t start_index, size_t end_index, int uppercas
} }
return 0; return 0;
} }
static void static void
test_function (char * (*my_asnprintf) (char *, size_t *, const char *, ...)) test_function (char * (*my_asnprintf) (char *, size_t *, const char *, ...))
{ {
@@ -257,7 +246,7 @@ test_function (char * (*my_asnprintf) (char *, size_t *, const char *, ...))
{ /* NaN. */ { /* NaN. */
size_t length; size_t length;
char *result = char *result =
my_asnprintf (NULL, &length, "%a %d", NaN (), 33, 44, 55); my_asnprintf (NULL, &length, "%a %d", NAN, 33, 44, 55);
ASSERT (result != NULL); ASSERT (result != NULL);
ASSERT (strlen (result) >= 3 + 3 ASSERT (strlen (result) >= 3 + 3
&& strisnan (result, 0, strlen (result) - 3, 0) && strisnan (result, 0, strlen (result) - 3, 0)
@@ -490,7 +479,7 @@ test_function (char * (*my_asnprintf) (char *, size_t *, const char *, ...))
{ /* FLAG_ZERO with NaN. */ { /* FLAG_ZERO with NaN. */
size_t length; size_t length;
char *result = char *result =
my_asnprintf (NULL, &length, "%050a %d", NaN (), 33, 44, 55); my_asnprintf (NULL, &length, "%050a %d", NAN, 33, 44, 55);
ASSERT (result != NULL); ASSERT (result != NULL);
/* "0000000nan 33" is not a valid result; see /* "0000000nan 33" is not a valid result; see
<http://lists.gnu.org/archive/html/bug-gnulib/2007-04/msg00107.html> */ <http://lists.gnu.org/archive/html/bug-gnulib/2007-04/msg00107.html> */
@@ -1086,7 +1075,7 @@ test_function (char * (*my_asnprintf) (char *, size_t *, const char *, ...))
{ /* NaN. */ { /* NaN. */
size_t length; size_t length;
char *result = char *result =
my_asnprintf (NULL, &length, "%f %d", NaN (), 33, 44, 55); my_asnprintf (NULL, &length, "%f %d", NAN, 33, 44, 55);
ASSERT (result != NULL); ASSERT (result != NULL);
ASSERT (strlen (result) >= 3 + 3 ASSERT (strlen (result) >= 3 + 3
&& strisnan (result, 0, strlen (result) - 3, 0) && strisnan (result, 0, strlen (result) - 3, 0)
@@ -1179,7 +1168,7 @@ test_function (char * (*my_asnprintf) (char *, size_t *, const char *, ...))
{ /* FLAG_ZERO with NaN. */ { /* FLAG_ZERO with NaN. */
size_t length; size_t length;
char *result = char *result =
my_asnprintf (NULL, &length, "%050f %d", NaN (), 33, 44, 55); my_asnprintf (NULL, &length, "%050f %d", NAN, 33, 44, 55);
ASSERT (result != NULL); ASSERT (result != NULL);
ASSERT (strlen (result) == 50 + 3 ASSERT (strlen (result) == 50 + 3
&& strisnan (result, strspn (result, " "), strlen (result) - 3, 0) && strisnan (result, strspn (result, " "), strlen (result) - 3, 0)
@@ -1658,7 +1647,7 @@ test_function (char * (*my_asnprintf) (char *, size_t *, const char *, ...))
{ /* NaN. */ { /* NaN. */
size_t length; size_t length;
char *result = char *result =
my_asnprintf (NULL, &length, "%F %d", NaN (), 33, 44, 55); my_asnprintf (NULL, &length, "%F %d", NAN, 33, 44, 55);
ASSERT (result != NULL); ASSERT (result != NULL);
ASSERT (strlen (result) >= 3 + 3 ASSERT (strlen (result) >= 3 + 3
&& strisnan (result, 0, strlen (result) - 3, 1) && strisnan (result, 0, strlen (result) - 3, 1)
@@ -1997,7 +1986,7 @@ test_function (char * (*my_asnprintf) (char *, size_t *, const char *, ...))
{ /* NaN. */ { /* NaN. */
size_t length; size_t length;
char *result = char *result =
my_asnprintf (NULL, &length, "%e %d", NaN (), 33, 44, 55); my_asnprintf (NULL, &length, "%e %d", NAN, 33, 44, 55);
ASSERT (result != NULL); ASSERT (result != NULL);
ASSERT (strlen (result) >= 3 + 3 ASSERT (strlen (result) >= 3 + 3
&& strisnan (result, 0, strlen (result) - 3, 0) && strisnan (result, 0, strlen (result) - 3, 0)
@@ -2108,7 +2097,7 @@ test_function (char * (*my_asnprintf) (char *, size_t *, const char *, ...))
{ /* FLAG_ZERO with NaN. */ { /* FLAG_ZERO with NaN. */
size_t length; size_t length;
char *result = char *result =
my_asnprintf (NULL, &length, "%050e %d", NaN (), 33, 44, 55); my_asnprintf (NULL, &length, "%050e %d", NAN, 33, 44, 55);
ASSERT (result != NULL); ASSERT (result != NULL);
ASSERT (strlen (result) == 50 + 3 ASSERT (strlen (result) == 50 + 3
&& strisnan (result, strspn (result, " "), strlen (result) - 3, 0) && strisnan (result, strspn (result, " "), strlen (result) - 3, 0)
@@ -2699,7 +2688,7 @@ test_function (char * (*my_asnprintf) (char *, size_t *, const char *, ...))
{ /* NaN. */ { /* NaN. */
size_t length; size_t length;
char *result = char *result =
my_asnprintf (NULL, &length, "%g %d", NaN (), 33, 44, 55); my_asnprintf (NULL, &length, "%g %d", NAN, 33, 44, 55);
ASSERT (result != NULL); ASSERT (result != NULL);
ASSERT (strlen (result) >= 3 + 3 ASSERT (strlen (result) >= 3 + 3
&& strisnan (result, 0, strlen (result) - 3, 0) && strisnan (result, 0, strlen (result) - 3, 0)
@@ -2803,7 +2792,7 @@ test_function (char * (*my_asnprintf) (char *, size_t *, const char *, ...))
{ /* FLAG_ZERO with NaN. */ { /* FLAG_ZERO with NaN. */
size_t length; size_t length;
char *result = char *result =
my_asnprintf (NULL, &length, "%050g %d", NaN (), 33, 44, 55); my_asnprintf (NULL, &length, "%050g %d", NAN, 33, 44, 55);
ASSERT (result != NULL); ASSERT (result != NULL);
ASSERT (strlen (result) == 50 + 3 ASSERT (strlen (result) == 50 + 3
&& strisnan (result, strspn (result, " "), strlen (result) - 3, 0) && strisnan (result, strspn (result, " "), strlen (result) - 3, 0)

View File

@@ -21,6 +21,7 @@
#include <stdio.h> #include <stdio.h>
#include <float.h> #include <float.h>
#include <math.h>
#include <stdarg.h> #include <stdarg.h>
#include <stddef.h> #include <stddef.h>
#include <stdio.h> #include <stdio.h>
@@ -40,18 +41,6 @@
} \ } \
while (0) while (0)
/* The Compaq (ex-DEC) C 6.4 compiler chokes on the expression 0.0 / 0.0. */
#ifdef __DECC
static double
NaN ()
{
static double zero = 0.0;
return zero / zero;
}
#else
# define NaN() (0.0 / 0.0)
#endif
/* The SGI MIPS floating-point format does not distinguish 0.0 and -0.0. */ /* The SGI MIPS floating-point format does not distinguish 0.0 and -0.0. */
static int static int
have_minus_zero () have_minus_zero ()
@@ -105,7 +94,7 @@ strisnan (const char *string, size_t start_index, size_t end_index, int uppercas
} }
return 0; return 0;
} }
static void static void
test_function (int (*my_asprintf) (char **, const char *, ...)) test_function (int (*my_asprintf) (char **, const char *, ...))
{ {
@@ -238,7 +227,7 @@ test_function (int (*my_asprintf) (char **, const char *, ...))
{ /* NaN. */ { /* NaN. */
char *result; char *result;
int retval = int retval =
my_asprintf (&result, "%a %d", NaN (), 33, 44, 55); my_asprintf (&result, "%a %d", NAN, 33, 44, 55);
ASSERT (result != NULL); ASSERT (result != NULL);
ASSERT (strlen (result) >= 3 + 3 ASSERT (strlen (result) >= 3 + 3
&& strisnan (result, 0, strlen (result) - 3, 0) && strisnan (result, 0, strlen (result) - 3, 0)
@@ -471,7 +460,7 @@ test_function (int (*my_asprintf) (char **, const char *, ...))
{ /* FLAG_ZERO with NaN. */ { /* FLAG_ZERO with NaN. */
char *result; char *result;
int retval = int retval =
my_asprintf (&result, "%050a %d", NaN (), 33, 44, 55); my_asprintf (&result, "%050a %d", NAN, 33, 44, 55);
ASSERT (result != NULL); ASSERT (result != NULL);
/* "0000000nan 33" is not a valid result; see /* "0000000nan 33" is not a valid result; see
<http://lists.gnu.org/archive/html/bug-gnulib/2007-04/msg00107.html> */ <http://lists.gnu.org/archive/html/bug-gnulib/2007-04/msg00107.html> */
@@ -1067,7 +1056,7 @@ test_function (int (*my_asprintf) (char **, const char *, ...))
{ /* NaN. */ { /* NaN. */
char *result; char *result;
int retval = int retval =
my_asprintf (&result, "%f %d", NaN (), 33, 44, 55); my_asprintf (&result, "%f %d", NAN, 33, 44, 55);
ASSERT (result != NULL); ASSERT (result != NULL);
ASSERT (strlen (result) >= 3 + 3 ASSERT (strlen (result) >= 3 + 3
&& strisnan (result, 0, strlen (result) - 3, 0) && strisnan (result, 0, strlen (result) - 3, 0)
@@ -1160,7 +1149,7 @@ test_function (int (*my_asprintf) (char **, const char *, ...))
{ /* FLAG_ZERO with NaN. */ { /* FLAG_ZERO with NaN. */
char *result; char *result;
int retval = int retval =
my_asprintf (&result, "%050f %d", NaN (), 33, 44, 55); my_asprintf (&result, "%050f %d", NAN, 33, 44, 55);
ASSERT (result != NULL); ASSERT (result != NULL);
ASSERT (strlen (result) == 50 + 3 ASSERT (strlen (result) == 50 + 3
&& strisnan (result, strspn (result, " "), strlen (result) - 3, 0) && strisnan (result, strspn (result, " "), strlen (result) - 3, 0)
@@ -1639,7 +1628,7 @@ test_function (int (*my_asprintf) (char **, const char *, ...))
{ /* NaN. */ { /* NaN. */
char *result; char *result;
int retval = int retval =
my_asprintf (&result, "%F %d", NaN (), 33, 44, 55); my_asprintf (&result, "%F %d", NAN, 33, 44, 55);
ASSERT (result != NULL); ASSERT (result != NULL);
ASSERT (strlen (result) >= 3 + 3 ASSERT (strlen (result) >= 3 + 3
&& strisnan (result, 0, strlen (result) - 3, 1) && strisnan (result, 0, strlen (result) - 3, 1)
@@ -1978,7 +1967,7 @@ test_function (int (*my_asprintf) (char **, const char *, ...))
{ /* NaN. */ { /* NaN. */
char *result; char *result;
int retval = int retval =
my_asprintf (&result, "%e %d", NaN (), 33, 44, 55); my_asprintf (&result, "%e %d", NAN, 33, 44, 55);
ASSERT (result != NULL); ASSERT (result != NULL);
ASSERT (strlen (result) >= 3 + 3 ASSERT (strlen (result) >= 3 + 3
&& strisnan (result, 0, strlen (result) - 3, 0) && strisnan (result, 0, strlen (result) - 3, 0)
@@ -2089,7 +2078,7 @@ test_function (int (*my_asprintf) (char **, const char *, ...))
{ /* FLAG_ZERO with NaN. */ { /* FLAG_ZERO with NaN. */
char *result; char *result;
int retval = int retval =
my_asprintf (&result, "%050e %d", NaN (), 33, 44, 55); my_asprintf (&result, "%050e %d", NAN, 33, 44, 55);
ASSERT (result != NULL); ASSERT (result != NULL);
ASSERT (strlen (result) == 50 + 3 ASSERT (strlen (result) == 50 + 3
&& strisnan (result, strspn (result, " "), strlen (result) - 3, 0) && strisnan (result, strspn (result, " "), strlen (result) - 3, 0)
@@ -2680,7 +2669,7 @@ test_function (int (*my_asprintf) (char **, const char *, ...))
{ /* NaN. */ { /* NaN. */
char *result; char *result;
int retval = int retval =
my_asprintf (&result, "%g %d", NaN (), 33, 44, 55); my_asprintf (&result, "%g %d", NAN, 33, 44, 55);
ASSERT (result != NULL); ASSERT (result != NULL);
ASSERT (strlen (result) >= 3 + 3 ASSERT (strlen (result) >= 3 + 3
&& strisnan (result, 0, strlen (result) - 3, 0) && strisnan (result, 0, strlen (result) - 3, 0)
@@ -2784,7 +2773,7 @@ test_function (int (*my_asprintf) (char **, const char *, ...))
{ /* FLAG_ZERO with NaN. */ { /* FLAG_ZERO with NaN. */
char *result; char *result;
int retval = int retval =
my_asprintf (&result, "%050g %d", NaN (), 33, 44, 55); my_asprintf (&result, "%050g %d", NAN, 33, 44, 55);
ASSERT (result != NULL); ASSERT (result != NULL);
ASSERT (strlen (result) == 50 + 3 ASSERT (strlen (result) == 50 + 3
&& strisnan (result, strspn (result, " "), strlen (result) - 3, 0) && strisnan (result, strspn (result, " "), strlen (result) - 3, 0)