#include <signal.h>
#include <fenv.h>

double nan = 1.0/0.0 - 1.0/0.0;
double x = 1.0;

void leave ()
{
  printf ("Leaving...\n");
  exit (0);
}

main ()
{
//   fesetenv(FE_DFL_ENV);
   
#if ! defined (__vax__) && ! defined (_CRAY)
  /* Move this line earlier, for architectures (like alpha) that issue 
     SIGFPE on the first comparisons. */
#ifndef SIGNAL_SUPPRESS
  /* Some machines catches a SIGFPE when a NaN is compared.
     Let this test succeed o such machines.  */
  signal (SIGFPE, leave);
#endif
  /* NaN is an IEEE unordered operand.  All these test should be false.  */
  if (nan == nan)
  {
    printf ("Oops: nan == nan comparison failed.\n"); 
    abort ();
  }
  if (nan != x)
    x = 1.0;
  else
  {
    printf ("Oops: nan != x comparison failed.\n"); 
    abort ();
  }

  if (nan < x)
  {
    printf ("Oops: nan < x comparison failed.\n"); 
    abort ();
  }
  if (nan > x)
  {
    printf ("Oops: nan > x comparison failed.\n"); 
    abort ();
  }
  __asm__ ("@ Scott: nan <= x comparison test.");
  if (nan <= x)
  {
    printf ("Oops: nan <= x comparison failed.\n"); 
    abort ();
  }
  if (nan >= x)
  {
    printf ("Oops: nan >= x comparison failed.\n"); 
    abort ();
  }
  if (nan == x)
  {
    printf ("Oops: nan == x comparison failed.\n"); 
    abort ();
  }
#endif
  exit (0);
}

