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 doit()20doit () 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 main()136main () 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 } 147