Merge from mainline
[official-gcc.git] / gcc / testsuite / gcc.dg / dfp / convert-int.c
blobbab206836533a73abbd2f90b5fea4989a1e9fbea
1 /* { dg-do compile } */
2 /* { dg-options "-std=gnu99 -O0" } */
4 /* N1150 5.1 Conversion between decimal floating integer.
5 C99 6.3.1.4(1a) New. */
7 extern void abort (void);
9 _Decimal32 d32;
10 _Decimal64 d64;
11 _Decimal128 d128;
12 unsigned int ui;
13 unsigned long ul;
14 unsigned long long ull;
15 int si;
16 long sl;
17 long long sll;
18 _Bool b;
20 void
21 init_dfp_1 (void)
23 d32 = 456.789df;
24 d64 = 23.456789dd;
25 d128 = 1234.5678dl;
27 void
28 init_dfp_2 (void)
30 d32 = 1.23df;
31 d64 = -3.4dd;
32 d128 = 0.00003dl;
35 void
36 init_dfp_3 (void)
38 d32 = 0.0DF;
39 d64 = 0.0DD;
40 d128 = 0.0DL;
43 void
44 init_unsigned_int (void)
46 ui = 987U;
47 ul = 345678UL;
48 ull = 1234567ULL;
51 void
52 init_signed_int (void)
54 si = -987;
55 sl = -345678;
56 sll = -1234567;
59 int
60 main ()
62 /* C99 Section 6.7.2 Type specifiers. Type _Bool is
63 mentioned in this section. Conversions between
64 _Bool and DFP types. */
66 /* Decimal float to unsigned integer. */
67 init_dfp_1 ();
69 ui = d32;
70 if (ui != 456U)
71 abort ();
72 ul = d32;
73 if (ul != 456UL)
74 abort ();
75 ull = d32;
76 if (ull != 456ULL)
77 abort ();
79 ui = d64;
80 if (ui != 23U)
81 abort ();
82 ul = d64;
83 if (ul != 23UL)
84 abort ();
85 ull = d64;
86 if (ull != 23ULL)
87 abort ();
89 ui = d128;
90 if (ui != 1234U)
91 abort ();
92 ul = d128;
93 if (ul != 1234UL)
94 abort ();
95 ull = d128;
96 if (ull != 1234ULL)
97 abort ();
99 /* Decimal float to signed integer. */
101 /* Decimal float to _Bool. */
102 init_dfp_2 ();
104 b = d32;
105 if (!b)
106 abort ();
107 b = d64;
108 if (!b)
109 abort ();
110 b = d128;
111 if (!b)
112 abort ();
114 /* Unsigned integer to decimal float. */
115 init_unsigned_int ();
117 d32 = ui;
118 if (d32 != 987.0df)
119 abort ();
120 d32 = ul;
121 if (d32 != 345678.0df)
122 abort ();
123 d32 = ull;
124 if (d32 != 1234567.df)
125 abort ();
127 d64 = ui;
128 if (d64 != 987.0dd)
129 abort ();
130 d64 = ul;
131 if (d64 != 345678.0dd)
132 abort ();
133 d64 = ull;
134 if (d64 != 1234567.dd)
135 abort ();
137 d128 = ui;
138 if (d128 != 987.0dl)
139 abort ();
140 d128 = ul;
141 if (d128 != 345678.0dl)
142 abort ();
143 d128 = ull;
144 if (d128 != 1234567.dl)
145 abort ();
147 /* Signed integer to decimal float. */
148 init_signed_int ();
150 d32 = si;
151 if (d32 != -987.0df)
152 abort ();
153 d32 = sl;
154 if (d32 != -345678.0df)
155 abort ();
156 d32 = sll;
157 if (d32 != -1234567.df)
158 abort ();
160 d64 = si;
161 if (d64 != -987.0dd)
162 abort ();
163 d64 = sl;
164 if (d64 != -345678.0dd)
165 abort ();
166 d64 = sll;
167 if (d64 != -1234567.dd)
168 abort ();
170 d128 = si;
171 if (d128 != -987.0dl)
172 abort ();
173 d128 = sl;
174 if (d128 != -345678.0dl)
175 abort ();
176 d128 = sll;
177 if (d128 != -1234567.dl)
178 abort ();
180 /* _Bool to decimal float. */
181 init_dfp_3 ();
183 b = d32;
184 if (b)
185 abort ();
186 b = d64;
187 if (b)
188 abort ();
189 b = d128;
190 if (b)
191 abort ();
193 return 0;