| ... | ... | @@ -4,6 +4,7 @@ const testing = std.testing; |
| 4 | 4 | const Managed = std.math.big.int.Managed; |
| 5 | 5 | const Mutable = std.math.big.int.Mutable; |
| 6 | 6 | const Limb = std.math.big.Limb; |
| 7 | const SignedLimb = std.math.big.SignedLimb; |
| 7 | 8 | const DoubleLimb = std.math.big.DoubleLimb; |
| 8 | 9 | const SignedDoubleLimb = std.math.big.SignedDoubleLimb; |
| 9 | 10 | const maxInt = std.math.maxInt; |
| ... | ... | @@ -575,6 +576,102 @@ test "big.int add scalar" { |
| 575 | 576 | try testing.expect((try b.to(u32)) == 55); |
| 576 | 577 | } |
| 577 | 578 | |
| 579 | test "big.int addWrap single-single, unsigned" { |
| 580 | var a = try Managed.initSet(testing.allocator, maxInt(u17)); |
| 581 | defer a.deinit(); |
| 582 | |
| 583 | var b = try Managed.initSet(testing.allocator, 10); |
| 584 | defer b.deinit(); |
| 585 | |
| 586 | try a.addWrap(a.toConst(), b.toConst(), .unsigned, 17); |
| 587 | |
| 588 | try testing.expect((try a.to(u17)) == 9); |
| 589 | } |
| 590 | |
| 591 | test "big.int subWrap single-single, unsigned" { |
| 592 | var a = try Managed.initSet(testing.allocator, 0); |
| 593 | defer a.deinit(); |
| 594 | |
| 595 | var b = try Managed.initSet(testing.allocator, maxInt(u17)); |
| 596 | defer b.deinit(); |
| 597 | |
| 598 | try a.subWrap(a.toConst(), b.toConst(), .unsigned, 17); |
| 599 | |
| 600 | try testing.expect((try a.to(u17)) == 1); |
| 601 | } |
| 602 | |
| 603 | test "big.int addWrap multi-multi, unsigned, limb aligned" { |
| 604 | var a = try Managed.initSet(testing.allocator, maxInt(DoubleLimb)); |
| 605 | defer a.deinit(); |
| 606 | |
| 607 | var b = try Managed.initSet(testing.allocator, maxInt(DoubleLimb)); |
| 608 | defer b.deinit(); |
| 609 | |
| 610 | try a.addWrap(a.toConst(), b.toConst(), .unsigned, @bitSizeOf(DoubleLimb)); |
| 611 | |
| 612 | try testing.expect((try a.to(DoubleLimb)) == maxInt(DoubleLimb) - 1); |
| 613 | } |
| 614 | |
| 615 | test "big.int subWrap single-multi, unsigned, limb aligned" { |
| 616 | var a = try Managed.initSet(testing.allocator, 10); |
| 617 | defer a.deinit(); |
| 618 | |
| 619 | var b = try Managed.initSet(testing.allocator, maxInt(DoubleLimb) + 100); |
| 620 | defer b.deinit(); |
| 621 | |
| 622 | try a.subWrap(a.toConst(), b.toConst(), .unsigned, @bitSizeOf(DoubleLimb)); |
| 623 | |
| 624 | try testing.expect((try a.to(DoubleLimb)) == maxInt(DoubleLimb) - 88); |
| 625 | } |
| 626 | |
| 627 | test "big.int addWrap single-single, signed" { |
| 628 | var a = try Managed.initSet(testing.allocator, maxInt(i21)); |
| 629 | defer a.deinit(); |
| 630 | |
| 631 | var b = try Managed.initSet(testing.allocator, 1 + 1 + maxInt(u21)); |
| 632 | defer b.deinit(); |
| 633 | |
| 634 | try a.addWrap(a.toConst(), b.toConst(), .signed, @bitSizeOf(i21)); |
| 635 | |
| 636 | try testing.expect((try a.to(i21)) == minInt(i21)); |
| 637 | } |
| 638 | |
| 639 | test "big.int subWrap single-single, signed" { |
| 640 | var a = try Managed.initSet(testing.allocator, minInt(i21)); |
| 641 | defer a.deinit(); |
| 642 | |
| 643 | var b = try Managed.initSet(testing.allocator, 1); |
| 644 | defer b.deinit(); |
| 645 | |
| 646 | try a.subWrap(a.toConst(), b.toConst(), .signed, @bitSizeOf(i21)); |
| 647 | |
| 648 | try testing.expect((try a.to(i21)) == maxInt(i21)); |
| 649 | } |
| 650 | |
| 651 | test "big.int addWrap multi-multi, signed, limb aligned" { |
| 652 | var a = try Managed.initSet(testing.allocator, maxInt(SignedDoubleLimb)); |
| 653 | defer a.deinit(); |
| 654 | |
| 655 | var b = try Managed.initSet(testing.allocator, maxInt(SignedDoubleLimb)); |
| 656 | defer b.deinit(); |
| 657 | |
| 658 | try a.addWrap(a.toConst(), b.toConst(), .signed, @bitSizeOf(SignedDoubleLimb)); |
| 659 | |
| 660 | try testing.expect((try a.to(SignedDoubleLimb)) == -2); |
| 661 | } |
| 662 | |
| 663 | test "big.int subWrap single-multi, signed, limb aligned" { |
| 664 | var a = try Managed.initSet(testing.allocator, minInt(SignedDoubleLimb)); |
| 665 | defer a.deinit(); |
| 666 | |
| 667 | var b = try Managed.initSet(testing.allocator, 1); |
| 668 | defer b.deinit(); |
| 669 | |
| 670 | try a.subWrap(a.toConst(), b.toConst(), .signed, @bitSizeOf(SignedDoubleLimb)); |
| 671 | |
| 672 | try testing.expect((try a.to(SignedDoubleLimb)) == maxInt(SignedDoubleLimb)); |
| 673 | } |
| 674 | |
| 578 | 675 | test "big.int sub single-single" { |
| 579 | 676 | var a = try Managed.initSet(testing.allocator, 50); |
| 580 | 677 | defer a.deinit(); |