aboutsummaryrefslogtreecommitdiff
path: root/lib/std/math/big
diff options
context:
space:
mode:
authorRobin Voetter <robin@voetter.nl>2021-10-01 15:32:50 +0200
committerRobin Voetter <robin@voetter.nl>2021-10-04 11:25:29 +0200
commit692827baa79590c20f09ae598b2c27663f72a207 (patch)
treea41baaff9c6c8ae659c64fb7200b52936e773484 /lib/std/math/big
parent52721d3a7eb2695c63e22978c0247027b1790f9e (diff)
downloadzig-692827baa79590c20f09ae598b2c27663f72a207.tar.gz
zig-692827baa79590c20f09ae598b2c27663f72a207.zip
big ints: [add|sub]Sat tests
Diffstat (limited to 'lib/std/math/big')
-rw-r--r--lib/std/math/big/int_test.zig96
1 files changed, 96 insertions, 0 deletions
diff --git a/lib/std/math/big/int_test.zig b/lib/std/math/big/int_test.zig
index d47346a84c..537a472223 100644
--- a/lib/std/math/big/int_test.zig
+++ b/lib/std/math/big/int_test.zig
@@ -672,6 +672,102 @@ test "big.int subWrap single-multi, signed, limb aligned" {
try testing.expect((try a.to(SignedDoubleLimb)) == maxInt(SignedDoubleLimb));
}
+test "big.int addSat single-single, unsigned" {
+ var a = try Managed.initSet(testing.allocator, maxInt(u17) - 5);
+ defer a.deinit();
+
+ var b = try Managed.initSet(testing.allocator, 10);
+ defer b.deinit();
+
+ try a.addSat(a.toConst(), b.toConst(), .unsigned, 17);
+
+ try testing.expect((try a.to(u17)) == maxInt(u17));
+}
+
+test "big.int subSat single-single, unsigned" {
+ var a = try Managed.initSet(testing.allocator, 123);
+ defer a.deinit();
+
+ var b = try Managed.initSet(testing.allocator, 4000);
+ defer b.deinit();
+
+ try a.subSat(a.toConst(), b.toConst(), .unsigned, 17);
+
+ try testing.expect((try a.to(u17)) == 0);
+}
+
+test "big.int addSat multi-multi, unsigned, limb aligned" {
+ var a = try Managed.initSet(testing.allocator, maxInt(DoubleLimb));
+ defer a.deinit();
+
+ var b = try Managed.initSet(testing.allocator, maxInt(DoubleLimb));
+ defer b.deinit();
+
+ try a.addSat(a.toConst(), b.toConst(), .unsigned, @bitSizeOf(DoubleLimb));
+
+ try testing.expect((try a.to(DoubleLimb)) == maxInt(DoubleLimb));
+}
+
+test "big.int subSat single-multi, unsigned, limb aligned" {
+ var a = try Managed.initSet(testing.allocator, 10);
+ defer a.deinit();
+
+ var b = try Managed.initSet(testing.allocator, maxInt(DoubleLimb) + 100);
+ defer b.deinit();
+
+ try a.subSat(a.toConst(), b.toConst(), .unsigned, @bitSizeOf(DoubleLimb));
+
+ try testing.expect((try a.to(DoubleLimb)) == 0);
+}
+
+test "big.int addSat single-single, signed" {
+ var a = try Managed.initSet(testing.allocator, maxInt(i14));
+ defer a.deinit();
+
+ var b = try Managed.initSet(testing.allocator, 1);
+ defer b.deinit();
+
+ try a.addSat(a.toConst(), b.toConst(), .signed, @bitSizeOf(i14));
+
+ try testing.expect((try a.to(i14)) == maxInt(i14));
+}
+
+test "big.int subSat single-single, signed" {
+ var a = try Managed.initSet(testing.allocator, minInt(i21));
+ defer a.deinit();
+
+ var b = try Managed.initSet(testing.allocator, 1);
+ defer b.deinit();
+
+ try a.subSat(a.toConst(), b.toConst(), .signed, @bitSizeOf(i21));
+
+ try testing.expect((try a.to(i21)) == minInt(i21));
+}
+
+test "big.int addSat multi-multi, signed, limb aligned" {
+ var a = try Managed.initSet(testing.allocator, maxInt(SignedDoubleLimb));
+ defer a.deinit();
+
+ var b = try Managed.initSet(testing.allocator, maxInt(SignedDoubleLimb));
+ defer b.deinit();
+
+ try a.addSat(a.toConst(), b.toConst(), .signed, @bitSizeOf(SignedDoubleLimb));
+
+ try testing.expect((try a.to(SignedDoubleLimb)) == maxInt(SignedDoubleLimb));
+}
+
+test "big.int subSat single-multi, signed, limb aligned" {
+ var a = try Managed.initSet(testing.allocator, minInt(SignedDoubleLimb));
+ defer a.deinit();
+
+ var b = try Managed.initSet(testing.allocator, 1);
+ defer b.deinit();
+
+ try a.subSat(a.toConst(), b.toConst(), .signed, @bitSizeOf(SignedDoubleLimb));
+
+ try testing.expect((try a.to(SignedDoubleLimb)) == minInt(SignedDoubleLimb));
+}
+
test "big.int sub single-single" {
var a = try Managed.initSet(testing.allocator, 50);
defer a.deinit();