authorgravatar for quae@daurnimator.comdaurnimator <quae@daurnimator.com> 2020-02-14 18:59:40+11:00
committergravatar for quae@daurnimator.comdaurnimator <quae@daurnimator.com> 2020-02-14 18:59:40+11:00
logca41567924d0576be9a000076d29ec5f46a93e95
tree5f5e6d34404348542626d94d979463cb2d360b2a
parentf20ba7c32c1b06104dd91c0c654ac1d0fc0a9c1e
signaturelock-open Commit is signed but in an unrecognized format.

std: use testing.allocator in big int tests


1 files changed, 502 insertions(+), 260 deletions(-)

lib/std/math/big/int.zig+502-260
......@@ -1360,13 +1360,10 @@ pub const Int = struct {
13601360// They will still run on larger than this and should pass, but the multi-limb code-paths
13611361// may be untested in some cases.
13621362
1363var buffer: [64 * 8192]u8 = undefined;
1364var fixed = std.heap.FixedBufferAllocator.init(buffer[0..]);
1365const al = &fixed.allocator;
1366
13671363test "big.int comptime_int set" {
13681364 comptime var s = 0xefffffff00000001eeeeeeefaaaaaaab;
1369 var a = try Int.initSet(al, s);
1365 var a = try Int.initSet(testing.allocator, s);
1366 defer a.deinit();
13701367
13711368 const s_limb_count = 128 / Limb.bit_count;
13721369
......@@ -1380,39 +1377,45 @@ test "big.int comptime_int set" {
13801377}
13811378
13821379test "big.int comptime_int set negative" {
1383 var a = try Int.initSet(al, -10);
1380 var a = try Int.initSet(testing.allocator, -10);
1381 defer a.deinit();
13841382
13851383 testing.expect(a.limbs[0] == 10);
13861384 testing.expect(a.isPositive() == false);
13871385}
13881386
13891387test "big.int int set unaligned small" {
1390 var a = try Int.initSet(al, @as(u7, 45));
1388 var a = try Int.initSet(testing.allocator, @as(u7, 45));
1389 defer a.deinit();
13911390
13921391 testing.expect(a.limbs[0] == 45);
13931392 testing.expect(a.isPositive() == true);
13941393}
13951394
13961395test "big.int comptime_int to" {
1397 const a = try Int.initSet(al, 0xefffffff00000001eeeeeeefaaaaaaab);
1396 const a = try Int.initSet(testing.allocator, 0xefffffff00000001eeeeeeefaaaaaaab);
1397 defer a.deinit();
13981398
13991399 testing.expect((try a.to(u128)) == 0xefffffff00000001eeeeeeefaaaaaaab);
14001400}
14011401
14021402test "big.int sub-limb to" {
1403 const a = try Int.initSet(al, 10);
1403 const a = try Int.initSet(testing.allocator, 10);
1404 defer a.deinit();
14041405
14051406 testing.expect((try a.to(u8)) == 10);
14061407}
14071408
14081409test "big.int to target too small error" {
1409 const a = try Int.initSet(al, 0xffffffff);
1410 const a = try Int.initSet(testing.allocator, 0xffffffff);
1411 defer a.deinit();
14101412
14111413 testing.expectError(error.TargetTooSmall, a.to(u8));
14121414}
14131415
14141416test "big.int normalize" {
1415 var a = try Int.init(al);
1417 var a = try Int.init(testing.allocator);
1418 defer a.deinit();
14161419 try a.ensureCapacity(8);
14171420
14181421 a.limbs[0] = 1;
......@@ -1439,7 +1442,8 @@ test "big.int normalize" {
14391442}
14401443
14411444test "big.int normalize multi" {
1442 var a = try Int.init(al);
1445 var a = try Int.init(testing.allocator);
1446 defer a.deinit();
14431447 try a.ensureCapacity(8);
14441448
14451449 a.limbs[0] = 1;
......@@ -1468,7 +1472,9 @@ test "big.int normalize multi" {
14681472}
14691473
14701474test "big.int parity" {
1471 var a = try Int.init(al);
1475 var a = try Int.init(testing.allocator);
1476 defer a.deinit();
1477
14721478 try a.set(0);
14731479 testing.expect(a.isEven());
14741480 testing.expect(!a.isOdd());
......@@ -1479,7 +1485,8 @@ test "big.int parity" {
14791485}
14801486
14811487test "big.int bitcount + sizeInBase" {
1482 var a = try Int.init(al);
1488 var a = try Int.init(testing.allocator);
1489 defer a.deinit();
14831490
14841491 try a.set(0b100);
14851492 testing.expect(a.bitCountAbs() == 3);
......@@ -1506,7 +1513,8 @@ test "big.int bitcount + sizeInBase" {
15061513}
15071514
15081515test "big.int bitcount/to" {
1509 var a = try Int.init(al);
1516 var a = try Int.init(testing.allocator);
1517 defer a.deinit();
15101518
15111519 try a.set(0);
15121520 testing.expect(a.bitCountTwosComp() == 0);
......@@ -1536,7 +1544,8 @@ test "big.int bitcount/to" {
15361544}
15371545
15381546test "big.int fits" {
1539 var a = try Int.init(al);
1547 var a = try Int.init(testing.allocator);
1548 defer a.deinit();
15401549
15411550 try a.set(0);
15421551 testing.expect(a.fits(u0));
......@@ -1563,82 +1572,100 @@ test "big.int fits" {
15631572}
15641573
15651574test "big.int string set" {
1566 var a = try Int.init(al);
1567 try a.setString(10, "120317241209124781241290847124");
1575 var a = try Int.init(testing.allocator);
1576 defer a.deinit();
15681577
1578 try a.setString(10, "120317241209124781241290847124");
15691579 testing.expect((try a.to(u128)) == 120317241209124781241290847124);
15701580}
15711581
15721582test "big.int string negative" {
1573 var a = try Int.init(al);
1583 var a = try Int.init(testing.allocator);
1584 defer a.deinit();
1585
15741586 try a.setString(10, "-1023");
15751587 testing.expect((try a.to(i32)) == -1023);
15761588}
15771589
15781590test "big.int string set bad char error" {
1579 var a = try Int.init(al);
1591 var a = try Int.init(testing.allocator);
1592 defer a.deinit();
15801593 testing.expectError(error.InvalidCharForDigit, a.setString(10, "x"));
15811594}
15821595
15831596test "big.int string set bad base error" {
1584 var a = try Int.init(al);
1597 var a = try Int.init(testing.allocator);
1598 defer a.deinit();
15851599 testing.expectError(error.InvalidBase, a.setString(45, "10"));
15861600}
15871601
15881602test "big.int string to" {
1589 const a = try Int.initSet(al, 120317241209124781241290847124);
1603 const a = try Int.initSet(testing.allocator, 120317241209124781241290847124);
1604 defer a.deinit();
15901605
1591 const as = try a.toString(al, 10);
1606 const as = try a.toString(testing.allocator, 10);
1607 defer testing.allocator.free(as);
15921608 const es = "120317241209124781241290847124";
15931609
15941610 testing.expect(mem.eql(u8, as, es));
15951611}
15961612
15971613test "big.int string to base base error" {
1598 const a = try Int.initSet(al, 0xffffffff);
1614 const a = try Int.initSet(testing.allocator, 0xffffffff);
1615 defer a.deinit();
15991616
1600 testing.expectError(error.InvalidBase, a.toString(al, 45));
1617 testing.expectError(error.InvalidBase, a.toString(testing.allocator, 45));
16011618}
16021619
16031620test "big.int string to base 2" {
1604 const a = try Int.initSet(al, -0b1011);
1621 const a = try Int.initSet(testing.allocator, -0b1011);
1622 defer a.deinit();
16051623
1606 const as = try a.toString(al, 2);
1624 const as = try a.toString(testing.allocator, 2);
1625 defer testing.allocator.free(as);
16071626 const es = "-1011";
16081627
16091628 testing.expect(mem.eql(u8, as, es));
16101629}
16111630
16121631test "big.int string to base 16" {
1613 const a = try Int.initSet(al, 0xefffffff00000001eeeeeeefaaaaaaab);
1632 const a = try Int.initSet(testing.allocator, 0xefffffff00000001eeeeeeefaaaaaaab);
1633 defer a.deinit();
16141634
1615 const as = try a.toString(al, 16);
1635 const as = try a.toString(testing.allocator, 16);
1636 defer testing.allocator.free(as);
16161637 const es = "efffffff00000001eeeeeeefaaaaaaab";
16171638
16181639 testing.expect(mem.eql(u8, as, es));
16191640}
16201641
16211642test "big.int neg string to" {
1622 const a = try Int.initSet(al, -123907434);
1643 const a = try Int.initSet(testing.allocator, -123907434);
1644 defer a.deinit();
16231645
1624 const as = try a.toString(al, 10);
1646 const as = try a.toString(testing.allocator, 10);
1647 defer testing.allocator.free(as);
16251648 const es = "-123907434";
16261649
16271650 testing.expect(mem.eql(u8, as, es));
16281651}
16291652
16301653test "big.int zero string to" {
1631 const a = try Int.initSet(al, 0);
1654 const a = try Int.initSet(testing.allocator, 0);
1655 defer a.deinit();
16321656
1633 const as = try a.toString(al, 10);
1657 const as = try a.toString(testing.allocator, 10);
1658 defer testing.allocator.free(as);
16341659 const es = "0";
16351660
16361661 testing.expect(mem.eql(u8, as, es));
16371662}
16381663
16391664test "big.int clone" {
1640 var a = try Int.initSet(al, 1234);
1665 var a = try Int.initSet(testing.allocator, 1234);
1666 defer a.deinit();
16411667 const b = try a.clone();
1668 defer b.deinit();
16421669
16431670 testing.expect((try a.to(u32)) == 1234);
16441671 testing.expect((try b.to(u32)) == 1234);
......@@ -1649,8 +1676,10 @@ test "big.int clone" {
16491676}
16501677
16511678test "big.int swap" {
1652 var a = try Int.initSet(al, 1234);
1653 var b = try Int.initSet(al, 5678);
1679 var a = try Int.initSet(testing.allocator, 1234);
1680 defer a.deinit();
1681 var b = try Int.initSet(testing.allocator, 5678);
1682 defer b.deinit();
16541683
16551684 testing.expect((try a.to(u32)) == 1234);
16561685 testing.expect((try b.to(u32)) == 5678);
......@@ -1662,53 +1691,65 @@ test "big.int swap" {
16621691}
16631692
16641693test "big.int to negative" {
1665 var a = try Int.initSet(al, -10);
1694 var a = try Int.initSet(testing.allocator, -10);
1695 defer a.deinit();
16661696
16671697 testing.expect((try a.to(i32)) == -10);
16681698}
16691699
16701700test "big.int compare" {
1671 var a = try Int.initSet(al, -11);
1672 var b = try Int.initSet(al, 10);
1701 var a = try Int.initSet(testing.allocator, -11);
1702 defer a.deinit();
1703 var b = try Int.initSet(testing.allocator, 10);
1704 defer b.deinit();
16731705
16741706 testing.expect(a.cmpAbs(b) == 1);
16751707 testing.expect(a.cmp(b) == -1);
16761708}
16771709
16781710test "big.int compare similar" {
1679 var a = try Int.initSet(al, 0xffffffffeeeeeeeeffffffffeeeeeeee);
1680 var b = try Int.initSet(al, 0xffffffffeeeeeeeeffffffffeeeeeeef);
1711 var a = try Int.initSet(testing.allocator, 0xffffffffeeeeeeeeffffffffeeeeeeee);
1712 defer a.deinit();
1713 var b = try Int.initSet(testing.allocator, 0xffffffffeeeeeeeeffffffffeeeeeeef);
1714 defer b.deinit();
16811715
16821716 testing.expect(a.cmpAbs(b) == -1);
16831717 testing.expect(b.cmpAbs(a) == 1);
16841718}
16851719
16861720test "big.int compare different limb size" {
1687 var a = try Int.initSet(al, maxInt(Limb) + 1);
1688 var b = try Int.initSet(al, 1);
1721 var a = try Int.initSet(testing.allocator, maxInt(Limb) + 1);
1722 defer a.deinit();
1723 var b = try Int.initSet(testing.allocator, 1);
1724 defer b.deinit();
16891725
16901726 testing.expect(a.cmpAbs(b) == 1);
16911727 testing.expect(b.cmpAbs(a) == -1);
16921728}
16931729
16941730test "big.int compare multi-limb" {
1695 var a = try Int.initSet(al, -0x7777777799999999ffffeeeeffffeeeeffffeeeef);
1696 var b = try Int.initSet(al, 0x7777777799999999ffffeeeeffffeeeeffffeeeee);
1731 var a = try Int.initSet(testing.allocator, -0x7777777799999999ffffeeeeffffeeeeffffeeeef);
1732 defer a.deinit();
1733 var b = try Int.initSet(testing.allocator, 0x7777777799999999ffffeeeeffffeeeeffffeeeee);
1734 defer b.deinit();
16971735
16981736 testing.expect(a.cmpAbs(b) == 1);
16991737 testing.expect(a.cmp(b) == -1);
17001738}
17011739
17021740test "big.int equality" {
1703 var a = try Int.initSet(al, 0xffffffff1);
1704 var b = try Int.initSet(al, -0xffffffff1);
1741 var a = try Int.initSet(testing.allocator, 0xffffffff1);
1742 defer a.deinit();
1743 var b = try Int.initSet(testing.allocator, -0xffffffff1);
1744 defer b.deinit();
17051745
17061746 testing.expect(a.eqAbs(b));
17071747 testing.expect(!a.eq(b));
17081748}
17091749
17101750test "big.int abs" {
1711 var a = try Int.initSet(al, -5);
1751 var a = try Int.initSet(testing.allocator, -5);
1752 defer a.deinit();
17121753
17131754 a.abs();
17141755 testing.expect((try a.to(u32)) == 5);
......@@ -1718,7 +1759,8 @@ test "big.int abs" {
17181759}
17191760
17201761test "big.int negate" {
1721 var a = try Int.initSet(al, 5);
1762 var a = try Int.initSet(testing.allocator, 5);
1763 defer a.deinit();
17221764
17231765 a.negate();
17241766 testing.expect((try a.to(i32)) == -5);
......@@ -1728,20 +1770,26 @@ test "big.int negate" {
17281770}
17291771
17301772test "big.int add single-single" {
1731 var a = try Int.initSet(al, 50);
1732 var b = try Int.initSet(al, 5);
1773 var a = try Int.initSet(testing.allocator, 50);
1774 defer a.deinit();
1775 var b = try Int.initSet(testing.allocator, 5);
1776 defer b.deinit();
17331777
1734 var c = try Int.init(al);
1778 var c = try Int.init(testing.allocator);
1779 defer c.deinit();
17351780 try c.add(a, b);
17361781
17371782 testing.expect((try c.to(u32)) == 55);
17381783}
17391784
17401785test "big.int add multi-single" {
1741 var a = try Int.initSet(al, maxInt(Limb) + 1);
1742 var b = try Int.initSet(al, 1);
1786 var a = try Int.initSet(testing.allocator, maxInt(Limb) + 1);
1787 defer a.deinit();
1788 var b = try Int.initSet(testing.allocator, 1);
1789 defer b.deinit();
17431790
1744 var c = try Int.init(al);
1791 var c = try Int.init(testing.allocator);
1792 defer c.deinit();
17451793
17461794 try c.add(a, b);
17471795 testing.expect((try c.to(DoubleLimb)) == maxInt(Limb) + 2);
......@@ -1753,20 +1801,26 @@ test "big.int add multi-single" {
17531801test "big.int add multi-multi" {
17541802 const op1 = 0xefefefef7f7f7f7f;
17551803 const op2 = 0xfefefefe9f9f9f9f;
1756 var a = try Int.initSet(al, op1);
1757 var b = try Int.initSet(al, op2);
1804 var a = try Int.initSet(testing.allocator, op1);
1805 defer a.deinit();
1806 var b = try Int.initSet(testing.allocator, op2);
1807 defer b.deinit();
17581808
1759 var c = try Int.init(al);
1809 var c = try Int.init(testing.allocator);
1810 defer c.deinit();
17601811 try c.add(a, b);
17611812
17621813 testing.expect((try c.to(u128)) == op1 + op2);
17631814}
17641815
17651816test "big.int add zero-zero" {
1766 var a = try Int.initSet(al, 0);
1767 var b = try Int.initSet(al, 0);
1817 var a = try Int.initSet(testing.allocator, 0);
1818 defer a.deinit();
1819 var b = try Int.initSet(testing.allocator, 0);
1820 defer b.deinit();
17681821
1769 var c = try Int.init(al);
1822 var c = try Int.init(testing.allocator);
1823 defer c.deinit();
17701824 try c.add(a, b);
17711825
17721826 testing.expect((try c.to(u32)) == 0);
......@@ -1774,8 +1828,10 @@ test "big.int add zero-zero" {
17741828
17751829test "big.int add alias multi-limb nonzero-zero" {
17761830 const op1 = 0xffffffff777777771;
1777 var a = try Int.initSet(al, op1);
1778 var b = try Int.initSet(al, 0);
1831 var a = try Int.initSet(testing.allocator, op1);
1832 defer a.deinit();
1833 var b = try Int.initSet(testing.allocator, 0);
1834 defer b.deinit();
17791835
17801836 try a.add(a, b);
17811837
......@@ -1783,12 +1839,17 @@ test "big.int add alias multi-limb nonzero-zero" {
17831839}
17841840
17851841test "big.int add sign" {
1786 var a = try Int.init(al);
1787
1788 const one = try Int.initSet(al, 1);
1789 const two = try Int.initSet(al, 2);
1790 const neg_one = try Int.initSet(al, -1);
1791 const neg_two = try Int.initSet(al, -2);
1842 var a = try Int.init(testing.allocator);
1843 defer a.deinit();
1844
1845 const one = try Int.initSet(testing.allocator, 1);
1846 defer one.deinit();
1847 const two = try Int.initSet(testing.allocator, 2);
1848 defer two.deinit();
1849 const neg_one = try Int.initSet(testing.allocator, -1);
1850 defer neg_one.deinit();
1851 const neg_two = try Int.initSet(testing.allocator, -2);
1852 defer neg_two.deinit();
17921853
17931854 try a.add(one, two);
17941855 testing.expect((try a.to(i32)) == 3);
......@@ -1804,20 +1865,26 @@ test "big.int add sign" {
18041865}
18051866
18061867test "big.int sub single-single" {
1807 var a = try Int.initSet(al, 50);
1808 var b = try Int.initSet(al, 5);
1868 var a = try Int.initSet(testing.allocator, 50);
1869 defer a.deinit();
1870 var b = try Int.initSet(testing.allocator, 5);
1871 defer b.deinit();
18091872
1810 var c = try Int.init(al);
1873 var c = try Int.init(testing.allocator);
1874 defer c.deinit();
18111875 try c.sub(a, b);
18121876
18131877 testing.expect((try c.to(u32)) == 45);
18141878}
18151879
18161880test "big.int sub multi-single" {
1817 var a = try Int.initSet(al, maxInt(Limb) + 1);
1818 var b = try Int.initSet(al, 1);
1881 var a = try Int.initSet(testing.allocator, maxInt(Limb) + 1);
1882 defer a.deinit();
1883 var b = try Int.initSet(testing.allocator, 1);
1884 defer b.deinit();
18191885
1820 var c = try Int.init(al);
1886 var c = try Int.init(testing.allocator);
1887 defer c.deinit();
18211888 try c.sub(a, b);
18221889
18231890 testing.expect((try c.to(Limb)) == maxInt(Limb));
......@@ -1827,32 +1894,43 @@ test "big.int sub multi-multi" {
18271894 const op1 = 0xefefefefefefefefefefefef;
18281895 const op2 = 0xabababababababababababab;
18291896
1830 var a = try Int.initSet(al, op1);
1831 var b = try Int.initSet(al, op2);
1897 var a = try Int.initSet(testing.allocator, op1);
1898 defer a.deinit();
1899 var b = try Int.initSet(testing.allocator, op2);
1900 defer b.deinit();
18321901
1833 var c = try Int.init(al);
1902 var c = try Int.init(testing.allocator);
1903 defer c.deinit();
18341904 try c.sub(a, b);
18351905
18361906 testing.expect((try c.to(u128)) == op1 - op2);
18371907}
18381908
18391909test "big.int sub equal" {
1840 var a = try Int.initSet(al, 0x11efefefefefefefefefefefef);
1841 var b = try Int.initSet(al, 0x11efefefefefefefefefefefef);
1910 var a = try Int.initSet(testing.allocator, 0x11efefefefefefefefefefefef);
1911 defer a.deinit();
1912 var b = try Int.initSet(testing.allocator, 0x11efefefefefefefefefefefef);
1913 defer b.deinit();
18421914
1843 var c = try Int.init(al);
1915 var c = try Int.init(testing.allocator);
1916 defer c.deinit();
18441917 try c.sub(a, b);
18451918
18461919 testing.expect((try c.to(u32)) == 0);
18471920}
18481921
18491922test "big.int sub sign" {
1850 var a = try Int.init(al);
1851
1852 const one = try Int.initSet(al, 1);
1853 const two = try Int.initSet(al, 2);
1854 const neg_one = try Int.initSet(al, -1);
1855 const neg_two = try Int.initSet(al, -2);
1923 var a = try Int.init(testing.allocator);
1924 defer a.deinit();
1925
1926 const one = try Int.initSet(testing.allocator, 1);
1927 defer one.deinit();
1928 const two = try Int.initSet(testing.allocator, 2);
1929 defer two.deinit();
1930 const neg_one = try Int.initSet(testing.allocator, -1);
1931 defer neg_one.deinit();
1932 const neg_two = try Int.initSet(testing.allocator, -2);
1933 defer neg_two.deinit();
18561934
18571935 try a.sub(one, two);
18581936 testing.expect((try a.to(i32)) == -1);
......@@ -1871,20 +1949,26 @@ test "big.int sub sign" {
18711949}
18721950
18731951test "big.int mul single-single" {
1874 var a = try Int.initSet(al, 50);
1875 var b = try Int.initSet(al, 5);
1952 var a = try Int.initSet(testing.allocator, 50);
1953 defer a.deinit();
1954 var b = try Int.initSet(testing.allocator, 5);
1955 defer b.deinit();
18761956
1877 var c = try Int.init(al);
1957 var c = try Int.init(testing.allocator);
1958 defer c.deinit();
18781959 try c.mul(a, b);
18791960
18801961 testing.expect((try c.to(u64)) == 250);
18811962}
18821963
18831964test "big.int mul multi-single" {
1884 var a = try Int.initSet(al, maxInt(Limb));
1885 var b = try Int.initSet(al, 2);
1965 var a = try Int.initSet(testing.allocator, maxInt(Limb));
1966 defer a.deinit();
1967 var b = try Int.initSet(testing.allocator, 2);
1968 defer b.deinit();
18861969
1887 var c = try Int.init(al);
1970 var c = try Int.init(testing.allocator);
1971 defer c.deinit();
18881972 try c.mul(a, b);
18891973
18901974 testing.expect((try c.to(DoubleLimb)) == 2 * maxInt(Limb));
......@@ -1893,18 +1977,23 @@ test "big.int mul multi-single" {
18931977test "big.int mul multi-multi" {
18941978 const op1 = 0x998888efefefefefefefef;
18951979 const op2 = 0x333000abababababababab;
1896 var a = try Int.initSet(al, op1);
1897 var b = try Int.initSet(al, op2);
1980 var a = try Int.initSet(testing.allocator, op1);
1981 defer a.deinit();
1982 var b = try Int.initSet(testing.allocator, op2);
1983 defer b.deinit();
18981984
1899 var c = try Int.init(al);
1985 var c = try Int.init(testing.allocator);
1986 defer c.deinit();
19001987 try c.mul(a, b);
19011988
19021989 testing.expect((try c.to(u256)) == op1 * op2);
19031990}
19041991
19051992test "big.int mul alias r with a" {
1906 var a = try Int.initSet(al, maxInt(Limb));
1907 var b = try Int.initSet(al, 2);
1993 var a = try Int.initSet(testing.allocator, maxInt(Limb));
1994 defer a.deinit();
1995 var b = try Int.initSet(testing.allocator, 2);
1996 defer b.deinit();
19081997
19091998 try a.mul(a, b);
19101999
......@@ -1912,8 +2001,10 @@ test "big.int mul alias r with a" {
19122001}
19132002
19142003test "big.int mul alias r with b" {
1915 var a = try Int.initSet(al, maxInt(Limb));
1916 var b = try Int.initSet(al, 2);
2004 var a = try Int.initSet(testing.allocator, maxInt(Limb));
2005 defer a.deinit();
2006 var b = try Int.initSet(testing.allocator, 2);
2007 defer b.deinit();
19172008
19182009 try a.mul(b, a);
19192010
......@@ -1921,7 +2012,8 @@ test "big.int mul alias r with b" {
19212012}
19222013
19232014test "big.int mul alias r with a and b" {
1924 var a = try Int.initSet(al, maxInt(Limb));
2015 var a = try Int.initSet(testing.allocator, maxInt(Limb));
2016 defer a.deinit();
19252017
19262018 try a.mul(a, a);
19272019
......@@ -1929,31 +2021,41 @@ test "big.int mul alias r with a and b" {
19292021}
19302022
19312023test "big.int mul a*0" {
1932 var a = try Int.initSet(al, 0xefefefefefefefef);
1933 var b = try Int.initSet(al, 0);
2024 var a = try Int.initSet(testing.allocator, 0xefefefefefefefef);
2025 defer a.deinit();
2026 var b = try Int.initSet(testing.allocator, 0);
2027 defer b.deinit();
19342028
1935 var c = try Int.init(al);
2029 var c = try Int.init(testing.allocator);
2030 defer c.deinit();
19362031 try c.mul(a, b);
19372032
19382033 testing.expect((try c.to(u32)) == 0);
19392034}
19402035
19412036test "big.int mul 0*0" {
1942 var a = try Int.initSet(al, 0);
1943 var b = try Int.initSet(al, 0);
2037 var a = try Int.initSet(testing.allocator, 0);
2038 defer a.deinit();
2039 var b = try Int.initSet(testing.allocator, 0);
2040 defer b.deinit();
19442041
1945 var c = try Int.init(al);
2042 var c = try Int.init(testing.allocator);
2043 defer c.deinit();
19462044 try c.mul(a, b);
19472045
19482046 testing.expect((try c.to(u32)) == 0);
19492047}
19502048
19512049test "big.int div single-single no rem" {
1952 var a = try Int.initSet(al, 50);
1953 var b = try Int.initSet(al, 5);
1954
1955 var q = try Int.init(al);
1956 var r = try Int.init(al);
2050 var a = try Int.initSet(testing.allocator, 50);
2051 defer a.deinit();
2052 var b = try Int.initSet(testing.allocator, 5);
2053 defer b.deinit();
2054
2055 var q = try Int.init(testing.allocator);
2056 defer q.deinit();
2057 var r = try Int.init(testing.allocator);
2058 defer r.deinit();
19572059 try Int.divTrunc(&q, &r, a, b);
19582060
19592061 testing.expect((try q.to(u32)) == 10);
......@@ -1961,11 +2063,15 @@ test "big.int div single-single no rem" {
19612063}
19622064
19632065test "big.int div single-single with rem" {
1964 var a = try Int.initSet(al, 49);
1965 var b = try Int.initSet(al, 5);
1966
1967 var q = try Int.init(al);
1968 var r = try Int.init(al);
2066 var a = try Int.initSet(testing.allocator, 49);
2067 defer a.deinit();
2068 var b = try Int.initSet(testing.allocator, 5);
2069 defer b.deinit();
2070
2071 var q = try Int.init(testing.allocator);
2072 defer q.deinit();
2073 var r = try Int.init(testing.allocator);
2074 defer r.deinit();
19692075 try Int.divTrunc(&q, &r, a, b);
19702076
19712077 testing.expect((try q.to(u32)) == 9);
......@@ -1976,11 +2082,15 @@ test "big.int div multi-single no rem" {
19762082 const op1 = 0xffffeeeeddddcccc;
19772083 const op2 = 34;
19782084
1979 var a = try Int.initSet(al, op1);
1980 var b = try Int.initSet(al, op2);
2085 var a = try Int.initSet(testing.allocator, op1);
2086 defer a.deinit();
2087 var b = try Int.initSet(testing.allocator, op2);
2088 defer b.deinit();
19812089
1982 var q = try Int.init(al);
1983 var r = try Int.init(al);
2090 var q = try Int.init(testing.allocator);
2091 defer q.deinit();
2092 var r = try Int.init(testing.allocator);
2093 defer r.deinit();
19842094 try Int.divTrunc(&q, &r, a, b);
19852095
19862096 testing.expect((try q.to(u64)) == op1 / op2);
......@@ -1991,11 +2101,15 @@ test "big.int div multi-single with rem" {
19912101 const op1 = 0xffffeeeeddddcccf;
19922102 const op2 = 34;
19932103
1994 var a = try Int.initSet(al, op1);
1995 var b = try Int.initSet(al, op2);
2104 var a = try Int.initSet(testing.allocator, op1);
2105 defer a.deinit();
2106 var b = try Int.initSet(testing.allocator, op2);
2107 defer b.deinit();
19962108
1997 var q = try Int.init(al);
1998 var r = try Int.init(al);
2109 var q = try Int.init(testing.allocator);
2110 defer q.deinit();
2111 var r = try Int.init(testing.allocator);
2112 defer r.deinit();
19992113 try Int.divTrunc(&q, &r, a, b);
20002114
20012115 testing.expect((try q.to(u64)) == op1 / op2);
......@@ -2006,11 +2120,15 @@ test "big.int div multi>2-single" {
20062120 const op1 = 0xfefefefefefefefefefefefefefefefe;
20072121 const op2 = 0xefab8;
20082122
2009 var a = try Int.initSet(al, op1);
2010 var b = try Int.initSet(al, op2);
2123 var a = try Int.initSet(testing.allocator, op1);
2124 defer a.deinit();
2125 var b = try Int.initSet(testing.allocator, op2);
2126 defer b.deinit();
20112127
2012 var q = try Int.init(al);
2013 var r = try Int.init(al);
2128 var q = try Int.init(testing.allocator);
2129 defer q.deinit();
2130 var r = try Int.init(testing.allocator);
2131 defer r.deinit();
20142132 try Int.divTrunc(&q, &r, a, b);
20152133
20162134 testing.expect((try q.to(u128)) == op1 / op2);
......@@ -2018,11 +2136,15 @@ test "big.int div multi>2-single" {
20182136}
20192137
20202138test "big.int div single-single q < r" {
2021 var a = try Int.initSet(al, 0x0078f432);
2022 var b = try Int.initSet(al, 0x01000000);
2023
2024 var q = try Int.init(al);
2025 var r = try Int.init(al);
2139 var a = try Int.initSet(testing.allocator, 0x0078f432);
2140 defer a.deinit();
2141 var b = try Int.initSet(testing.allocator, 0x01000000);
2142 defer b.deinit();
2143
2144 var q = try Int.init(testing.allocator);
2145 defer q.deinit();
2146 var r = try Int.init(testing.allocator);
2147 defer r.deinit();
20262148 try Int.divTrunc(&q, &r, a, b);
20272149
20282150 testing.expect((try q.to(u64)) == 0);
......@@ -2030,11 +2152,15 @@ test "big.int div single-single q < r" {
20302152}
20312153
20322154test "big.int div single-single q == r" {
2033 var a = try Int.initSet(al, 10);
2034 var b = try Int.initSet(al, 10);
2035
2036 var q = try Int.init(al);
2037 var r = try Int.init(al);
2155 var a = try Int.initSet(testing.allocator, 10);
2156 defer a.deinit();
2157 var b = try Int.initSet(testing.allocator, 10);
2158 defer b.deinit();
2159
2160 var q = try Int.init(testing.allocator);
2161 defer q.deinit();
2162 var r = try Int.init(testing.allocator);
2163 defer r.deinit();
20382164 try Int.divTrunc(&q, &r, a, b);
20392165
20402166 testing.expect((try q.to(u64)) == 1);
......@@ -2042,8 +2168,10 @@ test "big.int div single-single q == r" {
20422168}
20432169
20442170test "big.int div q=0 alias" {
2045 var a = try Int.initSet(al, 3);
2046 var b = try Int.initSet(al, 10);
2171 var a = try Int.initSet(testing.allocator, 3);
2172 defer a.deinit();
2173 var b = try Int.initSet(testing.allocator, 10);
2174 defer b.deinit();
20472175
20482176 try Int.divTrunc(&a, &b, a, b);
20492177
......@@ -2054,11 +2182,15 @@ test "big.int div q=0 alias" {
20542182test "big.int div multi-multi q < r" {
20552183 const op1 = 0x1ffffffff0078f432;
20562184 const op2 = 0x1ffffffff01000000;
2057 var a = try Int.initSet(al, op1);
2058 var b = try Int.initSet(al, op2);
2059
2060 var q = try Int.init(al);
2061 var r = try Int.init(al);
2185 var a = try Int.initSet(testing.allocator, op1);
2186 defer a.deinit();
2187 var b = try Int.initSet(testing.allocator, op2);
2188 defer b.deinit();
2189
2190 var q = try Int.init(testing.allocator);
2191 defer q.deinit();
2192 var r = try Int.init(testing.allocator);
2193 defer r.deinit();
20622194 try Int.divTrunc(&q, &r, a, b);
20632195
20642196 testing.expect((try q.to(u128)) == 0);
......@@ -2069,11 +2201,15 @@ test "big.int div trunc single-single +/+" {
20692201 const u: i32 = 5;
20702202 const v: i32 = 3;
20712203
2072 var a = try Int.initSet(al, u);
2073 var b = try Int.initSet(al, v);
2204 var a = try Int.initSet(testing.allocator, u);
2205 defer a.deinit();
2206 var b = try Int.initSet(testing.allocator, v);
2207 defer b.deinit();
20742208
2075 var q = try Int.init(al);
2076 var r = try Int.init(al);
2209 var q = try Int.init(testing.allocator);
2210 defer q.deinit();
2211 var r = try Int.init(testing.allocator);
2212 defer r.deinit();
20772213 try Int.divTrunc(&q, &r, a, b);
20782214
20792215 // n = q * d + r
......@@ -2089,11 +2225,15 @@ test "big.int div trunc single-single -/+" {
20892225 const u: i32 = -5;
20902226 const v: i32 = 3;
20912227
2092 var a = try Int.initSet(al, u);
2093 var b = try Int.initSet(al, v);
2228 var a = try Int.initSet(testing.allocator, u);
2229 defer a.deinit();
2230 var b = try Int.initSet(testing.allocator, v);
2231 defer b.deinit();
20942232
2095 var q = try Int.init(al);
2096 var r = try Int.init(al);
2233 var q = try Int.init(testing.allocator);
2234 defer q.deinit();
2235 var r = try Int.init(testing.allocator);
2236 defer r.deinit();
20972237 try Int.divTrunc(&q, &r, a, b);
20982238
20992239 // n = q * d + r
......@@ -2109,11 +2249,15 @@ test "big.int div trunc single-single +/-" {
21092249 const u: i32 = 5;
21102250 const v: i32 = -3;
21112251
2112 var a = try Int.initSet(al, u);
2113 var b = try Int.initSet(al, v);
2252 var a = try Int.initSet(testing.allocator, u);
2253 defer a.deinit();
2254 var b = try Int.initSet(testing.allocator, v);
2255 defer b.deinit();
21142256
2115 var q = try Int.init(al);
2116 var r = try Int.init(al);
2257 var q = try Int.init(testing.allocator);
2258 defer q.deinit();
2259 var r = try Int.init(testing.allocator);
2260 defer r.deinit();
21172261 try Int.divTrunc(&q, &r, a, b);
21182262
21192263 // n = q * d + r
......@@ -2129,11 +2273,15 @@ test "big.int div trunc single-single -/-" {
21292273 const u: i32 = -5;
21302274 const v: i32 = -3;
21312275
2132 var a = try Int.initSet(al, u);
2133 var b = try Int.initSet(al, v);
2276 var a = try Int.initSet(testing.allocator, u);
2277 defer a.deinit();
2278 var b = try Int.initSet(testing.allocator, v);
2279 defer b.deinit();
21342280
2135 var q = try Int.init(al);
2136 var r = try Int.init(al);
2281 var q = try Int.init(testing.allocator);
2282 defer q.deinit();
2283 var r = try Int.init(testing.allocator);
2284 defer r.deinit();
21372285 try Int.divTrunc(&q, &r, a, b);
21382286
21392287 // n = q * d + r
......@@ -2149,11 +2297,15 @@ test "big.int div floor single-single +/+" {
21492297 const u: i32 = 5;
21502298 const v: i32 = 3;
21512299
2152 var a = try Int.initSet(al, u);
2153 var b = try Int.initSet(al, v);
2300 var a = try Int.initSet(testing.allocator, u);
2301 defer a.deinit();
2302 var b = try Int.initSet(testing.allocator, v);
2303 defer b.deinit();
21542304
2155 var q = try Int.init(al);
2156 var r = try Int.init(al);
2305 var q = try Int.init(testing.allocator);
2306 defer q.deinit();
2307 var r = try Int.init(testing.allocator);
2308 defer r.deinit();
21572309 try Int.divFloor(&q, &r, a, b);
21582310
21592311 // n = q * d + r
......@@ -2169,11 +2321,15 @@ test "big.int div floor single-single -/+" {
21692321 const u: i32 = -5;
21702322 const v: i32 = 3;
21712323
2172 var a = try Int.initSet(al, u);
2173 var b = try Int.initSet(al, v);
2324 var a = try Int.initSet(testing.allocator, u);
2325 defer a.deinit();
2326 var b = try Int.initSet(testing.allocator, v);
2327 defer b.deinit();
21742328
2175 var q = try Int.init(al);
2176 var r = try Int.init(al);
2329 var q = try Int.init(testing.allocator);
2330 defer q.deinit();
2331 var r = try Int.init(testing.allocator);
2332 defer r.deinit();
21772333 try Int.divFloor(&q, &r, a, b);
21782334
21792335 // n = q * d + r
......@@ -2189,11 +2345,15 @@ test "big.int div floor single-single +/-" {
21892345 const u: i32 = 5;
21902346 const v: i32 = -3;
21912347
2192 var a = try Int.initSet(al, u);
2193 var b = try Int.initSet(al, v);
2348 var a = try Int.initSet(testing.allocator, u);
2349 defer a.deinit();
2350 var b = try Int.initSet(testing.allocator, v);
2351 defer b.deinit();
21942352
2195 var q = try Int.init(al);
2196 var r = try Int.init(al);
2353 var q = try Int.init(testing.allocator);
2354 defer q.deinit();
2355 var r = try Int.init(testing.allocator);
2356 defer r.deinit();
21972357 try Int.divFloor(&q, &r, a, b);
21982358
21992359 // n = q * d + r
......@@ -2209,11 +2369,15 @@ test "big.int div floor single-single -/-" {
22092369 const u: i32 = -5;
22102370 const v: i32 = -3;
22112371
2212 var a = try Int.initSet(al, u);
2213 var b = try Int.initSet(al, v);
2372 var a = try Int.initSet(testing.allocator, u);
2373 defer a.deinit();
2374 var b = try Int.initSet(testing.allocator, v);
2375 defer b.deinit();
22142376
2215 var q = try Int.init(al);
2216 var r = try Int.init(al);
2377 var q = try Int.init(testing.allocator);
2378 defer q.deinit();
2379 var r = try Int.init(testing.allocator);
2380 defer r.deinit();
22172381 try Int.divFloor(&q, &r, a, b);
22182382
22192383 // n = q * d + r
......@@ -2226,11 +2390,15 @@ test "big.int div floor single-single -/-" {
22262390}
22272391
22282392test "big.int div multi-multi with rem" {
2229 var a = try Int.initSet(al, 0x8888999911110000ffffeeeeddddccccbbbbaaaa9999);
2230 var b = try Int.initSet(al, 0x99990000111122223333);
2231
2232 var q = try Int.init(al);
2233 var r = try Int.init(al);
2393 var a = try Int.initSet(testing.allocator, 0x8888999911110000ffffeeeeddddccccbbbbaaaa9999);
2394 defer a.deinit();
2395 var b = try Int.initSet(testing.allocator, 0x99990000111122223333);
2396 defer b.deinit();
2397
2398 var q = try Int.init(testing.allocator);
2399 defer q.deinit();
2400 var r = try Int.init(testing.allocator);
2401 defer r.deinit();
22342402 try Int.divTrunc(&q, &r, a, b);
22352403
22362404 testing.expect((try q.to(u128)) == 0xe38f38e39161aaabd03f0f1b);
......@@ -2238,11 +2406,15 @@ test "big.int div multi-multi with rem" {
22382406}
22392407
22402408test "big.int div multi-multi no rem" {
2241 var a = try Int.initSet(al, 0x8888999911110000ffffeeeedb4fec200ee3a4286361);
2242 var b = try Int.initSet(al, 0x99990000111122223333);
2243
2244 var q = try Int.init(al);
2245 var r = try Int.init(al);
2409 var a = try Int.initSet(testing.allocator, 0x8888999911110000ffffeeeedb4fec200ee3a4286361);
2410 defer a.deinit();
2411 var b = try Int.initSet(testing.allocator, 0x99990000111122223333);
2412 defer b.deinit();
2413
2414 var q = try Int.init(testing.allocator);
2415 defer q.deinit();
2416 var r = try Int.init(testing.allocator);
2417 defer r.deinit();
22462418 try Int.divTrunc(&q, &r, a, b);
22472419
22482420 testing.expect((try q.to(u128)) == 0xe38f38e39161aaabd03f0f1b);
......@@ -2250,11 +2422,15 @@ test "big.int div multi-multi no rem" {
22502422}
22512423
22522424test "big.int div multi-multi (2 branch)" {
2253 var a = try Int.initSet(al, 0x866666665555555588888887777777761111111111111111);
2254 var b = try Int.initSet(al, 0x86666666555555554444444433333333);
2255
2256 var q = try Int.init(al);
2257 var r = try Int.init(al);
2425 var a = try Int.initSet(testing.allocator, 0x866666665555555588888887777777761111111111111111);
2426 defer a.deinit();
2427 var b = try Int.initSet(testing.allocator, 0x86666666555555554444444433333333);
2428 defer b.deinit();
2429
2430 var q = try Int.init(testing.allocator);
2431 defer q.deinit();
2432 var r = try Int.init(testing.allocator);
2433 defer r.deinit();
22582434 try Int.divTrunc(&q, &r, a, b);
22592435
22602436 testing.expect((try q.to(u128)) == 0x10000000000000000);
......@@ -2262,11 +2438,15 @@ test "big.int div multi-multi (2 branch)" {
22622438}
22632439
22642440test "big.int div multi-multi (3.1/3.3 branch)" {
2265 var a = try Int.initSet(al, 0x11111111111111111111111111111111111111111111111111111111111111);
2266 var b = try Int.initSet(al, 0x1111111111111111111111111111111111111111171);
2267
2268 var q = try Int.init(al);
2269 var r = try Int.init(al);
2441 var a = try Int.initSet(testing.allocator, 0x11111111111111111111111111111111111111111111111111111111111111);
2442 defer a.deinit();
2443 var b = try Int.initSet(testing.allocator, 0x1111111111111111111111111111111111111111171);
2444 defer b.deinit();
2445
2446 var q = try Int.init(testing.allocator);
2447 defer q.deinit();
2448 var r = try Int.init(testing.allocator);
2449 defer r.deinit();
22702450 try Int.divTrunc(&q, &r, a, b);
22712451
22722452 testing.expect((try q.to(u128)) == 0xfffffffffffffffffff);
......@@ -2274,145 +2454,189 @@ test "big.int div multi-multi (3.1/3.3 branch)" {
22742454}
22752455
22762456test "big.int div multi-single zero-limb trailing" {
2277 var a = try Int.initSet(al, 0x60000000000000000000000000000000000000000000000000000000000000000);
2278 var b = try Int.initSet(al, 0x10000000000000000);
2279
2280 var q = try Int.init(al);
2281 var r = try Int.init(al);
2457 var a = try Int.initSet(testing.allocator, 0x60000000000000000000000000000000000000000000000000000000000000000);
2458 defer a.deinit();
2459 var b = try Int.initSet(testing.allocator, 0x10000000000000000);
2460 defer b.deinit();
2461
2462 var q = try Int.init(testing.allocator);
2463 defer q.deinit();
2464 var r = try Int.init(testing.allocator);
2465 defer r.deinit();
22822466 try Int.divTrunc(&q, &r, a, b);
22832467
2284 var expected = try Int.initSet(al, 0x6000000000000000000000000000000000000000000000000);
2468 var expected = try Int.initSet(testing.allocator, 0x6000000000000000000000000000000000000000000000000);
2469 defer expected.deinit();
22852470 testing.expect(q.eq(expected));
22862471 testing.expect(r.eqZero());
22872472}
22882473
22892474test "big.int div multi-multi zero-limb trailing (with rem)" {
2290 var a = try Int.initSet(al, 0x86666666555555558888888777777776111111111111111100000000000000000000000000000000);
2291 var b = try Int.initSet(al, 0x8666666655555555444444443333333300000000000000000000000000000000);
2292
2293 var q = try Int.init(al);
2294 var r = try Int.init(al);
2475 var a = try Int.initSet(testing.allocator, 0x86666666555555558888888777777776111111111111111100000000000000000000000000000000);
2476 defer a.deinit();
2477 var b = try Int.initSet(testing.allocator, 0x8666666655555555444444443333333300000000000000000000000000000000);
2478 defer b.deinit();
2479
2480 var q = try Int.init(testing.allocator);
2481 defer q.deinit();
2482 var r = try Int.init(testing.allocator);
2483 defer r.deinit();
22952484 try Int.divTrunc(&q, &r, a, b);
22962485
22972486 testing.expect((try q.to(u128)) == 0x10000000000000000);
22982487
2299 const rs = try r.toString(al, 16);
2488 const rs = try r.toString(testing.allocator, 16);
2489 defer testing.allocator.free(rs);
23002490 testing.expect(std.mem.eql(u8, rs, "4444444344444443111111111111111100000000000000000000000000000000"));
23012491}
23022492
23032493test "big.int div multi-multi zero-limb trailing (with rem) and dividend zero-limb count > divisor zero-limb count" {
2304 var a = try Int.initSet(al, 0x8666666655555555888888877777777611111111111111110000000000000000);
2305 var b = try Int.initSet(al, 0x8666666655555555444444443333333300000000000000000000000000000000);
2306
2307 var q = try Int.init(al);
2308 var r = try Int.init(al);
2494 var a = try Int.initSet(testing.allocator, 0x8666666655555555888888877777777611111111111111110000000000000000);
2495 defer a.deinit();
2496 var b = try Int.initSet(testing.allocator, 0x8666666655555555444444443333333300000000000000000000000000000000);
2497 defer b.deinit();
2498
2499 var q = try Int.init(testing.allocator);
2500 defer q.deinit();
2501 var r = try Int.init(testing.allocator);
2502 defer r.deinit();
23092503 try Int.divTrunc(&q, &r, a, b);
23102504
23112505 testing.expect((try q.to(u128)) == 0x1);
23122506
2313 const rs = try r.toString(al, 16);
2507 const rs = try r.toString(testing.allocator, 16);
2508 defer testing.allocator.free(rs);
23142509 testing.expect(std.mem.eql(u8, rs, "444444434444444311111111111111110000000000000000"));
23152510}
23162511
23172512test "big.int div multi-multi zero-limb trailing (with rem) and dividend zero-limb count < divisor zero-limb count" {
2318 var a = try Int.initSet(al, 0x86666666555555558888888777777776111111111111111100000000000000000000000000000000);
2319 var b = try Int.initSet(al, 0x866666665555555544444444333333330000000000000000);
2320
2321 var q = try Int.init(al);
2322 var r = try Int.init(al);
2513 var a = try Int.initSet(testing.allocator, 0x86666666555555558888888777777776111111111111111100000000000000000000000000000000);
2514 defer a.deinit();
2515 var b = try Int.initSet(testing.allocator, 0x866666665555555544444444333333330000000000000000);
2516 defer b.deinit();
2517
2518 var q = try Int.init(testing.allocator);
2519 defer q.deinit();
2520 var r = try Int.init(testing.allocator);
2521 defer r.deinit();
23232522 try Int.divTrunc(&q, &r, a, b);
23242523
2325 const qs = try q.toString(al, 16);
2524 const qs = try q.toString(testing.allocator, 16);
2525 defer testing.allocator.free(qs);
23262526 testing.expect(std.mem.eql(u8, qs, "10000000000000000820820803105186f"));
23272527
2328 const rs = try r.toString(al, 16);
2528 const rs = try r.toString(testing.allocator, 16);
2529 defer testing.allocator.free(rs);
23292530 testing.expect(std.mem.eql(u8, rs, "4e11f2baa5896a321d463b543d0104e30000000000000000"));
23302531}
23312532
23322533test "big.int div multi-multi fuzz case #1" {
2333 var a = try Int.init(al);
2334 var b = try Int.init(al);
2534 var a = try Int.init(testing.allocator);
2535 defer a.deinit();
2536 var b = try Int.init(testing.allocator);
2537 defer b.deinit();
23352538
23362539 try a.setString(16, "ffffffffffffffffffffffffffffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000");
23372540 try b.setString(16, "3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0000000000000000000000000000000000001ffffffffffffffffffffffffffffffffffffffffffffffffffc000000000000000000000000000000007fffffffffff");
23382541
2339 var q = try Int.init(al);
2340 var r = try Int.init(al);
2542 var q = try Int.init(testing.allocator);
2543 defer q.deinit();
2544 var r = try Int.init(testing.allocator);
2545 defer r.deinit();
23412546 try Int.divTrunc(&q, &r, a, b);
23422547
2343 const qs = try q.toString(al, 16);
2548 const qs = try q.toString(testing.allocator, 16);
2549 defer testing.allocator.free(qs);
23442550 testing.expect(std.mem.eql(u8, qs, "3ffffffffffffffffffffffffffff0000000000000000000000000000000000001ffffffffffffffffffffffffffff7fffffffe000000000000000000000000000180000000000000000000003fffffbfffffffdfffffffffffffeffff800000100101000000100000000020003fffffdfbfffffe3ffffffffffffeffff7fffc00800a100000017ffe000002000400007efbfff7fe9f00000037ffff3fff7fffa004006100000009ffe00000190038200bf7d2ff7fefe80400060000f7d7f8fbf9401fe38e0403ffc0bdffffa51102c300d7be5ef9df4e5060007b0127ad3fa69f97d0f820b6605ff617ddf7f32ad7a05c0d03f2e7bc78a6000e087a8bbcdc59e07a5a079128a7861f553ddebed7e8e56701756f9ead39b48cd1b0831889ea6ec1fddf643d0565b075ff07e6caea4e2854ec9227fd635ed60a2f5eef2893052ffd54718fa08604acbf6a15e78a467c4a3c53c0278af06c4416573f925491b195e8fd79302cb1aaf7caf4ecfc9aec1254cc969786363ac729f914c6ddcc26738d6b0facd54eba026580aba2eb6482a088b0d224a8852420b91ec1"));
23452551
2346 const rs = try r.toString(al, 16);
2552 const rs = try r.toString(testing.allocator, 16);
2553 defer testing.allocator.free(rs);
23472554 testing.expect(std.mem.eql(u8, rs, "310d1d4c414426b4836c2635bad1df3a424e50cbdd167ffccb4dfff57d36b4aae0d6ca0910698220171a0f3373c1060a046c2812f0027e321f72979daa5e7973214170d49e885de0c0ecc167837d44502430674a82522e5df6a0759548052420b91ec1"));
23482555}
23492556
23502557test "big.int div multi-multi fuzz case #2" {
2351 var a = try Int.init(al);
2352 var b = try Int.init(al);
2558 var a = try Int.init(testing.allocator);
2559 defer a.deinit();
2560 var b = try Int.init(testing.allocator);
2561 defer b.deinit();
23532562
23542563 try a.setString(16, "3ffffffffe00000000000000000000000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffe000000000000000000000000000000000000000000000000000000000000001fffffffffffffffff800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffc000000000000000000000000000000000000000000000000000000000000000");
23552564 try b.setString(16, "ffc0000000000000000000000000000000000000000000000000");
23562565
2357 var q = try Int.init(al);
2358 var r = try Int.init(al);
2566 var q = try Int.init(testing.allocator);
2567 defer q.deinit();
2568 var r = try Int.init(testing.allocator);
2569 defer r.deinit();
23592570 try Int.divTrunc(&q, &r, a, b);
23602571
2361 const qs = try q.toString(al, 16);
2572 const qs = try q.toString(testing.allocator, 16);
2573 defer testing.allocator.free(qs);
23622574 testing.expect(std.mem.eql(u8, qs, "40100400fe3f8fe3f8fe3f8fe3f8fe3f8fe4f93e4f93e4f93e4f93e4f93e4f93e4f93e4f93e4f93e4f93e4f93e4f91e4791e4791e4791e4791e4791e4791e4791e4791e4791e4791e4791e4791e4992649926499264991e4791e4791e4791e4791e4791e4791e4791e4791e4791e4791e4791e4791e4791e4791e4791e4791e4791e4791e4791e4791e4791e4791e4791e4792e4b92e4b92e4b92e4b92a4a92a4a92a4"));
23632575
2364 const rs = try r.toString(al, 16);
2576 const rs = try r.toString(testing.allocator, 16);
2577 defer testing.allocator.free(rs);
23652578 testing.expect(std.mem.eql(u8, rs, "a900000000000000000000000000000000000000000000000000"));
23662579}
23672580
23682581test "big.int shift-right single" {
2369 var a = try Int.initSet(al, 0xffff0000);
2582 var a = try Int.initSet(testing.allocator, 0xffff0000);
2583 defer a.deinit();
23702584 try a.shiftRight(a, 16);
23712585
23722586 testing.expect((try a.to(u32)) == 0xffff);
23732587}
23742588
23752589test "big.int shift-right multi" {
2376 var a = try Int.initSet(al, 0xffff0000eeee1111dddd2222cccc3333);
2590 var a = try Int.initSet(testing.allocator, 0xffff0000eeee1111dddd2222cccc3333);
2591 defer a.deinit();
23772592 try a.shiftRight(a, 67);
23782593
23792594 testing.expect((try a.to(u64)) == 0x1fffe0001dddc222);
23802595}
23812596
23822597test "big.int shift-left single" {
2383 var a = try Int.initSet(al, 0xffff);
2598 var a = try Int.initSet(testing.allocator, 0xffff);
2599 defer a.deinit();
23842600 try a.shiftLeft(a, 16);
23852601
23862602 testing.expect((try a.to(u64)) == 0xffff0000);
23872603}
23882604
23892605test "big.int shift-left multi" {
2390 var a = try Int.initSet(al, 0x1fffe0001dddc222);
2606 var a = try Int.initSet(testing.allocator, 0x1fffe0001dddc222);
2607 defer a.deinit();
23912608 try a.shiftLeft(a, 67);
23922609
23932610 testing.expect((try a.to(u128)) == 0xffff0000eeee11100000000000000000);
23942611}
23952612
23962613test "big.int shift-right negative" {
2397 var a = try Int.init(al);
2614 var a = try Int.init(testing.allocator);
2615 defer a.deinit();
23982616
2399 try a.shiftRight(try Int.initSet(al, -20), 2);
2617 try a.shiftRight(try Int.initSet(testing.allocator, -20), 2);
2618 defer a.deinit();
24002619 testing.expect((try a.to(i32)) == -20 >> 2);
24012620
2402 try a.shiftRight(try Int.initSet(al, -5), 10);
2621 try a.shiftRight(try Int.initSet(testing.allocator, -5), 10);
2622 defer a.deinit();
24032623 testing.expect((try a.to(i32)) == -5 >> 10);
24042624}
24052625
24062626test "big.int shift-left negative" {
2407 var a = try Int.init(al);
2627 var a = try Int.init(testing.allocator);
2628 defer a.deinit();
24082629
2409 try a.shiftRight(try Int.initSet(al, -10), 1232);
2630 try a.shiftRight(try Int.initSet(testing.allocator, -10), 1232);
2631 defer a.deinit();
24102632 testing.expect((try a.to(i32)) == -10 >> 1232);
24112633}
24122634
24132635test "big.int bitwise and simple" {
2414 var a = try Int.initSet(al, 0xffffffff11111111);
2415 var b = try Int.initSet(al, 0xeeeeeeee22222222);
2636 var a = try Int.initSet(testing.allocator, 0xffffffff11111111);
2637 defer a.deinit();
2638 var b = try Int.initSet(testing.allocator, 0xeeeeeeee22222222);
2639 defer b.deinit();
24162640
24172641 try a.bitAnd(a, b);
24182642
......@@ -2420,8 +2644,10 @@ test "big.int bitwise and simple" {
24202644}
24212645
24222646test "big.int bitwise and multi-limb" {
2423 var a = try Int.initSet(al, maxInt(Limb) + 1);
2424 var b = try Int.initSet(al, maxInt(Limb));
2647 var a = try Int.initSet(testing.allocator, maxInt(Limb) + 1);
2648 defer a.deinit();
2649 var b = try Int.initSet(testing.allocator, maxInt(Limb));
2650 defer b.deinit();
24252651
24262652 try a.bitAnd(a, b);
24272653
......@@ -2429,8 +2655,10 @@ test "big.int bitwise and multi-limb" {
24292655}
24302656
24312657test "big.int bitwise xor simple" {
2432 var a = try Int.initSet(al, 0xffffffff11111111);
2433 var b = try Int.initSet(al, 0xeeeeeeee22222222);
2658 var a = try Int.initSet(testing.allocator, 0xffffffff11111111);
2659 defer a.deinit();
2660 var b = try Int.initSet(testing.allocator, 0xeeeeeeee22222222);
2661 defer b.deinit();
24342662
24352663 try a.bitXor(a, b);
24362664
......@@ -2438,8 +2666,10 @@ test "big.int bitwise xor simple" {
24382666}
24392667
24402668test "big.int bitwise xor multi-limb" {
2441 var a = try Int.initSet(al, maxInt(Limb) + 1);
2442 var b = try Int.initSet(al, maxInt(Limb));
2669 var a = try Int.initSet(testing.allocator, maxInt(Limb) + 1);
2670 defer a.deinit();
2671 var b = try Int.initSet(testing.allocator, maxInt(Limb));
2672 defer b.deinit();
24432673
24442674 try a.bitXor(a, b);
24452675
......@@ -2447,8 +2677,10 @@ test "big.int bitwise xor multi-limb" {
24472677}
24482678
24492679test "big.int bitwise or simple" {
2450 var a = try Int.initSet(al, 0xffffffff11111111);
2451 var b = try Int.initSet(al, 0xeeeeeeee22222222);
2680 var a = try Int.initSet(testing.allocator, 0xffffffff11111111);
2681 defer a.deinit();
2682 var b = try Int.initSet(testing.allocator, 0xeeeeeeee22222222);
2683 defer b.deinit();
24522684
24532685 try a.bitOr(a, b);
24542686
......@@ -2456,8 +2688,10 @@ test "big.int bitwise or simple" {
24562688}
24572689
24582690test "big.int bitwise or multi-limb" {
2459 var a = try Int.initSet(al, maxInt(Limb) + 1);
2460 var b = try Int.initSet(al, maxInt(Limb));
2691 var a = try Int.initSet(testing.allocator, maxInt(Limb) + 1);
2692 defer a.deinit();
2693 var b = try Int.initSet(testing.allocator, maxInt(Limb));
2694 defer b.deinit();
24612695
24622696 try a.bitOr(a, b);
24632697
......@@ -2466,11 +2700,19 @@ test "big.int bitwise or multi-limb" {
24662700}
24672701
24682702test "big.int var args" {
2469 var a = try Int.initSet(al, 5);
2703 var a = try Int.initSet(testing.allocator, 5);
2704 defer a.deinit();
24702705
2471 try a.add(a, try Int.initSet(al, 6));
2706 const b = try Int.initSet(testing.allocator, 6);
2707 defer b.deinit();
2708 try a.add(a, b);
24722709 testing.expect((try a.to(u64)) == 11);
24732710
2474 testing.expect(a.cmp(try Int.initSet(al, 11)) == 0);
2475 testing.expect(a.cmp(try Int.initSet(al, 14)) <= 0);
2711 const c = try Int.initSet(testing.allocator, 11);
2712 defer c.deinit();
2713 testing.expect(a.cmp(c) == 0);
2714
2715 const d = try Int.initSet(testing.allocator, 14);
2716 defer d.deinit();
2717 testing.expect(a.cmp(d) <= 0);
24762718}