1  /* Tests for _FloatN / _FloatNx types: compile and execution tests for
       2     type-generic built-in functions: __builtin_isinf_sign.  Before
       3     including this file, define WIDTH as the value N; define EXT to 1
       4     for _FloatNx and 0 for _FloatN.  */
       5  
       6  #define __STDC_WANT_IEC_60559_TYPES_EXT__
       7  #include <float.h>
       8  
       9  #define CONCATX(X, Y) X ## Y
      10  #define CONCAT(X, Y) CONCATX (X, Y)
      11  #define CONCAT3(X, Y, Z) CONCAT (CONCAT (X, Y), Z)
      12  #define CONCAT4(W, X, Y, Z) CONCAT (CONCAT (CONCAT (W, X), Y), Z)
      13  
      14  #if EXT
      15  # define TYPE CONCAT3 (_Float, WIDTH, x)
      16  # define CST(C) CONCAT4 (C, f, WIDTH, x)
      17  # define MAX CONCAT3 (FLT, WIDTH, X_MAX)
      18  #else
      19  # define TYPE CONCAT (_Float, WIDTH)
      20  # define CST(C) CONCAT3 (C, f, WIDTH)
      21  # define MAX CONCAT3 (FLT, WIDTH, _MAX)
      22  #endif
      23  
      24  extern void exit (int);
      25  extern void abort (void);
      26  
      27  volatile TYPE inf = __builtin_inf (), nanval = __builtin_nan ("");
      28  volatile TYPE neginf = -__builtin_inf (), negnanval = -__builtin_nan ("");
      29  volatile TYPE zero = CST (0.0), negzero = -CST (0.0), one = CST (1.0);
      30  volatile TYPE max = MAX, negmax = -MAX;
      31  
      32  int
      33  main (void)
      34  {
      35    if (__builtin_isinf_sign (inf) != 1)
      36      abort ();
      37    if (__builtin_isinf_sign (neginf) != -1)
      38      abort ();
      39    if (__builtin_isinf_sign (nanval) != 0)
      40      abort ();
      41    if (__builtin_isinf_sign (negnanval) != 0)
      42      abort ();
      43    if (__builtin_isinf_sign (zero) != 0)
      44      abort ();
      45    if (__builtin_isinf_sign (negzero) != 0)
      46      abort ();
      47    if (__builtin_isinf_sign (one) != 0)
      48      abort ();
      49    if (__builtin_isinf_sign (max) != 0)
      50      abort ();
      51    if (__builtin_isinf_sign (negmax) != 0)
      52      abort ();
      53    exit (0);
      54  }