(root)/
gcc-13.2.0/
gcc/
testsuite/
c-c++-common/
torture/
complex-sign-mixed-div.c
       1  /* Test complex arithmetic with signed zeros.  Mixed real/complex
       2     division.  */
       3  /* { dg-do run } */
       4  /* { dg-options "-std=gnu99" { target c } } */
       5  
       6  #include "complex-sign.h"
       7  
       8  #define CHECK_DIV(TYPE, COPY, ZERO, ZEROI, ONE)				\
       9    do {									\
      10      CHECK_ARITH_CR (TYPE, COPY, ZERO, ZEROI, /, +, +, +, ONE, +, +);	\
      11      CHECK_ARITH_CR (TYPE, COPY, ZERO, ZEROI, /, +, +, -, ONE, -, -);	\
      12      CHECK_ARITH_CR (TYPE, COPY, ZERO, ZEROI, /, +, -, +, ONE, +, -);	\
      13      CHECK_ARITH_CR (TYPE, COPY, ZERO, ZEROI, /, +, -, -, ONE, -, +);	\
      14      CHECK_ARITH_CR (TYPE, COPY, ZERO, ZEROI, /, -, +, +, ONE, -, +);	\
      15      CHECK_ARITH_CR (TYPE, COPY, ZERO, ZEROI, /, -, +, -, ONE, +, -);	\
      16      CHECK_ARITH_CR (TYPE, COPY, ZERO, ZEROI, /, -, -, +, ONE, -, -);	\
      17      CHECK_ARITH_CR (TYPE, COPY, ZERO, ZEROI, /, -, -, -, ONE, +, +);	\
      18    } while (0)
      19  
      20  void
      21  check_div_float (void)
      22  {
      23    CHECK_DIV (float, __builtin_copysignf, 0.0f, 0.0if, 1.0f);
      24  }
      25  
      26  void
      27  check_div_double (void)
      28  {
      29    CHECK_DIV (double, __builtin_copysign, 0.0, 0.0i, 1.0);
      30  }
      31  
      32  void
      33  check_div_long_double (void)
      34  {
      35    CHECK_DIV (long double, __builtin_copysignl, 0.0l, 0.0il, 1.0l);
      36  }
      37  
      38  int
      39  main (void)
      40  {
      41    check_div_float ();
      42    check_div_double ();
      43    check_div_long_double ();
      44    exit (0);
      45  }