authorgravatar for robin@voetter.nlRobin Voetter <robin@voetter.nl> 2021-10-01 15:32:50+02:00
committergravatar for robin@voetter.nlRobin Voetter <robin@voetter.nl> 2021-10-04 11:25:29+02:00
log692827baa79590c20f09ae598b2c27663f72a207
treea41baaff9c6c8ae659c64fb7200b52936e773484
parent52721d3a7eb2695c63e22978c0247027b1790f9e

big ints: [add|sub]Sat tests


1 files changed, 96 insertions(+), 0 deletions(-)

lib/std/math/big/int_test.zig+96
...@@ -672,6 +672,102 @@ test "big.int subWrap single-multi, signed, limb aligned" {...@@ -672,6 +672,102 @@ test "big.int subWrap single-multi, signed, limb aligned" {
672 try testing.expect((try a.to(SignedDoubleLimb)) == maxInt(SignedDoubleLimb));672 try testing.expect((try a.to(SignedDoubleLimb)) == maxInt(SignedDoubleLimb));
673}673}
674674
675test "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
687test "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
699test "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
711test "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
723test "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
735test "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
747test "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
759test "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
675test "big.int sub single-single" {771test "big.int sub single-single" {
676 var a = try Managed.initSet(testing.allocator, 50);772 var a = try Managed.initSet(testing.allocator, 50);
677 defer a.deinit();773 defer a.deinit();