www.delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp-workers/2013/03/16/16:02:28

X-Authentication-Warning: delorie.com: mail set sender to djgpp-workers-bounces using -f
X-Recipient: djgpp-workers AT delorie DOT com
X-Authenticated: #27081556
X-Provags-ID: V01U2FsdGVkX1/3Uls6CYT3Fr3qz6slJP/+NzEmtQs1wpwApk9enX
UUPCHEY3X4EJr4
Message-ID: <5144CFCF.4000602@gmx.de>
Date: Sat, 16 Mar 2013 21:02:23 +0100
From: Juan Manuel Guerrero <juan DOT guerrero AT gmx DOT de>
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:16.0) Gecko/20121025 Thunderbird/16.0.2
MIME-Version: 1.0
To: djgpp-workers AT delorie DOT com
Subject: Implementation of isgreater, isgreaterequal, isless, islessequal,
islessgreater and isunordered C99 macros.
X-Y-GMX-Trusted: 0
Reply-To: djgpp-workers AT delorie DOT com

Some years ago I suggested a patch to implement the C99 is* family of 
macros.
For some reason I have forgot to commit it.  Here is it again.
Suggestions, objections, comments are welcome.  If I do not get any response
I will commit it.

Regards,
Juan M. Guerrero



#cvs ci -m"Added is* family of macros." djgpp/include/math.h
#cvs ci -m"Added info about is* family of macros." 
djgpp/src/docs/kb/wc204.txi
#cvs ci -m"Describtion of is* family of macros." 
djgpp/src/libc/c99/math/ismacros.txh
#cvs ci -m"Added test file for is* family of macros." 
djgpp/tests/libc/c99/math/makefile
#cvs ci -m"Test file for is* family of macros." 
djgpp/tests/libc/c99/math/t-ismac.c






diff -aprNU5 djgpp.orig/include/math.h djgpp/include/math.h
--- djgpp.orig/include/math.h    2013-03-05 19:18:12 +0000
+++ djgpp/include/math.h    2013-03-16 20:03:00 +0000
@@ -106,24 +106,51 @@ extern float       __dj_nan;
  #define FP_SUBNORMAL    0x00000008
  #define FP_ZERO         0x00000010
  /* Extended with Unnormals (for long doubles). */
  #define FP_UNNORMAL     0x00010000

-#define fpclassify(x)  ((sizeof(x)==sizeof(float))? __fpclassifyf(x) : \
-                        (sizeof(x)==sizeof(double))? __fpclassifyd(x) : \
-                        __fpclassifyld(x))
+#define fpclassify(x)         (__extension__ ({__typeof__(x) __xfp = (x); \
+                                               (sizeof(__xfp) == 
sizeof(float)) ? __fpclassifyf(__xfp) :  \
+                                               (sizeof(__xfp) == 
sizeof(double)) ? __fpclassifyd(__xfp) : \
+ __fpclassifyld(__xfp); \
+                                              }))

-#define signbit(x)     (__extension__ ({__typeof__(x) __x = (x); \
-                                        (sizeof(__x) == sizeof(float)) 
? __signbitf(__x) :  \
-                                        (sizeof(__x) == sizeof(double)) 
? __signbitd(__x) : \
-                                        __signbitld(__x); \
-                                       }))
+#define signbit(x)            (__extension__ ({__typeof__(x) __xsb = (x); \
+                                               (sizeof(__xsb) == 
sizeof(float)) ? __signbitf(__xsb) :  \
+                                               (sizeof(__xsb) == 
sizeof(double)) ? __signbitd(__xsb) : \
+                                               __signbitld(__xsb); \
+                                              }))

-#define isfinite(x)    ((fpclassify(x) & (FP_NORMAL | FP_SUBNORMAL | 
FP_ZERO)) != 0)
-#define isinf(x)       (fpclassify(x) == FP_INFINITE)
-#define isnan(x)       (fpclassify(x) == FP_NAN)
-#define isnormal(x)    (fpclassify(x) == FP_NORMAL)
+#define isfinite(x)           ((fpclassify(x) & (FP_NORMAL | 
FP_SUBNORMAL | FP_ZERO)) != 0)
+#define isinf(x)              (fpclassify(x) == FP_INFINITE)
+#define isnan(x)              (fpclassify(x) == FP_NAN)
+#define isnormal(x)           (fpclassify(x) == FP_NORMAL)
+
+#define isgreater(x, y)       (__extension__ ({__typeof__(x) __x_ig = 
(x); \
+                                               __typeof__(y) __y_ig = 
(y); \
+                                               !isunordered(__x_ig, 
__y_ig) && (__x_ig > __y_ig); \
+                                              }))
+#define isgreaterequal(x, y)  (__extension__ ({__typeof__(x) __x_ige = 
(x); \
+                                               __typeof__(y) __y_ige = 
(y); \
+ !isunordered(__x_ige, __y_ige) && (__x_ige >= __y_ige); \
+                                              }))
+#define isless(x, y)          (__extension__ ({__typeof__(x) __x_il = 
(x); \
+                                               __typeof__(y) __y_il = 
(y); \
+                                               !isunordered(__x_il, 
__y_il) && (__x_il < __y_il); \
+                                              }))
+#define islessequal(x, y)     (__extension__ ({__typeof__(x) __x_ile = 
(x); \
+                                               __typeof__(y) __y_ile = 
(y); \
+ !isunordered(__x_ile, __y_ile) && (__x_ile <= __y_ile); \
+                                              }))
+#define islessgreater(x, y)   (__extension__ ({__typeof__(x) __x_ilg = 
(x); \
+                                               __typeof__(y) __y_ilg = 
(y); \
+ !isunordered(__x_ilg, __y_ilg) && (__x_ilg < __y_ilg || __x_ilg > 
__y_ilg); \
+                                              }))
+#define isunordered(x, y)     (__extension__ ({__typeof__(x) __x_iu = 
(x); \
+                                               __typeof__(y) __y_iu = 
(y); \
+                                               (fpclassify(__x_iu) == 
FP_NAN) || (fpclassify(__y_iu) == FP_NAN); \
+                                              }))

  int         __fpclassifyf(float) __attribute__((const));
  int         __fpclassifyd(double) __attribute__((const));
  int         __fpclassifyld(long double) __attribute__((const));
  double      nan(const char *);
diff -aprNU5 djgpp.orig/src/docs/kb/wc204.txi djgpp/src/docs/kb/wc204.txi
--- djgpp.orig/src/docs/kb/wc204.txi    2013-01-27 23:26:04 +0000
+++ djgpp/src/docs/kb/wc204.txi    2013-03-16 20:03:00 +0000
@@ -1272,5 +1272,20 @@ by @code{_doscan} and the @code{scanf} f
  @tindex rlim_t
  @tindex struct rlimit AT r{, and }rlim_t
  The type @code{rlim_t} has been added.
  @code{rlim_t} is now used for the @code{rlim_cur} and @code{rlim_max}
  members of @code{struct rlimit}.
+
+@cindex @acronym{C99} compliance, @code{math.h}
+@findex isfinite AT r{ added}
+@findex isinf AT r{ added}
+@findex isnan AT r{ added}
+@findex isnormal AT r{ added}
+@findex isgreater AT r{ added}
+@findex isgreaterequal AT r{ added}
+@findex isless AT r{ added}
+@findex islessequal AT r{ added}
+@findex islessgreater AT r{ added}
+@findex isunordered AT r{ added}
+The @acronym{C99} macros @code{isfinite}, @code{isinf}, @code{isnan}, 
@code{isnormal}, @code{isgreater},
+@code{isgreaterequal}, @code{isless}, @code{islessequal}, 
@code{islessgreater} and @code{isunordered}
+were added to comply with the @acronym{C99} standard.
diff -aprNU5 djgpp.orig/src/libc/c99/math/ismacros.txh 
djgpp/src/libc/c99/math/ismacros.txh
--- djgpp.orig/src/libc/c99/math/ismacros.txh    1970-01-01 00:00:00 +0000
+++ djgpp/src/libc/c99/math/ismacros.txh    2013-03-16 20:03:02 +0000
@@ -0,0 +1,422 @@
+@node isfinite, math
+@findex isfinite
+@subheading Syntax
+
+@example
+#include <math.h>
+
+int isfinite(x);
+@end example
+
+@subheading Description
+
+The macro @code{isfinite} will determine whether its argument @var{x} 
has a finite
+value (zero, subnormal, or normal, and not infinite or NaN).  The 
operands can be
+of any real floating-point type.
+
+@subheading Return Value
+
+non-zero for a finite value;
+zero else.
+
+@subheading Portability
+
+@portability !ansi-c89, ansi-c99
+
+@subheading Example
+
+@example
+long double ld = 3.14159265358979;
+
+if (isfinite(ld))
+  printf("value is finite.\n");
+else if (isinf(ld))
+  printf("value is infinite.\n");
+else if (isnan(ld))
+  printf("value is NaN.\n");
+
+@end example
+
+@c ----------------------------------------------------------------------
+@node isgreater, math
+@findex isgreater
+@subheading Syntax
+
+@example
+#include <math.h>
+
+int isgreater(x, y);
+@end example
+
+@subheading Description
+
+The macro @code{isgreater} will determine whether its first argument 
@var{x} is
+greater than its second argument @var{y} without failing if one of the 
operands is
+@code{NaN}.  The operands can be of any real floating-point type and 
the macro is
+guaranteed to evaluate their operands only once.
+
+@subheading Return Value
+
+zero if one of @var{x} or @var{y} is @code{NaN};
+else the result of (@var{x}) > (@var{y}).
+
+@subheading Portability
+
+@portability !ansi-c89, ansi-c99
+
+@subheading Example
+
+@example
+float f = 1;
+double d = INFINITY;
+
+if (isnan(f) || isnan(d))
+  printf("f or d is NaN.\n");
+else
+@{
+  if (isgreater(f, d))
+    printf("f is greater than d.\n");
+  else
+    printf("f is not greater than d.\n");
+@}
+
+@end example
+
+@c ----------------------------------------------------------------------
+@node isgreaterequal, math
+@findex isgreaterequal
+@subheading Syntax
+
+@example
+#include <math.h>
+
+int isgreaterequal(x, y);
+@end example
+
+@subheading Description
+
+The macro @code{isgreaterequal} will determine whether its first 
argument @var{x} is
+greater than or equal to its second argument @var{y} without failing if 
one of the operands
+is @code{NaN}.  The operands can be of any real floating-point type and 
the macro is
+guaranteed to evaluate their operands only once.
+
+@subheading Return Value
+
+zero if one of @var{x} or @var{y} is @code{NaN};
+else the result of (@var{x}) >= (@var{y}).
+
+@subheading Portability
+
+@portability !ansi-c89, ansi-c99
+
+@subheading Example
+
+@example
+float f = 1;
+double d = INFINITY;
+
+if (isnan(f) || isnan(d))
+  printf("f or d is NaN.\n");
+else
+@{
+  if (isgreaterequal(f, d))
+    printf("f is greater than or equal to d.\n");
+  else
+    printf("f is not greater than d.\n");
+@}
+
+@end example
+
+@c ----------------------------------------------------------------------
+@node isinf, math
+@findex isinf
+@subheading Syntax
+
+@example
+#include <math.h>
+
+int isinf(x);
+@end example
+
+@subheading Description
+
+The macro @code{isinf} will determine whether its argument @var{x} 
value is a positive
+or negative infinity.  The operands can be of any real floating-point type.
+
+@subheading Return Value
+
+non-zero for a infinite value (positive or negative);
+zero else.
+
+@subheading Portability
+
+@portability !ansi-c89, ansi-c99
+
+@subheading Example
+
+@example
+double d = INFINITY;
+
+if (isinf(d))
+  printf("value is infinite.\n");
+else if (isnan(d))
+  printf("value is NaN.\n");
+else
+  printf("value is finite.\n");
+
+@end example
+
+@c ----------------------------------------------------------------------
+@node isless, math
+@findex isless
+@subheading Syntax
+
+@example
+#include <math.h>
+
+int isless(x, y);
+@end example
+
+@subheading Description
+
+The macro @code{isless} will determine whether its first argument 
@var{x} is less than
+its second argument @var{y} without failing if one of the operands is 
@code{NaN}.  The
+operands can be of any real floating-point type and the macro is 
guaranteed to evaluate
+their operands only once.
+
+@subheading Return Value
+
+zero if one of @var{x} or @var{y} is @code{NaN};
+else the result of (@var{x}) < (@var{y}).
+
+@subheading Portability
+
+@portability !ansi-c89, ansi-c99
+
+@subheading Example
+
+@example
+float f = 1;
+double d = INFINITY;
+
+if (isnan(f) || isnan(d))
+  printf("f or d is NaN.\n");
+else
+@{
+  if (isless(f, d))
+    printf("f is less than d.\n");
+  else
+    printf("f is not less than d.\n");
+@}
+
+@end example
+
+@c ----------------------------------------------------------------------
+@node islessequal, math
+@findex islessequal
+@subheading Syntax
+
+@example
+#include <math.h>
+
+int islessequal(x, y);
+@end example
+
+@subheading Description
+
+The macro @code{islessequal} will determine whether its first argument 
@var{x} is less
+than or equal to its second argument @var{y} without failing if one of 
the operands is
+@code{NaN}.  The operands can be of any real floating-point type and 
the macro is
+guaranteed to evaluate their operands only once.
+
+@subheading Return Value
+
+zero if one of @var{x} or @var{y} is @code{NaN};
+else the result of (@var{x}) <= (@var{y}).
+
+@subheading Portability
+
+@portability !ansi-c89, ansi-c99
+
+@subheading Example
+
+@example
+float f = 1;
+double d = INFINITY;
+
+if (isnan(f) || isnan(d))
+  printf("f or d is NaN.\n");
+else
+@{
+  if (islessequal(f, d))
+    printf("f is less than or equal to d.\n");
+  else
+    printf("f is not less than d.\n");
+@}
+
+@end example
+
+@c ----------------------------------------------------------------------
+@node islessgreater, math
+@findex islessgreater
+@subheading Syntax
+
+@example
+#include <math.h>
+
+int islessgreater(x, y);
+@end example
+
+@subheading Description
+
+The macro @code{islessgreater} will determine whether its first 
argument @var{x} is less
+than or greater than its second argument @var{y} without failing if one 
of the operands
+is @code{NaN}.  The operands can be of any real floating-point type and 
the macro is
+guaranteed to evaluate their operands only once.
+
+@subheading Return Value
+
+zero if one of @var{x} or @var{y} is @code{NaN};
+else the result of (@var{x}) < (@var{y}) || (@var{x}) > (@var{y}).
+
+@subheading Portability
+
+@portability !ansi-c89, ansi-c99
+
+@subheading Example
+
+@example
+double d = 1;
+long double ld = 1;
+
+if (isnan(ld) || isnan(d))
+  printf("ld or d is NaN.\n");
+else
+@{
+  if (islessgreater(lf, d))
+    printf("ld is less than d or ld is greater than d.\n");
+  else
+    printf("ld is equal to d.\n");
+@}
+
+@end example
+
+@c ----------------------------------------------------------------------
+@node isnan, math
+@findex isnan
+@subheading Syntax
+
+@example
+#include <math.h>
+
+int isnan(x);
+@end example
+
+@subheading Description
+
+The macro @code{isnan} will determine whether its argument @var{x} is a 
NaN.  The operands
+can be of any real floating-point type.
+
+@subheading Return Value
+
+non-zero for NaN;
+zero else.
+
+@subheading Portability
+
+@portability !ansi-c89, ansi-c99
+
+@subheading Example
+
+@example
+float f = NAN;
+
+if (isnan(f))
+  printf("value is NaN.\n");
+else if (isinf(f))
+  printf("value is infinite.\n");
+else
+  printf("value is finite.\n");
+
+@end example
+
+@c ----------------------------------------------------------------------
+@node isnormal, math
+@findex isnormal
+@subheading Syntax
+
+@example
+#include <math.h>
+
+int isnormal(x);
+@end example
+
+@subheading Description
+
+The macro @code{isnormal} will determine whether its argument @var{x} 
is normal
+(neither zero, subnormal, infinite nor NaN).  The operands can be of 
any real
+floating-point type.
+
+@subheading Return Value
+
+non-zero for a normal value;
+zero else.
+
+@subheading Portability
+
+@portability !ansi-c89, ansi-c99
+
+@subheading Example
+
+@example
+long double ld = 3.14159265358979;
+
+if (isfinite(ld))
+@{
+  if (isnormal(ld))
+    printf("value is normal.\n");
+  else
+    printf("value is either zero or subnormal.\n");
+@}
+else
+  printf("value is either infinity or NaN.\n");
+
+@end example
+
+@c ----------------------------------------------------------------------
+@node isunordered, math
+@findex isunordered
+@subheading Syntax
+
+@example
+#include <math.h>
+
+int isunordered(x);
+@end example
+
+@subheading Description
+
+The macro @code{isunordered} will determine whether its arguments 
@var{x} or @var{y} are unordered.
+The operands can be of any real floating-point type.
+
+@subheading Return Value
+
+non-zero if one of @var{x} or @var{y} is @code{NaN};
+zero else.
+
+@subheading Portability
+
+@portability !ansi-c89, ansi-c99
+
+@subheading Example
+
+@example
+float pi = 3.14159;
+long double x = NAN;
+
+if (isunordered(pi, x))
+  printf("one of the values is NaN.\n");
+
+@end example
+
+@c ----------------------------------------------------------------------
diff -aprNU5 djgpp.orig/tests/libc/c99/math/makefile 
djgpp/tests/libc/c99/math/makefile
--- djgpp.orig/tests/libc/c99/math/makefile    2003-10-25 11:22:52 +0000
+++ djgpp/tests/libc/c99/math/makefile    2013-03-16 20:03:38 +0000
@@ -1,7 +1,8 @@
  TOP=../..

  SRC += t-fpclas.c
  SRC += t-nan.c
  SRC += t-nan2.c
