107 {{
Number{1'000'000'000'000'000, -15},
108 Number{6'555'555'555'555'555, -29},
109 Number{1'000'000'000'000'066, -15}},
110 {
Number{-1'000'000'000'000'000, -15},
111 Number{-6'555'555'555'555'555, -29},
112 Number{-1'000'000'000'000'066, -15}},
113 {
Number{-1'000'000'000'000'000, -15},
114 Number{6'555'555'555'555'555, -29},
115 Number{-9'999'999'999'999'344, -16}},
116 {
Number{-6'555'555'555'555'555, -29},
117 Number{1'000'000'000'000'000, -15},
118 Number{9'999'999'999'999'344, -16}},
121 {
Number{5'555'555'555'555'555, -32768},
122 Number{-5'555'555'555'555'554, -32768},
124 {
Number{-9'999'999'999'999'999, -31},
125 Number{1'000'000'000'000'000, -15},
126 Number{9'999'999'999'999'990, -16}}});
132 {
Number{1'000'000'000'000'000, -15},
133 Number{6'555'555'555'555'555, -29},
134 Number{1'000'000'000'000'065'556, -18}},
135 {
Number{-1'000'000'000'000'000, -15},
136 Number{-6'555'555'555'555'555, -29},
137 Number{-1'000'000'000'000'065'556, -18}},
138 {
Number{-1'000'000'000'000'000, -15},
139 Number{6'555'555'555'555'555, -29},
141 {
Number{-6'555'555'555'555'555, -29},
142 Number{1'000'000'000'000'000, -15},
146 {
Number{5'555'555'555'555'555'000, -32768},
147 Number{-5'555'555'555'555'554'000, -32768},
149 {
Number{-9'999'999'999'999'999, -31},
150 Number{1'000'000'000'000'000, -15},
151 Number{9'999'999'999'999'990, -16}},
153 {
Number{1'000'000'000'000'000'000, -18},
154 Number{6'555'555'555'555'555'555, -35},
155 Number{1'000'000'000'000'000'066, -18}},
156 {
Number{-1'000'000'000'000'000'000, -18},
157 Number{-6'555'555'555'555'555'555, -35},
158 Number{-1'000'000'000'000'000'066, -18}},
159 {
Number{-1'000'000'000'000'000'000, -18},
160 Number{6'555'555'555'555'555'555, -35},
162 {
Number{-6'555'555'555'555'555'555, -35},
163 Number{1'000'000'000'000'000'000, -18},
166 {
Number{5'555'555'555'555'555'555, -32768},
167 Number{-5'555'555'555'555'555'554, -32768},
170 Number{1'000'000'000'000'000'000, -18},
193 auto test = [
this](
auto const& c) {
194 for (
auto const& [x, y, z] : c)
196 auto const result = x + y;
198 ss << x <<
" + " << y <<
" = " << result <<
". Expected: " << z;
199 BEAST_EXPECTS(result == z, ss.
str());
221 BEAST_EXPECT(caught);
233 {{
Number{1'000'000'000'000'000, -15},
234 Number{6'555'555'555'555'555, -29},
235 Number{9'999'999'999'999'344, -16}},
236 {
Number{6'555'555'555'555'555, -29},
237 Number{1'000'000'000'000'000, -15},
238 Number{-9'999'999'999'999'344, -16}},
240 {
Number{1'000'000'000'000'000, -15},
241 Number{1'000'000'000'000'001, -15},
242 Number{-1'000'000'000'000'000, -30}},
243 {
Number{1'000'000'000'000'001, -15},
244 Number{1'000'000'000'000'000, -15},
245 Number{1'000'000'000'000'000, -30}}});
251 {
Number{1'000'000'000'000'000, -15},
252 Number{6'555'555'555'555'555, -29},
254 {
Number{6'555'555'555'555'555, -29},
255 Number{1'000'000'000'000'000, -15},
258 {
Number{1'000'000'000'000'000, -15},
259 Number{1'000'000'000'000'001, -15},
260 Number{-1'000'000'000'000'000, -30}},
261 {
Number{1'000'000'000'000'001, -15},
262 Number{1'000'000'000'000'000, -15},
263 Number{1'000'000'000'000'000, -30}},
265 {
Number{1'000'000'000'000'000'000, -18},
266 Number{6'555'555'555'555'555'555, -32},
268 {
Number{6'555'555'555'555'555'555, -32},
269 Number{1'000'000'000'000'000'000, -18},
271 {
Number{1'000'000'000'000'000'000, -18},
272 Number{1'000'000'000'000'000'000, -18},
274 {
Number{1'000'000'000'000'000'000, -18},
275 Number{1'000'000'000'000'000'001, -18},
276 Number{-1'000'000'000'000'000'000, -36}},
277 {
Number{1'000'000'000'000'000'001, -18},
278 Number{1'000'000'000'000'000'000, -18},
279 Number{1'000'000'000'000'000'000, -36}},
289 auto test = [
this](
auto const& c) {
290 for (
auto const& [x, y, z] : c)
292 auto const result = x - y;
294 ss << x <<
" - " << y <<
" = " << result <<
". Expected: " << z;
295 BEAST_EXPECTS(result == z, ss.
str());
315 auto test = [
this](
auto const& c) {
316 for (
auto const& [x, y, z] : c)
318 auto const result = x * y;
320 ss << x <<
" * " << y <<
" = " << result <<
". Expected: " << z;
321 BEAST_EXPECTS(result == z, ss.
str());
324 auto tests = [&](
auto const& cSmall,
auto const& cLarge) {
340 {
Number{1414213562373095, -15},
341 Number{1414213562373095, -15},
342 Number{2000000000000000, -15}},
343 {
Number{-1414213562373095, -15},
344 Number{1414213562373095, -15},
345 Number{-2000000000000000, -15}},
346 {
Number{-1414213562373095, -15},
347 Number{-1414213562373095, -15},
348 Number{2000000000000000, -15}},
349 {
Number{3214285714285706, -15},
350 Number{3111111111111119, -15},
351 Number{1000000000000000, -14}},
354 {
Number{9'999'999'999'999'999, 0},
355 Number{9'999'999'999'999'999, 0},
356 Number{9'999'999'999'999'998, 16}},
363 {
Number{1414213562373095, -15},
364 Number{1414213562373095, -15},
365 Number{1999999999999999862, -18}},
366 {
Number{-1414213562373095, -15},
367 Number{1414213562373095, -15},
368 Number{-1999999999999999862, -18}},
369 {
Number{-1414213562373095, -15},
370 Number{-1414213562373095, -15},
371 Number{1999999999999999862, -18}},
372 {
Number{3214285714285706, -15},
373 Number{3111111111111119, -15},
375 {
Number{1000000000000000000, -32768},
376 Number{1000000000000000000, -32768},
381 {
Number{1414213562373095049, -18},
382 Number{1414213562373095049, -18},
383 Number{2000000000000000001, -18}},
384 {
Number{-1414213562373095048, -18},
385 Number{1414213562373095048, -18},
386 Number{-1999999999999999998, -18}},
387 {
Number{-1414213562373095048, -18},
388 Number{-1414213562373095049, -18},
389 Number{1999999999999999999, -18}},
398 Number{85'070'591'730'234'615'85, 19}},
400 tests(cSmall, cLarge);
407 {
Number{1414213562373095, -15},
408 Number{1414213562373095, -15},
409 Number{1999999999999999, -15}},
410 {
Number{-1414213562373095, -15},
411 Number{1414213562373095, -15},
412 Number{-1999999999999999, -15}},
413 {
Number{-1414213562373095, -15},
414 Number{-1414213562373095, -15},
415 Number{1999999999999999, -15}},
416 {
Number{3214285714285706, -15},
417 Number{3111111111111119, -15},
418 Number{9999999999999999, -15}},
426 {
Number{1414213562373095, -15},
427 Number{1414213562373095, -15},
428 Number{1999999999999999861, -18}},
429 {
Number{-1414213562373095, -15},
430 Number{1414213562373095, -15},
431 Number{-1999999999999999861, -18}},
432 {
Number{-1414213562373095, -15},
433 Number{-1414213562373095, -15},
434 Number{1999999999999999861, -18}},
435 {
Number{3214285714285706, -15},
436 Number{3111111111111119, -15},
438 {
Number{1000000000000000000, -32768},
439 Number{1000000000000000000, -32768},
444 {
Number{1414213562373095049, -18},
445 Number{1414213562373095049, -18},
447 {
Number{-1414213562373095048, -18},
448 Number{1414213562373095048, -18},
449 Number{-1999999999999999997, -18}},
450 {
Number{-1414213562373095048, -18},
451 Number{-1414213562373095049, -18},
452 Number{1999999999999999999, -18}},
453 {
Number{3214285714285714278, -18},
454 Number{3111111111111111119, -18},
465 Number{85'070'591'730'234'615'84, 19}},
467 tests(cSmall, cLarge);
474 {
Number{1414213562373095, -15},
475 Number{1414213562373095, -15},
476 Number{1999999999999999, -15}},
477 {
Number{-1414213562373095, -15},
478 Number{1414213562373095, -15},
479 Number{-2000000000000000, -15}},
480 {
Number{-1414213562373095, -15},
481 Number{-1414213562373095, -15},
482 Number{1999999999999999, -15}},
483 {
Number{3214285714285706, -15},
484 Number{3111111111111119, -15},
485 Number{9999999999999999, -15}},
493 {
Number{1414213562373095, -15},
494 Number{1414213562373095, -15},
495 Number{1999999999999999861, -18}},
496 {
Number{-1414213562373095, -15},
497 Number{1414213562373095, -15},
498 Number{-1999999999999999862, -18}},
499 {
Number{-1414213562373095, -15},
500 Number{-1414213562373095, -15},
501 Number{1999999999999999861, -18}},
502 {
Number{3214285714285706, -15},
503 Number{3111111111111119, -15},
505 {
Number{1000000000000000000, -32768},
506 Number{1000000000000000000, -32768},
511 {
Number{1414213562373095049, -18},
512 Number{1414213562373095049, -18},
514 {
Number{-1414213562373095048, -18},
515 Number{1414213562373095048, -18},
516 Number{-1999999999999999998, -18}},
517 {
Number{-1414213562373095048, -18},
518 Number{-1414213562373095049, -18},
519 Number{1999999999999999999, -18}},
520 {
Number{3214285714285714278, -18},
521 Number{3111111111111111119, -18},
532 Number{85'070'591'730'234'615'84, 19}},
534 tests(cSmall, cLarge);
541 {
Number{1414213562373095, -15},
542 Number{1414213562373095, -15},
543 Number{2000000000000000, -15}},
544 {
Number{-1414213562373095, -15},
545 Number{1414213562373095, -15},
546 Number{-1999999999999999, -15}},
547 {
Number{-1414213562373095, -15},
548 Number{-1414213562373095, -15},
549 Number{2000000000000000, -15}},
550 {
Number{3214285714285706, -15},
551 Number{3111111111111119, -15},
552 Number{1000000000000000, -14}},
560 {
Number{1414213562373095, -15},
561 Number{1414213562373095, -15},
562 Number{1999999999999999862, -18}},
563 {
Number{-1414213562373095, -15},
564 Number{1414213562373095, -15},
565 Number{-1999999999999999861, -18}},
566 {
Number{-1414213562373095, -15},
567 Number{-1414213562373095, -15},
568 Number{1999999999999999862, -18}},
569 {
Number{3214285714285706, -15},
570 Number{3111111111111119, -15},
571 Number{999999999999999958, -17}},
572 {
Number{1000000000000000000, -32768},
573 Number{1000000000000000000, -32768},
578 {
Number{1414213562373095049, -18},
579 Number{1414213562373095049, -18},
580 Number{2000000000000000001, -18}},
581 {
Number{-1414213562373095048, -18},
582 Number{1414213562373095048, -18},
583 Number{-1999999999999999997, -18}},
584 {
Number{-1414213562373095048, -18},
585 Number{-1414213562373095049, -18},
587 {
Number{3214285714285714278, -18},
588 Number{3111111111111111119, -18},
589 Number{1000000000000000001, -17}},
599 Number{85'070'591'730'234'615'85, 19}},
601 tests(cSmall, cLarge);
615 BEAST_EXPECT(caught);
626 auto test = [
this](
auto const& c) {
627 for (
auto const& [x, y, z] : c)
629 auto const result = x / y;
631 ss << x <<
" / " << y <<
" = " << result <<
". Expected: " << z;
632 BEAST_EXPECTS(result == z, ss.
str());
636 auto tests = [&](
auto const& cSmall,
auto const& cLarge) {
654 {
Number{9'999'999'999'999'999},
655 Number{1'000'000'000'000'000},
656 Number{9'999'999'999'999'999, -15}},
669 {
Number{9'999'999'999'999'999},
670 Number{1'000'000'000'000'000},
671 Number{9'999'999'999'999'999, -15}},
679 Number{1'000'000'000'000'000'000},
681 tests(cSmall, cLarge);
692 {
Number{9'999'999'999'999'999},
693 Number{1'000'000'000'000'000},
694 Number{9'999'999'999'999'999, -15}},
707 {
Number{9'999'999'999'999'999},
708 Number{1'000'000'000'000'000},
709 Number{9'999'999'999'999'999, -15}},
717 Number{1'000'000'000'000'000'000},
719 tests(cSmall, cLarge);
730 {
Number{9'999'999'999'999'999},
731 Number{1'000'000'000'000'000},
732 Number{9'999'999'999'999'999, -15}},
745 {
Number{9'999'999'999'999'999},
746 Number{1'000'000'000'000'000},
747 Number{9'999'999'999'999'999, -15}},
755 Number{1'000'000'000'000'000'000},
757 tests(cSmall, cLarge);
768 {
Number{9'999'999'999'999'999},
769 Number{1'000'000'000'000'000},
770 Number{9'999'999'999'999'999, -15}},
783 {
Number{9'999'999'999'999'999},
784 Number{1'000'000'000'000'000},
785 Number{9'999'999'999'999'999, -15}},
793 Number{1'000'000'000'000'000'000},
795 tests(cSmall, cLarge);
807 BEAST_EXPECT(caught);
1035 {
Number{9'999'999'999'999'999, 0}, 9'999'999'999'999'999},
1036 {
Number{9'999'999'999'999'999, 1}, 99'999'999'999'999'990},
1037 {
Number{9'999'999'999'999'999, 2}, 999'999'999'999'999'900},
1038 {
Number{-9'999'999'999'999'999, 2}, -999'999'999'999'999'900},
1053 for (
auto const& [x, y] : c)
1056 BEAST_EXPECT(j == y);
1073 {
Number{9'999'999'999'999'999, 0}, 9'999'999'999'999'999},
1074 {
Number{9'999'999'999'999'999, 1}, 99'999'999'999'999'990},
1075 {
Number{9'999'999'999'999'999, 2}, 999'999'999'999'999'900},
1076 {
Number{-9'999'999'999'999'999, 2}, -999'999'999'999'999'900},
1091 for (
auto const& [x, y] : c)
1094 BEAST_EXPECT(j == y);
1111 {
Number{9'999'999'999'999'999, 0}, 9'999'999'999'999'999},
1112 {
Number{9'999'999'999'999'999, 1}, 99'999'999'999'999'990},
1113 {
Number{9'999'999'999'999'999, 2}, 999'999'999'999'999'900},
1114 {
Number{-9'999'999'999'999'999, 2}, -999'999'999'999'999'900},
1129 for (
auto const& [x, y] : c)
1132 BEAST_EXPECT(j == y);
1149 {
Number{9'999'999'999'999'999, 0}, 9'999'999'999'999'999},
1150 {
Number{9'999'999'999'999'999, 1}, 99'999'999'999'999'990},
1151 {
Number{9'999'999'999'999'999, 2}, 999'999'999'999'999'900},
1152 {
Number{-9'999'999'999'999'999, 2}, -999'999'999'999'999'900},
1167 for (
auto const& [x, y] : c)
1170 BEAST_EXPECT(j == y);
1173 bool caught =
false;
1182 BEAST_EXPECT(caught);