(root)/
gcc-13.2.0/
gcc/
testsuite/
c-c++-common/
dfp/
convert-dfp.c
       1  /* { dg-options "-O0" } */
       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(3) New.
       6  
       7     Test various conversions involving decimal floating types. */
       8  
       9  #ifndef	__STDC_WANT_DEC_FP__
      10  #define __STDC_WANT_DEC_FP__ 1
      11  #endif
      12  
      13  #include "dfp-dbg.h"
      14  #include <float.h>
      15  
      16  volatile _Decimal32 d32;
      17  volatile _Decimal64 d64;
      18  volatile _Decimal128 d128;
      19  
      20  int
      21  main ()
      22  {
      23    /* Conversions to larger types.  */
      24    d32 = 123.4df;
      25    d64 = d32;
      26    if (d64 != 123.4dd)
      27      FAILURE
      28    d128 = d32;
      29    if (d128 != 123.4dl)
      30      FAILURE
      31    d64 = 345.678dd;
      32    d128 = d64;
      33    if (d128 != 345.678dl)
      34      FAILURE
      35  
      36    /* Conversions to smaller types for which the value fits.  */
      37    d64 = 3456.789dd;
      38    d32 = d64;
      39    if (d32 != 3456.789df)
      40      FAILURE
      41    d128 = 123.4567dl;
      42    d32 = d128;
      43    if (d32 != 123.4567df)
      44      FAILURE
      45  
      46    d128 = 1234567890.123456dl;
      47    d64 = d128;
      48    if (d64 != 1234567890.123456dd)
      49      FAILURE
      50  
      51    /* Test demotion to non-representable decimal floating type. */
      52  
      53    /* Assumes a default rounding mode of 'near'.  This uses the rules
      54       describe in the 27 July 2005 draft of IEEE 754r, which are much
      55       more clear that what's described in draft 5 of N1107.  */
      56  
      57    /* Rounds to what _Decimal32 can handle.  */
      58    d64 = 9.99999949E96DD;
      59    d32 = d64;
      60    if (d32 != DEC32_MAX)
      61      FAILURE
      62  
      63    /* Rounds to more than _Decimal32 can handle.  */
      64    d64 = 9.9999995E96DD;
      65    d32 = d64;
      66    if (d32 != __builtin_infd32())
      67      FAILURE
      68  
      69    /* Rounds to what _Decimal32 can handle.  */
      70    d128 = 9.99999949E96DD;
      71    d32 = d128;
      72    if (d32 != DEC32_MAX)
      73      FAILURE
      74  
      75    /* Rounds to more than _Decimal32 can handle.  */
      76    d128= 9.9999995E96DD;
      77    d32 = d128;
      78    if (d32 != __builtin_infd32())
      79      FAILURE
      80  
      81    /* Rounds to what _Decimal64 can handle.  */
      82    d128 = 9.99999999999999949E384DL;
      83    d64 = d128;
      84    if (d64 != DEC64_MAX)
      85      FAILURE
      86  
      87    /* Rounds to more than _Decimal64 can handle.  */
      88    d128 = 9.9999999999999995E384DL;
      89    d64 = d128;
      90    if (d64 != __builtin_infd64())
      91      FAILURE
      92  
      93    FINISH
      94  }