(root)/
gcc-13.2.0/
gcc/
testsuite/
c-c++-common/
dfp/
convert-int-max.c
       1  /* { dg-options "-O0 -w" } */
       2  
       3  /* N1150 5.1 Conversions from decimal float to integer.  */
       4  
       5  /* Test decimal float to integer conversions for values at the limit of
       6     what will fit into the destination type.  This assumes 32-bit int and
       7     64-bit long long (there's a check for that below).  */
       8  
       9  #include "dfp-dbg.h"
      10  
      11  volatile _Decimal32 d32;
      12  volatile _Decimal64 d64;
      13  volatile _Decimal128 d128;
      14  volatile int si;
      15  volatile unsigned int ui;
      16  volatile long long sll;
      17  volatile unsigned long long ull;
      18  
      19  void
      20  doit ()
      21  {
      22    /* _Decimal32 to int.  */
      23  
      24    d32 = 2147483.E3DF;
      25    si = d32;
      26    if (si != 2147483000)
      27      FAILURE
      28  
      29    d32 = -2147483.E3DF;
      30    si = d32;
      31    if (si != -2147483000)
      32      FAILURE
      33  
      34    /* _Decimal32 to unsigned int.  */
      35  
      36    d32 = 4.294967E9DF;
      37    ui = d32;
      38    if (ui != 4294967000U)
      39      FAILURE
      40  
      41    /* _Decimal32 to long long.  */
      42  
      43    d32 = 922.3372E16DF;
      44    sll = d32;
      45    if (sll != 9223372000000000000LL)
      46      FAILURE
      47  
      48    d32 = -92233.72E14DF;
      49    sll = d32;
      50    if (sll != -9223372000000000000LL)
      51      FAILURE
      52  
      53    /* _Decimal32 to unsigned long long.  */
      54  
      55    d32 = .1844674E20DF;
      56    ull = d32;
      57    if (ull != 18446740000000000000ULL)
      58      FAILURE
      59  
      60    /* _Decimal64 to int.  */
      61  
      62    d64 = 2.147483647E9DD;
      63    si = d64;
      64    if (si != 2147483647)
      65      FAILURE
      66  
      67    d64 = -2147483648.DD;
      68    si = d64;
      69    if (si != -2147483648)
      70      FAILURE
      71  
      72    /* _Decimal64 to unsigned int.  */
      73  
      74    d64 = 42949.67295E5DD;
      75    ui = d64;
      76    if (ui != 4294967295)
      77      FAILURE
      78  
      79    /* _Decimal64 to long long.  */
      80  
      81    d64 = 9.223372036854775E18DD;
      82    sll = d64;
      83    if (sll != 9223372036854775000LL)
      84      FAILURE 
      85  
      86    d64 = -92233720.36854775E11DD;
      87    sll = d64;
      88    if (sll != -9223372036854775000LL)
      89      FAILURE
      90  
      91    /* _Decimal64 to unsigned long long.  */
      92    d64 = 1844674407370955.E4DD;
      93    ull = d64;
      94    if (ull != 18446744073709550000ULL)
      95      FAILURE
      96  
      97    /* _Decimal128 to int.  */
      98  
      99    d128 = 2.147483647E9DL;
     100    si = d128;
     101    if (si != 2147483647)
     102      FAILURE
     103  
     104    d128 = -2147483648.DL;
     105    si = d128;
     106    if (si != -2147483648)
     107      FAILURE
     108  
     109    /* _Decimal128 to unsigned int.  */
     110  
     111    d128 = 4294.967295E6DL;
     112    ui = d128;
     113    if (ui != 4294967295)
     114      FAILURE
     115  
     116    /* _Decimal128 to long long.  */
     117  
     118    d128 = 9223372036854775807.DL;
     119    sll = d128;
     120    if (sll != 9223372036854775807LL)
     121      FAILURE 
     122  
     123    d128 = -9.223372036854775808E19DL;
     124    sll = d128;
     125    if (sll != -9223372036854775807LL - 1LL)
     126      FAILURE
     127  
     128    /* _Decimal128 to unsigned long long.  */
     129    d128 = 18446744073709551615.DL;
     130    ull = d128;
     131    if (ull != 18446744073709551615ULL)
     132      FAILURE
     133  }
     134  
     135  int
     136  main ()
     137  {
     138    /* This test assumes 32-bit int and 64-bit long long.  */
     139  
     140    if (sizeof (int) != 4 || sizeof (long long) != 8)
     141      return 0;
     142  
     143    doit ();
     144  
     145    FINISH
     146  }