]> git.ipfire.org Git - thirdparty/gcc.git/blob - libstdc++-v3/testsuite/decimal/compound-assignment.cc
re PR c++/59378 (Internal compiler error when using __builtin_shuffle in a template...
[thirdparty/gcc.git] / libstdc++-v3 / testsuite / decimal / compound-assignment.cc
1 // Copyright (C) 2009-2013 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.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).
23
24 #include <decimal/decimal>
25 #include <testsuite_hooks.h>
26
27 using namespace std::decimal;
28
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;
38
39 void
40 compound_assignment_add_32 (void)
41 {
42 bool test __attribute__((unused)) = true;
43 decimal32 a (1000), b;
44
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);
54 }
55
56 void
57 compound_assignment_subtract_32 (void)
58 {
59 bool test __attribute__((unused)) = true;
60 decimal32 a (1000), b;
61
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);
71 }
72
73 void
74 compound_assignment_multiply_32 (void)
75 {
76 bool test __attribute__((unused)) = true;
77 decimal32 a (1000), b;
78
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);
88 }
89
90 void
91 compound_assignment_divide_32 (void)
92 {
93 bool test __attribute__((unused)) = true;
94 decimal32 a (1000), b;
95
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);
105 }
106
107 void
108 compound_assignment_add_64 (void)
109 {
110 bool test __attribute__((unused)) = true;
111 decimal64 a (1000), b;
112
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);
122 }
123
124 void
125 compound_assignment_subtract_64 (void)
126 {
127 bool test __attribute__((unused)) = true;
128 decimal64 a (1000), b;
129
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);
139 }
140
141 void
142 compound_assignment_multiply_64 (void)
143 {
144 bool test __attribute__((unused)) = true;
145 decimal64 a (1000), b;
146
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);
156 }
157
158 void
159 compound_assignment_divide_64 (void)
160 {
161 bool test __attribute__((unused)) = true;
162 decimal64 a (1000), b;
163
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);
173 }
174
175 void
176 compound_assignment_add_128 (void)
177 {
178 bool test __attribute__((unused)) = true;
179 decimal128 a (1000), b;
180
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);
190 }
191
192 void
193 compound_assignment_subtract_128 (void)
194 {
195 bool test __attribute__((unused)) = true;
196 decimal128 a (1000), b;
197
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);
207 }
208
209 void
210 compound_assignment_multiply_128 (void)
211 {
212 bool test __attribute__((unused)) = true;
213 decimal128 a (1000), b;
214
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);
224 }
225
226 void
227 compound_assignment_divide_128 (void)
228 {
229 bool test __attribute__((unused)) = true;
230 decimal128 a (1000), b;
231
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);
241 }
242
243 int
244 main ()
245 {
246 compound_assignment_add_32 ();
247 compound_assignment_subtract_32 ();
248 compound_assignment_multiply_32 ();
249 compound_assignment_divide_32 ();
250
251 compound_assignment_add_64 ();
252 compound_assignment_subtract_64 ();
253 compound_assignment_multiply_64 ();
254 compound_assignment_divide_64 ();
255
256 compound_assignment_add_128 ();
257 compound_assignment_subtract_128 ();
258 compound_assignment_multiply_128 ();
259 compound_assignment_divide_128 ();
260 }