]> git.ipfire.org Git - thirdparty/gcc.git/blame - libstdc++-v3/testsuite/decimal/binary-arith.cc
Update copyright years.
[thirdparty/gcc.git] / libstdc++-v3 / testsuite / decimal / binary-arith.cc
CommitLineData
8d9254fc 1// Copyright (C) 2009-2020 Free Software Foundation, Inc.
4cdc8761
BK
2//
3// This file is part of the GNU ISO C++ Library. This library is free
4// software; you can redistribute it and/or modify it under the
5// terms of the GNU General Public License as published by the
6// Free Software Foundation; either version 3, or (at your option)
7// any later version.
8
9// This library is distributed in the hope that it will be useful,
10// but WITHOUT ANY WARRANTY; without even the implied warranty of
11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12// GNU General Public License for more details.
13
14// You should have received a copy of the GNU General Public License along
15// with this library; see the file COPYING3. If not see
16// <http://www.gnu.org/licenses/>.
17
02ebbe2f 18// { dg-require-effective-target dfp }
4cdc8761
BK
19
20// ISO/IEC TR 24733 3.2.8 Binary arithmetic operators.
21
22#include <decimal/decimal>
23#include <testsuite_hooks.h>
24
25using namespace std::decimal;
26
27decimal32 d32 (5);
28decimal64 d64 (-10);
29decimal128 d128 (25);
30int si = -20;
31unsigned int ui = 50;
32long sl = -10;
33unsigned long ul = 20;
34long long sll = -25;
35unsigned long long ull = 50;
36
37void
38binary_add_32 (void)
39{
40 decimal32 a (1000), b;
41
42 b = si + a; VERIFY (b == 980);
43 b = ui + a; VERIFY (b == 1050);
44 b = sl + a; VERIFY (b == 990);
45 b = ul + a; VERIFY (b == 1020);
46 b = sll + a; VERIFY (b == 975);
47 b = ull + a; VERIFY (b == 1050);
48 b = d32 + a; VERIFY (b == 1005);
49 b = (decimal32)(d64 + a); VERIFY (b == 990);
50 b = (decimal32)(d128 + a); VERIFY (b == 1025);
51
52 b = a + si; VERIFY (b == 980);
53 b = a + ui; VERIFY (b == 1050);
54 b = a + sl; VERIFY (b == 990);
55 b = a + ul; VERIFY (b == 1020);
56 b = a + sll; VERIFY (b == 975);
57 b = a + ull; VERIFY (b == 1050);
58 b = a + d32; VERIFY (b == 1005);
59 b = (decimal32)(a + d64); VERIFY (b == 990);
60 b = (decimal32)(a + d128); VERIFY (b == 1025);
61}
62
63void
64binary_subtract_32 (void)
65{
66 decimal32 a (1000), b;
67
68 b = a - si; VERIFY (b == 1020);
69 b = a - ui; VERIFY (b == 950);
70 b = a - sl; VERIFY (b == 1010);
71 b = a - ul; VERIFY (b == 980);
72 b = a - sll; VERIFY (b == 1025);
73 b = a - ull; VERIFY (b == 950);
74 b = a - d32; VERIFY (b == 995);
75 b = (decimal32)(a - d64); VERIFY (b == 1010);
76 b = (decimal32)(a - d128); VERIFY (b == 975);
77
78 a = -1000;
79 b = si - a; VERIFY (b == 980);
80 b = ui - a; VERIFY (b == 1050);
81 b = sl - a; VERIFY (b == 990);
82 b = ul - a; VERIFY (b == 1020);
83 b = sll - a; VERIFY (b == 975);
84 b = ull - a; VERIFY (b == 1050);
85 b = d32 - a; VERIFY (b == 1005);
86 b = (decimal32)(d64 - a); VERIFY (b == 990);
87 b = (decimal32)(d128 - a); VERIFY (b == 1025);
88}
89
90void
91binary_multiply_32 (void)
92{
93 decimal32 a (1000), b;
94
95 b = a * si; VERIFY (b == -20000);
96 b = a * ui; VERIFY (b == 50000);
97 b = a * sl; VERIFY (b == -10000);
98 b = a * ul; VERIFY (b == 20000);
99 b = a * sll; VERIFY (b == -25000);
100 b = a * ull; VERIFY (b == 50000);
101 b = a * d32; VERIFY (b == 5000);
102 b = (decimal32)(a * d64); VERIFY (b == -10000);
103 b = (decimal32)(a * d128); VERIFY (b == 25000);
104
105 b = si * a; VERIFY (b == -20000);
106 b = ui * a; VERIFY (b == 50000);
107 b = sl * a; VERIFY (b == -10000);
108 b = ul * a; VERIFY (b == 20000);
109 b = sll * a; VERIFY (b == -25000);
110 b = ull * a; VERIFY (b == 50000);
111 b = d32 * a; VERIFY (b == 5000);
112 b = (decimal32)(d64 * a); VERIFY (b == -10000);
113 b = (decimal32)(d128 * a); VERIFY (b == 25000);
114}
115
116void
117binary_divide_32 (void)
118{
119 decimal32 a (1000), b;
120
121 b = a / si; VERIFY (b == -50);
122 b = a / ui; VERIFY (b == 20);
123 b = a / sl; VERIFY (b == -100);
124 b = a / ul; VERIFY (b == 50);
125 b = a / sll; VERIFY (b == -40);
126 b = a / ull; VERIFY (b == 20);
127 b = a / d32; VERIFY (b == 200);
128 b = (decimal32)(a / d64); VERIFY (b == -100);
129 b = (decimal32)(a / d128); VERIFY (b == 40);
130
131 a = 5;
132 b = si / a; VERIFY (b == -4);
133 b = ui / a; VERIFY (b == 10);
134 b = sl / a; VERIFY (b == -2);
135 b = ul / a; VERIFY (b == 4);
136 b = sll / a; VERIFY (b == -5);
137 b = ull / a; VERIFY (b == 10);
138 b = d32 / a; VERIFY (b == 1);
139 b = (decimal32)(d64 / a); VERIFY (b == -2);
140 b = (decimal32)(d128 / a); VERIFY (b == 5);
141}
142
143void
144binary_add_64 (void)
145{
146 decimal64 a (1000), b;
147
148 b = a + si; VERIFY (b == 980);
149 b = a + ui; VERIFY (b == 1050);
150 b = a + sl; VERIFY (b == 990);
151 b = a + ul; VERIFY (b == 1020);
152 b = a + sll; VERIFY (b == 975);
153 b = a + ull; VERIFY (b == 1050);
154 b = a + d32; VERIFY (b == 1005);
155 b = a + d64; VERIFY (b == 990);
156 b = (decimal64)(a + d128); VERIFY (b == 1025);
157
158 b = a + si; VERIFY (b == 980);
159 b = a + ui; VERIFY (b == 1050);
160 b = a + sl; VERIFY (b == 990);
161 b = a + ul; VERIFY (b == 1020);
162 b = a + sll; VERIFY (b == 975);
163 b = a + ull; VERIFY (b == 1050);
164 b = a + d32; VERIFY (b == 1005);
165 b = a + d64; VERIFY (b == 990);
166 b = (decimal64)(a + d128); VERIFY (b == 1025);
167}
168
169void
170binary_subtract_64 (void)
171{
172 decimal64 a (1000), b;
173
174 b = a - si; VERIFY (b == 1020);
175 b = a - ui; VERIFY (b == 950);
176 b = a - sl; VERIFY (b == 1010);
177 b = a - ul; VERIFY (b == 980);
178 b = a - sll; VERIFY (b == 1025);
179 b = a - ull; VERIFY (b == 950);
180 b = a - d32; VERIFY (b == 995);
181 b = a - d64; VERIFY (b == 1010);
182 b = (decimal64)(a - d128); VERIFY (b == 975);
183
184 a = -1000;
185 b = si - a; VERIFY (b == 980);
186 b = ui - a; VERIFY (b == 1050);
187 b = sl - a; VERIFY (b == 990);
188 b = ul - a; VERIFY (b == 1020);
189 b = sll - a; VERIFY (b == 975);
190 b = ull - a; VERIFY (b == 1050);
191 b = d32 - a; VERIFY (b == 1005);
192 b = d64 - a; VERIFY (b == 990);
193 b = (decimal64)(d128 - a); VERIFY (b == 1025);
194}
195
196void
197binary_multiply_64 (void)
198{
199 decimal64 a (1000), b;
200
201 b = a * si; VERIFY (b == -20000);
202 b = a * ui; VERIFY (b == 50000);
203 b = a * sl; VERIFY (b == -10000);
204 b = a * ul; VERIFY (b == 20000);
205 b = a * sll; VERIFY (b == -25000);
206 b = a * ull; VERIFY (b == 50000);
207 b = a * d32; VERIFY (b == 5000);
208 b = a * d64; VERIFY (b == -10000);
209 b = (decimal64)(a * d128); VERIFY (b == 25000);
210
211 b = si * a; VERIFY (b == -20000);
212 b = ui * a; VERIFY (b == 50000);
213 b = sl * a; VERIFY (b == -10000);
214 b = ul * a; VERIFY (b == 20000);
215 b = sll * a; VERIFY (b == -25000);
216 b = ull * a; VERIFY (b == 50000);
217 b = d32 * a; VERIFY (b == 5000);
218 b = d64 * a; VERIFY (b == -10000);
219 b = (decimal64)(d128 * a); VERIFY (b == 25000);
220}
221
222void
223binary_divide_64 (void)
224{
225 decimal64 a (1000), b;
226
227 b = a / si; VERIFY (b == -50);
228 b = a / ui; VERIFY (b == 20);
229 b = a / sl; VERIFY (b == -100);
230 b = a / ul; VERIFY (b == 50);
231 b = a / sll; VERIFY (b == -40);
232 b = a / ull; VERIFY (b == 20);
233 b = a / d32; VERIFY (b == 200);
234 b = a / d64; VERIFY (b == -100);
235 b = (decimal64)(a / d128); VERIFY (b == 40);
236
237 a = 5;
238 b = si / a; VERIFY (b == -4);
239 b = ui / a; VERIFY (b == 10);
240 b = sl / a; VERIFY (b == -2);
241 b = ul / a; VERIFY (b == 4);
242 b = sll / a; VERIFY (b == -5);
243 b = ull / a; VERIFY (b == 10);
244 b = d32 / a; VERIFY (b == 1);
245 b = d64 / a; VERIFY (b == -2);
246 b = (decimal64)(d128 / a); VERIFY (b == 5);
247}
248
249void
250binary_add_128 (void)
251{
252 decimal128 a (1000), b;
253
254 b = a + si; VERIFY (b == 980);
255 b = a + ui; VERIFY (b == 1050);
256 b = a + sl; VERIFY (b == 990);
257 b = a + ul; VERIFY (b == 1020);
258 b = a + sll; VERIFY (b == 975);
259 b = a + ull; VERIFY (b == 1050);
260 b = a + d32; VERIFY (b == 1005);
261 b = a + d64; VERIFY (b == 990);
262 b = a + d128; VERIFY (b == 1025);
263
264 b = a + si; VERIFY (b == 980);
265 b = a + ui; VERIFY (b == 1050);
266 b = a + sl; VERIFY (b == 990);
267 b = a + ul; VERIFY (b == 1020);
268 b = a + sll; VERIFY (b == 975);
269 b = a + ull; VERIFY (b == 1050);
270 b = a + d32; VERIFY (b == 1005);
271 b = a + d64; VERIFY (b == 990);
272 b = a + d128; VERIFY (b == 1025);
273}
274
275void
276binary_subtract_128 (void)
277{
278 decimal128 a (1000), b;
279
280 b = a - si; VERIFY (b == 1020);
281 b = a - ui; VERIFY (b == 950);
282 b = a - sl; VERIFY (b == 1010);
283 b = a - ul; VERIFY (b == 980);
284 b = a - sll; VERIFY (b == 1025);
285 b = a - ull; VERIFY (b == 950);
286 b = a - d32; VERIFY (b == 995);
287 b = a - d64; VERIFY (b == 1010);
288 b = a - d128; VERIFY (b == 975);
289
290 a = -1000;
291 b = si - a; VERIFY (b == 980);
292 b = ui - a; VERIFY (b == 1050);
293 b = sl - a; VERIFY (b == 990);
294 b = ul - a; VERIFY (b == 1020);
295 b = sll - a; VERIFY (b == 975);
296 b = ull - a; VERIFY (b == 1050);
297 b = d32 - a; VERIFY (b == 1005);
298 b = d64 - a; VERIFY (b == 990);
299 b = d128 - a; VERIFY (b == 1025);
300}
301
302void
303binary_multiply_128 (void)
304{
305 decimal128 a (1000), b;
306
307 b = a * si; VERIFY (b == -20000);
308 b = a * ui; VERIFY (b == 50000);
309 b = a * sl; VERIFY (b == -10000);
310 b = a * ul; VERIFY (b == 20000);
311 b = a * sll; VERIFY (b == -25000);
312 b = a * ull; VERIFY (b == 50000);
313 b = a * d32; VERIFY (b == 5000);
314 b = a * d64; VERIFY (b == -10000);
315 b = a * d128; VERIFY (b == 25000);
316
317 b = si * a; VERIFY (b == -20000);
318 b = ui * a; VERIFY (b == 50000);
319 b = sl * a; VERIFY (b == -10000);
320 b = ul * a; VERIFY (b == 20000);
321 b = sll * a; VERIFY (b == -25000);
322 b = ull * a; VERIFY (b == 50000);
323 b = d32 * a; VERIFY (b == 5000);
324 b = d64 * a; VERIFY (b == -10000);
325 b = d128 * a; VERIFY (b == 25000);
326}
327
328void
329binary_divide_128 (void)
330{
331 decimal128 a (1000), b;
332
333 b = a / si; VERIFY (b == -50);
334 b = a / ui; VERIFY (b == 20);
335 b = a / sl; VERIFY (b == -100);
336 b = a / ul; VERIFY (b == 50);
337 b = a / sll; VERIFY (b == -40);
338 b = a / ull; VERIFY (b == 20);
339 b = a / d32; VERIFY (b == 200);
340 b = a / d64; VERIFY (b == -100);
341 b = a / d128; VERIFY (b == 40);
342
343 a = 5;
344 b = si / a; VERIFY (b == -4);
345 b = ui / a; VERIFY (b == 10);
346 b = sl / a; VERIFY (b == -2);
347 b = ul / a; VERIFY (b == 4);
348 b = sll / a; VERIFY (b == -5);
349 b = ull / a; VERIFY (b == 10);
350 b = d32 / a; VERIFY (b == 1);
351 b = d64 / a; VERIFY (b == -2);
352 b = d128 / a; VERIFY (b == 5);
353}
354
355int
356main ()
357{
358 binary_add_32 ();
359 binary_subtract_32 ();
360 binary_multiply_32 ();
361 binary_divide_32 ();
362
363 binary_add_64 ();
364 binary_subtract_64 ();
365 binary_multiply_64 ();
366 binary_divide_64 ();
367
368 binary_add_128 ();
369 binary_subtract_128 ();
370 binary_multiply_128 ();
371 binary_divide_128 ();
372}