dfp.exp: Also run tests in c-c++-common/dfp.
[gcc.git] / 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 }