103 {{
Number{1'000'000'000'000'000, -15},
104 Number{6'555'555'555'555'555, -29},
105 Number{1'000'000'000'000'066, -15}},
106 {
Number{-1'000'000'000'000'000, -15},
107 Number{-6'555'555'555'555'555, -29},
108 Number{-1'000'000'000'000'066, -15}},
109 {
Number{-1'000'000'000'000'000, -15},
110 Number{6'555'555'555'555'555, -29},
111 Number{-9'999'999'999'999'344, -16}},
112 {
Number{-6'555'555'555'555'555, -29},
113 Number{1'000'000'000'000'000, -15},
114 Number{9'999'999'999'999'344, -16}},
117 {
Number{5'555'555'555'555'555, -32768},
Number{-5'555'555'555'555'554, -32768},
Number{0}},
118 {
Number{-9'999'999'999'999'999, -31},
119 Number{1'000'000'000'000'000, -15},
120 Number{9'999'999'999'999'990, -16}}});
126 {
Number{1'000'000'000'000'000, -15},
127 Number{6'555'555'555'555'555, -29},
128 Number{1'000'000'000'000'065'556, -18}},
129 {
Number{-1'000'000'000'000'000, -15},
130 Number{-6'555'555'555'555'555, -29},
131 Number{-1'000'000'000'000'065'556, -18}},
132 {
Number{-1'000'000'000'000'000, -15},
133 Number{6'555'555'555'555'555, -29},
135 {
Number{-6'555'555'555'555'555, -29},
136 Number{1'000'000'000'000'000, -15},
140 {
Number{5'555'555'555'555'555'000, -32768},
Number{-5'555'555'555'555'554'000, -32768},
Number{0}},
141 {
Number{-9'999'999'999'999'999, -31},
142 Number{1'000'000'000'000'000, -15},
143 Number{9'999'999'999'999'990, -16}},
145 {
Number{1'000'000'000'000'000'000, -18},
146 Number{6'555'555'555'555'555'555, -35},
147 Number{1'000'000'000'000'000'066, -18}},
148 {
Number{-1'000'000'000'000'000'000, -18},
149 Number{-6'555'555'555'555'555'555, -35},
150 Number{-1'000'000'000'000'000'066, -18}},
151 {
Number{-1'000'000'000'000'000'000, -18},
152 Number{6'555'555'555'555'555'555, -35},
154 {
Number{-6'555'555'555'555'555'555, -35},
155 Number{1'000'000'000'000'000'000, -18},
158 {
Number{5'555'555'555'555'555'555, -32768},
Number{-5'555'555'555'555'555'554, -32768},
Number{0}},
160 Number{1'000'000'000'000'000'000, -18},
183 auto test = [
this](
auto const& c) {
184 for (
auto const& [x, y, z] : c)
186 auto const result = x + y;
188 ss << x <<
" + " << y <<
" = " << result <<
". Expected: " << z;
189 BEAST_EXPECTS(result == z, ss.
str());
207 BEAST_EXPECT(caught);
219 {{
Number{1'000'000'000'000'000, -15},
220 Number{6'555'555'555'555'555, -29},
221 Number{9'999'999'999'999'344, -16}},
222 {
Number{6'555'555'555'555'555, -29},
223 Number{1'000'000'000'000'000, -15},
224 Number{-9'999'999'999'999'344, -16}},
226 {
Number{1'000'000'000'000'000, -15},
227 Number{1'000'000'000'000'001, -15},
228 Number{-1'000'000'000'000'000, -30}},
229 {
Number{1'000'000'000'000'001, -15},
230 Number{1'000'000'000'000'000, -15},
231 Number{1'000'000'000'000'000, -30}}});
237 {
Number{1'000'000'000'000'000, -15},
238 Number{6'555'555'555'555'555, -29},
240 {
Number{6'555'555'555'555'555, -29},
241 Number{1'000'000'000'000'000, -15},
244 {
Number{1'000'000'000'000'000, -15},
245 Number{1'000'000'000'000'001, -15},
246 Number{-1'000'000'000'000'000, -30}},
247 {
Number{1'000'000'000'000'001, -15},
248 Number{1'000'000'000'000'000, -15},
249 Number{1'000'000'000'000'000, -30}},
251 {
Number{1'000'000'000'000'000'000, -18},
252 Number{6'555'555'555'555'555'555, -32},
254 {
Number{6'555'555'555'555'555'555, -32},
255 Number{1'000'000'000'000'000'000, -18},
257 {
Number{1'000'000'000'000'000'000, -18},
Number{1'000'000'000'000'000'000, -18},
Number{0}},
258 {
Number{1'000'000'000'000'000'000, -18},
259 Number{1'000'000'000'000'000'001, -18},
260 Number{-1'000'000'000'000'000'000, -36}},
261 {
Number{1'000'000'000'000'000'001, -18},
262 Number{1'000'000'000'000'000'000, -18},
263 Number{1'000'000'000'000'000'000, -36}},
271 auto test = [
this](
auto const& c) {
272 for (
auto const& [x, y, z] : c)
274 auto const result = x - y;
276 ss << x <<
" - " << y <<
" = " << result <<
". Expected: " << z;
277 BEAST_EXPECTS(result == z, ss.
str());
293 auto test = [
this](
auto const& c) {
294 for (
auto const& [x, y, z] : c)
296 auto const result = x * y;
298 ss << x <<
" * " << y <<
" = " << result <<
". Expected: " << z;
299 BEAST_EXPECTS(result == z, ss.
str());
302 auto tests = [&](
auto const& cSmall,
auto const& cLarge) {
314 {
Number{1414213562373095, -15},
Number{1414213562373095, -15},
Number{2000000000000000, -15}},
315 {
Number{-1414213562373095, -15},
Number{1414213562373095, -15},
Number{-2000000000000000, -15}},
316 {
Number{-1414213562373095, -15},
Number{-1414213562373095, -15},
Number{2000000000000000, -15}},
317 {
Number{3214285714285706, -15},
Number{3111111111111119, -15},
Number{1000000000000000, -14}},
320 {
Number{9'999'999'999'999'999, 0},
Number{9'999'999'999'999'999, 0},
Number{9'999'999'999'999'998, 16}},
327 {
Number{1414213562373095, -15},
Number{1414213562373095, -15},
Number{1999999999999999862, -18}},
328 {
Number{-1414213562373095, -15},
Number{1414213562373095, -15},
Number{-1999999999999999862, -18}},
329 {
Number{-1414213562373095, -15},
Number{-1414213562373095, -15},
Number{1999999999999999862, -18}},
330 {
Number{3214285714285706, -15},
331 Number{3111111111111119, -15},
333 {
Number{1000000000000000000, -32768},
Number{1000000000000000000, -32768},
Number{0}},
337 {
Number{1414213562373095049, -18},
Number{1414213562373095049, -18},
Number{2000000000000000001, -18}},
338 {
Number{-1414213562373095048, -18},
339 Number{1414213562373095048, -18},
340 Number{-1999999999999999998, -18}},
341 {
Number{-1414213562373095048, -18},
342 Number{-1414213562373095049, -18},
343 Number{1999999999999999999, -18}},
352 tests(cSmall, cLarge);
359 {
Number{1414213562373095, -15},
Number{1414213562373095, -15},
Number{1999999999999999, -15}},
360 {
Number{-1414213562373095, -15},
Number{1414213562373095, -15},
Number{-1999999999999999, -15}},
361 {
Number{-1414213562373095, -15},
Number{-1414213562373095, -15},
Number{1999999999999999, -15}},
362 {
Number{3214285714285706, -15},
Number{3111111111111119, -15},
Number{9999999999999999, -15}},
370 {
Number{1414213562373095, -15},
Number{1414213562373095, -15},
Number{1999999999999999861, -18}},
371 {
Number{-1414213562373095, -15},
Number{1414213562373095, -15},
Number{-1999999999999999861, -18}},
372 {
Number{-1414213562373095, -15},
Number{-1414213562373095, -15},
Number{1999999999999999861, -18}},
373 {
Number{3214285714285706, -15},
374 Number{3111111111111119, -15},
376 {
Number{1000000000000000000, -32768},
Number{1000000000000000000, -32768},
Number{0}},
381 {
Number{-1414213562373095048, -18},
382 Number{1414213562373095048, -18},
383 Number{-1999999999999999997, -18}},
384 {
Number{-1414213562373095048, -18},
385 Number{-1414213562373095049, -18},
386 Number{1999999999999999999, -18}},
397 tests(cSmall, cLarge);
404 {
Number{1414213562373095, -15},
Number{1414213562373095, -15},
Number{1999999999999999, -15}},
405 {
Number{-1414213562373095, -15},
Number{1414213562373095, -15},
Number{-2000000000000000, -15}},
406 {
Number{-1414213562373095, -15},
Number{-1414213562373095, -15},
Number{1999999999999999, -15}},
407 {
Number{3214285714285706, -15},
Number{3111111111111119, -15},
Number{9999999999999999, -15}},
415 {
Number{1414213562373095, -15},
Number{1414213562373095, -15},
Number{1999999999999999861, -18}},
416 {
Number{-1414213562373095, -15},
Number{1414213562373095, -15},
Number{-1999999999999999862, -18}},
417 {
Number{-1414213562373095, -15},
Number{-1414213562373095, -15},
Number{1999999999999999861, -18}},
418 {
Number{3214285714285706, -15},
419 Number{3111111111111119, -15},
421 {
Number{1000000000000000000, -32768},
Number{1000000000000000000, -32768},
Number{0}},
426 {
Number{-1414213562373095048, -18},
427 Number{1414213562373095048, -18},
428 Number{-1999999999999999998, -18}},
429 {
Number{-1414213562373095048, -18},
430 Number{-1414213562373095049, -18},
431 Number{1999999999999999999, -18}},
442 tests(cSmall, cLarge);
449 {
Number{1414213562373095, -15},
Number{1414213562373095, -15},
Number{2000000000000000, -15}},
450 {
Number{-1414213562373095, -15},
Number{1414213562373095, -15},
Number{-1999999999999999, -15}},
451 {
Number{-1414213562373095, -15},
Number{-1414213562373095, -15},
Number{2000000000000000, -15}},
452 {
Number{3214285714285706, -15},
Number{3111111111111119, -15},
Number{1000000000000000, -14}},
460 {
Number{1414213562373095, -15},
Number{1414213562373095, -15},
Number{1999999999999999862, -18}},
461 {
Number{-1414213562373095, -15},
Number{1414213562373095, -15},
Number{-1999999999999999861, -18}},
462 {
Number{-1414213562373095, -15},
Number{-1414213562373095, -15},
Number{1999999999999999862, -18}},
463 {
Number{3214285714285706, -15},
Number{3111111111111119, -15},
Number{999999999999999958, -17}},
464 {
Number{1000000000000000000, -32768},
Number{1000000000000000000, -32768},
Number{0}},
468 {
Number{1414213562373095049, -18},
469 Number{1414213562373095049, -18},
470 Number{2000000000000000001, -18}},
471 {
Number{-1414213562373095048, -18},
472 Number{1414213562373095048, -18},
473 Number{-1999999999999999997, -18}},
475 {
Number{3214285714285714278, -18},
476 Number{3111111111111111119, -18},
477 Number{1000000000000000001, -17}},
487 tests(cSmall, cLarge);
501 BEAST_EXPECT(caught);
512 auto test = [
this](
auto const& c) {
513 for (
auto const& [x, y, z] : c)
515 auto const result = x / y;
517 ss << x <<
" / " << y <<
" = " << result <<
". Expected: " << z;
518 BEAST_EXPECTS(result == z, ss.
str());
522 auto tests = [&](
auto const& cSmall,
auto const& cLarge) {
536 {
Number{9'999'999'999'999'999},
Number{1'000'000'000'000'000},
Number{9'999'999'999'999'999, -15}},
549 {
Number{9'999'999'999'999'999},
Number{1'000'000'000'000'000},
Number{9'999'999'999'999'999, -15}},
557 Number{1'000'000'000'000'000'000},
559 tests(cSmall, cLarge);
570 {
Number{9'999'999'999'999'999},
Number{1'000'000'000'000'000},
Number{9'999'999'999'999'999, -15}},
583 {
Number{9'999'999'999'999'999},
Number{1'000'000'000'000'000},
Number{9'999'999'999'999'999, -15}},
591 Number{1'000'000'000'000'000'000},
593 tests(cSmall, cLarge);
604 {
Number{9'999'999'999'999'999},
Number{1'000'000'000'000'000},
Number{9'999'999'999'999'999, -15}},
617 {
Number{9'999'999'999'999'999},
Number{1'000'000'000'000'000},
Number{9'999'999'999'999'999, -15}},
625 Number{1'000'000'000'000'000'000},
627 tests(cSmall, cLarge);
638 {
Number{9'999'999'999'999'999},
Number{1'000'000'000'000'000},
Number{9'999'999'999'999'999, -15}},
651 {
Number{9'999'999'999'999'999},
Number{1'000'000'000'000'000},
Number{9'999'999'999'999'999, -15}},
659 Number{1'000'000'000'000'000'000},
661 tests(cSmall, cLarge);
673 BEAST_EXPECT(caught);
897 {
Number{9'999'999'999'999'999, 0}, 9'999'999'999'999'999},
898 {
Number{9'999'999'999'999'999, 1}, 99'999'999'999'999'990},
899 {
Number{9'999'999'999'999'999, 2}, 999'999'999'999'999'900},
900 {
Number{-9'999'999'999'999'999, 2}, -999'999'999'999'999'900},
915 for (
auto const& [x, y] : c)
918 BEAST_EXPECT(j == y);
935 {
Number{9'999'999'999'999'999, 0}, 9'999'999'999'999'999},
936 {
Number{9'999'999'999'999'999, 1}, 99'999'999'999'999'990},
937 {
Number{9'999'999'999'999'999, 2}, 999'999'999'999'999'900},
938 {
Number{-9'999'999'999'999'999, 2}, -999'999'999'999'999'900},
953 for (
auto const& [x, y] : c)
956 BEAST_EXPECT(j == y);
973 {
Number{9'999'999'999'999'999, 0}, 9'999'999'999'999'999},
974 {
Number{9'999'999'999'999'999, 1}, 99'999'999'999'999'990},
975 {
Number{9'999'999'999'999'999, 2}, 999'999'999'999'999'900},
976 {
Number{-9'999'999'999'999'999, 2}, -999'999'999'999'999'900},
991 for (
auto const& [x, y] : c)
994 BEAST_EXPECT(j == y);
1011 {
Number{9'999'999'999'999'999, 0}, 9'999'999'999'999'999},
1012 {
Number{9'999'999'999'999'999, 1}, 99'999'999'999'999'990},
1013 {
Number{9'999'999'999'999'999, 2}, 999'999'999'999'999'900},
1014 {
Number{-9'999'999'999'999'999, 2}, -999'999'999'999'999'900},
1029 for (
auto const& [x, y] : c)
1032 BEAST_EXPECT(j == y);
1035 bool caught =
false;
1044 BEAST_EXPECT(caught);