Imported Upstream version 4.8.1
[platform/upstream/gcc48.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 }