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.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 27using namespace std::decimal; 28 29decimal32 d32 (5); 30decimal64 d64 (-10); 31decimal128 d128 (25); 32int si = -2; 33unsigned int ui = 5; 34long sl = -10; 35unsigned long ul = 20; 36long long sll = -25; 37unsigned long long ull = 50; 38 39void 40compound_assignment_add_32 (void) 41{ 42 decimal32 a (1000), b; 43 44 b = a; b += d32; VERIFY (b == 1005); 45 b = a; b += d64; VERIFY (b == 990); 46 b = a; b += d128; VERIFY (b == 1025); 47 b = a; b += si; VERIFY (b == 998); 48 b = a; b += ui; VERIFY (b == 1005); 49 b = a; b += sl; VERIFY (b == 990); 50 b = a; b += ul; VERIFY (b == 1020); 51 b = a; b += sll; VERIFY (b == 975); 52 b = a; b += ull; VERIFY (b == 1050); 53} 54 55void 56compound_assignment_subtract_32 (void) 57{ 58 decimal32 a (1000), b; 59 60 b = a; b -= d32; VERIFY (b == 995); 61 b = a; b -= d64; VERIFY (b == 1010); 62 b = a; b -= d128; VERIFY (b == 975); 63 b = a; b -= si; VERIFY (b == 1002); 64 b = a; b -= ui; VERIFY (b == 995); 65 b = a; b -= sl; VERIFY (b == 1010); 66 b = a; b -= ul; VERIFY (b == 980); 67 b = a; b -= sll; VERIFY (b == 1025); 68 b = a; b -= ull; VERIFY (b == 950); 69} 70 71void 72compound_assignment_multiply_32 (void) 73{ 74 decimal32 a (1000), b; 75 76 b = a; b *= d32; VERIFY (b == 5000); 77 b = a; b *= d64; VERIFY (b == -10000); 78 b = a; b *= d128; VERIFY (b == 25000); 79 b = a; b *= si; VERIFY (b == -2000); 80 b = a; b *= ui; VERIFY (b == 5000); 81 b = a; b *= sl; VERIFY (b == -10000); 82 b = a; b *= ul; VERIFY (b == 20000); 83 b = a; b *= sll; VERIFY (b == -25000); 84 b = a; b *= ull; VERIFY (b == 50000); 85} 86 87void 88compound_assignment_divide_32 (void) 89{ 90 decimal32 a (1000), b; 91 92 b = a; b /= d32; VERIFY (b == 200); 93 b = a; b /= d64; VERIFY (b == -100); 94 b = a; b /= d128; VERIFY (b == 40); 95 b = a; b /= si; VERIFY (b == -500); 96 b = a; b /= ui; VERIFY (b == 200); 97 b = a; b /= sl; VERIFY (b == -100); 98 b = a; b /= ul; VERIFY (b == 50); 99 b = a; b /= sll; VERIFY (b == -40); 100 b = a; b /= ull; VERIFY (b == 20); 101} 102 103void 104compound_assignment_add_64 (void) 105{ 106 decimal64 a (1000), b; 107 108 b = a; b += d32; VERIFY (b == 1005); 109 b = a; b += d64; VERIFY (b == 990); 110 b = a; b += d128; VERIFY (b == 1025); 111 b = a; b += si; VERIFY (b == 998); 112 b = a; b += ui; VERIFY (b == 1005); 113 b = a; b += sl; VERIFY (b == 990); 114 b = a; b += ul; VERIFY (b == 1020); 115 b = a; b += sll; VERIFY (b == 975); 116 b = a; b += ull; VERIFY (b == 1050); 117} 118 119void 120compound_assignment_subtract_64 (void) 121{ 122 decimal64 a (1000), b; 123 124 b = a; b -= d32; VERIFY (b == 995); 125 b = a; b -= d64; VERIFY (b == 1010); 126 b = a; b -= d128; VERIFY (b == 975); 127 b = a; b -= si; VERIFY (b == 1002); 128 b = a; b -= ui; VERIFY (b == 995); 129 b = a; b -= sl; VERIFY (b == 1010); 130 b = a; b -= ul; VERIFY (b == 980); 131 b = a; b -= sll; VERIFY (b == 1025); 132 b = a; b -= ull; VERIFY (b == 950); 133} 134 135void 136compound_assignment_multiply_64 (void) 137{ 138 decimal64 a (1000), b; 139 140 b = a; b *= d32; VERIFY (b == 5000); 141 b = a; b *= d64; VERIFY (b == -10000); 142 b = a; b *= d128; VERIFY (b == 25000); 143 b = a; b *= si; VERIFY (b == -2000); 144 b = a; b *= ui; VERIFY (b == 5000); 145 b = a; b *= sl; VERIFY (b == -10000); 146 b = a; b *= ul; VERIFY (b == 20000); 147 b = a; b *= sll; VERIFY (b == -25000); 148 b = a; b *= ull; VERIFY (b == 50000); 149} 150 151void 152compound_assignment_divide_64 (void) 153{ 154 decimal64 a (1000), b; 155 156 b = a; b /= d32; VERIFY (b == 200); 157 b = a; b /= d64; VERIFY (b == -100); 158 b = a; b /= d128; VERIFY (b == 40); 159 b = a; b /= si; VERIFY (b == -500); 160 b = a; b /= ui; VERIFY (b == 200); 161 b = a; b /= sl; VERIFY (b == -100); 162 b = a; b /= ul; VERIFY (b == 50); 163 b = a; b /= sll; VERIFY (b == -40); 164 b = a; b /= ull; VERIFY (b == 20); 165} 166 167void 168compound_assignment_add_128 (void) 169{ 170 decimal128 a (1000), b; 171 172 b = a; b += d32; VERIFY (b == 1005); 173 b = a; b += d64; VERIFY (b == 990); 174 b = a; b += d128; VERIFY (b == 1025); 175 b = a; b += si; VERIFY (b == 998); 176 b = a; b += ui; VERIFY (b == 1005); 177 b = a; b += sl; VERIFY (b == 990); 178 b = a; b += ul; VERIFY (b == 1020); 179 b = a; b += sll; VERIFY (b == 975); 180 b = a; b += ull; VERIFY (b == 1050); 181} 182 183void 184compound_assignment_subtract_128 (void) 185{ 186 decimal128 a (1000), b; 187 188 b = a; b -= d32; VERIFY (b == 995); 189 b = a; b -= d64; VERIFY (b == 1010); 190 b = a; b -= d128; VERIFY (b == 975); 191 b = a; b -= si; VERIFY (b == 1002); 192 b = a; b -= ui; VERIFY (b == 995); 193 b = a; b -= sl; VERIFY (b == 1010); 194 b = a; b -= ul; VERIFY (b == 980); 195 b = a; b -= sll; VERIFY (b == 1025); 196 b = a; b -= ull; VERIFY (b == 950); 197} 198 199void 200compound_assignment_multiply_128 (void) 201{ 202 decimal128 a (1000), b; 203 204 b = a; b *= d32; VERIFY (b == 5000); 205 b = a; b *= d64; VERIFY (b == -10000); 206 b = a; b *= d128; VERIFY (b == 25000); 207 b = a; b *= si; VERIFY (b == -2000); 208 b = a; b *= ui; VERIFY (b == 5000); 209 b = a; b *= sl; VERIFY (b == -10000); 210 b = a; b *= ul; VERIFY (b == 20000); 211 b = a; b *= sll; VERIFY (b == -25000); 212 b = a; b *= ull; VERIFY (b == 50000); 213} 214 215void 216compound_assignment_divide_128 (void) 217{ 218 decimal128 a (1000), b; 219 220 b = a; b /= d32; VERIFY (b == 200); 221 b = a; b /= d64; VERIFY (b == -100); 222 b = a; b /= d128; VERIFY (b == 40); 223 b = a; b /= si; VERIFY (b == -500); 224 b = a; b /= ui; VERIFY (b == 200); 225 b = a; b /= sl; VERIFY (b == -100); 226 b = a; b /= ul; VERIFY (b == 50); 227 b = a; b /= sll; VERIFY (b == -40); 228 b = a; b /= ull; VERIFY (b == 20); 229} 230 231int 232main () 233{ 234 compound_assignment_add_32 (); 235 compound_assignment_subtract_32 (); 236 compound_assignment_multiply_32 (); 237 compound_assignment_divide_32 (); 238 239 compound_assignment_add_64 (); 240 compound_assignment_subtract_64 (); 241 compound_assignment_multiply_64 (); 242 compound_assignment_divide_64 (); 243 244 compound_assignment_add_128 (); 245 compound_assignment_subtract_128 (); 246 compound_assignment_multiply_128 (); 247 compound_assignment_divide_128 (); 248} 249