OSDN Git Service

* testsuite/decimal/binary-arith.cc: Fix directive to skip test.
[pf3gnuchains/gcc-fork.git] / libstdc++-v3 / testsuite / decimal / binary-arith.cc
1 // Copyright (C) 2009 Free Software Foundation, Inc.
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
18 // { dg-require-effective-target dfp }
19
20 // ISO/IEC TR 24733  3.2.8  Binary arithmetic operators.
21
22 #include <decimal/decimal>
23 #include <testsuite_hooks.h>
24
25 using namespace std::decimal;
26
27 decimal32 d32 (5);
28 decimal64 d64 (-10);
29 decimal128 d128 (25);
30 int si = -20;
31 unsigned int ui = 50;
32 long sl = -10;
33 unsigned long ul = 20;
34 long long sll = -25;
35 unsigned long long ull = 50;
36
37 void
38 binary_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
63 void
64 binary_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
90 void
91 binary_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
116 void
117 binary_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
143 void
144 binary_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
169 void
170 binary_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
196 void
197 binary_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
222 void
223 binary_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
249 void
250 binary_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
275 void
276 binary_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
302 void
303 binary_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
328 void
329 binary_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
355 int
356 main ()
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 }