diff options
| author | Robin Voetter <robin@voetter.nl> | 2021-10-01 15:32:50 +0200 |
|---|---|---|
| committer | Robin Voetter <robin@voetter.nl> | 2021-10-04 11:25:29 +0200 |
| commit | 692827baa79590c20f09ae598b2c27663f72a207 (patch) | |
| tree | a41baaff9c6c8ae659c64fb7200b52936e773484 /lib/std/math/big | |
| parent | 52721d3a7eb2695c63e22978c0247027b1790f9e (diff) | |
| download | zig-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.zig | 96 |
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(); |
