| ... | ... | @@ -672,6 +672,102 @@ test "big.int subWrap single-multi, signed, limb aligned" { |
| 672 | 672 | try testing.expect((try a.to(SignedDoubleLimb)) == maxInt(SignedDoubleLimb)); |
| 673 | 673 | } |
| 674 | 674 | |
| 675 | test "big.int addSat single-single, unsigned" { |
| 676 | var a = try Managed.initSet(testing.allocator, maxInt(u17) - 5); |
| 677 | defer a.deinit(); |
| 678 | |
| 679 | var b = try Managed.initSet(testing.allocator, 10); |
| 680 | defer b.deinit(); |
| 681 | |
| 682 | try a.addSat(a.toConst(), b.toConst(), .unsigned, 17); |
| 683 | |
| 684 | try testing.expect((try a.to(u17)) == maxInt(u17)); |
| 685 | } |
| 686 | |
| 687 | test "big.int subSat single-single, unsigned" { |
| 688 | var a = try Managed.initSet(testing.allocator, 123); |
| 689 | defer a.deinit(); |
| 690 | |
| 691 | var b = try Managed.initSet(testing.allocator, 4000); |
| 692 | defer b.deinit(); |
| 693 | |
| 694 | try a.subSat(a.toConst(), b.toConst(), .unsigned, 17); |
| 695 | |
| 696 | try testing.expect((try a.to(u17)) == 0); |
| 697 | } |
| 698 | |
| 699 | test "big.int addSat multi-multi, unsigned, limb aligned" { |
| 700 | var a = try Managed.initSet(testing.allocator, maxInt(DoubleLimb)); |
| 701 | defer a.deinit(); |
| 702 | |
| 703 | var b = try Managed.initSet(testing.allocator, maxInt(DoubleLimb)); |
| 704 | defer b.deinit(); |
| 705 | |
| 706 | try a.addSat(a.toConst(), b.toConst(), .unsigned, @bitSizeOf(DoubleLimb)); |
| 707 | |
| 708 | try testing.expect((try a.to(DoubleLimb)) == maxInt(DoubleLimb)); |
| 709 | } |
| 710 | |
| 711 | test "big.int subSat single-multi, unsigned, limb aligned" { |
| 712 | var a = try Managed.initSet(testing.allocator, 10); |
| 713 | defer a.deinit(); |
| 714 | |
| 715 | var b = try Managed.initSet(testing.allocator, maxInt(DoubleLimb) + 100); |
| 716 | defer b.deinit(); |
| 717 | |
| 718 | try a.subSat(a.toConst(), b.toConst(), .unsigned, @bitSizeOf(DoubleLimb)); |
| 719 | |
| 720 | try testing.expect((try a.to(DoubleLimb)) == 0); |
| 721 | } |
| 722 | |
| 723 | test "big.int addSat single-single, signed" { |
| 724 | var a = try Managed.initSet(testing.allocator, maxInt(i14)); |
| 725 | defer a.deinit(); |
| 726 | |
| 727 | var b = try Managed.initSet(testing.allocator, 1); |
| 728 | defer b.deinit(); |
| 729 | |
| 730 | try a.addSat(a.toConst(), b.toConst(), .signed, @bitSizeOf(i14)); |
| 731 | |
| 732 | try testing.expect((try a.to(i14)) == maxInt(i14)); |
| 733 | } |
| 734 | |
| 735 | test "big.int subSat single-single, signed" { |
| 736 | var a = try Managed.initSet(testing.allocator, minInt(i21)); |
| 737 | defer a.deinit(); |
| 738 | |
| 739 | var b = try Managed.initSet(testing.allocator, 1); |
| 740 | defer b.deinit(); |
| 741 | |
| 742 | try a.subSat(a.toConst(), b.toConst(), .signed, @bitSizeOf(i21)); |
| 743 | |
| 744 | try testing.expect((try a.to(i21)) == minInt(i21)); |
| 745 | } |
| 746 | |
| 747 | test "big.int addSat multi-multi, signed, limb aligned" { |
| 748 | var a = try Managed.initSet(testing.allocator, maxInt(SignedDoubleLimb)); |
| 749 | defer a.deinit(); |
| 750 | |
| 751 | var b = try Managed.initSet(testing.allocator, maxInt(SignedDoubleLimb)); |
| 752 | defer b.deinit(); |
| 753 | |
| 754 | try a.addSat(a.toConst(), b.toConst(), .signed, @bitSizeOf(SignedDoubleLimb)); |
| 755 | |
| 756 | try testing.expect((try a.to(SignedDoubleLimb)) == maxInt(SignedDoubleLimb)); |
| 757 | } |
| 758 | |
| 759 | test "big.int subSat single-multi, signed, limb aligned" { |
| 760 | var a = try Managed.initSet(testing.allocator, minInt(SignedDoubleLimb)); |
| 761 | defer a.deinit(); |
| 762 | |
| 763 | var b = try Managed.initSet(testing.allocator, 1); |
| 764 | defer b.deinit(); |
| 765 | |
| 766 | try a.subSat(a.toConst(), b.toConst(), .signed, @bitSizeOf(SignedDoubleLimb)); |
| 767 | |
| 768 | try testing.expect((try a.to(SignedDoubleLimb)) == minInt(SignedDoubleLimb)); |
| 769 | } |
| 770 | |
| 675 | 771 | test "big.int sub single-single" { |
| 676 | 772 | var a = try Managed.initSet(testing.allocator, 50); |
| 677 | 773 | defer a.deinit(); |