176 auto const cSmall = std::to_array<Case>(
177 {{
Number{1'000'000'000'000'000, -15},
178 Number{6'555'555'555'555'555, -29},
179 Number{1'000'000'000'000'066, -15}},
180 {
Number{-1'000'000'000'000'000, -15},
181 Number{-6'555'555'555'555'555, -29},
182 Number{-1'000'000'000'000'066, -15}},
183 {
Number{-1'000'000'000'000'000, -15},
184 Number{6'555'555'555'555'555, -29},
185 Number{-9'999'999'999'999'344, -16}},
186 {
Number{-6'555'555'555'555'555, -29},
187 Number{1'000'000'000'000'000, -15},
188 Number{9'999'999'999'999'344, -16}},
191 {
Number{5'555'555'555'555'555, -32768},
192 Number{-5'555'555'555'555'554, -32768},
194 {
Number{-9'999'999'999'999'999, -31},
195 Number{1'000'000'000'000'000, -15},
196 Number{9'999'999'999'999'990, -16}}});
197 auto const cLarge = std::to_array<Case>(
202 {
Number{1'000'000'000'000'000, -15},
203 Number{6'555'555'555'555'555, -29},
204 Number{1'000'000'000'000'065'556, -18}},
205 {
Number{-1'000'000'000'000'000, -15},
206 Number{-6'555'555'555'555'555, -29},
207 Number{-1'000'000'000'000'065'556, -18}},
208 {
Number{-1'000'000'000'000'000, -15},
209 Number{6'555'555'555'555'555, -29},
211 {
Number{-6'555'555'555'555'555, -29},
212 Number{1'000'000'000'000'000, -15},
216 {
Number{5'555'555'555'555'555'000, -32768},
217 Number{-5'555'555'555'555'554'000, -32768},
219 {
Number{-9'999'999'999'999'999, -31},
220 Number{1'000'000'000'000'000, -15},
221 Number{9'999'999'999'999'990, -16}},
223 {
Number{1'000'000'000'000'000'000, -18},
224 Number{6'555'555'555'555'555'555, -35},
225 Number{1'000'000'000'000'000'066, -18}},
226 {
Number{-1'000'000'000'000'000'000, -18},
227 Number{-6'555'555'555'555'555'555, -35},
228 Number{-1'000'000'000'000'000'066, -18}},
229 {
Number{-1'000'000'000'000'000'000, -18},
230 Number{6'555'555'555'555'555'555, -35},
232 {
Number{-6'555'555'555'555'555'555, -35},
233 Number{1'000'000'000'000'000'000, -18},
236 {
Number{5'555'555'555'555'555'555, -32768},
237 Number{-5'555'555'555'555'555'554, -32768},
240 Number{1'000'000'000'000'000'000, -18},
262 auto const cLargeLegacy = std::to_array<Case>({
265 auto const cLargeCorrected = std::to_array<Case>({
268 auto test = [
this](
auto const& c) {
269 for (
auto const& [x, y, z] : c)
271 auto const result = x + y;
273 ss << x <<
" + " << y <<
" = " << result <<
". Expected: " << z;
274 BEAST_EXPECTS(result == z, ss.
str());
290 test(cLargeCorrected);
304 BEAST_EXPECT(caught);
315 auto const cSmall = std::to_array<Case>(
316 {{
Number{1'000'000'000'000'000, -15},
317 Number{6'555'555'555'555'555, -29},
318 Number{9'999'999'999'999'344, -16}},
319 {
Number{6'555'555'555'555'555, -29},
320 Number{1'000'000'000'000'000, -15},
321 Number{-9'999'999'999'999'344, -16}},
323 {
Number{1'000'000'000'000'000, -15},
324 Number{1'000'000'000'000'001, -15},
325 Number{-1'000'000'000'000'000, -30}},
326 {
Number{1'000'000'000'000'001, -15},
327 Number{1'000'000'000'000'000, -15},
328 Number{1'000'000'000'000'000, -30}}});
329 auto const cLarge = std::to_array<Case>(
334 {
Number{1'000'000'000'000'000, -15},
335 Number{6'555'555'555'555'555, -29},
337 {
Number{6'555'555'555'555'555, -29},
338 Number{1'000'000'000'000'000, -15},
341 {
Number{1'000'000'000'000'000, -15},
342 Number{1'000'000'000'000'001, -15},
343 Number{-1'000'000'000'000'000, -30}},
344 {
Number{1'000'000'000'000'001, -15},
345 Number{1'000'000'000'000'000, -15},
346 Number{1'000'000'000'000'000, -30}},
348 {
Number{1'000'000'000'000'000'000, -18},
349 Number{6'555'555'555'555'555'555, -32},
351 {
Number{6'555'555'555'555'555'555, -32},
352 Number{1'000'000'000'000'000'000, -18},
354 {
Number{1'000'000'000'000'000'000, -18},
355 Number{1'000'000'000'000'000'000, -18},
357 {
Number{1'000'000'000'000'000'000, -18},
358 Number{1'000'000'000'000'000'001, -18},
359 Number{-1'000'000'000'000'000'000, -36}},
360 {
Number{1'000'000'000'000'000'001, -18},
361 Number{1'000'000'000'000'000'000, -18},
362 Number{1'000'000'000'000'000'000, -36}},
372 auto test = [
this](
auto const& c) {
373 for (
auto const& [x, y, z] : c)
375 auto const result = x - y;
377 ss << x <<
" - " << y <<
" = " << result <<
". Expected: " << z;
378 BEAST_EXPECTS(result == z, ss.
str());
398 auto test = [
this](
auto const& c) {
399 for (
auto const& [x, y, z] : c)
401 auto const result = x * y;
403 ss << x <<
" * " << y <<
" = " << result <<
". Expected: " << z;
404 BEAST_EXPECTS(result == z, ss.
str());
407 auto tests = [&](
auto const& cSmall,
auto const& cLarge) {
421 auto const cSmall = std::to_array<Case>({
423 {
Number{1414213562373095, -15},
424 Number{1414213562373095, -15},
425 Number{2000000000000000, -15}},
426 {
Number{-1414213562373095, -15},
427 Number{1414213562373095, -15},
428 Number{-2000000000000000, -15}},
429 {
Number{-1414213562373095, -15},
430 Number{-1414213562373095, -15},
431 Number{2000000000000000, -15}},
432 {
Number{3214285714285706, -15},
433 Number{3111111111111119, -15},
434 Number{1000000000000000, -14}},
437 {
Number{9'999'999'999'999'999, 0},
438 Number{9'999'999'999'999'999, 0},
439 Number{9'999'999'999'999'998, 16}},
441 auto const cLarge = std::to_array<Case>({
446 {
Number{1414213562373095, -15},
447 Number{1414213562373095, -15},
448 Number{1999999999999999862, -18}},
449 {
Number{-1414213562373095, -15},
450 Number{1414213562373095, -15},
451 Number{-1999999999999999862, -18}},
452 {
Number{-1414213562373095, -15},
453 Number{-1414213562373095, -15},
454 Number{1999999999999999862, -18}},
455 {
Number{3214285714285706, -15},
456 Number{3111111111111119, -15},
458 {
Number{1000000000000000000, -32768},
459 Number{1000000000000000000, -32768},
464 {
Number{1414213562373095049, -18},
465 Number{1414213562373095049, -18},
466 Number{2000000000000000001, -18}},
467 {
Number{-1414213562373095048, -18},
468 Number{1414213562373095048, -18},
469 Number{-1999999999999999998, -18}},
470 {
Number{-1414213562373095048, -18},
471 Number{-1414213562373095049, -18},
472 Number{1999999999999999999, -18}},
481 Number{85'070'591'730'234'615'85, 19}},
483 tests(cSmall, cLarge);
488 auto const cSmall = std::to_array<Case>(
490 {
Number{1414213562373095, -15},
491 Number{1414213562373095, -15},
492 Number{1999999999999999, -15}},
493 {
Number{-1414213562373095, -15},
494 Number{1414213562373095, -15},
495 Number{-1999999999999999, -15}},
496 {
Number{-1414213562373095, -15},
497 Number{-1414213562373095, -15},
498 Number{1999999999999999, -15}},
499 {
Number{3214285714285706, -15},
500 Number{3111111111111119, -15},
501 Number{9999999999999999, -15}},
503 auto const cLarge = std::to_array<Case>(
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{-1414213562373095, -15},
516 Number{-1414213562373095, -15},
517 Number{1999999999999999861, -18}},
518 {
Number{3214285714285706, -15},
519 Number{3111111111111119, -15},
521 {
Number{1000000000000000000, -32768},
522 Number{1000000000000000000, -32768},
527 {
Number{1414213562373095049, -18},
528 Number{1414213562373095049, -18},
530 {
Number{-1414213562373095048, -18},
531 Number{1414213562373095048, -18},
532 Number{-1999999999999999997, -18}},
533 {
Number{-1414213562373095048, -18},
534 Number{-1414213562373095049, -18},
535 Number{1999999999999999999, -18}},
536 {
Number{3214285714285714278, -18},
537 Number{3111111111111111119, -18},
548 Number{85'070'591'730'234'615'84, 19}},
550 tests(cSmall, cLarge);
555 auto const cSmall = std::to_array<Case>(
557 {
Number{1414213562373095, -15},
558 Number{1414213562373095, -15},
559 Number{1999999999999999, -15}},
560 {
Number{-1414213562373095, -15},
561 Number{1414213562373095, -15},
562 Number{-2000000000000000, -15}},
563 {
Number{-1414213562373095, -15},
564 Number{-1414213562373095, -15},
565 Number{1999999999999999, -15}},
566 {
Number{3214285714285706, -15},
567 Number{3111111111111119, -15},
568 Number{9999999999999999, -15}},
570 auto const cLarge = std::to_array<Case>(
576 {
Number{1414213562373095, -15},
577 Number{1414213562373095, -15},
578 Number{1999999999999999861, -18}},
579 {
Number{-1414213562373095, -15},
580 Number{1414213562373095, -15},
581 Number{-1999999999999999862, -18}},
582 {
Number{-1414213562373095, -15},
583 Number{-1414213562373095, -15},
584 Number{1999999999999999861, -18}},
585 {
Number{3214285714285706, -15},
586 Number{3111111111111119, -15},
588 {
Number{1000000000000000000, -32768},
589 Number{1000000000000000000, -32768},
594 {
Number{1414213562373095049, -18},
595 Number{1414213562373095049, -18},
597 {
Number{-1414213562373095048, -18},
598 Number{1414213562373095048, -18},
599 Number{-1999999999999999998, -18}},
600 {
Number{-1414213562373095048, -18},
601 Number{-1414213562373095049, -18},
602 Number{1999999999999999999, -18}},
603 {
Number{3214285714285714278, -18},
604 Number{3111111111111111119, -18},
615 Number{85'070'591'730'234'615'84, 19}},
617 tests(cSmall, cLarge);
622 auto const cSmall = std::to_array<Case>(
624 {
Number{1414213562373095, -15},
625 Number{1414213562373095, -15},
626 Number{2000000000000000, -15}},
627 {
Number{-1414213562373095, -15},
628 Number{1414213562373095, -15},
629 Number{-1999999999999999, -15}},
630 {
Number{-1414213562373095, -15},
631 Number{-1414213562373095, -15},
632 Number{2000000000000000, -15}},
633 {
Number{3214285714285706, -15},
634 Number{3111111111111119, -15},
635 Number{1000000000000000, -14}},
637 auto const cLarge = std::to_array<Case>(
643 {
Number{1414213562373095, -15},
644 Number{1414213562373095, -15},
645 Number{1999999999999999862, -18}},
646 {
Number{-1414213562373095, -15},
647 Number{1414213562373095, -15},
648 Number{-1999999999999999861, -18}},
649 {
Number{-1414213562373095, -15},
650 Number{-1414213562373095, -15},
651 Number{1999999999999999862, -18}},
652 {
Number{3214285714285706, -15},
653 Number{3111111111111119, -15},
654 Number{999999999999999958, -17}},
655 {
Number{1000000000000000000, -32768},
656 Number{1000000000000000000, -32768},
661 {
Number{1414213562373095049, -18},
662 Number{1414213562373095049, -18},
663 Number{2000000000000000001, -18}},
664 {
Number{-1414213562373095048, -18},
665 Number{1414213562373095048, -18},
666 Number{-1999999999999999997, -18}},
667 {
Number{-1414213562373095048, -18},
668 Number{-1414213562373095049, -18},
670 {
Number{3214285714285714278, -18},
671 Number{3111111111111111119, -18},
672 Number{1000000000000000001, -17}},
682 Number{85'070'591'730'234'615'85, 19}},
684 tests(cSmall, cLarge);
698 BEAST_EXPECT(caught);
709 auto test = [
this](
auto const& c) {
710 for (
auto const& [x, y, z] : c)
712 auto const result = x / y;
714 ss << x <<
" / " << y <<
" = " << result <<
". Expected: " << z;
715 BEAST_EXPECTS(result == z, ss.
str());
719 auto tests = [&](
auto const& cSmall,
auto const& cLarge) {
731 auto const cSmall = std::to_array<Case>(
737 {
Number{9'999'999'999'999'999},
738 Number{1'000'000'000'000'000},
739 Number{9'999'999'999'999'999, -15}},
743 auto const cLarge = std::to_array<Case>(
752 {
Number{9'999'999'999'999'999},
753 Number{1'000'000'000'000'000},
754 Number{9'999'999'999'999'999, -15}},
762 Number{1'000'000'000'000'000'000},
764 tests(cSmall, cLarge);
769 auto const cSmall = std::to_array<Case>(
775 {
Number{9'999'999'999'999'999},
776 Number{1'000'000'000'000'000},
777 Number{9'999'999'999'999'999, -15}},
781 auto const cLarge = std::to_array<Case>(
790 {
Number{9'999'999'999'999'999},
791 Number{1'000'000'000'000'000},
792 Number{9'999'999'999'999'999, -15}},
800 Number{1'000'000'000'000'000'000},
802 tests(cSmall, cLarge);
807 auto const cSmall = std::to_array<Case>(
813 {
Number{9'999'999'999'999'999},
814 Number{1'000'000'000'000'000},
815 Number{9'999'999'999'999'999, -15}},
819 auto const cLarge = std::to_array<Case>(
828 {
Number{9'999'999'999'999'999},
829 Number{1'000'000'000'000'000},
830 Number{9'999'999'999'999'999, -15}},
838 Number{1'000'000'000'000'000'000},
840 tests(cSmall, cLarge);
845 auto const cSmall = std::to_array<Case>(
851 {
Number{9'999'999'999'999'999},
852 Number{1'000'000'000'000'000},
853 Number{9'999'999'999'999'999, -15}},
857 auto const cLarge = std::to_array<Case>(
866 {
Number{9'999'999'999'999'999},
867 Number{1'000'000'000'000'000},
868 Number{9'999'999'999'999'999, -15}},
876 Number{1'000'000'000'000'000'000},
878 tests(cSmall, cLarge);
890 BEAST_EXPECT(caught);