]>
git.ipfire.org Git - thirdparty/gcc.git/blob - libstdc++-v3/testsuite/decimal/compound-assignment.cc
1 // Copyright (C) 2009-2013 Free Software Foundation, Inc.
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)
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
;
35 unsigned long ul
= 20;
37 unsigned long long ull
= 50;
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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 ();