2014-07-29 François Dumont <fdumont@gcc.gnu.org>
[official-gcc.git] / libstdc++-v3 / testsuite / decimal / compound-assignment.cc
blob33a2d9cf068dba6173dce35cbb6b6e6ae94275ab
1 // Copyright (C) 2009-2014 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.
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.
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/>.
18 // { dg-require-effective-target dfp }
20 // ISO/IEC TR 24733 3.2.2.6 Compound assignment (decimal32).
21 // ISO/IEC TR 24733 3.2.3.6 Compound assignment (decimal64).
22 // ISO/IEC TR 24733 3.2.4.6 Compound assignment (decimal128).
24 #include <decimal/decimal>
25 #include <testsuite_hooks.h>
27 using namespace std::decimal;
29 decimal32 d32 (5);
30 decimal64 d64 (-10);
31 decimal128 d128 (25);
32 int si = -2;
33 unsigned int ui = 5;
34 long sl = -10;
35 unsigned long ul = 20;
36 long long sll = -25;
37 unsigned long long ull = 50;
39 void
40 compound_assignment_add_32 (void)
42 bool test __attribute__((unused)) = true;
43 decimal32 a (1000), b;
45 b = a; b += d32; VERIFY (b == 1005);
46 b = a; b += d64; VERIFY (b == 990);
47 b = a; b += d128; VERIFY (b == 1025);
48 b = a; b += si; VERIFY (b == 998);
49 b = a; b += ui; VERIFY (b == 1005);
50 b = a; b += sl; VERIFY (b == 990);
51 b = a; b += ul; VERIFY (b == 1020);
52 b = a; b += sll; VERIFY (b == 975);
53 b = a; b += ull; VERIFY (b == 1050);
56 void
57 compound_assignment_subtract_32 (void)
59 bool test __attribute__((unused)) = true;
60 decimal32 a (1000), b;
62 b = a; b -= d32; VERIFY (b == 995);
63 b = a; b -= d64; VERIFY (b == 1010);
64 b = a; b -= d128; VERIFY (b == 975);
65 b = a; b -= si; VERIFY (b == 1002);
66 b = a; b -= ui; VERIFY (b == 995);
67 b = a; b -= sl; VERIFY (b == 1010);
68 b = a; b -= ul; VERIFY (b == 980);
69 b = a; b -= sll; VERIFY (b == 1025);
70 b = a; b -= ull; VERIFY (b == 950);
73 void
74 compound_assignment_multiply_32 (void)
76 bool test __attribute__((unused)) = true;
77 decimal32 a (1000), b;
79 b = a; b *= d32; VERIFY (b == 5000);
80 b = a; b *= d64; VERIFY (b == -10000);
81 b = a; b *= d128; VERIFY (b == 25000);
82 b = a; b *= si; VERIFY (b == -2000);
83 b = a; b *= ui; VERIFY (b == 5000);
84 b = a; b *= sl; VERIFY (b == -10000);
85 b = a; b *= ul; VERIFY (b == 20000);
86 b = a; b *= sll; VERIFY (b == -25000);
87 b = a; b *= ull; VERIFY (b == 50000);
90 void
91 compound_assignment_divide_32 (void)
93 bool test __attribute__((unused)) = true;
94 decimal32 a (1000), b;
96 b = a; b /= d32; VERIFY (b == 200);
97 b = a; b /= d64; VERIFY (b == -100);
98 b = a; b /= d128; VERIFY (b == 40);
99 b = a; b /= si; VERIFY (b == -500);
100 b = a; b /= ui; VERIFY (b == 200);
101 b = a; b /= sl; VERIFY (b == -100);
102 b = a; b /= ul; VERIFY (b == 50);
103 b = a; b /= sll; VERIFY (b == -40);
104 b = a; b /= ull; VERIFY (b == 20);
107 void
108 compound_assignment_add_64 (void)
110 bool test __attribute__((unused)) = true;
111 decimal64 a (1000), b;
113 b = a; b += d32; VERIFY (b == 1005);
114 b = a; b += d64; VERIFY (b == 990);
115 b = a; b += d128; VERIFY (b == 1025);
116 b = a; b += si; VERIFY (b == 998);
117 b = a; b += ui; VERIFY (b == 1005);
118 b = a; b += sl; VERIFY (b == 990);
119 b = a; b += ul; VERIFY (b == 1020);
120 b = a; b += sll; VERIFY (b == 975);
121 b = a; b += ull; VERIFY (b == 1050);
124 void
125 compound_assignment_subtract_64 (void)
127 bool test __attribute__((unused)) = true;
128 decimal64 a (1000), b;
130 b = a; b -= d32; VERIFY (b == 995);
131 b = a; b -= d64; VERIFY (b == 1010);
132 b = a; b -= d128; VERIFY (b == 975);
133 b = a; b -= si; VERIFY (b == 1002);
134 b = a; b -= ui; VERIFY (b == 995);
135 b = a; b -= sl; VERIFY (b == 1010);
136 b = a; b -= ul; VERIFY (b == 980);
137 b = a; b -= sll; VERIFY (b == 1025);
138 b = a; b -= ull; VERIFY (b == 950);
141 void
142 compound_assignment_multiply_64 (void)
144 bool test __attribute__((unused)) = true;
145 decimal64 a (1000), b;
147 b = a; b *= d32; VERIFY (b == 5000);
148 b = a; b *= d64; VERIFY (b == -10000);
149 b = a; b *= d128; VERIFY (b == 25000);
150 b = a; b *= si; VERIFY (b == -2000);
151 b = a; b *= ui; VERIFY (b == 5000);
152 b = a; b *= sl; VERIFY (b == -10000);
153 b = a; b *= ul; VERIFY (b == 20000);
154 b = a; b *= sll; VERIFY (b == -25000);
155 b = a; b *= ull; VERIFY (b == 50000);
158 void
159 compound_assignment_divide_64 (void)
161 bool test __attribute__((unused)) = true;
162 decimal64 a (1000), b;
164 b = a; b /= d32; VERIFY (b == 200);
165 b = a; b /= d64; VERIFY (b == -100);
166 b = a; b /= d128; VERIFY (b == 40);
167 b = a; b /= si; VERIFY (b == -500);
168 b = a; b /= ui; VERIFY (b == 200);
169 b = a; b /= sl; VERIFY (b == -100);
170 b = a; b /= ul; VERIFY (b == 50);
171 b = a; b /= sll; VERIFY (b == -40);
172 b = a; b /= ull; VERIFY (b == 20);
175 void
176 compound_assignment_add_128 (void)
178 bool test __attribute__((unused)) = true;
179 decimal128 a (1000), b;
181 b = a; b += d32; VERIFY (b == 1005);
182 b = a; b += d64; VERIFY (b == 990);
183 b = a; b += d128; VERIFY (b == 1025);
184 b = a; b += si; VERIFY (b == 998);
185 b = a; b += ui; VERIFY (b == 1005);
186 b = a; b += sl; VERIFY (b == 990);
187 b = a; b += ul; VERIFY (b == 1020);
188 b = a; b += sll; VERIFY (b == 975);
189 b = a; b += ull; VERIFY (b == 1050);
192 void
193 compound_assignment_subtract_128 (void)
195 bool test __attribute__((unused)) = true;
196 decimal128 a (1000), b;
198 b = a; b -= d32; VERIFY (b == 995);
199 b = a; b -= d64; VERIFY (b == 1010);
200 b = a; b -= d128; VERIFY (b == 975);
201 b = a; b -= si; VERIFY (b == 1002);
202 b = a; b -= ui; VERIFY (b == 995);
203 b = a; b -= sl; VERIFY (b == 1010);
204 b = a; b -= ul; VERIFY (b == 980);
205 b = a; b -= sll; VERIFY (b == 1025);
206 b = a; b -= ull; VERIFY (b == 950);
209 void
210 compound_assignment_multiply_128 (void)
212 bool test __attribute__((unused)) = true;
213 decimal128 a (1000), b;
215 b = a; b *= d32; VERIFY (b == 5000);
216 b = a; b *= d64; VERIFY (b == -10000);
217 b = a; b *= d128; VERIFY (b == 25000);
218 b = a; b *= si; VERIFY (b == -2000);
219 b = a; b *= ui; VERIFY (b == 5000);
220 b = a; b *= sl; VERIFY (b == -10000);
221 b = a; b *= ul; VERIFY (b == 20000);
222 b = a; b *= sll; VERIFY (b == -25000);
223 b = a; b *= ull; VERIFY (b == 50000);
226 void
227 compound_assignment_divide_128 (void)
229 bool test __attribute__((unused)) = true;
230 decimal128 a (1000), b;
232 b = a; b /= d32; VERIFY (b == 200);
233 b = a; b /= d64; VERIFY (b == -100);
234 b = a; b /= d128; VERIFY (b == 40);
235 b = a; b /= si; VERIFY (b == -500);
236 b = a; b /= ui; VERIFY (b == 200);
237 b = a; b /= sl; VERIFY (b == -100);
238 b = a; b /= ul; VERIFY (b == 50);
239 b = a; b /= sll; VERIFY (b == -40);
240 b = a; b /= ull; VERIFY (b == 20);
244 main ()
246 compound_assignment_add_32 ();
247 compound_assignment_subtract_32 ();
248 compound_assignment_multiply_32 ();
249 compound_assignment_divide_32 ();
251 compound_assignment_add_64 ();
252 compound_assignment_subtract_64 ();
253 compound_assignment_multiply_64 ();
254 compound_assignment_divide_64 ();
256 compound_assignment_add_128 ();
257 compound_assignment_subtract_128 ();
258 compound_assignment_multiply_128 ();
259 compound_assignment_divide_128 ();