(root)/
gcc-13.2.0/
gcc/
testsuite/
c-c++-common/
dfp/
convert-bfp-fold.c
       1  /* { dg-options "-O2" } */
       2  
       3  /* N1150 5.2 Conversions among decimal floating types and between
       4     decimal floating types and generic floating types.
       5     C99 6.3.1.5(4) Conversions, arithmetic operands, real floating types.  */
       6  
       7  #include "dfp-dbg.h"
       8  
       9  _Decimal32 d32;
      10  _Decimal64 d64;
      11  _Decimal128 d128;
      12  float sf;
      13  double df;
      14  long double tf;
      15  
      16  extern void link_error (void);
      17  
      18  int
      19  main ()
      20  {
      21    /* Conversions from decimal float to binary float. */
      22  
      23    /* Conversions from _Decimal32. */
      24    d32 = 2.0df;
      25    sf = d32;
      26    if (sf != 2.0f)
      27      link_error ();
      28  
      29    df = d32;
      30    if (df != 2.0)
      31      link_error ();
      32  
      33    tf = d32;
      34    if (tf != 2.0l)
      35      link_error ();
      36  
      37    /* Conversions from _Decimal64. */
      38    d64 = -7.0dd;
      39    sf = d64;
      40    if (sf != -7.0f)
      41      link_error ();
      42    
      43    df = d64;
      44    if (df != -7.0)
      45      link_error ();
      46  
      47    tf = d64;
      48    if (tf != -7.0l)
      49      link_error ();
      50  
      51    /* Conversions from _Decimal128. */
      52    d128 = 30.0dl;
      53    sf = d128;
      54    if (sf != 30.0f)
      55      link_error ();
      56  
      57    df = d128;
      58    if (df != 30.0)
      59      link_error ();
      60  
      61    df = d128;
      62    if (df != 30.0l)
      63      link_error ();
      64  
      65    /* Conversions from binary float to decimal float. */
      66    sf = 30.0f;
      67    d128 = sf;
      68    if (d128 != 30.0dl)
      69      link_error ();
      70  
      71    d64 = sf;
      72    if (d64 != 30.0dd)
      73      link_error ();
      74  
      75    d32 = sf;
      76    if (d32 != 30.0df)
      77      link_error ();
      78  
      79    df = -2.0;
      80    d128 = df;
      81    if (d128 != -2.0dl)
      82      link_error ();
      83  
      84    d64 = df;
      85    if (d64 != -2.0dd)
      86      link_error ();
      87  
      88    d32 = df;
      89    if (d32 != -2.0df)
      90      link_error ();  
      91  
      92    tf = -22.0l;
      93    d128 = tf;
      94    if (d128 != -22.0dl)
      95      link_error ();
      96  
      97    d64 = tf;
      98    if (d64 != -22.0dd)
      99      link_error ();
     100  
     101    d32 = tf;
     102    if (d32 != -22.0df)
     103      link_error ();
     104  
     105    /* 2**(-11) = 0.00048828125. */
     106    d128 = 0.000488281251dl;
     107    sf = d128;
     108    if (sf != 0.00048828125f)
     109      link_error ();
     110    /* 2**(-25) = 0.298023223876953125E-7.  */
     111    d128 = 2.98023223876953125E-8dl;
     112    df = d128;
     113    if (df < (2.9802322387695312e-08 - 0.00000000001)
     114        || df > (2.9802322387695312e-08 + 0.00000000001))
     115      link_error ();
     116  
     117    return 0;
     118  }