112 {{
Number{1'000'000'000'000'000, -15},
113 Number{6'555'555'555'555'555, -29},
114 Number{1'000'000'000'000'066, -15}},
115 {
Number{-1'000'000'000'000'000, -15},
116 Number{-6'555'555'555'555'555, -29},
117 Number{-1'000'000'000'000'066, -15}},
118 {
Number{-1'000'000'000'000'000, -15},
119 Number{6'555'555'555'555'555, -29},
120 Number{-9'999'999'999'999'344, -16}},
121 {
Number{-6'555'555'555'555'555, -29},
122 Number{1'000'000'000'000'000, -15},
123 Number{9'999'999'999'999'344, -16}},
126 {
Number{5'555'555'555'555'555, -32768},
127 Number{-5'555'555'555'555'554, -32768},
129 {
Number{-9'999'999'999'999'999, -31},
130 Number{1'000'000'000'000'000, -15},
131 Number{9'999'999'999'999'990, -16}}});
137 {
Number{1'000'000'000'000'000, -15},
138 Number{6'555'555'555'555'555, -29},
139 Number{1'000'000'000'000'065'556, -18}},
140 {
Number{-1'000'000'000'000'000, -15},
141 Number{-6'555'555'555'555'555, -29},
142 Number{-1'000'000'000'000'065'556, -18}},
143 {
Number{-1'000'000'000'000'000, -15},
144 Number{6'555'555'555'555'555, -29},
147 9'999'999'999'999'344'444ULL,
150 {
Number{-6'555'555'555'555'555, -29},
151 Number{1'000'000'000'000'000, -15},
154 9'999'999'999'999'344'444ULL,
159 {
Number{5'555'555'555'555'555'000, -32768},
160 Number{-5'555'555'555'555'554'000, -32768},
162 {
Number{-9'999'999'999'999'999, -31},
163 Number{1'000'000'000'000'000, -15},
164 Number{9'999'999'999'999'990, -16}},
166 {
Number{1'000'000'000'000'000'000, -18},
167 Number{6'555'555'555'555'555'555, -35},
168 Number{1'000'000'000'000'000'066, -18}},
169 {
Number{-1'000'000'000'000'000'000, -18},
170 Number{-6'555'555'555'555'555'555, -35},
171 Number{-1'000'000'000'000'000'066, -18}},
172 {
Number{-1'000'000'000'000'000'000, -18},
173 Number{6'555'555'555'555'555'555, -35},
176 9'999'999'999'999'999'344ULL,
179 {
Number{-6'555'555'555'555'555'555, -35},
180 Number{1'000'000'000'000'000'000, -18},
183 9'999'999'999'999'999'344ULL,
187 {
Number{5'555'555'555'555'555'555, -32768},
188 Number{-5'555'555'555'555'555'554, -32768},
192 9'999'999'999'999'999'999ULL,
195 Number{1'000'000'000'000'000'000, -18},
198 9'999'999'999'999'999'990ULL,
213 9'999'999'999'999'999'999ULL,
218 9'999'999'999'999'999'999ULL,
231 9'999'999'999'999'999'990ULL,
236 9'999'999'999'999'999'990ULL,
241 1'999'999'999'999'999'998ULL,
246 auto test = [
this](
auto const& c) {
247 for (
auto const& [x, y, z] : c)
249 auto const result = x + y;
251 ss << x <<
" + " << y <<
" = " << result <<
". Expected: " << z;
252 BEAST_EXPECTS(result == z, ss.
str());
276 BEAST_EXPECT(caught);
288 {{
Number{1'000'000'000'000'000, -15},
289 Number{6'555'555'555'555'555, -29},
290 Number{9'999'999'999'999'344, -16}},
291 {
Number{6'555'555'555'555'555, -29},
292 Number{1'000'000'000'000'000, -15},
293 Number{-9'999'999'999'999'344, -16}},
294 {
Number{1'000'000'000'000'000, -15},
295 Number{1'000'000'000'000'000, -15},
297 {
Number{1'000'000'000'000'000, -15},
298 Number{1'000'000'000'000'001, -15},
299 Number{-1'000'000'000'000'000, -30}},
300 {
Number{1'000'000'000'000'001, -15},
301 Number{1'000'000'000'000'000, -15},
302 Number{1'000'000'000'000'000, -30}}});
308 {
Number{1'000'000'000'000'000, -15},
309 Number{6'555'555'555'555'555, -29},
312 9'999'999'999'999'344'444ULL,
315 {
Number{6'555'555'555'555'555, -29},
316 Number{1'000'000'000'000'000, -15},
319 9'999'999'999'999'344'444ULL,
322 {
Number{1'000'000'000'000'000, -15},
323 Number{1'000'000'000'000'000, -15},
325 {
Number{1'000'000'000'000'000, -15},
326 Number{1'000'000'000'000'001, -15},
327 Number{-1'000'000'000'000'000, -30}},
328 {
Number{1'000'000'000'000'001, -15},
329 Number{1'000'000'000'000'000, -15},
330 Number{1'000'000'000'000'000, -30}},
332 {
Number{1'000'000'000'000'000'000, -18},
333 Number{6'555'555'555'555'555'555, -32},
336 9'999'999'999'999'344'444ULL,
339 {
Number{6'555'555'555'555'555'555, -32},
340 Number{1'000'000'000'000'000'000, -18},
343 9'999'999'999'999'344'444ULL,
346 {
Number{1'000'000'000'000'000'000, -18},
347 Number{1'000'000'000'000'000'000, -18},
349 {
Number{1'000'000'000'000'000'000, -18},
350 Number{1'000'000'000'000'000'001, -18},
351 Number{-1'000'000'000'000'000'000, -36}},
352 {
Number{1'000'000'000'000'000'001, -18},
353 Number{1'000'000'000'000'000'000, -18},
354 Number{1'000'000'000'000'000'000, -36}},
366 auto test = [
this](
auto const& c) {
367 for (
auto const& [x, y, z] : c)
369 auto const result = x - y;
371 ss << x <<
" - " << y <<
" = " << result <<
". Expected: " << z;
372 BEAST_EXPECTS(result == z, ss.
str());
388 auto test = [
this](
auto const& c) {
389 for (
auto const& [x, y, z] : c)
391 auto const result = x * y;
393 ss << x <<
" * " << y <<
" = " << result <<
". Expected: " << z;
394 BEAST_EXPECTS(result == z, ss.
str());
397 auto tests = [&](
auto const& cSmall,
auto const& cLarge) {
409 {
Number{1414213562373095, -15},
410 Number{1414213562373095, -15},
411 Number{2000000000000000, -15}},
412 {
Number{-1414213562373095, -15},
413 Number{1414213562373095, -15},
414 Number{-2000000000000000, -15}},
415 {
Number{-1414213562373095, -15},
416 Number{-1414213562373095, -15},
417 Number{2000000000000000, -15}},
418 {
Number{3214285714285706, -15},
419 Number{3111111111111119, -15},
420 Number{1000000000000000, -14}},
421 {
Number{1000000000000000, -32768},
422 Number{1000000000000000, -32768},
425 {
Number{9'999'999'999'999'999, 0},
426 Number{9'999'999'999'999'999, 0},
427 Number{9'999'999'999'999'998, 16}},
434 {
Number{1414213562373095, -15},
435 Number{1414213562373095, -15},
436 Number{1999999999999999862, -18}},
437 {
Number{-1414213562373095, -15},
438 Number{1414213562373095, -15},
439 Number{-1999999999999999862, -18}},
440 {
Number{-1414213562373095, -15},
441 Number{-1414213562373095, -15},
442 Number{1999999999999999862, -18}},
443 {
Number{3214285714285706, -15},
444 Number{3111111111111119, -15},
447 9'999'999'999'999'999'579ULL,
450 {
Number{1000000000000000000, -32768},
451 Number{1000000000000000000, -32768},
456 {
Number{1414213562373095049, -18},
457 Number{1414213562373095049, -18},
458 Number{2000000000000000001, -18}},
459 {
Number{-1414213562373095048, -18},
460 Number{1414213562373095048, -18},
461 Number{-1999999999999999998, -18}},
462 {
Number{-1414213562373095048, -18},
463 Number{-1414213562373095049, -18},
464 Number{1999999999999999999, -18}},
465 {
Number{3214285714285714278, -18},
466 Number{3111111111111111119, -18},
475 Number{85'070'591'730'234'615'85, 19}},
477 tests(cSmall, cLarge);
485 {
Number{1414213562373095, -15},
486 Number{1414213562373095, -15},
487 Number{1999999999999999, -15}},
488 {
Number{-1414213562373095, -15},
489 Number{1414213562373095, -15},
490 Number{-1999999999999999, -15}},
491 {
Number{-1414213562373095, -15},
492 Number{-1414213562373095, -15},
493 Number{1999999999999999, -15}},
494 {
Number{3214285714285706, -15},
495 Number{3111111111111119, -15},
496 Number{9999999999999999, -15}},
497 {
Number{1000000000000000, -32768},
498 Number{1000000000000000, -32768},
506 {
Number{1414213562373095, -15},
507 Number{1414213562373095, -15},
508 Number{1999999999999999861, -18}},
509 {
Number{-1414213562373095, -15},
510 Number{1414213562373095, -15},
511 Number{-1999999999999999861, -18}},
512 {
Number{-1414213562373095, -15},
513 Number{-1414213562373095, -15},
514 Number{1999999999999999861, -18}},
515 {
Number{3214285714285706, -15},
516 Number{3111111111111119, -15},
519 9999999999999999579ULL,
522 {
Number{1000000000000000000, -32768},
523 Number{1000000000000000000, -32768},
528 {
Number{1414213562373095049, -18},
529 Number{1414213562373095049, -18},
531 {
Number{-1414213562373095048, -18},
532 Number{1414213562373095048, -18},
533 Number{-1999999999999999997, -18}},
534 {
Number{-1414213562373095048, -18},
535 Number{-1414213562373095049, -18},
536 Number{1999999999999999999, -18}},
537 {
Number{3214285714285714278, -18},
538 Number{3111111111111111119, -18},
553 Number{85'070'591'730'234'615'84, 19}},
555 tests(cSmall, cLarge);
563 {
Number{1414213562373095, -15},
564 Number{1414213562373095, -15},
565 Number{1999999999999999, -15}},
566 {
Number{-1414213562373095, -15},
567 Number{1414213562373095, -15},
568 Number{-2000000000000000, -15}},
569 {
Number{-1414213562373095, -15},
570 Number{-1414213562373095, -15},
571 Number{1999999999999999, -15}},
572 {
Number{3214285714285706, -15},
573 Number{3111111111111119, -15},
574 Number{9999999999999999, -15}},
575 {
Number{1000000000000000, -32768},
576 Number{1000000000000000, -32768},
584 {
Number{1414213562373095, -15},
585 Number{1414213562373095, -15},
586 Number{1999999999999999861, -18}},
587 {
Number{-1414213562373095, -15},
588 Number{1414213562373095, -15},
589 Number{-1999999999999999862, -18}},
590 {
Number{-1414213562373095, -15},
591 Number{-1414213562373095, -15},
592 Number{1999999999999999861, -18}},
593 {
Number{3214285714285706, -15},
594 Number{3111111111111119, -15},
597 9'999'999'999'999'999'579ULL,
600 {
Number{1000000000000000000, -32768},
601 Number{1000000000000000000, -32768},
606 {
Number{1414213562373095049, -18},
607 Number{1414213562373095049, -18},
609 {
Number{-1414213562373095048, -18},
610 Number{1414213562373095048, -18},
611 Number{-1999999999999999998, -18}},
612 {
Number{-1414213562373095048, -18},
613 Number{-1414213562373095049, -18},
614 Number{1999999999999999999, -18}},
615 {
Number{3214285714285714278, -18},
616 Number{3111111111111111119, -18},
631 Number{85'070'591'730'234'615'84, 19}},
633 tests(cSmall, cLarge);
641 {
Number{1414213562373095, -15},
642 Number{1414213562373095, -15},
643 Number{2000000000000000, -15}},
644 {
Number{-1414213562373095, -15},
645 Number{1414213562373095, -15},
646 Number{-1999999999999999, -15}},
647 {
Number{-1414213562373095, -15},
648 Number{-1414213562373095, -15},
649 Number{2000000000000000, -15}},
650 {
Number{3214285714285706, -15},
651 Number{3111111111111119, -15},
652 Number{1000000000000000, -14}},
653 {
Number{1000000000000000, -32768},
654 Number{1000000000000000, -32768},
662 {
Number{1414213562373095, -15},
663 Number{1414213562373095, -15},
664 Number{1999999999999999862, -18}},
665 {
Number{-1414213562373095, -15},
666 Number{1414213562373095, -15},
667 Number{-1999999999999999861, -18}},
668 {
Number{-1414213562373095, -15},
669 Number{-1414213562373095, -15},
670 Number{1999999999999999862, -18}},
671 {
Number{3214285714285706, -15},
672 Number{3111111111111119, -15},
673 Number{999999999999999958, -17}},
674 {
Number{1000000000000000000, -32768},
675 Number{1000000000000000000, -32768},
680 {
Number{1414213562373095049, -18},
681 Number{1414213562373095049, -18},
682 Number{2000000000000000001, -18}},
683 {
Number{-1414213562373095048, -18},
684 Number{1414213562373095048, -18},
685 Number{-1999999999999999997, -18}},
686 {
Number{-1414213562373095048, -18},
687 Number{-1414213562373095049, -18},
689 {
Number{3214285714285714278, -18},
690 Number{3111111111111111119, -18},
691 Number{1000000000000000001, -17}},
701 Number{85'070'591'730'234'615'85, 19}},
703 tests(cSmall, cLarge);
722 BEAST_EXPECT(caught);
733 auto test = [
this](
auto const& c) {
734 for (
auto const& [x, y, z] : c)
736 auto const result = x / y;
738 ss << x <<
" / " << y <<
" = " << result <<
". Expected: " << z;
739 BEAST_EXPECTS(result == z, ss.
str());
743 auto tests = [&](
auto const& cSmall,
auto const& cLarge) {
756 {
Number{1414213562373095, -10},
757 Number{1414213562373095, -10},
759 {
Number{9'999'999'999'999'999},
760 Number{1'000'000'000'000'000},
761 Number{9'999'999'999'999'999, -15}},
773 {
Number{1414213562373095, -10},
774 Number{1414213562373095, -10},
776 {
Number{9'999'999'999'999'999},
777 Number{1'000'000'000'000'000},
778 Number{9'999'999'999'999'999, -15}},
782 Number{-6'666'666'666'666'666'667, -19}},
786 {
Number{1414213562373095049, -13},
787 Number{1414213562373095049, -13},
790 Number{1'000'000'000'000'000'000},
792 tests(cSmall, cLarge);
803 {
Number{1414213562373095, -10},
804 Number{1414213562373095, -10},
806 {
Number{9'999'999'999'999'999},
807 Number{1'000'000'000'000'000},
808 Number{9'999'999'999'999'999, -15}},
820 {
Number{1414213562373095, -10},
821 Number{1414213562373095, -10},
823 {
Number{9'999'999'999'999'999},
824 Number{1'000'000'000'000'000},
825 Number{9'999'999'999'999'999, -15}},
829 Number{-6'666'666'666'666'666'666, -19}},
833 {
Number{1414213562373095049, -13},
834 Number{1414213562373095049, -13},
837 Number{1'000'000'000'000'000'000},
839 tests(cSmall, cLarge);
850 {
Number{1414213562373095, -10},
851 Number{1414213562373095, -10},
853 {
Number{9'999'999'999'999'999},
854 Number{1'000'000'000'000'000},
855 Number{9'999'999'999'999'999, -15}},
867 {
Number{1414213562373095, -10},
868 Number{1414213562373095, -10},
870 {
Number{9'999'999'999'999'999},
871 Number{1'000'000'000'000'000},
872 Number{9'999'999'999'999'999, -15}},
876 Number{-6'666'666'666'666'666'667, -19}},
880 {
Number{1414213562373095049, -13},
881 Number{1414213562373095049, -13},
884 Number{1'000'000'000'000'000'000},
886 tests(cSmall, cLarge);
897 {
Number{1414213562373095, -10},
898 Number{1414213562373095, -10},
900 {
Number{9'999'999'999'999'999},
901 Number{1'000'000'000'000'000},
902 Number{9'999'999'999'999'999, -15}},
914 {
Number{1414213562373095, -10},
915 Number{1414213562373095, -10},
917 {
Number{9'999'999'999'999'999},
918 Number{1'000'000'000'000'000},
919 Number{9'999'999'999'999'999, -15}},
923 Number{-6'666'666'666'666'666'666, -19}},
927 {
Number{1414213562373095049, -13},
928 Number{1414213562373095049, -13},
931 Number{1'000'000'000'000'000'000},
933 tests(cSmall, cLarge);
946 BEAST_EXPECT(caught);
1181 {
Number{9'999'999'999'999'999, 0}, 9'999'999'999'999'999},
1182 {
Number{9'999'999'999'999'999, 1}, 99'999'999'999'999'990},
1183 {
Number{9'999'999'999'999'999, 2}, 999'999'999'999'999'900},
1184 {
Number{-9'999'999'999'999'999, 2}, -999'999'999'999'999'900},
1199 for (
auto const& [x, y] : c)
1202 BEAST_EXPECT(j == y);
1219 {
Number{9'999'999'999'999'999, 0}, 9'999'999'999'999'999},
1220 {
Number{9'999'999'999'999'999, 1}, 99'999'999'999'999'990},
1221 {
Number{9'999'999'999'999'999, 2}, 999'999'999'999'999'900},
1222 {
Number{-9'999'999'999'999'999, 2}, -999'999'999'999'999'900},
1237 for (
auto const& [x, y] : c)
1240 BEAST_EXPECT(j == y);
1257 {
Number{9'999'999'999'999'999, 0}, 9'999'999'999'999'999},
1258 {
Number{9'999'999'999'999'999, 1}, 99'999'999'999'999'990},
1259 {
Number{9'999'999'999'999'999, 2}, 999'999'999'999'999'900},
1260 {
Number{-9'999'999'999'999'999, 2}, -999'999'999'999'999'900},
1275 for (
auto const& [x, y] : c)
1278 BEAST_EXPECT(j == y);
1295 {
Number{9'999'999'999'999'999, 0}, 9'999'999'999'999'999},
1296 {
Number{9'999'999'999'999'999, 1}, 99'999'999'999'999'990},
1297 {
Number{9'999'999'999'999'999, 2}, 999'999'999'999'999'900},
1298 {
Number{-9'999'999'999'999'999, 2}, -999'999'999'999'999'900},
1313 for (
auto const& [x, y] : c)
1316 BEAST_EXPECT(j == y);
1319 bool caught =
false;
1328 BEAST_EXPECT(caught);