authorgravatar for robin@voetter.nlRobin Voetter <robin@voetter.nl> 2021-10-02 00:39:28+02:00
committergravatar for robin@voetter.nlRobin Voetter <robin@voetter.nl> 2021-10-04 11:25:29+02:00
log15351f206fba9f7b2bba2bfce90cb6359846ce3c
tree281532d84b16d3fffdcd7fc73ef899e4fcbb7409
parent8701d8579dafc73856473ad5db73f3d5b4facc56

big.int: truncate tests


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

lib/std/math/big/int_test.zig+66
...@@ -1503,6 +1503,72 @@ test "big.int div multi-multi fuzz case #2" {...@@ -1503,6 +1503,72 @@ test "big.int div multi-multi fuzz case #2" {
1503 try testing.expect(std.mem.eql(u8, rs, "a900000000000000000000000000000000000000000000000000"));1503 try testing.expect(std.mem.eql(u8, rs, "a900000000000000000000000000000000000000000000000000"));
1504}1504}
15051505
1506test "big.int truncate single unsigned" {
1507 var a = try Managed.initSet(testing.allocator, maxInt(u47));
1508 defer a.deinit();
1509
1510 try a.truncate(a.toConst(), .unsigned, 17);
1511
1512 try testing.expect((try a.to(u17)) == maxInt(u17));
1513}
1514
1515test "big.int truncate single signed" {
1516 var a = try Managed.initSet(testing.allocator, 0x1_0000);
1517 defer a.deinit();
1518
1519 try a.truncate(a.toConst(), .signed, 17);
1520
1521 try testing.expect((try a.to(i17)) == minInt(i17));
1522}
1523
1524test "big.int truncate multi to single unsigned" {
1525 var a = try Managed.initSet(testing.allocator, (maxInt(Limb) + 1) | 0x1234_5678_9ABC_DEF0);
1526 defer a.deinit();
1527
1528 try a.truncate(a.toConst(), .unsigned, 37);
1529
1530 try testing.expect((try a.to(u37)) == 0x18_9ABC_DEF0);
1531}
1532
1533test "big.int truncate multi to single signed" {
1534 var a = try Managed.initSet(testing.allocator, maxInt(Limb) << 10);
1535 defer a.deinit();
1536
1537 try a.truncate(a.toConst(), .signed, @bitSizeOf(i11));
1538
1539 try testing.expect((try a.to(i11)) == minInt(i11));
1540}
1541
1542test "big.int truncate multi to multi unsigned" {
1543 const bits = @typeInfo(SignedDoubleLimb).Int.bits;
1544 const Int = std.meta.Int(.unsigned, bits - 1);
1545
1546 var a = try Managed.initSet(testing.allocator, maxInt(SignedDoubleLimb));
1547 defer a.deinit();
1548
1549 try a.truncate(a.toConst(), .unsigned, bits - 1);
1550
1551 try testing.expect((try a.to(Int)) == maxInt(Int));
1552}
1553
1554test "big.int truncate multi to multi signed" {
1555 var a = try Managed.initSet(testing.allocator, 3 << @bitSizeOf(Limb));
1556 defer a.deinit();
1557
1558 try a.truncate(a.toConst(), .signed, @bitSizeOf(Limb) + 1);
1559
1560 try testing.expect((try a.to(std.meta.Int(.signed, @bitSizeOf(Limb) + 1))) == -1 << @bitSizeOf(Limb));
1561}
1562
1563test "big.int truncate negative multi to single" {
1564 var a = try Managed.initSet(testing.allocator, -@as(SignedDoubleLimb, maxInt(Limb) + 1));
1565 defer a.deinit();
1566
1567 try a.truncate(a.toConst(), .signed, @bitSizeOf(i17));
1568
1569 try testing.expect((try a.to(i17)) == 0);
1570}
1571
1506test "big.int shift-right single" {1572test "big.int shift-right single" {
1507 var a = try Managed.initSet(testing.allocator, 0xffff0000);1573 var a = try Managed.initSet(testing.allocator, 0xffff0000);
1508 defer a.deinit();1574 defer a.deinit();