+SRC += t-ismac.c

  include $(TOP)/../makefile.inc
diff -aprNU5 djgpp.orig/tests/libc/c99/math/t-ismac.c 
djgpp/tests/libc/c99/math/t-ismac.c
--- djgpp.orig/tests/libc/c99/math/t-ismac.c    1970-01-01 00:00:00 +0000
+++ djgpp/tests/libc/c99/math/t-ismac.c    2013-03-16 20:05:36 +0000
@@ -0,0 +1,1624 @@
+#include "../../../../include/stdio.h"
+#include "../../../../include/math.h"
+#include "../../../../include/libc/ieee.h"
+#include <stdbool.h>
+
+#define TEST_TYPE  0  /* Allowed 0 or 1 */
+
+
+typedef union
+{
+  long_double_t ldt;
+  long double ld;
+} test_long_double_union_t;
+
+typedef struct {
+  const char *class;
+  const char *type;
+  test_long_double_union_t number;
+} test_long_double_t;
+
+
+typedef union
+{
+  double_t dt;
+  double d;
+} test_double_union_t;
+
+typedef struct {
+  const char *class;
+  const char *type;
+  test_double_union_t number;
+} test_double_t;
+
+
+typedef union
+{
+  float_t ft;
+  float f;
+} test_float_union_t;
+
+typedef struct {
+  const char *class;
+  const char *type;
+  test_float_union_t number;
+} test_float_t;
+
+
+int main(void)
+{
+  bool test_passed;
+  int i;
+
+  test_long_double_t test_ld[] = {
+    /*  Normals.  (4)  */
+    {"long double", "small positive normal", {{1, 0x80000000, 1, 0}}},  
/*  Smallest possible > 0.  */
+    {"long double", "small negative normal", {{1, 0x80000000, 1, 1}}},  
/*  Biggest possible < 0.  */
+    {"long double", "big positive normal", {{0xFFFFFFFF, 0xFFFFFFFF, 
0x7FFE, 0}}},  /* Big  number.  */
+    {"long double", "big negative normal", {{0xFFFFFFFF, 0xFFFFFFFF, 
0x7FFE, 1}}},  /* Big -number.  */
+
+    /*  Subnormals aka denormals.  (4 + 2)  */
+    {"long double", "positive subnormal", {{1, 0, 0, 0}}},  /* Smallest 
possible > 0. */
+    {"long double", "negative subnormal", {{1, 0, 0, 1}}},  /* Biggest 
possible < 0. */
+
+    /* Zeros. (4 + 2 + 2)  */
+    {"long double", "positive zero", {{0, 0, 0, 0 }}},  /*  0.0  */
+    {"long double", "negative zero", {{0, 0, 0, 1 }}},  /*  -0.0 */
+
+    /* Infinities. (4 + 2 + 2 + 2)  */
+    {"long double", "positive infinity", {{0, 0x80000000, 0x7FFF, 
0}}},  /*  Inf.  */
+    {"long double", "negative infinity", {{0, 0x80000000, 0x7FFF, 
1}}},  /* -Inf.  */
+
+    /* NaNs. (4 + 2 + 2 + 2 + 4)  */
+    {"long double", "positive signalling NaN", {{1, 0x80000000, 0x7FFF, 
0}}},  /*  SNaN  */
+    {"long double", "negative signalling NaN", {{1, 0x80000000, 0x7FFF, 
1}}},  /* -SNaN  */
+    {"long double", "positive quiet NaN", {{0, 0xFFFFFFFF, 0x7FFF, 
0}}},  /*  QNaN  */
+    {"long double", "negative quiet NaN", {{0, 0xFFFFFFFF, 0x7FFF, 
1}}}   /* -QNaN  */
+  };
+
+  test_double_t test_d[] = {
+    /*  Normals.  */
+    {"double", "small positive normal", {{1, 0, 1, 0}}},  /* Small  
number.  */
+    {"double", "small negative normal", {{1, 0, 1, 1}}},  /*  Small 
-number.  */
+    {"double", "big positive normal", {{0xFFFFFFFF, 0x7FFFF, 0x7FE, 
0}}},  /*  Big  number.  */
+    {"double", "big negative normal", {{0xFFFFFFFF, 0x7FFFF, 0x7FE, 
1}}},  /*  Big -number.  */
+
+    /*  Subnormals aka denormals.  */
+    {"double", "positive subnormal", {{1, 0, 0, 0}}},  /*  Very small  
number.  */
+    {"double", "negative subnormal", {{1, 0, 0, 1}}},  /*  Very small 
-number.  */
+
+    /* Zeros. */
+    {"double", "positive zero", {{0, 0, 0, 0}}},  /*   0.0  */
+    {"double", "negative zero", {{0, 0, 0, 1}}},  /*  -0.0  */
+
+    /* Infinities. */
+    {"double", "positive infinity", {{0, 0, 0x7FF, 0}}},  /* Inf.  */
+    {"double", "negative infinity", {{0, 0, 0x7FF, 1}}},  /* -Inf.  */
+
+    /* NaNs. */
+    {"double", "positive signalling NaN", {{1, 0, 0x7FF, 0}}}, /*   
SNaN  */
+    {"double", "negative signalling NaN", {{1, 0, 0x7FF, 1}}},  /* 
-SNaN  */
+    {"double", "positive quiet NaN", {{0, 0xFFFFF, 0x7FF, 0}}}, /*   
QNaN  */
+    {"double", "negative quiet NaN", {{0, 0xFFFFF, 0x7FF, 1}}} /*  
-QNaN  */
+  };
+
+  test_float_t test_f[] = {
+    /*  Normals.  */
+    {"float", "small positive normal", {{1, 1, 0}}},  /*  Small number.  */
+    {"float", "small negative normal", {{1, 1, 1}}},  /*  Small 
-number.  */
+    {"float", "big positive normal", {{0xFF, 0xFE, 0}}},  /*  Big 
number.  */
+    {"float", "big negative normal", {{0xFF, 0xFE, 1}}},  /*  Big 
-number.  */
+
+    /*  Subnormals aka denormals.  */
+    {"float", "positive subnormal", {{1, 0, 0}}},  /*  Very small 
number. */
+    {"float", "negative subnormal", {{1, 0, 1}}},  /*  Very small 
-number. */
+
+    /* Zeros. */
+    {"float", "positive zero", {{0, 0, 0}}},  /*   0.0  */
+    {"float", "negative zero", {{0, 0, 1}}},  /*  -0.0  */
+
+    /* Infinities. */
+    {"float", "positive infinity", {{0, 0xFF, 0}}},  /*   Inf  */
+    {"float", "negative infinity", {{0, 0xFF, 1}}},  /*  -Inf  */
+
+    /* NaNs. */
+    {"float", "positive signalling NaN", {{1, 0xFF, 0}}},  /* SNaN  */
+    {"float", "negative signalling NaN", {{1, 0xFF, 1}}},  /* -SNaN  */
+    {"float", "positive quiet NaN", {{0x7FFFFF, 0xFF, 0}}},  /* QNaN  */
+    {"float", "negative quiet NaN", {{0x7FFFFF, 0xFF, 1}}}   /* -QNaN  */
+  };
+
+
+
+  /*
+   *  isfinite must return non-zero for normals, subnormals and zero,
+   *  and zero for infinity and NaN.
+   */
+  test_passed = true;
+  for (i = 0; i < 4; i++)
+  {
+    if (!isfinite(test_ld[i].number.ld))
+    {
+      printf("Test failed.  Testing isfinite(%La) for a %s %s: %d\n",  
test_ld[i].number.ld, test_ld[i].class, test_ld[i].type, 
isfinite(test_ld[i].number.ld));
+      break;
+    }
+    else if (!isfinite(test_d[i].number.d))
+    {
+      printf("Test failed.  Testing isfinite(%a) for a %s %s: %d\n",   
test_d[i].number.d,   test_d[i].class,  test_d[i].type, 
isfinite(test_d[i].number.d));
+      break;
+    }
+    else if (!isfinite(test_f[i].number.f))
+    {
+      printf("Test failed.  Testing isfinite(%a) for a %s %s: %d\n\n", 
test_f[i].number.f,   test_f[i].class,  test_f[i].type, 
isfinite(test_f[i].number.f));
+      break;
+    }
+  }
+  if (i < 4)
+  {
+    test_passed = false;
+    printf("isfinite(x) failed for normals.\n");
+  }
+
+  for (i = 4; i < 4 + 2; i++)
+  {
+    if (!isfinite(test_ld[i].number.ld))
+    {
+      printf("Test failed.  Testing isfinite(%La) for a %s %s: %d\n",  
test_ld[i].number.ld, test_ld[i].class, test_ld[i].type, 
isfinite(test_ld[i].number.ld));
+      break;
+    }
+    else if (!isfinite(test_d[i].number.d))
+    {
+      printf("Test failed.  Testing isfinite(%a) for a %s %s: %d\n",   
test_d[i].number.d,   test_d[i].class,  test_d[i].type, 
isfinite(test_d[i].number.d));
+      break;
+    }
+    else if (!isfinite(test_f[i].number.f))
+    {
+      printf("Test failed.  Testing isfinite(%a) for a %s %s: %d\n\n", 
test_f[i].number.f,   test_f[i].class,  test_f[i].type, 
isfinite(test_f[i].number.f));
+      break;
+    }
+  }
+  if (i < 4 + 2)
+  {
+    test_passed = false;
+    printf("isfinite(x) failed for subnormals aka denormals.\n");
+  }
+
+  for (i = 4 + 2; i < 4 + 2 + 2; i++)
+  {
+    if (!isfinite(test_ld[i].number.ld))
+    {
+      printf("Test failed.  Testing isfinite(%La) for a %s %s: %d\n",  
test_ld[i].number.ld, test_ld[i].class, test_ld[i].type, 
isfinite(test_ld[i].number.ld));
+      break;
+    }
+    else if (!isfinite(test_d[i].number.d))
+    {
+      printf("Test failed.  Testing isfinite(%a) for a %s %s: %d\n",   
test_d[i].number.d,   test_d[i].class,  test_d[i].type, 
isfinite(test_d[i].number.d));
+      break;
+    }
+    else if (!isfinite(test_f[i].number.f))
+    {
+      printf("Test failed.  Testing isfinite(%a) for a %s %s: %d\n\n", 
test_f[i].number.f,   test_f[i].class,  test_f[i].type, 
isfinite(test_f[i].number.f));
+      break;
+    }
+  }
+  if (i < 4 + 2 + 2)
+  {
+    test_passed = false;
+    printf("isfinite(x) failed for zero.\n");
+  }
+
+  for (i = 4 + 2 + 2; i < 4 + 2 + 2 + 2; i++)
+  {
+    if (isfinite(test_ld[i].number.ld))
+    {
+      printf("Test failed.  Testing isfinite(%La) for a %s %s: %d\n",  
test_ld[i].number.ld, test_ld[i].class, test_ld[i].type, 
isfinite(test_ld[i].number.ld));
+      break;
+    }
+    else if (isfinite(test_d[i].number.d))
+    {
+      printf("Test failed.  Testing isfinite(%a) for a %s %s: %d\n",   
test_d[i].number.d,   test_d[i].class,  test_d[i].type, 
isfinite(test_d[i].number.d));
+      break;
+    }
+    else if (isfinite(test_f[i].number.f))
+    {
+      printf("Test failed.  Testing isfinite(%a) for a %s %s: %d\n\n", 
test_f[i].number.f,   test_f[i].class,  test_f[i].type, 
isfinite(test_f[i].number.f));
+      break;
+    }
+  }
+  if (i < 4 + 2 + 2 + 2)
+  {
+    test_passed = false;
+    printf("isfinite(x) failed for infinity.\n");
+  }
+
+  for (i = 4 + 2 + 2 + 2; i < 4 + 2 + 2 + 2 + 4; i++)
+  {
+    if (isfinite(test_ld[i].number.ld))
+    {
+      printf("Test failed.  Testing isfinite(%La) for a %s %s: %d\n",  
test_ld[i].number.ld, test_ld[i].class, test_ld[i].type, 
isfinite(test_ld[i].number.ld));
+      break;
+    }
+    else if (isfinite(test_d[i].number.d))
+    {
+      printf("Test failed.  Testing isfinite(%a) for a %s %s: %d\n",   
test_d[i].number.d,   test_d[i].class,  test_d[i].type, 
isfinite(test_d[i].number.d));
+      break;
+    }
+    else if (isfinite(test_f[i].number.f))
+    {
+      printf("Test failed.  Testing isfinite(%a) for a %s %s: %d\n\n", 
test_f[i].number.f,   test_f[i].class,  test_f[i].type, 
isfinite(test_f[i].number.f));
+      break;
+    }
+  }
+  if (i < 4 + 2 + 2 + 2 + 4)
+  {
+    test_passed = false;
+    printf("isfinite(x) failed for SNaN and/or QNaN.\n");
+  }
+  else if (test_passed)
+    printf("isfinite(x) passed all tests.\n");
+ 
printf("----------------------------------------------------------------------\n");
+
+
+
+  /*
+   *  isnormal must return non-zero for normals
+   *  and zero for subnormals, zero, infinity and NaN.
+   */
+  test_passed = true;
+  for (i = 0; i < 4; i++)
+  {
+    if (!isnormal(test_ld[i].number.ld))
+    {
+      printf("Test failed.  Testing isnormal(%La) for a %s %s: %d\n",  
test_ld[i].number.ld, test_ld[i].class, test_ld[i].type, 
isnormal(test_ld[i].number.ld));
+      break;
+    }
+    else if (!isnormal(test_d[i].number.d))
+    {
+      printf("Test failed.  Testing isnormal(%a) for a %s %s: %d\n",   
test_d[i].number.d,   test_d[i].class,  test_d[i].type, 
isnormal(test_d[i].number.d));
+      break;
+    }
+    else if (!isnormal(test_f[i].number.f))
+    {
+      printf("Test failed.  Testing isnormal(%a) for a %s %s: %d\n\n", 
test_f[i].number.f,   test_f[i].class,  test_f[i].type, 
isnormal(test_f[i].number.f));
+      break;
+    }
+  }
+  if (i < 4)
+  {
+    test_passed = false;
+    printf("isnormal(x) failed for normals.\n");
+  }
+
+  for (i = 4; i < 4 + 2; i++)
+  {
+    if (isnormal(test_ld[i].number.ld))
+    {
+      printf("Test failed.  Testing isnormal(%La) for a %s %s: %d\n",  
test_ld[i].number.ld, test_ld[i].class, test_ld[i].type, 
isnormal(test_ld[i].number.ld));
+      break;
+    }
+    else if (isnormal(test_d[i].number.d))
+    {
+      printf("Test failed.  Testing isnormal(%a) for a %s %s: %d\n",   
test_d[i].number.d,   test_d[i].class,  test_d[i].type, 
isnormal(test_d[i].number.d));
+      break;
+    }
+    else if (isnormal(test_f[i].number.f))
+    {
+      printf("Test failed.  Testing isnormal(%a) for a %s %s: %d\n\n", 
test_f[i].number.f,   test_f[i].class,  test_f[i].type, 
isnormal(test_f[i].number.f));
+      break;
+    }
+  }
+  if (i < 4 + 2)
+  {
+    test_passed = false;
+    printf("isnormal(x) failed for subnormals aka denormals.\n");
+  }
+
+  for (i = 4 + 2; i < 4 + 2 + 2; i++)
+  {
+    if (isnormal(test_ld[i].number.ld))
+    {
+      printf("Test failed.  Testing isnormal(%La) for a %s %s: %d\n",  
test_ld[i].number.ld, test_ld[i].class, test_ld[i].type, 
isnormal(test_ld[i].number.ld));
+      break;
+    }
+    else if (isnormal(test_d[i].number.d))
+    {
+      printf("Test failed.  Testing isnormal(%a) for a %s %s: %d\n",   
test_d[i].number.d,   test_d[i].class,  test_d[i].type, 
isnormal(test_d[i].number.d));
+      break;
+    }
+    else if (isnormal(test_f[i].number.f))
+    {
+      printf("Test failed.  Testing isnormal(%a) for a %s %s: %d\n\n", 
test_f[i].number.f,   test_f[i].class,  test_f[i].type, 
isnormal(test_f[i].number.f));
+      break;
+    }
+  }
+  if (i < 4 + 2 + 2)
+  {
+    test_passed = false;
+    printf("isnormal(x) failed for zero.\n");
+  }
+
+  for (i = 4 + 2 + 2; i < 4 + 2 + 2 + 2; i++)
+  {
+    if (isnormal(test_ld[i].number.ld))
+    {
+      printf("Test failed.  Testing isnormal(%La) for a %s %s: %d\n",  
test_ld[i].number.ld, test_ld[i].class, test_ld[i].type, 
isnormal(test_ld[i].number.ld));
+      break;
+    }
+    else if (isnormal(test_d[i].number.d))
+    {
+      printf("Test failed.  Testing isnormal(%a) for a %s %s: %d\n",   
test_d[i].number.d,   test_d[i].class,  test_d[i].type, 
isnormal(test_d[i].number.d));
+      break;
+    }
+    else if (isnormal(test_f[i].number.f))
+    {
+      printf("Test failed.  Testing isnormal(%a) for a %s %s: %d\n\n", 
test_f[i].number.f,   test_f[i].class,  test_f[i].type, 
isnormal(test_f[i].number.f));
+      break;
+    }
+  }
+  if (i < 4 + 2 + 2 + 2)
+  {
+    test_passed = false;
+    printf("isnormal(x) failed for infinity.\n");
+  }
+
+  for (i = 4 + 2 + 2 + 2; i < 4 + 2 + 2 + 2 + 4; i++)
+  {
+    if (isnormal(test_ld[i].number.ld))
+    {
+      printf("Test failed.  Testing isnormal(%La) for a %s %s: %d\n",  
test_ld[i].number.ld, test_ld[i].class, test_ld[i].type, 
isnormal(test_ld[i].number.ld));
+      break;
+    }
+    else if (isnormal(test_d[i].number.d))
+    {
+      printf("Test failed.  Testing isnormal(%a) for a %s %s: %d\n",   
test_d[i].number.d,   test_d[i].class,  test_d[i].type, 
isnormal(test_d[i].number.d));
+      break;
+    }
+    else if (isnormal(test_f[i].number.f))
+    {
+      printf("Test failed.  Testing isnormal(%a) for a %s %s: %d\n\n", 
test_f[i].number.f,   test_f[i].class,  test_f[i].type, 
isnormal(test_f[i].number.f));
+      break;
+    }
+  }
+  if (i < 4 + 2 + 2 + 2 + 4)
+  {
+    test_passed = false;
+    printf("isnormal(x) failed for SNaN and/or QNaN.\n");
+  }
+  else if (test_passed)
+    printf("isnormal(x) passed all tests.\n");
+ 
printf("----------------------------------------------------------------------\n");
+
+
+
+  /*
+   *  isinf must return non-zero for infinity (positive or negative)
+   *  and zero else.
+   */
+  test_passed = true;
+  for (i = 0; i < 4; i++)
+  {
+    if (isinf(test_ld[i].number.ld))
+    {
+      printf("Test failed.  Testing isinf(%La) for a %s %s: %d\n", 
test_ld[i].number.ld, test_ld[i].class, test_ld[i].type, 
isinf(test_ld[i].number.ld));
+      break;
+    }
+    else if (isinf(test_d[i].number.d))
+    {
+      printf("Test failed.  Testing isinf(%a) for a %s %s: %d\n", 
test_d[i].number.d,   test_d[i].class,  test_d[i].type, 
isinf(test_d[i].number.d));
+      break;
+    }
+    else if (isinf(test_f[i].number.f))
+    {
+      printf("Test failed.  Testing isinf(%a) for a %s %s: %d\n\n", 
test_f[i].number.f,   test_f[i].class,  test_f[i].type, 
isinf(test_f[i].number.f));
+      break;
+    }
+  }
+  if (i < 4)
+  {
+    test_passed = false;
+    printf("isinf(x) failed for normals.\n");
+  }
+
+  for (i = 4; i < 4 + 2; i++)
+  {
+    if (isinf(test_ld[i].number.ld))
+    {
+      printf("Test failed.  Testing isinf(%La) for a %s %s: %d\n", 
test_ld[i].number.ld, test_ld[i].class, test_ld[i].type, 
isinf(test_ld[i].number.ld));
+      break;
+    }
+    else if (isinf(test_d[i].number.d))
+    {
+      printf("Test failed.  Testing isinf(%a) for a %s %s: %d\n", 
test_d[i].number.d,   test_d[i].class,  test_d[i].type, 
isinf(test_d[i].number.d));
+      break;
+    }
+    else if (isinf(test_f[i].number.f))
+    {
+      printf("Test failed.  Testing isinf(%a) for a %s %s: %d\n\n", 
test_f[i].number.f,   test_f[i].class,  test_f[i].type, 
isinf(test_f[i].number.f));
+      break;
+    }
+  }
+  if (i < 4 + 2)
+  {
+    test_passed = false;
+    printf("isinf(x) failed for subnormals aka denormals.\n");
+  }
+
+  for (i = 4 + 2; i < 4 + 2 + 2; i++)
+  {
+    if (isinf(test_ld[i].number.ld))
+    {
+      printf("Test failed.  Testing isinf(%La) for a %s %s: %d\n", 
test_ld[i].number.ld, test_ld[i].class, test_ld[i].type, 
isinf(test_ld[i].number.ld));
+      break;
+    }
+    else if (isinf(test_d[i].number.d))
+    {
+      printf("Test failed.  Testing isinf(%a) for a %s %s: %d\n", 
test_d[i].number.d,   test_d[i].class,  test_d[i].type, 
isinf(test_d[i].number.d));
+      break;
+    }
+    else if (isinf(test_f[i].number.f))
+    {
+      printf("Test failed.  Testing isinf(%a) for a %s %s: %d\n\n", 
test_f[i].number.f,   test_f[i].class,  test_f[i].type, 
isinf(test_f[i].number.f));
+      break;
+    }
+  }
+  if (i < 4 + 2 + 2)
+  {
+    test_passed = false;
+    printf("isinf(x) failed for zero.\n");
+  }
+
+  for (i = 4 + 2 + 2; i < 4 + 2 + 2 + 2; i++)
+  {
+    if (!isinf(test_ld[i].number.ld))
+    {
+      printf("Test failed.  Testing isinf(%La) for a %s %s: %d\n", 
test_ld[i].number.ld, test_ld[i].class, test_ld[i].type, 
isinf(test_ld[i].number.ld));
+      break;
+    }
+    else if (!isinf(test_d[i].number.d))
+    {
+      printf("Test failed.  Testing isinf(%a) for a %s %s: %d\n", 
test_d[i].number.d,   test_d[i].class,  test_d[i].type, 
isinf(test_d[i].number.d));
+      break;
+    }
+    else if (!isinf(test_f[i].number.f))
+    {
+      printf("Test failed.  Testing isinf(%a) for a %s %s: %d\n\n", 
test_f[i].number.f,   test_f[i].class,  test_f[i].type, 
isinf(test_f[i].number.f));
+      break;
+    }
+  }
+  if (i < 4 + 2 + 2 + 2)
+  {
+    test_passed = false;
+    printf("isinf(x) failed for infinity.\n");
+  }
+
+  for (i = 4 + 2 + 2 + 2; i < 4 + 2 + 2 + 2 + 4; i++)
+  {
+    if (isinf(test_ld[i].number.ld))
+    {
+      printf("Test failed.  Testing isinf(%La) for a %s %s: %d\n", 
test_ld[i].number.ld, test_ld[i].class, test_ld[i].type, 
isinf(test_ld[i].number.ld));
+      break;
+    }
+    else if (isinf(test_d[i].number.d))
+    {
+      printf("Test failed.  Testing isinf(%a) for a %s %s: %d\n", 
test_d[i].number.d,   test_d[i].class,  test_d[i].type, 
isinf(test_d[i].number.d));
+      break;
+    }
+    else if (isinf(test_f[i].number.f))
+    {
+      printf("Test failed.  Testing isinf(%a) for a %s %s: %d\n\n", 
test_f[i].number.f,   test_f[i].class,  test_f[i].type, 
isinf(test_f[i].number.f));
+      break;
+    }
+  }
+  if (i < 4 + 2 + 2 + 2 + 4)
+  {
+    test_passed = false;
+    printf("isinf(x) failed for SNaN and/or QNaN.\n");
+  }
+  else if (test_passed)
+    printf("isinf(x) passed all tests.\n");
+ 
printf("----------------------------------------------------------------------\n");
+
+
+
+  /*
+   *  isnan must return non-zero for [SQ]NaN (positive or negative)
+   *  and zero else.
+   */
+  test_passed = true;
+  for (i = 0; i < 4; i++)
+  {
+    if (isnan(test_ld[i].number.ld))
+    {
+      printf("Test failed.  Testing isnan(%La) for a %s %s: %d\n", 
test_ld[i].number.ld, test_ld[i].class, test_ld[i].type, 
isnan(test_ld[i].number.ld));
+      break;
+    }
+    else if (isnan(test_d[i].number.d))
+    {
+      printf("Test failed.  Testing isnan(%a) for a %s %s: %d\n", 
test_d[i].number.d,   test_d[i].class,  test_d[i].type, 
isnan(test_d[i].number.d));
+      break;
+    }
+    else if (isnan(test_f[i].number.f))
+    {
+      printf("Test failed.  Testing isnan(%a) for a %s %s: %d\n\n", 
test_f[i].number.f,   test_f[i].class,  test_f[i].type, 
isnan(test_f[i].number.f));
+      break;
+    }
+  }
+  if (i < 4)
+  {
+    test_passed = false;
+    printf("isnan(x) failed for normals.\n");
+  }
+
+  for (i = 4; i < 4 + 2; i++)
+  {
+    if (isnan(test_ld[i].number.ld))
+    {
+      printf("Test failed.  Testing isnan(%La) for a %s %s: %d\n", 
test_ld[i].number.ld, test_ld[i].class, test_ld[i].type, 
isnan(test_ld[i].number.ld));
+      break;
+    }
+    else if (isnan(test_d[i].number.d))
+    {
+      printf("Test failed.  Testing isnan(%a) for a %s %s: %d\n", 
test_d[i].number.d,   test_d[i].class,  test_d[i].type, 
isnan(test_d[i].number.d));
+      break;
+    }
+    else if (isnan(test_f[i].number.f))
+    {
+      printf("Test failed.  Testing isnan(%a) for a %s %s: %d\n\n", 
test_f[i].number.f,   test_f[i].class,  test_f[i].type, 
isnan(test_f[i].number.f));
+      break;
+    }
+  }
+  if (i < 4 + 2)
+  {
+    test_passed = false;
+    printf("isnan(x) failed for subnormals aka denormals.\n");
+  }
+
+  for (i = 4 + 2; i < 4 + 2 + 2; i++)
+  {
+    if (isnan(test_ld[i].number.ld))
+    {
+      printf("Test failed.  Testing isnan(%La) for a %s %s: %d\n", 
test_ld[i].number.ld, test_ld[i].class, test_ld[i].type, 
isnan(test_ld[i].number.ld));
+      break;
+    }
+    else if (isnan(test_d[i].number.d))
+    {
+      printf("Test failed.  Testing isnan(%a) for a %s %s: %d\n", 
test_d[i].number.d,   test_d[i].class,  test_d[i].type, 
isnan(test_d[i].number.d));
+      break;
+    }
+    else if (isnan(test_f[i].number.f))
+    {
+      printf("Test failed.  Testing isnan(%a) for a %s %s: %d\n\n", 
test_f[i].number.f,   test_f[i].class,  test_f[i].type, 
isnan(test_f[i].number.f));
+      break;
+    }
+  }
+  if (i < 4 + 2 + 2)
+  {
+    test_passed = false;
+    printf("isnan(x) failed for zero.\n");
+  }
+
+  for (i = 4 + 2 + 2; i < 4 + 2 + 2 + 2; i++)
+  {
+    if (isnan(test_ld[i].number.ld))
+    {
+      printf("Test failed.  Testing isnan(%La) for a %s %s: %d\n", 
test_ld[i].number.ld, test_ld[i].class, test_ld[i].type, 
isnan(test_ld[i].number.ld));
+      break;
+    }
+    else if (isnan(test_d[i].number.d))
+    {
+      printf("Test failed.  Testing isnan(%a) for a %s %s: %d\n", 
test_d[i].number.d,   test_d[i].class,  test_d[i].type, 
isnan(test_d[i].number.d));
+      break;
+    }
+    else if (isnan(test_f[i].number.f))
+    {
+      printf("Test failed.  Testing isnan(%a) for a %s %s: %d\n\n", 
test_f[i].number.f,   test_f[i].class,  test_f[i].type, 
isnan(test_f[i].number.f));
+      break;
+    }
+  }
+  if (i < 4 + 2 + 2 + 2)
+  {
+    test_passed = false;
+    printf("isnan(x) failed for infinity.\n");
+  }
+
+  for (i = 4 + 2 + 2 + 2; i < 4 + 2 + 2 + 2 + 4; i++)
+  {
+    if (!isnan(test_ld[i].number.ld))
+    {
+      printf("Test failed.  Testing isnan(%La) for a %s %s: %d\n", 
test_ld[i].number.ld, test_ld[i].class, test_ld[i].type, 
isnan(test_ld[i].number.ld));
+      break;
+    }
+    else if (!isnan(test_d[i].number.d))
+    {
+      printf("Test failed.  Testing isnan(%a) for a %s %s: %d\n", 
test_d[i].number.d,   test_d[i].class,  test_d[i].type, 
isnan(test_d[i].number.d));
+      break;
+    }
+    else if (!isnan(test_f[i].number.f))
+    {
+      printf("Test failed.  Testing isnan(%a) for a %s %s: %d\n\n", 
test_f[i].number.f,   test_f[i].class,  test_f[i].type, 
isnan(test_f[i].number.f));
+      break;
+    }
+  }
+  if (i < 4 + 2 + 2 + 2 + 4)
+  {
+    test_passed = false;
+    printf("isnan(x) failed for SNaN and/or QNaN.\n");
+  }
+  else if (test_passed)
+    printf("isnan(x) passed all tests.\n");
+ 
printf("----------------------------------------------------------------------\n");
+
+
+
+  /*
+   *  isgreater must return zero if x or y is [SQ]NaN (positive or 
negative)
+   *  and else the result of x > y.
+   */
+  test_passed = true;
+  for (i = 0; i < 4; i += 3)
+  {
+    if (isgreater(test_ld[i].number.ld, test_d[i].number.d))
+    {
+      printf("Test failed.  Testing isgreater(%La, %a) for a %s %s and 
%s %s: %d\n",   test_ld[i].number.ld, test_d[i].number.d, 
test_ld[i].class, test_ld[i].type, test_d[i].class, test_d[i].type,  
isgreater(test_ld[i].number.ld, test_d[i].number.d));
+      break;
+    }
+    else if (isgreater(test_d[i].number.d, test_f[i].number.f))
+    {
+      printf("Test failed.  Testing isgreater(%a, %a) for a %s %s and 
%s %s: %d\n",    test_d[i].number.d,   test_f[i].number.f, 
test_d[i].class,  test_d[i].type,  test_f[i].class, test_f[i].type,  
isgreater(test_d[i].number.d, test_f[i].number.f));
+      break;
+    }
+    else if (!isgreater(test_f[i].number.f, test_ld[i].number.ld))
+    {
+      printf("Test failed.  Testing isgreater(%a, %La) for a %s %s and 
%s %s: %d\n\n", test_f[i].number.f,   test_ld[i].number.ld, 
test_f[i].class,  test_f[i].type,  test_ld[i].class, test_ld[i].type, 
isgreater(test_f[i].number.f, test_ld[i].number.ld));
+      break;
+    }
+  }
+  if (i < 4)
+  {
+    test_passed = false;
+    printf("isgreater(x, y) failed for normals.\n");
+  }
+
+  for (i = 1; i < 4 - 1; i++)
+  {
+    if (!isgreater(test_ld[i].number.ld, test_d[i].number.d))
+    {
+      printf("Test failed.  Testing isgreater(%La, %a) for a %s %s and 
%s %s: %d\n",   test_ld[i].number.ld, test_d[i].number.d, 
test_ld[i].class, test_ld[i].type, test_d[i].class, test_d[i].type,  
isgreater(test_ld[i].number.ld, test_d[i].number.d));
+      break;
+    }
+    else if (!isgreater(test_d[i].number.d, test_f[i].number.f))
+    {
+      printf("Test failed.  Testing isgreater(%a, %a) for a %s %s and 
%s %s: %d\n",    test_d[i].number.d,   test_f[i].number.f, 
test_d[i].class,  test_d[i].type,  test_f[i].class, test_f[i].type,  
isgreater(test_d[i].number.d, test_f[i].number.f));
+      break;
+    }
+    else if (isgreater(test_f[i].number.f, test_ld[i].number.ld))
+    {
+      printf("Test failed.  Testing isgreater(%a, %La) for a %s %s and 
%s %s: %d\n\n", test_f[i].number.f,   test_ld[i].number.ld, 
test_f[i].class,  test_f[i].type,  test_ld[i].class, test_ld[i].type, 
isgreater(test_f[i].number.f, test_ld[i].number.ld));
+      break;
+    }
+  }
+  if (i < 4 - 1)
+  {
+    test_passed = false;
+    printf("isgreater(x, y) failed for normals.\n");
+  }
+
+  for (i = 4; i < 4 + 1; i++)
+  {
+    if (isgreater(test_ld[i].number.ld, test_d[i].number.d))
+    {
+      printf("Test failed.  Testing isgreater(%La, %a) for a %s %s and 
%s %s: %d\n",   test_ld[i].number.ld, test_d[i].number.d, 
test_ld[i].class, test_ld[i].type, test_d[i].class, test_d[i].type,  
isgreater(test_ld[i].number.ld, test_d[i].number.d));
+      break;
+    }
+    else if (isgreater(test_d[i].number.d, test_f[i].number.f))
+    {
+      printf("Test failed.  Testing isgreater(%a, %a) for a %s %s and 
%s %s: %d\n",    test_d[i].number.d,   test_f[i].number.f, 
test_d[i].class,  test_d[i].type,  test_f[i].class, test_f[i].type,  
isgreater(test_d[i].number.d, test_f[i].number.f));
+      break;
+    }
+    else if (!isgreater(test_f[i].number.f, test_ld[i].number.ld))
+    {
+      printf("Test failed.  Testing isgreater(%a, %La) for a %s %s and 
%s %s: %d\n\n", test_f[i].number.f,   test_ld[i].number.ld, 
test_f[i].class,  test_f[i].type,  test_ld[i].class, test_ld[i].type, 
isgreater(test_f[i].number.f, test_ld[i].number.ld));
+      break;
+    }
+  }
+  if (i < 4 + 1)
+  {
+    test_passed = false;
+    printf("isgreater(x, y) failed for subnormals.\n");
+  }
+
+  for (i = 4 + 1; i < 4 + 2; i++)
+  {
+    if (!isgreater(test_ld[i].number.ld, test_d[i].number.d))
+    {
+      printf("Test failed.  Testing isgreater(%La, %a) for a %s %s and 
%s %s: %d\n",   test_ld[i].number.ld, test_d[i].number.d, 
test_ld[i].class, test_ld[i].type, test_d[i].class, test_d[i].type,  
isgreater(test_ld[i].number.ld, test_d[i].number.d));
+      break;
+    }
+    else if (!isgreater(test_d[i].number.d, test_f[i].number.f))
+    {
+      printf("Test failed.  Testing isgreater(%a, %a) for a %s %s and 
%s %s: %d\n",    test_d[i].number.d,   test_f[i].number.f, 
test_d[i].class,  test_d[i].type,  test_f[i].class, test_f[i].type,  
isgreater(test_d[i].number.d, test_f[i].number.f));
+      break;
+    }
+    else if (isgreater(test_f[i].number.f, test_ld[i].number.ld))
+    {
+      printf("Test failed.  Testing isgreater(%a, %La) for a %s %s and 
%s %s: %d\n\n", test_f[i].number.f,   test_ld[i].number.ld, 
test_f[i].class,  test_f[i].type,  test_ld[i].class, test_ld[i].type, 
isgreater(test_f[i].number.f, test_ld[i].number.ld));
+      break;
+    }
+  }
+  if (i < 4 + 2)
+  {
+    test_passed = false;
+    printf("isgreater(x, y) failed for subnormals.\n");
+  }
+
+  for (i = 4 + 2; i < 4 + 2 + 2; i++)
+  {
+    if (isgreater(test_ld[i].number.ld, test_d[i].number.d))
+    {
+      printf("Test failed.  Testing isgreater(%La, %a) for a %s %s and 
%s %s: %d\n",   test_ld[i].number.ld, test_d[i].number.d, 
test_ld[i].class, test_ld[i].type, test_d[i].class, test_d[i].type,  
isgreater(test_ld[i].number.ld, test_d[i].number.d));
+      break;
+    }
+    else if (isgreater(test_d[i].number.d, test_f[i].number.f))
+    {
+      printf("Test failed.  Testing isgreater(%a, %a) for a %s %s and 
%s %s: %d\n",    test_d[i].number.d,   test_f[i].number.f, 
test_d[i].class,  test_d[i].type,  test_f[i].class, test_f[i].type,  
isgreater(test_d[i].number.d, test_f[i].number.f));
+      break;
+    }
+    else if (isgreater(test_f[i].number.f, test_ld[i].number.ld))
+    {
+      printf("Test failed.  Testing isgreater(%a, %La) for a %s %s and 
%s %s: %d\n\n", test_f[i].number.f,   test_ld[i].number.ld, 
test_f[i].class,  test_f[i].type,  test_ld[i].class, test_ld[i].type, 
isgreater(test_f[i].number.f, test_ld[i].number.ld));
+      break;
+    }
+  }
+  if (i < 4 + 2 + 2)
+  {
+    test_passed = false;
+    printf("isgreater(x, y) failed for zero.\n");
+  }
+
+  for (i = 4 + 2 + 2; i < 4 + 2 + 2 + 2; i++)
+  {
+    if (isgreater(test_ld[i].number.ld, test_d[i].number.d))
+    {
+      printf("Test failed.  Testing isgreater(%La, %a) for a %s %s and 
%s %s: %d\n",   test_ld[i].number.ld, test_d[i].number.d, 
test_ld[i].class, test_ld[i].type, test_d[i].class, test_d[i].type,  
isgreater(test_ld[i].number.ld, test_d[i].number.d));
+      break;
+    }
+    else if (isgreater(test_d[i].number.d, test_f[i].number.f))
+    {
+      printf("Test failed.  Testing isgreater(%a, %a) for a %s %s and 
%s %s: %d\n",    test_d[i].number.d,   test_f[i].number.f, 
test_d[i].class,  test_d[i].type,  test_f[i].class, test_f[i].type,  
isgreater(test_d[i].number.d, test_f[i].number.f));
+      break;
+    }
+    else if (isgreater(test_f[i].number.f, test_ld[i].number.ld))
+    {
+      printf("Test failed.  Testing isgreater(%a, %La) for a %s %s and 
%s %s: %d\n\n", test_f[i].number.f,   test_ld[i].number.ld, 
test_f[i].class,  test_f[i].type,  test_ld[i].class, test_ld[i].type, 
isgreater(test_f[i].number.f, test_ld[i].number.ld));
+      break;
+    }
+  }
+  if (i < 4 + 2 + 2 + 2)
+  {
+    test_passed = false;
+    printf("isgreater(x, y) failed for infinity.\n");
+  }
+
+  for (i = 4 + 2 + 2 + 2; i < 4 + 2 + 2 + 2 + 4; i++)
+  {
+    if (isgreater(test_ld[i].number.ld, test_d[i].number.d))
+    {
+      printf("Test failed.  Testing isgreater(%La, %a) for a %s %s and 
%s %s: %d\n",   test_ld[i].number.ld, test_d[i].number.d, 
test_ld[i].class, test_ld[i].type, test_d[i].class, test_d[i].type,  
isgreater(test_ld[i].number.ld, test_d[i].number.d));
+      break;
+    }
+    else if (isgreater(test_d[i].number.d, test_f[i].number.f))
+    {
+      printf("Test failed.  Testing isgreater(%a, %a) for a %s %s and 
%s %s: %d\n",    test_d[i].number.d,   test_f[i].number.f, 
test_d[i].class,  test_d[i].type,  test_f[i].class, test_f[i].type,  
isgreater(test_d[i].number.d, test_f[i].number.f));
+      break;
+    }
+    else if (isgreater(test_f[i].number.f, test_ld[i].number.ld))
+    {
+      printf("Test failed.  Testing isgreater(%a, %La) for a %s %s and 
%s %s: %d\n\n", test_f[i].number.f,   test_ld[i].number.ld, 
test_f[i].class,  test_f[i].type,  test_ld[i].class, test_ld[i].type, 
isgreater(test_f[i].number.f, test_ld[i].number.ld));
+      break;
+    }
+  }
+  if (i < 4 + 2 + 2 + 2 + 4)
+  {
+    test_passed = false;
+    printf("isgreater(x, y) failed for SNaN and/or QNaN.\n");
+  }
+  else if (test_passed)
+    printf("isgreater(x, y) passed all tests.\n");
+ 
printf("----------------------------------------------------------------------\n");
+
+
+
+  /*
+   *  isgreaterequal must return zero if x or y is [SQ]NaN (positive or 
negative)
+   *  and else the result of x >= y.
+   */
+  test_passed = true;
+  for (i = 0; i < 4; i += 3)
+  {
+    if (isgreaterequal(test_ld[i].number.ld, test_d[i].number.d))
+    {
+      printf("Test failed.  Testing isgreaterequal(%La, %a) for a %s %s 
and %s %s: %d\n",   test_ld[i].number.ld, test_d[i].number.d,   
test_ld[i].class, test_ld[i].type, test_d[i].class,  test_d[i].type, 
isgreaterequal(test_ld[i].number.ld, test_d[i].number.d));
+      break;
+    }
+    else if (isgreaterequal(test_d[i].number.d, test_f[i].number.f))
+    {
+      printf("Test failed.  Testing isgreaterequal(%a, %a) for a %s %s 
and %s %s: %d\n",    test_d[i].number.d,   test_f[i].number.f, 
test_d[i].class,  test_d[i].type,  test_f[i].class, test_f[i].type,  
isgreaterequal(test_d[i].number.d, test_f[i].number.f));
+      break;
+    }
+    else if (!isgreaterequal(test_f[i].number.f, test_ld[i].number.ld))
+    {
+      printf("Test failed.  Testing isgreaterequal(%a, %La) for a %s %s 
and %s %s: %d\n\n", test_f[i].number.f, test_ld[i].number.ld, 
test_f[i].class,  test_f[i].type, test_ld[i].class, test_ld[i].type, 
isgreaterequal(test_f[i].number.f, test_ld[i].number.ld));
+      break;
+    }
+  }
+  if (i < 4)
+  {
+    test_passed = false;
+    printf("isgreaterequal(x, y) failed for normals.\n");
+  }
+
+  for (i = 1; i < 4 - 1; i++)
+  {
+    if (!isgreaterequal(test_ld[i].number.ld, test_d[i].number.d))
+    {
+      printf("Test failed.  Testing isgreaterequal(%La, %a) for a %s %s 
and %s %s: %d\n",   test_ld[i].number.ld, test_d[i].number.d,   
test_ld[i].class, test_ld[i].type, test_d[i].class,  test_d[i].type, 
isgreaterequal(test_ld[i].number.ld, test_d[i].number.d));
+      break;
+    }
+    else if (!isgreaterequal(test_d[i].number.d, test_f[i].number.f))
+    {
+      printf("Test failed.  Testing isgreaterequal(%a, %a) for a %s %s 
and %s %s: %d\n",    test_d[i].number.d,   test_f[i].number.f, 
test_d[i].class,  test_d[i].type,  test_f[i].class, test_f[i].type,  
isgreaterequal(test_d[i].number.d, test_f[i].number.f));
+      break;
+    }
+    else if (isgreaterequal(test_f[i].number.f, test_ld[i].number.ld))
+    {
+      printf("Test failed.  Testing isgreaterequal(%a, %La) for a %s %s 
and %s %s: %d\n\n", test_f[i].number.f, test_ld[i].number.ld, 
test_f[i].class,  test_f[i].type, test_ld[i].class, test_ld[i].type, 
isgreaterequal(test_f[i].number.f, test_ld[i].number.ld));
+      break;
+    }
+  }
+  if (i < 4 - 1)
+  {
+    test_passed = false;
+    printf("isgreaterequal(x, y) failed for normals.\n");
+  }
+
+  for (i = 4; i < 4 + 1; i++)
+  {
+    if (isgreaterequal(test_ld[i].number.ld, test_d[i].number.d))
+    {
+      printf("Test failed.  Testing isgreaterequal(%La, %a) for a %s %s 
and %s %s: %d\n",   test_ld[i].number.ld, test_d[i].number.d,   
test_ld[i].class, test_ld[i].type, test_d[i].class,  test_d[i].type, 
isgreaterequal(test_ld[i].number.ld, test_d[i].number.d));
+      break;
+    }
+    else if (isgreaterequal(test_d[i].number.d, test_f[i].number.f))
+    {
+      printf("Test failed.  Testing isgreaterequal(%a, %a) for a %s %s 
and %s %s: %d\n",    test_d[i].number.d,   test_f[i].number.f, 
test_d[i].class,  test_d[i].type,  test_f[i].class, test_f[i].type,  
isgreaterequal(test_d[i].number.d, test_f[i].number.f));
+      break;
+    }
+    else if (!isgreaterequal(test_f[i].number.f, test_ld[i].number.ld))
+    {
+      printf("Test failed.  Testing isgreaterequal(%a, %La) for a %s %s 
and %s %s: %d\n\n", test_f[i].number.f, test_ld[i].number.ld, 
test_f[i].class,  test_f[i].type, test_ld[i].class, test_ld[i].type, 
isgreaterequal(test_f[i].number.f, test_ld[i].number.ld));
+      break;
+    }
+  }
+  if (i < 4 + 1)
+  {
+    test_passed = false;
+    printf("isgreaterequal(x, y) failed for subnormals.\n");
+  }
+
+  for (i = 4 + 1; i < 4 + 2; i++)
+  {
+    if (!isgreaterequal(test_ld[i].number.ld, test_d[i].number.d))
+    {
+      printf("Test failed.  Testing isgreaterequal(%La, %a) for a %s %s 
and %s %s: %d\n",   test_ld[i].number.ld, test_d[i].number.d,   
test_ld[i].class, test_ld[i].type, test_d[i].class,  test_d[i].type, 
isgreaterequal(test_ld[i].number.ld, test_d[i].number.d));
+      break;
+    }
+    else if (!isgreaterequal(test_d[i].number.d, test_f[i].number.f))
+    {
+      printf("Test failed.  Testing isgreaterequal(%a, %a) for a %s %s 
and %s %s: %d\n",    test_d[i].number.d,   test_f[i].number.f, 
test_d[i].class,  test_d[i].type,  test_f[i].class, test_f[i].type,  
isgreaterequal(test_d[i].number.d, test_f[i].number.f));
+      break;
+    }
+    else if (isgreaterequal(test_f[i].number.f, test_ld[i].number.ld))
+    {
+      printf("Test failed.  Testing isgreaterequal(%a, %La) for a %s %s 
and %s %s: %d\n\n", test_f[i].number.f, test_ld[i].number.ld, 
test_f[i].class,  test_f[i].type, test_ld[i].class, test_ld[i].type, 
isgreaterequal(test_f[i].number.f, test_ld[i].number.ld));
+      break;
+    }
+  }
+  if (i < 4 + 2)
+  {
+    test_passed = false;
+    printf("isgreaterequal(x, y) failed for subnormals.\n");
+  }
+
+  for (i = 4 + 2; i < 4 + 2 + 2; i++)
+  {
+    if (!isgreaterequal(test_ld[i].number.ld, test_d[i].number.d))
+    {
+      printf("Test failed.  Testing isgreaterequal(%La, %a) for a %s %s 
and %s %s: %d\n",   test_ld[i].number.ld, test_d[i].number.d,   
test_ld[i].class, test_ld[i].type, test_d[i].class,  test_d[i].type, 
isgreaterequal(test_ld[i].number.ld, test_d[i].number.d));
+      break;
+    }
+    else if (!isgreaterequal(test_d[i].number.d, test_f[i].number.f))
+    {
+      printf("Test failed.  Testing isgreaterequal(%a, %a) for a %s %s 
and %s %s: %d\n",    test_d[i].number.d,   test_f[i].number.f, 
test_d[i].class,  test_d[i].type,  test_f[i].class, test_f[i].type,  
isgreaterequal(test_d[i].number.d, test_f[i].number.f));
+      break;
+    }
+    else if (!isgreaterequal(test_f[i].number.f, test_ld[i].number.ld))
+    {
+      printf("Test failed.  Testing isgreaterequal(%a, %La) for a %s %s 
and %s %s: %d\n\n", test_f[i].number.f, test_ld[i].number.ld, 
test_f[i].class,  test_f[i].type, test_ld[i].class, test_ld[i].type, 
isgreaterequal(test_f[i].number.f, test_ld[i].number.ld));
+      break;
+    }
+  }
+  if (i < 4 + 2 + 2)
+  {
+    test_passed = false;
+    printf("isgreaterequal(x, y) failed for zero.\n");
+  }
+
+  for (i = 4 + 2 + 2; i < 4 + 2 + 2 + 2; i++)
+  {
+    if (!isgreaterequal(test_ld[i].number.ld, test_d[i].number.d))
+    {
+      printf("Test failed.  Testing isgreaterequal(%La, %a) for a %s %s 
and %s %s: %d\n",   test_ld[i].number.ld, test_d[i].number.d,   
test_ld[i].class, test_ld[i].type, test_d[i].class,  test_d[i].type, 
isgreaterequal(test_ld[i].number.ld, test_d[i].number.d));
+      break;
+    }
+    else if (!isgreaterequal(test_d[i].number.d, test_f[i].number.f))
+    {
+      printf("Test failed.  Testing isgreaterequal(%a, %a) for a %s %s 
and %s %s: %d\n",    test_d[i].number.d,   test_f[i].number.f, 
test_d[i].class,  test_d[i].type,  test_f[i].class, test_f[i].type,  
isgreaterequal(test_d[i].number.d, test_f[i].number.f));
+      break;
+    }
+    else if (!isgreaterequal(test_f[i].number.f, test_ld[i].number.ld))
+    {
+      printf("Test failed.  Testing isgreaterequal(%a, %La) for a %s %s 
and %s %s: %d\n\n", test_f[i].number.f, test_ld[i].number.ld, 
test_f[i].class,  test_f[i].type, test_ld[i].class, test_ld[i].type, 
isgreaterequal(test_f[i].number.f, test_ld[i].number.ld));
+      break;
+    }
+  }
+  if (i < 4 + 2 + 2 + 2)
+  {
+    test_passed = false;
+    printf("isgreaterequal(x, y) failed for infinity.\n");
+  }
+
+  for (i = 4 + 2 + 2 + 2; i < 4 + 2 + 2 + 2 + 4; i++)
+  {
+    if (isgreaterequal(test_ld[i].number.ld, test_d[i].number.d))
+    {
+      printf("Test failed.  Testing isgreaterequal(%La, %a) for a %s %s 
and %s %s: %d\n",   test_ld[i].number.ld, test_d[i].number.d,   
test_ld[i].class, test_ld[i].type, test_d[i].class,  test_d[i].type, 
isgreaterequal(test_ld[i].number.ld, test_d[i].number.d));
+      break;
+    }
+    else if (isgreaterequal(test_d[i].number.d, test_f[i].number.f))
+    {
+      printf("Test failed.  Testing isgreaterequal(%a, %a) for a %s %s 
and %s %s: %d\n",    test_d[i].number.d,   test_f[i].number.f, 
test_d[i].class,  test_d[i].type,  test_f[i].class, test_f[i].type,  
isgreaterequal(test_d[i].number.d, test_f[i].number.f));
+      break;
+    }
+    else if (isgreaterequal(test_f[i].number.f, test_ld[i].number.ld))
+    {
+      printf("Test failed.  Testing isgreaterequal(%a, %La) for a %s %s 
and %s %s: %d\n\n", test_f[i].number.f, test_ld[i].number.ld, 
test_f[i].class,  test_f[i].type, test_ld[i].class, test_ld[i].type, 
isgreaterequal(test_f[i].number.f, test_ld[i].number.ld));
+      break;
+    }
+  }
+  if (i < 4 + 2 + 2 + 2 + 4)
+  {
+    test_passed = false;
+    printf("isgreaterequal(x, y) failed for SNaN and/or QNaN.\n");
+  }
+  else if (test_passed)
+    printf("isgreaterequal(x, y) passed all tests.\n");
+ 
printf("----------------------------------------------------------------------\n");
+
+
+
+  /*
+   *  isless must return zero if x or y is [SQ]NaN (positive or negative)
+   *  and else the result of x < y.
+   */
+  test_passed = true;
+  for (i = 0; i < 4; i += 3)
+  {
+    if (!isless(test_ld[i].number.ld, test_d[i].number.d))
+    {
+      printf("Test failed.  Testing isless(%La, %a) for a %s %s and %s 
%s: %d\n",   test_ld[i].number.ld, test_d[i].number.d, test_ld[i].class, 
test_ld[i].type, test_d[i].class, test_d[i].type,  
isless(test_ld[i].number.ld, test_d[i].number.d));
+      break;
+    }
+    else if (!isless(test_d[i].number.d, test_f[i].number.f))
+    {
+      printf("Test failed.  Testing isless(%a, %a) for a %s %s and %s 
%s: %d\n",    test_d[i].number.d,   test_f[i].number.f, 
test_d[i].class,  test_d[i].type,  test_f[i].class, test_f[i].type,  
isless(test_d[i].number.d, test_f[i].number.f));
+      break;
+    }
+    else if (isless(test_f[i].number.f, test_ld[i].number.ld))
+    {
+      printf("Test failed.  Testing isless(%a, %La) for a %s %s and %s 
%s: %d\n\n", test_f[i].number.f,   test_ld[i].number.ld, 
test_f[i].class,  test_f[i].type,  test_ld[i].class, test_ld[i].type, 
isless(test_f[i].number.f, test_ld[i].number.ld));
+      break;
+    }
+  }
+  if (i < 4)
+  {
+    test_passed = false;
+    printf("isless(x, y) failed for normals.\n");
+  }
+
+  for (i = 1; i < 4 - 1; i++)
+  {
+    if (isless(test_ld[i].number.ld, test_d[i].number.d))
+    {
+      printf("Test failed.  Testing isless(%La, %a) for a %s %s and %s 
%s: %d\n",   test_ld[i].number.ld, test_d[i].number.d, test_ld[i].class, 
test_ld[i].type, test_d[i].class, test_d[i].type,  
isless(test_ld[i].number.ld, test_d[i].number.d));
+      break;
+    }
+    else if (isless(test_d[i].number.d, test_f[i].number.f))
+    {
+      printf("Test failed.  Testing isless(%a, %a) for a %s %s and %s 
%s: %d\n",    test_d[i].number.d,   test_f[i].number.f, 
test_d[i].class,  test_d[i].type,  test_f[i].class, test_f[i].type,  
isless(test_d[i].number.d, test_f[i].number.f));
+      break;
+    }
+    else if (!isless(test_f[i].number.f, test_ld[i].number.ld))
+    {
+      printf("Test failed.  Testing isless(%a, %La) for a %s %s and %s 
%s: %d\n\n", test_f[i].number.f,   test_ld[i].number.ld, 
test_f[i].class,  test_f[i].type,  test_ld[i].class, test_ld[i].type, 
isless(test_f[i].number.f, test_ld[i].number.ld));
+      break;
+    }
+  }
+  if (i < 4 - 1)
+  {
+    test_passed = false;
+    printf("isless(x, y) failed for normals.\n");
+  }
+
+  for (i = 4; i < 4 + 1; i++)
+  {
+    if (!isless(test_ld[i].number.ld, test_d[i].number.d))
+    {
+      printf("Test failed.  Testing isless(%La, %a) for a %s %s and %s 
%s: %d\n",   test_ld[i].number.ld, test_d[i].number.d, test_ld[i].class, 
test_ld[i].type, test_d[i].class, test_d[i].type,  
isless(test_ld[i].number.ld, test_d[i].number.d));
+      break;
+    }
+    else if (!isless(test_d[i].number.d, test_f[i].number.f))
+    {
+      printf("Test failed.  Testing isless(%a, %a) for a %s %s and %s 
%s: %d\n",    test_d[i].number.d,   test_f[i].number.f, 
test_d[i].class,  test_d[i].type,  test_f[i].class, test_f[i].type,  
isless(test_d[i].number.d, test_f[i].number.f));
+      break;
+    }
+    else if (isless(test_f[i].number.f, test_ld[i].number.ld))
+    {
+      printf("Test failed.  Testing isless(%a, %La) for a %s %s and %s 
%s: %d\n\n", test_f[i].number.f,   test_ld[i].number.ld, 
test_f[i].class,  test_f[i].type,  test_ld[i].class, test_ld[i].type, 
isless(test_f[i].number.f, test_ld[i].number.ld));
+      break;
+    }
+  }
+  if (i < 4 + 1)
+  {
+    test_passed = false;
+    printf("isless(x, y) failed for subnormals.\n");
+  }
+
+  for (i = 4 + 1; i < 4 + 2; i++)
+  {
+    if (isless(test_ld[i].number.ld, test_d[i].number.d))
+    {
+      printf("Test failed.  Testing isless(%La, %a) for a %s %s and %s 
%s: %d\n",   test_ld[i].number.ld, test_d[i].number.d, test_ld[i].class, 
test_ld[i].type, test_d[i].class, test_d[i].type,  
isless(test_ld[i].number.ld, test_d[i].number.d));
+      break;
+    }
+    else if (isless(test_d[i].number.d, test_f[i].number.f))
+    {
+      printf("Test failed.  Testing isless(%a, %a) for a %s %s and %s 
%s: %d\n",    test_d[i].number.d,   test_f[i].number.f, 
test_d[i].class,  test_d[i].type,  test_f[i].class, test_f[i].type,  
isless(test_d[i].number.d, test_f[i].number.f));
+      break;
+    }
+    else if (!isless(test_f[i].number.f, test_ld[i].number.ld))
+    {
+      printf("Test failed.  Testing isless(%a, %La) for a %s %s and %s 
%s: %d\n\n", test_f[i].number.f,   test_ld[i].number.ld, 
test_f[i].class,  test_f[i].type,  test_ld[i].class, test_ld[i].type, 
isless(test_f[i].number.f, test_ld[i].number.ld));
+      break;
+    }
+  }
+  if (i < 4 + 2)
+  {
+    test_passed = false;
+    printf("isless(x, y) failed for subnormals.\n");
+  }
+
+  for (i = 4 + 2; i < 4 + 2 + 2; i++)
+  {
+    if (isless(test_ld[i].number.ld, test_d[i].number.d))
+    {
+      printf("Test failed.  Testing isless(%La, %a) for a %s %s and %s 
%s: %d\n",   test_ld[i].number.ld, test_d[i].number.d, test_ld[i].class, 
test_ld[i].type, test_d[i].class, test_d[i].type,  
isless(test_ld[i].number.ld, test_d[i].number.d));
+      break;
+    }
+    else if (isless(test_d[i].number.d, test_f[i].number.f))
+    {
+      printf("Test failed.  Testing isless(%a, %a) for a %s %s and %s 
%s: %d\n",    test_d[i].number.d,   test_f[i].number.f, 
test_d[i].class,  test_d[i].type,  test_f[i].class, test_f[i].type,  
isless(test_d[i].number.d, test_f[i].number.f));
+      break;
+    }
+    else if (isless(test_f[i].number.f, test_ld[i].number.ld))
+    {
+      printf("Test failed.  Testing isless(%a, %La) for a %s %s and %s 
%s: %d\n\n", test_f[i].number.f,   test_ld[i].number.ld, 
test_f[i].class,  test_f[i].type,  test_ld[i].class, test_ld[i].type, 
isless(test_f[i].number.f, test_ld[i].number.ld));
+      break;
+    }
+  }
+  if (i < 4 + 2 + 2)
+  {
+    test_passed = false;
+    printf("isless(x, y) failed for zero.\n");
+  }
+
+  for (i = 4 + 2 + 2; i < 4 + 2 + 2 + 2; i++)
+  {
+    if (isless(test_ld[i].number.ld, test_d[i].number.d))
+    {
+      printf("Test failed.  Testing isless(%La, %a) for a %s %s and %s 
%s: %d\n",   test_ld[i].number.ld, test_d[i].number.d, test_ld[i].class, 
test_ld[i].type, test_d[i].class, test_d[i].type,  
isless(test_ld[i].number.ld, test_d[i].number.d));
+      break;
+    }
+    else if (isless(test_d[i].number.d, test_f[i].number.f))
+    {
+      printf("Test failed.  Testing isless(%a, %a) for a %s %s and %s 
%s: %d\n",    test_d[i].number.d,   test_f[i].number.f, 
test_d[i].class,  test_d[i].type,  test_f[i].class, test_f[i].type,  
isless(test_d[i].number.d, test_f[i].number.f));
+      break;
+    }
+    else if (isless(test_f[i].number.f, test_ld[i].number.ld))
+    {
+      printf("Test failed.  Testing isless(%a, %La) for a %s %s and %s 
%s: %d\n\n", test_f[i].number.f,   test_ld[i].number.ld, 
test_f[i].class,  test_f[i].type,  test_ld[i].class, test_ld[i].type, 
isless(test_f[i].number.f, test_ld[i].number.ld));
+      break;
+    }
+  }
+  if (i < 4 + 2 + 2 + 2)
+  {
+    test_passed = false;
+    printf("isless(x, y) failed for infinity.\n");
+  }
+
+  for (i = 4 + 2 + 2 + 2; i < 4 + 2 + 2 + 2 + 4; i++)
+  {
+    if (isless(test_ld[i].number.ld, test_d[i].number.d))
+    {
+      printf("Test failed.  Testing isless(%La, %a) for a %s %s and %s 
%s: %d\n",   test_ld[i].number.ld, test_d[i].number.d, test_ld[i].class, 
test_ld[i].type, test_d[i].class, test_d[i].type,  
isless(test_ld[i].number.ld, test_d[i].number.d));
+      break;
+    }
+    else if (isless(test_d[i].number.d, test_f[i].number.f))
+    {
+      printf("Test failed.  Testing isless(%a, %a) for a %s %s and %s 
%s: %d\n",    test_d[i].number.d,   test_f[i].number.f, 
test_d[i].class,  test_d[i].type,  test_f[i].class, test_f[i].type,  
isless(test_d[i].number.d, test_f[i].number.f));
+      break;
+    }
+    else if (isless(test_f[i].number.f, test_ld[i].number.ld))
+    {
+      printf("Test failed.  Testing isless(%a, %La) for a %s %s and %s 
%s: %d\n\n", test_f[i].number.f,   test_ld[i].number.ld, 
test_f[i].class,  test_f[i].type,  test_ld[i].class, test_ld[i].type, 
isless(test_f[i].number.f, test_ld[i].number.ld));
+      break;
+    }
+  }
+  if (i < 4 + 2 + 2 + 2 + 4)
+  {
+    test_passed = false;
+    printf("isless(x, y) failed for SNaN and/or QNaN.\n");
+  }
+  else if (test_passed)
+    printf("isless(x, y) passed all tests.\n");
+ 
printf("----------------------------------------------------------------------\n");
+
+
+
+  /*
+   *  islessequal must return zero if x or y is [SQ]NaN (positive or 
negative)
+   *  and else the result of x <= y.
+   */
+  test_passed = true;
+  for (i = 0; i < 4; i += 3)
+  {
+    if (!islessequal(test_ld[i].number.ld, test_d[i].number.d))
+    {
+      printf("Test failed.  Testing islessequal(%La, %a) for a %s %s 
and %s %s: %d\n",   test_ld[i].number.ld, test_d[i].number.d, 
test_ld[i].class, test_ld[i].type, test_d[i].class, test_d[i].type,  
islessequal(test_ld[i].number.ld, test_d[i].number.d));
+      break;
+    }
+    else if (!islessequal(test_d[i].number.d, test_f[i].number.f))
+    {
+      printf("Test failed.  Testing islessequal(%a, %a) for a %s %s and 
%s %s: %d\n",    test_d[i].number.d,   test_f[i].number.f, 
test_d[i].class,  test_d[i].type,  test_f[i].class, test_f[i].type,  
islessequal(test_d[i].number.d, test_f[i].number.f));
+      break;
+    }
+    else if (islessequal(test_f[i].number.f, test_ld[i].number.ld))
+    {
+      printf("Test failed.  Testing islessequal(%a, %La) for a %s %s 
and %s %s: %d\n\n", test_f[i].number.f,   test_ld[i].number.ld, 
test_f[i].class,  test_f[i].type,  test_ld[i].class, test_ld[i].type, 
islessequal(test_f[i].number.f, test_ld[i].number.ld));
+      break;
+    }
+  }
+  if (i < 4)
+  {
+    test_passed = false;
+    printf("islessequal(x, y) failed for normals.\n");
+  }
+
+  for (i = 1; i < 4 - 1; i++)
+  {
+    if (islessequal(test_ld[i].number.ld, test_d[i].number.d))
+    {
+      printf("Test failed.  Testing islessequal(%La, %a) for a %s %s 
and %s %s: %d\n",   test_ld[i].number.ld, test_d[i].number.d, 
test_ld[i].class, test_ld[i].type, test_d[i].class, test_d[i].type,  
islessequal(test_ld[i].number.ld, test_d[i].number.d));
+      break;
+    }
+    else if (islessequal(test_d[i].number.d, test_f[i].number.f))
+    {
+      printf("Test failed.  Testing islessequal(%a, %a) for a %s %s and 
%s %s: %d\n",    test_d[i].number.d,   test_f[i].number.f, 
test_d[i].class,  test_d[i].type,  test_f[i].class, test_f[i].type,  
islessequal(test_d[i].number.d, test_f[i].number.f));
+      break;
+    }
+    else if (!islessequal(test_f[i].number.f, test_ld[i].number.ld))
+    {
+      printf("Test failed.  Testing islessequal(%a, %La) for a %s %s 
and %s %s: %d\n\n", test_f[i].number.f,   test_ld[i].number.ld, 
test_f[i].class,  test_f[i].type,  test_ld[i].class, test_ld[i].type, 
islessequal(test_f[i].number.f, test_ld[i].number.ld));
+      break;
+    }
+  }
+  if (i < 4 - 1)
+  {
+    test_passed = false;
+    printf("islessequal(x, y) failed for normals.\n");
+  }
+
+  for (i = 4; i < 4 + 1; i++)
+  {
+    if (!islessequal(test_ld[i].number.ld, test_d[i].number.d))
+    {
+      printf("Test failed.  Testing islessequal(%La, %a) for a %s %s 
and %s %s: %d\n",   test_ld[i].number.ld, test_d[i].number.d, 
test_ld[i].class, test_ld[i].type, test_d[i].class, test_d[i].type,  
islessequal(test_ld[i].number.ld, test_d[i].number.d));
+      break;
+    }
+    else if (!islessequal(test_d[i].number.d, test_f[i].number.f))
+    {
+      printf("Test failed.  Testing islessequal(%a, %a) for a %s %s and 
%s %s: %d\n",    test_d[i].number.d,   test_f[i].number.f, 
test_d[i].class,  test_d[i].type,  test_f[i].class, test_f[i].type,  
islessequal(test_d[i].number.d, test_f[i].number.f));
+      break;
+    }
+    else if (islessequal(test_f[i].number.f, test_ld[i].number.ld))
+    {
+      printf("Test failed.  Testing islessequal(%a, %La) for a %s %s 
and %s %s: %d\n\n", test_f[i].number.f,   test_ld[i].number.ld, 
test_f[i].class,  test_f[i].type,  test_ld[i].class, test_ld[i].type, 
islessequal(test_f[i].number.f, test_ld[i].number.ld));
+      break;
+    }
+  }
+  if (i < 4 + 1)
+  {
+    test_passed = false;
+    printf("islessequal(x, y) failed for subnormals.\n");
+  }
+
+  for (i = 4 + 1; i < 4 + 2; i++)
+  {
+    if (islessequal(test_ld[i].number.ld, test_d[i].number.d))
+    {
+      printf("Test failed.  Testing islessequal(%La, %a) for a %s %s 
and %s %s: %d\n",   test_ld[i].number.ld, test_d[i].number.d, 
test_ld[i].class, test_ld[i].type, test_d[i].class, test_d[i].type,  
islessequal(test_ld[i].number.ld, test_d[i].number.d));
+      break;
+    }
+    else if (islessequal(test_d[i].number.d, test_f[i].number.f))
+    {
+      printf("Test failed.  Testing islessequal(%a, %a) for a %s %s and 
%s %s: %d\n",    test_d[i].number.d,   test_f[i].number.f, 
test_d[i].class,  test_d[i].type,  test_f[i].class, test_f[i].type,  
islessequal(test_d[i].number.d, test_f[i].number.f));
+      break;
+    }
+    else if (!islessequal(test_f[i].number.f, test_ld[i].number.ld))
+    {
+      printf("Test failed.  Testing islessequal(%a, %La) for a %s %s 
and %s %s: %d\n\n", test_f[i].number.f,   test_ld[i].number.ld, 
test_f[i].class,  test_f[i].type,  test_ld[i].class, test_ld[i].type, 
islessequal(test_f[i].number.f, test_ld[i].number.ld));
+      break;
+    }
+  }
+  if (i < 4 + 2)
+  {
+    test_passed = false;
+    printf("islessequal(x, y) failed for subnormals.\n");
+  }
+
+  for (i = 4 + 2; i < 4 + 2 + 2; i++)
+  {
+    if (!islessequal(test_ld[i].number.ld, test_d[i].number.d))
+    {
+      printf("Test failed.  Testing islessequal(%La, %a) for a %s %s 
and %s %s: %d\n",   test_ld[i].number.ld, test_d[i].number.d, 
test_ld[i].class, test_ld[i].type, test_d[i].class, test_d[i].type,  
islessequal(test_ld[i].number.ld, test_d[i].number.d));
+      break;
+    }
+    else if (!islessequal(test_d[i].number.d, test_f[i].number.f))
+    {
+      printf("Test failed.  Testing islessequal(%a, %a) for a %s %s and 
%s %s: %d\n",    test_d[i].number.d,   test_f[i].number.f, 
test_d[i].class,  test_d[i].type,  test_f[i].class, test_f[i].type,  
islessequal(test_d[i].number.d, test_f[i].number.f));
+      break;
+    }
+    else if (!islessequal(test_f[i].number.f, test_ld[i].number.ld))
+    {
+      printf("Test failed.  Testing islessequal(%a, %La) for a %s %s 
and %s %s: %d\n\n", test_f[i].number.f,   test_ld[i].number.ld, 
test_f[i].class,  test_f[i].type,  test_ld[i].class, test_ld[i].type, 
islessequal(test_f[i].number.f, test_ld[i].number.ld));
+      break;
+    }
+  }
+  if (i < 4 + 2 + 2)
+  {
+    test_passed = false;
+    printf("islessequal(x, y) failed for zero.\n");
+  }
+
+  for (i = 4 + 2 + 2; i < 4 + 2 + 2 + 2; i++)
+  {
+    if (!islessequal(test_ld[i].number.ld, test_d[i].number.d))
+    {
+      printf("Test failed.  Testing islessequal(%La, %a) for a %s %s 
and %s %s: %d\n",   test_ld[i].number.ld, test_d[i].number.d, 
test_ld[i].class, test_ld[i].type, test_d[i].class, test_d[i].type,  
islessequal(test_ld[i].number.ld, test_d[i].number.d));
+      break;
+    }
+    else if (!islessequal(test_d[i].number.d, test_f[i].number.f))
+    {
+      printf("Test failed.  Testing islessequal(%a, %a) for a %s %s and 
%s %s: %d\n",    test_d[i].number.d,   test_f[i].number.f, 
test_d[i].class,  test_d[i].type,  test_f[i].class, test_f[i].type,  
islessequal(test_d[i].number.d, test_f[i].number.f));
+      break;
+    }
+    else if (!islessequal(test_f[i].number.f, test_ld[i].number.ld))
+    {
+      printf("Test failed.  Testing islessequal(%a, %La) for a %s %s 
and %s %s: %d\n\n", test_f[i].number.f,   test_ld[i].number.ld, 
test_f[i].class,  test_f[i].type,  test_ld[i].class, test_ld[i].type, 
islessequal(test_f[i].number.f, test_ld[i].number.ld));
+      break;
+    }
+  }
+  if (i < 4 + 2 + 2 + 2)
+  {
+    test_passed = false;
+    printf("islessequal(x, y) failed for infinity.\n");
+  }
+
+  for (i = 4 + 2 + 2 + 2; i < 4 + 2 + 2 + 2 + 4; i++)
+  {
+    if (islessequal(test_ld[i].number.ld, test_d[i].number.d))
+    {
+      printf("Test failed.  Testing islessequal(%La, %a) for a %s %s 
and %s %s: %d\n",   test_ld[i].number.ld, test_d[i].number.d, 
test_ld[i].class, test_ld[i].type, test_d[i].class, test_d[i].type,  
islessequal(test_ld[i].number.ld, test_d[i].number.d));
+      break;
+    }
+    else if (islessequal(test_d[i].number.d, test_f[i].number.f))
+    {
+      printf("Test failed.  Testing islessequal(%a, %a) for a %s %s and 
%s %s: %d\n",    test_d[i].number.d,   test_f[i].number.f, 
test_d[i].class,  test_d[i].type,  test_f[i].class, test_f[i].type,  
islessequal(test_d[i].number.d, test_f[i].number.f));
+      break;
+    }
+    else if (islessequal(test_f[i].number.f, test_ld[i].number.ld))
+    {
+      printf("Test failed.  Testing islessequal(%a, %La) for a %s %s 
and %s %s: %d\n\n", test_f[i].number.f,   test_ld[i].number.ld, 
test_f[i].class,  test_f[i].type,  test_ld[i].class, test_ld[i].type, 
islessequal(test_f[i].number.f, test_ld[i].number.ld));
+      break;
+    }
+  }
+  if (i < 4 + 2 + 2 + 2 + 4)
+  {
+    test_passed = false;
+    printf("islessequal(x, y) failed for SNaN and/or QNaN.\n");
+  }
+  else if (test_passed)
+    printf("islessequal(x, y) passed all tests.\n");
+ 
printf("----------------------------------------------------------------------\n");
+
+
+
+  /*
+   *  islessgreater must return zero if x or y is [SQ]NaN (positive or 
negative)
+   *  and else the result of (x < y) || x > y).
+   */
+  test_passed = true;
+  for (i = 0; i < 4; i++)
+  {
+    if (!islessgreater(test_ld[i].number.ld, test_d[i].number.d))
+    {
+      printf("Test failed.  Testing islessgreater(%La, %a) for a %s %s 
and %s %s: %d\n",   test_ld[i].number.ld, test_d[i].number.d, 
test_ld[i].class, test_ld[i].type, test_d[i].class, test_d[i].type,  
islessgreater(test_ld[i].number.ld, test_d[i].number.d));
+      break;
+    }
+    else if (!islessgreater(test_d[i].number.d, test_f[i].number.f))
+    {
+      printf("Test failed.  Testing islessgreater(%a, %a) for a %s %s 
and %s %s: %d\n",    test_d[i].number.d,   test_f[i].number.f, 
test_d[i].class,  test_d[i].type,  test_f[i].class, test_f[i].type,  
islessgreater(test_d[i].number.d, test_f[i].number.f));
+      break;
+    }
+    else if (!islessgreater(test_f[i].number.f, test_ld[i].number.ld))
+    {
+      printf("Test failed.  Testing islessgreater(%a, %La) for a %s %s 
and %s %s: %d\n\n", test_f[i].number.f,   test_ld[i].number.ld, 
test_f[i].class,  test_f[i].type,  test_ld[i].class, test_ld[i].type, 
islessgreater(test_f[i].number.f, test_ld[i].number.ld));
+      break;
+    }
+  }
+  if (i < 4)
+  {
+    test_passed = false;
+    printf("islessgreater(x, y) failed for normals.\n");
+  }
+
+  for (i = 4; i < 4 + 2; i++)
+  {
+    if (!islessgreater(test_ld[i].number.ld, test_d[i].number.d))
+    {
+      printf("Test failed.  Testing islessgreater(%La, %a) for a %s %s 
and %s %s: %d\n",   test_ld[i].number.ld, test_d[i].number.d, 
test_ld[i].class, test_ld[i].type, test_d[i].class, test_d[i].type,  
islessgreater(test_ld[i].number.ld, test_d[i].number.d));
+      break;
+    }
+    else if (!islessgreater(test_d[i].number.d, test_f[i].number.f))
+    {
+      printf("Test failed.  Testing islessgreater(%a, %a) for a %s %s 
and %s %s: %d\n",    test_d[i].number.d,   test_f[i].number.f, 
test_d[i].class,  test_d[i].type,  test_f[i].class, test_f[i].type,  
islessgreater(test_d[i].number.d, test_f[i].number.f));
+      break;
+    }
+    else if (!islessgreater(test_f[i].number.f, test_ld[i].number.ld))
+    {
+      printf("Test failed.  Testing islessgreater(%a, %La) for a %s %s 
and %s %s: %d\n\n", test_f[i].number.f,   test_ld[i].number.ld, 
test_f[i].class,  test_f[i].type,  test_ld[i].class, test_ld[i].type, 
islessgreater(test_f[i].number.f, test_ld[i].number.ld));
+      break;
+    }
+  }
+  if (i < 4 + 2)
+  {
+    test_passed = false;
+    printf("islessgreater(x, y) failed for subnormals.\n");
+  }
+
+  for (i = 4 + 2; i < 4 + 2 + 2; i++)
+  {
+    if (islessgreater(test_ld[i].number.ld, test_d[i].number.d))
+    {
+      printf("Test failed.  Testing islessgreater(%La, %a) for a %s %s 
and %s %s: %d\n",   test_ld[i].number.ld, test_d[i].number.d, 
test_ld[i].class, test_ld[i].type, test_d[i].class, test_d[i].type,  
islessgreater(test_ld[i].number.ld, test_d[i].number.d));
+      break;
+    }
+    else if (islessgreater(test_d[i].number.d, test_f[i].number.f))
+    {
+      printf("Test failed.  Testing islessgreater(%a, %a) for a %s %s 
and %s %s: %d\n",    test_d[i].number.d,   test_f[i].number.f, 
test_d[i].class,  test_d[i].type,  test_f[i].class, test_f[i].type,  
islessgreater(test_d[i].number.d, test_f[i].number.f));
+      break;
+    }
+    else if (islessgreater(test_f[i].number.f, test_ld[i].number.ld))
+    {
+      printf("Test failed.  Testing islessgreater(%a, %La) for a %s %s 
and %s %s: %d\n\n", test_f[i].number.f,   test_ld[i].number.ld, 
test_f[i].class,  test_f[i].type,  test_ld[i].class, test_ld[i].type, 
islessgreater(test_f[i].number.f, test_ld[i].number.ld));
+      break;
+    }
+  }
+  if (i < 4 + 2 + 2)
+  {
+    test_passed = false;
+    printf("islessgreater(x, y) failed for zero.\n");
+  }
+
+  for (i = 4 + 2 + 2; i < 4 + 2 + 2 + 2; i++)
+  {
+    if (islessgreater(test_ld[i].number.ld, test_d[i].number.d))
+    {
+      printf("Test failed.  Testing islessgreater(%La, %a) for a %s %s 
and %s %s: %d\n",   test_ld[i].number.ld, test_d[i].number.d, 
test_ld[i].class, test_ld[i].type, test_d[i].class, test_d[i].type,  
islessgreater(test_ld[i].number.ld, test_d[i].number.d));
+      break;
+    }
+    else if (islessgreater(test_d[i].number.d, test_f[i].number.f))
+    {
+      printf("Test failed.  Testing islessgreater(%a, %a) for a %s %s 
and %s %s: %d\n",    test_d[i].number.d,   test_f[i].number.f, 
test_d[i].class,  test_d[i].type,  test_f[i].class, test_f[i].type,  
islessgreater(test_d[i].number.d, test_f[i].number.f));
+      break;
+    }
+    else if (islessgreater(test_f[i].number.f, test_ld[i].number.ld))
+    {
+      printf("Test failed.  Testing islessgreater(%a, %La) for a %s %s 
and %s %s: %d\n\n", test_f[i].number.f,   test_ld[i].number.ld, 
test_f[i].class,  test_f[i].type,  test_ld[i].class, test_ld[i].type, 
islessgreater(test_f[i].number.f, test_ld[i].number.ld));
+      break;
+    }
+  }
+  if (i < 4 + 2 + 2 + 2)
+  {
+    test_passed = false;
+    printf("islessgreater(x, y) failed for infinity.\n");
+  }
+
+  for (i = 4 + 2 + 2 + 2; i < 4 + 2 + 2 + 2 + 4; i++)
+  {
+    if (islessgreater(test_ld[i].number.ld, test_d[i].number.d))
+    {
+      printf("Test failed.  Testing islessgreater(%La, %a) for a %s %s 
and %s %s: %d\n",   test_ld[i].number.ld, test_d[i].number.d, 
test_ld[i].class, test_ld[i].type, test_d[i].class, test_d[i].type,  
islessgreater(test_ld[i].number.ld, test_d[i].number.d));
+      break;
+    }
+    else if (islessgreater(test_d[i].number.d, test_f[i].number.f))
+    {
+      printf("Test failed.  Testing islessgreater(%a, %a) for a %s %s 
and %s %s: %d\n",    test_d[i].number.d,   test_f[i].number.f, 
test_d[i].class,  test_d[i].type,  test_f[i].class, test_f[i].type,  
islessgreater(test_d[i].number.d, test_f[i].number.f));
+      break;
+    }
+    else if (islessgreater(test_f[i].number.f, test_ld[i].number.ld))
+    {
+      printf("Test failed.  Testing islessgreater(%a, %La) for a %s %s 
and %s %s: %d\n\n", test_f[i].number.f,   test_ld[i].number.ld, 
test_f[i].class,  test_f[i].type,  test_ld[i].class, test_ld[i].type, 
islessgreater(test_f[i].number.f, test_ld[i].number.ld));
+      break;
+    }
+  }
+  if (i < 4 + 2 + 2 + 2 + 4)
+  {
+    test_passed = false;
+    printf("islessgreater(x, y) failed for SNaN and/or QNaN.\n");
+  }
+  else if (test_passed)
+    printf("islessgreater(x, y) passed all tests.\n");
+ 
printf("----------------------------------------------------------------------\n");
+
+
+
+  /*
+   *  isunordered must return non-zero if x or y is [SQ]NaN (positive 
or negative)
+   *  and zero else.
+   */
+  test_passed = true;
+  for (i = 0; i < 4; i++)
+  {
+    if (isunordered(test_ld[i].number.ld, test_d[i].number.d))
+    {
+      printf("Test failed.  Testing isunordered(%La, %a) for a %s %s 
and %s %s: %d\n",   test_ld[i].number.ld, test_d[i].number.d, 
test_ld[i].class, test_ld[i].type, test_d[i].class, test_d[i].type,  
isunordered(test_ld[i].number.ld, test_d[i].number.d));
+      break;
+    }
+    else if (isunordered(test_d[i].number.d, test_f[i].number.f))
+    {
+      printf("Test failed.  Testing isunordered(%a, %a) for a %s %s and 
%s %s: %d\n",    test_d[i].number.d,   test_f[i].number.f, 
test_d[i].class,  test_d[i].type,  test_f[i].class, test_f[i].type,  
isunordered(test_d[i].number.d, test_f[i].number.f));
+      break;
+    }
+    else if (isunordered(test_f[i].number.f, test_ld[i].number.ld))
+    {
+      printf("Test failed.  Testing isunordered(%a, %La) for a %s %s 
and %s %s: %d\n\n", test_f[i].number.f,   test_ld[i].number.ld, 
test_f[i].class,  test_f[i].type,  test_ld[i].class, test_ld[i].type, 
isunordered(test_f[i].number.f, test_ld[i].number.ld));
+      break;
+    }
+  }
+  if (i < 4)
+  {
+    test_passed = false;
+    printf("isunordered(x) failed for normals.\n");
+  }
+
+  for (i = 4; i < 4 + 2; i++)
+  {
+    if (isunordered(test_ld[i].number.ld, test_d[i].number.d))
+    {
+      printf("Test failed.  Testing isunordered(%La, %a) for a %s %s 
and %s %s: %d\n",   test_ld[i].number.ld, test_d[i].number.d, 
test_ld[i].class, test_ld[i].type, test_d[i].class, test_d[i].type,  
isunordered(test_ld[i].number.ld, test_d[i].number.d));
+      break;
+    }
+    else if (isunordered(test_d[i].number.d, test_f[i].number.f))
+    {
+      printf("Test failed.  Testing isunordered(%a, %a) for a %s %s and 
%s %s: %d\n",    test_d[i].number.d,   test_f[i].number.f, 
test_d[i].class,  test_d[i].type,  test_f[i].class, test_f[i].type,  
isunordered(test_d[i].number.d, test_f[i].number.f));
+      break;
+    }
+    else if (isunordered(test_f[i].number.f, test_ld[i].number.ld))
+    {
+      printf("Test failed.  Testing isunordered(%a, %La) for a %s %s 
and %s %s: %d\n\n", test_f[i].number.f,   test_ld[i].number.ld, 
test_f[i].class,  test_f[i].type,  test_ld[i].class, test_ld[i].type, 
isunordered(test_f[i].number.f, test_ld[i].number.ld));
+      break;
+    }
+  }
+  if (i < 4 + 2)
+  {
+    test_passed = false;
+    printf("isunordered(x) failed for subnormals aka denormals.\n");
+  }
+
+  for (i = 4 + 2; i < 4 + 2 + 2; i++)
+  {
+    if (isunordered(test_ld[i].number.ld, test_d[i].number.d))
+    {
+      printf("Test failed.  Testing isunordered(%La, %a) for a %s %s 
and %s %s: %d\n",   test_ld[i].number.ld, test_d[i].number.d, 
test_ld[i].class, test_ld[i].type, test_d[i].class, test_d[i].type,  
isunordered(test_ld[i].number.ld, test_d[i].number.d));
+      break;
+    }
+    else if (isunordered(test_d[i].number.d, test_f[i].number.f))
+    {
+      printf("Test failed.  Testing isunordered(%a, %a) for a %s %s and 
%s %s: %d\n",    test_d[i].number.d,   test_f[i].number.f, 
test_d[i].class,  test_d[i].type,  test_f[i].class, test_f[i].type,  
isunordered(test_d[i].number.d, test_f[i].number.f));
+      break;
+    }
+    else if (isunordered(test_f[i].number.f, test_ld[i].number.ld))
+    {
+      printf("Test failed.  Testing isunordered(%a, %La) for a %s %s 
and %s %s: %d\n\n", test_f[i].number.f,   test_ld[i].number.ld, 
test_f[i].class,  test_f[i].type,  test_ld[i].class, test_ld[i].type, 
isunordered(test_f[i].number.f, test_ld[i].number.ld));
+      break;
+    }
+  }
+  if (i < 4 + 2 + 2)
+  {
+    test_passed = false;
+    printf("isunordered(x) failed for zero.\n");
+  }
+
+  for (i = 4 + 2 + 2; i < 4 + 2 + 2 + 2; i++)
+  {
+    if (isunordered(test_ld[i].number.ld, test_d[i].number.d))
+    {
+      printf("Test failed.  Testing isunordered(%La, %a) for a %s %s 
and %s %s: %d\n",   test_ld[i].number.ld, test_d[i].number.d, 
test_ld[i].class, test_ld[i].type, test_d[i].class, test_d[i].type,  
isunordered(test_ld[i].number.ld, test_d[i].number.d));
+      break;
+    }
+    else if (isunordered(test_d[i].number.d, test_f[i].number.f))
+    {
+      printf("Test failed.  Testing isunordered(%a, %a) for a %s %s and 
%s %s: %d\n",    test_d[i].number.d,   test_f[i].number.f, 
test_d[i].class,  test_d[i].type,  test_f[i].class, test_f[i].type,  
isunordered(test_d[i].number.d, test_f[i].number.f));
+      break;
+    }
+    else if (isunordered(test_f[i].number.f, test_ld[i].number.ld))
+    {
+      printf("Test failed.  Testing isunordered(%a, %La) for a %s %s 
and %s %s: %d\n\n", test_f[i].number.f,   test_ld[i].number.ld, 
test_f[i].class,  test_f[i].type,  test_ld[i].class, test_ld[i].type, 
isunordered(test_f[i].number.f, test_ld[i].number.ld));
+      break;
+    }
+  }
+  if (i < 4 + 2 + 2 + 2)
+  {
+    test_passed = false;
+    printf("isunordered(x) failed for infinity.\n");
+  }
+
+  for (i = 4 + 2 + 2 + 2; i < 4 + 2 + 2 + 2 + 4; i++)
+  {
+    if (!isunordered(test_ld[i].number.ld, test_d[i].number.d))
+    {
+      printf("Test failed.  Testing isunordered(%La, %a) for a %s %s 
and %s %s: %d\n",   test_ld[i].number.ld, test_d[i].number.d, 
test_ld[i].class, test_ld[i].type, test_d[i].class, test_d[i].type,  
isunordered(test_ld[i].number.ld, test_d[i].number.d));
+      break;
+    }
+    else if (!isunordered(test_d[i].number.d, test_f[i].number.f))
+    {
+      printf("Test failed.  Testing isunordered(%a, %a) for a %s %s and 
%s %s: %d\n",    test_d[i].number.d,   test_f[i].number.f, 
test_d[i].class,  test_d[i].type,  test_f[i].class, test_f[i].type,  
isunordered(test_d[i].number.d, test_f[i].number.f));
+      break;
+    }
+    else if (!isunordered(test_f[i].number.f, test_ld[i].number.ld))
+    {
+      printf("Test failed.  Testing isunordered(%a, %La) for a %s %s 
and %s %s: %d\n\n", test_f[i].number.f,   test_ld[i].number.ld, 
test_f[i].class,  test_f[i].type,  test_ld[i].class, test_ld[i].type, 
isunordered(test_f[i].number.f, test_ld[i].number.ld));
+      break;
+    }
+  }
+  if (i < 4 + 2 + 2 + 2 + 4)
+  {
+    test_passed = false;
+    printf("isunordered(x, y) failed for SNaN and/or QNaN.\n");
+  }
+  else if (test_passed)
+    printf("isunordered(x, y) passed all tests.\n");
+ 
printf("----------------------------------------------------------------------\n");
+
+  return 0;
+}

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019