(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
torture/
floatn-basic.h
       1  /* Basic tests for _FloatN / _FloatNx types: compile and execution
       2     tests for valid code.  Before including this file, define WIDTH as
       3     the value N; define EXT to 1 for _FloatNx and 0 for _FloatN.  */
       4  
       5  #include <stdarg.h>
       6  
       7  #define CONCATX(X, Y) X ## Y
       8  #define CONCAT(X, Y) CONCATX (X, Y)
       9  #define CONCAT3(X, Y, Z) CONCAT (CONCAT (X, Y), Z)
      10  #define CONCAT4(W, X, Y, Z) CONCAT (CONCAT (CONCAT (W, X), Y), Z)
      11  
      12  #ifndef TYPE
      13  # if EXT
      14  #  define TYPE CONCAT3 (_Float, WIDTH, x)
      15  #  define CST(C) CONCAT4 (C, f, WIDTH, x)
      16  #  define CSTU(C) CONCAT4 (C, F, WIDTH, x)
      17  # else
      18  #  define TYPE CONCAT (_Float, WIDTH)
      19  #  define CST(C) CONCAT3 (C, f, WIDTH)
      20  #  define CSTU(C) CONCAT3 (C, F, WIDTH)
      21  # endif
      22  #endif
      23  
      24  extern void exit (int);
      25  extern void abort (void);
      26  
      27  volatile TYPE a = CST (1.0), b = CSTU (2.5), c = -CST (2.5);
      28  volatile TYPE a2 = CST (1.0), z = CST (0.0), nz = -CST (0.0);
      29  
      30  /* These types are not subject to default argument promotions.  */
      31  
      32  TYPE
      33  vafn (TYPE arg1, ...)
      34  {
      35    va_list ap;
      36    TYPE ret;
      37    va_start (ap, arg1);
      38    ret = arg1 + va_arg (ap, TYPE);
      39    va_end (ap);
      40    return ret;
      41  }
      42  
      43  TYPE
      44  krfn (arg)
      45       TYPE arg;
      46  {
      47    return arg + 1;
      48  }
      49  
      50  TYPE krprofn (TYPE);
      51  TYPE
      52  krprofn (arg)
      53       TYPE arg;
      54  {
      55    return arg * 3;
      56  }
      57  
      58  TYPE
      59  profn (TYPE arg)
      60  {
      61    return arg / 4;
      62  }
      63  
      64  int
      65  main (void)
      66  {
      67    volatile TYPE r;
      68    r = -b;
      69    if (r != c)
      70      abort ();
      71    r = a + b;
      72    if (r != CST (3.5))
      73      abort ();
      74    r = a - b;
      75    if (r != -CST (1.5))
      76      abort ();
      77    r = 2 * c;
      78    if (r != -5)
      79      abort ();
      80    r = b * c;
      81    if (r != -CST (6.25))
      82      abort ();
      83    r = b / (a + a);
      84    if (r != CST (1.25))
      85      abort ();
      86    r = c * 3;
      87    if (r != -CST (7.5))
      88      abort ();
      89    volatile int i = r;
      90    if (i != -7)
      91      abort ();
      92    r = vafn (a, c);
      93    if (r != -CST (1.5))
      94      abort ();
      95    r = krfn (b);
      96    if (r != CST (3.5))
      97      abort ();
      98    r = krprofn (a);
      99    if (r != CST (3.0))
     100      abort ();
     101    r = profn (a);
     102    if (r != CST (0.25))
     103      abort ();
     104    if ((a < b) != 1)
     105      abort ();
     106    if ((b < a) != 0)
     107      abort ();
     108    if ((a < a2) != 0)
     109      abort ();
     110    if ((nz < z) != 0)
     111      abort ();
     112    if ((a <= b) != 1)
     113      abort ();
     114    if ((b <= a) != 0)
     115      abort ();
     116    if ((a <= a2) != 1)
     117      abort ();
     118    if ((nz <= z) != 1)
     119      abort ();
     120    if ((a > b) != 0)
     121      abort ();
     122    if ((b > a) != 1)
     123      abort ();
     124    if ((a > a2) != 0)
     125      abort ();
     126    if ((nz > z) != 0)
     127      abort ();
     128    if ((a >= b) != 0)
     129      abort ();
     130    if ((b >= a) != 1)
     131      abort ();
     132    if ((a >= a2) != 1)
     133      abort ();
     134    if ((nz >= z) != 1)
     135      abort ();
     136    i = (nz == z);
     137    if (i != 1)
     138      abort ();
     139    i = (a == b);
     140    if (i != 0)
     141      abort ();
     142    exit (0);
     143  }