authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2020-02-14 09:40:08-05:00
committergravatar for noreply@github.comGitHub <noreply@github.com> 2020-02-14 09:40:08-05:00
log40b9db7cad6f876bb3e8fa32d7b32bbd4bc983ea
treeac84f7fcca0d11becb7d459c151782202f3e01c0
parent9206f8a8cde9a8c1eafc606fe6b3f4129e233aef
parent6ea6d5a4bdcf6f37c43857570522ee1308115de7
signaturebadge-question-mark Signed by PGP key 4AEE18F83AFDEB23

Merge pull request #4451 from daurnimator/use-testing.allocator

Migrate (more) tests from FixedBufferAllocator to testing.allocator

7 files changed, 651 insertions(+), 350 deletions(-)

lib/std/json.zig+15-14
......@@ -1598,21 +1598,21 @@ test "write json then parse it" {
15981598 testing.expect(mem.eql(u8, tree.root.Object.get("str").?.value.String, "hello"));
15991599}
16001600
1601fn test_parse(memory: []u8, json_str: []const u8) !Value {
1602 // buf_alloc goes out of scope, but we don't use it after parsing
1603 var buf_alloc = std.heap.FixedBufferAllocator.init(memory);
1604 var p = Parser.init(&buf_alloc.allocator, false);
1601fn test_parse(arena_allocator: *std.mem.Allocator, json_str: []const u8) !Value {
1602 var p = Parser.init(arena_allocator, false);
16051603 return (try p.parse(json_str)).root;
16061604}
16071605
16081606test "parsing empty string gives appropriate error" {
1609 var memory: [1024 * 4]u8 = undefined;
1610 testing.expectError(error.UnexpectedEndOfJson, test_parse(&memory, ""));
1607 var arena_allocator = std.heap.ArenaAllocator.init(std.testing.allocator);
1608 defer arena_allocator.deinit();
1609 testing.expectError(error.UnexpectedEndOfJson, test_parse(&arena_allocator.allocator, ""));
16111610}
16121611
16131612test "integer after float has proper type" {
1614 var memory: [1024 * 8]u8 = undefined;
1615 const json = try test_parse(&memory,
1613 var arena_allocator = std.heap.ArenaAllocator.init(std.testing.allocator);
1614 defer arena_allocator.deinit();
1615 const json = try test_parse(&arena_allocator.allocator,
16161616 \\{
16171617 \\ "float": 3.14,
16181618 \\ "ints": [1, 2, 3]
......@@ -1622,7 +1622,8 @@ test "integer after float has proper type" {
16221622}
16231623
16241624test "escaped characters" {
1625 var memory: [1024 * 16]u8 = undefined;
1625 var arena_allocator = std.heap.ArenaAllocator.init(std.testing.allocator);
1626 defer arena_allocator.deinit();
16261627 const input =
16271628 \\{
16281629 \\ "backslash": "\\",
......@@ -1638,7 +1639,7 @@ test "escaped characters" {
16381639 \\}
16391640 ;
16401641
1641 const obj = (try test_parse(&memory, input)).Object;
1642 const obj = (try test_parse(&arena_allocator.allocator, input)).Object;
16421643
16431644 testing.expectEqualSlices(u8, obj.get("backslash").?.value.String, "\\");
16441645 testing.expectEqualSlices(u8, obj.get("forwardslash").?.value.String, "/");
......@@ -1662,13 +1663,13 @@ test "string copy option" {
16621663 \\}
16631664 ;
16641665
1665 var mem_buffer: [1024 * 16]u8 = undefined;
1666 var buf_alloc = std.heap.FixedBufferAllocator.init(&mem_buffer);
1666 var arena_allocator = std.heap.ArenaAllocator.init(std.testing.allocator);
1667 defer arena_allocator.deinit();
16671668
1668 const tree_nocopy = try Parser.init(&buf_alloc.allocator, false).parse(input);
1669 const tree_nocopy = try Parser.init(&arena_allocator.allocator, false).parse(input);
16691670 const obj_nocopy = tree_nocopy.root.Object;
16701671
1671 const tree_copy = try Parser.init(&buf_alloc.allocator, true).parse(input);
1672 const tree_copy = try Parser.init(&arena_allocator.allocator, true).parse(input);
16721673 const obj_copy = tree_copy.root.Object;
16731674
16741675 for ([_][]const u8{ "noescape", "simple", "unicode", "surrogatepair" }) |field_name| {
lib/std/json/write_stream.zig+3-3
......@@ -254,11 +254,11 @@ test "json write stream" {
254254 var slice_stream = std.io.SliceOutStream.init(&out_buf);
255255 const out = &slice_stream.stream;
256256
257 var mem_buf: [1024 * 10]u8 = undefined;
258 const allocator = &std.heap.FixedBufferAllocator.init(&mem_buf).allocator;
257 var arena_allocator = std.heap.ArenaAllocator.init(std.testing.allocator);
258 defer arena_allocator.deinit();
259259
260260 var w = std.json.WriteStream(@TypeOf(out).Child, 10).init(out);
261 try w.emitJson(try getJson(allocator));
261 try w.emitJson(try getJson(&arena_allocator.allocator));
262262
263263 const result = slice_stream.getWritten();
264264 const expected =
lib/std/math/big/int.zig+503-262
......@@ -137,10 +137,9 @@ pub const Int = struct {
137137 }
138138
139139 /// Frees all memory associated with an Int.
140 pub fn deinit(self: *Int) void {
140 pub fn deinit(self: Int) void {
141141 self.assertWritable();
142142 self.allocator.?.free(self.limbs);
143 self.* = undefined;
144143 }
145144
146145 /// Clones an Int and returns a new Int with the same value. The new Int is a deep copy and
......@@ -1361,13 +1360,10 @@ pub const Int = struct {
13611360// They will still run on larger than this and should pass, but the multi-limb code-paths
13621361// may be untested in some cases.
13631362
1364var buffer: [64 * 8192]u8 = undefined;
1365var fixed = std.heap.FixedBufferAllocator.init(buffer[0..]);
1366const al = &fixed.allocator;
1367
13681363test "big.int comptime_int set" {
13691364 comptime var s = 0xefffffff00000001eeeeeeefaaaaaaab;
1370 var a = try Int.initSet(al, s);
1365 var a = try Int.initSet(testing.allocator, s);
1366 defer a.deinit();
13711367
13721368 const s_limb_count = 128 / Limb.bit_count;
13731369
......@@ -1381,39 +1377,45 @@ test "big.int comptime_int set" {
13811377}
13821378
13831379test "big.int comptime_int set negative" {
1384 var a = try Int.initSet(al, -10);
1380 var a = try Int.initSet(testing.allocator, -10);
1381 defer a.deinit();
13851382
13861383 testing.expect(a.limbs[0] == 10);
13871384 testing.expect(a.isPositive() == false);
13881385}
13891386
13901387test "big.int int set unaligned small" {
1391 var a = try Int.initSet(al, @as(u7, 45));
1388 var a = try Int.initSet(testing.allocator, @as(u7, 45));
1389 defer a.deinit();
13921390
13931391 testing.expect(a.limbs[0] == 45);
13941392 testing.expect(a.isPositive() == true);
13951393}
13961394
13971395test "big.int comptime_int to" {
1398 const a = try Int.initSet(al, 0xefffffff00000001eeeeeeefaaaaaaab);
1396 const a = try Int.initSet(testing.allocator, 0xefffffff00000001eeeeeeefaaaaaaab);
1397 defer a.deinit();
13991398
14001399 testing.expect((try a.to(u128)) == 0xefffffff00000001eeeeeeefaaaaaaab);
14011400}
14021401
14031402test "big.int sub-limb to" {
1404 const a = try Int.initSet(al, 10);
1403 const a = try Int.initSet(testing.allocator, 10);
1404 defer a.deinit();
14051405
14061406 testing.expect((try a.to(u8)) == 10);
14071407}
14081408
14091409test "big.int to target too small error" {
1410 const a = try Int.initSet(al, 0xffffffff);
1410 const a = try Int.initSet(testing.allocator, 0xffffffff);
1411 defer a.deinit();
14111412
14121413 testing.expectError(error.TargetTooSmall, a.to(u8));
14131414}
14141415
14151416test "big.int normalize" {
1416 var a = try Int.init(al);
1417 var a = try Int.init(testing.allocator);
1418 defer a.deinit();
14171419 try a.ensureCapacity(8);
14181420
14191421 a.limbs[0] = 1;
......@@ -1440,7 +1442,8 @@ test "big.int normalize" {
14401442}
14411443
14421444test "big.int normalize multi" {
1443 var a = try Int.init(al);
1445 var a = try Int.init(testing.allocator);
1446 defer a.deinit();
14441447 try a.ensureCapacity(8);
14451448
14461449 a.limbs[0] = 1;
......@@ -1469,7 +1472,9 @@ test "big.int normalize multi" {
14691472}
14701473
14711474test "big.int parity" {
1472 var a = try Int.init(al);
1475 var a = try Int.init(testing.allocator);
1476 defer a.deinit();
1477
14731478 try a.set(0);
14741479 testing.expect(a.isEven());
14751480 testing.expect(!a.isOdd());
......@@ -1480,7 +1485,8 @@ test "big.int parity" {
14801485}
14811486
14821487test "big.int bitcount + sizeInBase" {
1483 var a = try Int.init(al);
1488 var a = try Int.init(testing.allocator);
1489 defer a.deinit();
14841490
14851491 try a.set(0b100);
14861492 testing.expect(a.bitCountAbs() == 3);
......@@ -1507,7 +1513,8 @@ test "big.int bitcount + sizeInBase" {
15071513}
15081514
15091515test "big.int bitcount/to" {
1510 var a = try Int.init(al);
1516 var a = try Int.init(testing.allocator);
1517 defer a.deinit();
15111518
15121519 try a.set(0);
15131520 testing.expect(a.bitCountTwosComp() == 0);
......@@ -1537,7 +1544,8 @@ test "big.int bitcount/to" {
15371544}
15381545
15391546test "big.int fits" {
1540 var a = try Int.init(al);
1547 var a = try Int.init(testing.allocator);
1548 defer a.deinit();
15411549
15421550 try a.set(0);
15431551 testing.expect(a.fits(u0));
......@@ -1564,82 +1572,100 @@ test "big.int fits" {
15641572}
15651573
15661574test "big.int string set" {
1567 var a = try Int.init(al);
1568 try a.setString(10, "120317241209124781241290847124");
1575 var a = try Int.init(testing.allocator);
1576 defer a.deinit();
15691577
1578 try a.setString(10, "120317241209124781241290847124");
15701579 testing.expect((try a.to(u128)) == 120317241209124781241290847124);
15711580}
15721581
15731582test "big.int string negative" {
1574 var a = try Int.init(al);
1583 var a = try Int.init(testing.allocator);
1584 defer a.deinit();
1585
15751586 try a.setString(10, "-1023");
15761587 testing.expect((try a.to(i32)) == -1023);
15771588}
15781589
15791590test "big.int string set bad char error" {
1580 var a = try Int.init(al);
1591 var a = try Int.init(testing.allocator);
1592 defer a.deinit();
15811593 testing.expectError(error.InvalidCharForDigit, a.setString(10, "x"));
15821594}
15831595
15841596test "big.int string set bad base error" {
1585 var a = try Int.init(al);
1597 var a = try Int.init(testing.allocator);
1598 defer a.deinit();
15861599 testing.expectError(error.InvalidBase, a.setString(45, "10"));
15871600}
15881601
15891602test "big.int string to" {
1590 const a = try Int.initSet(al, 120317241209124781241290847124);
1603 const a = try Int.initSet(testing.allocator, 120317241209124781241290847124);
1604 defer a.deinit();
15911605
1592 const as = try a.toString(al, 10);
1606 const as = try a.toString(testing.allocator, 10);
1607 defer testing.allocator.free(as);
15931608 const es = "120317241209124781241290847124";
15941609
15951610 testing.expect(mem.eql(u8, as, es));
15961611}
15971612
15981613test "big.int string to base base error" {
1599 const a = try Int.initSet(al, 0xffffffff);
1614 const a = try Int.initSet(testing.allocator, 0xffffffff);
1615 defer a.deinit();
16001616
1601 testing.expectError(error.InvalidBase, a.toString(al, 45));
1617 testing.expectError(error.InvalidBase, a.toString(testing.allocator, 45));
16021618}
16031619
16041620test "big.int string to base 2" {
1605 const a = try Int.initSet(al, -0b1011);
1621 const a = try Int.initSet(testing.allocator, -0b1011);
1622 defer a.deinit();
16061623
1607 const as = try a.toString(al, 2);
1624 const as = try a.toString(testing.allocator, 2);
1625 defer testing.allocator.free(as);
16081626 const es = "-1011";
16091627
16101628 testing.expect(mem.eql(u8, as, es));
16111629}
16121630
16131631test "big.int string to base 16" {
1614 const a = try Int.initSet(al, 0xefffffff00000001eeeeeeefaaaaaaab);
1632 const a = try Int.initSet(testing.allocator, 0xefffffff00000001eeeeeeefaaaaaaab);
1633 defer a.deinit();
16151634
1616 const as = try a.toString(al, 16);
1635 const as = try a.toString(testing.allocator, 16);
1636 defer testing.allocator.free(as);
16171637 const es = "efffffff00000001eeeeeeefaaaaaaab";
16181638
16191639 testing.expect(mem.eql(u8, as, es));
16201640}
16211641
16221642test "big.int neg string to" {
1623 const a = try Int.initSet(al, -123907434);
1643 const a = try Int.initSet(testing.allocator, -123907434);
1644 defer a.deinit();
16241645
1625 const as = try a.toString(al, 10);
1646 const as = try a.toString(testing.allocator, 10);
1647 defer testing.allocator.free(as);
16261648 const es = "-123907434";
16271649
16281650 testing.expect(mem.eql(u8, as, es));
16291651}
16301652
16311653test "big.int zero string to" {
1632 const a = try Int.initSet(al, 0);
1654 const a = try Int.initSet(testing.allocator, 0);
1655 defer a.deinit();
16331656
1634 const as = try a.toString(al, 10);
1657 const as = try a.toString(testing.allocator, 10);
1658 defer testing.allocator.free(as);
16351659 const es = "0";
16361660
16371661 testing.expect(mem.eql(u8, as, es));
16381662}
16391663
16401664test "big.int clone" {
1641 var a = try Int.initSet(al, 1234);
1665 var a = try Int.initSet(testing.allocator, 1234);
1666 defer a.deinit();
16421667 const b = try a.clone();
1668 defer b.deinit();
16431669
16441670 testing.expect((try a.to(u32)) == 1234);
16451671 testing.expect((try b.to(u32)) == 1234);
......@@ -1650,8 +1676,10 @@ test "big.int clone" {
16501676}
16511677
16521678test "big.int swap" {
1653 var a = try Int.initSet(al, 1234);
1654 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();
16551683
16561684 testing.expect((try a.to(u32)) == 1234);
16571685 testing.expect((try b.to(u32)) == 5678);
......@@ -1663,53 +1691,65 @@ test "big.int swap" {
16631691}
16641692
16651693test "big.int to negative" {
1666 var a = try Int.initSet(al, -10);
1694 var a = try Int.initSet(testing.allocator, -10);
1695 defer a.deinit();
16671696
16681697 testing.expect((try a.to(i32)) == -10);
16691698}
16701699
16711700test "big.int compare" {
1672 var a = try Int.initSet(al, -11);
1673 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();
16741705
16751706 testing.expect(a.cmpAbs(b) == 1);
16761707 testing.expect(a.cmp(b) == -1);
16771708}
16781709
16791710test "big.int compare similar" {
1680 var a = try Int.initSet(al, 0xffffffffeeeeeeeeffffffffeeeeeeee);
1681 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();
16821715
16831716 testing.expect(a.cmpAbs(b) == -1);
16841717 testing.expect(b.cmpAbs(a) == 1);
16851718}
16861719
16871720test "big.int compare different limb size" {
1688 var a = try Int.initSet(al, maxInt(Limb) + 1);
1689 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();
16901725
16911726 testing.expect(a.cmpAbs(b) == 1);
16921727 testing.expect(b.cmpAbs(a) == -1);
16931728}
16941729
16951730test "big.int compare multi-limb" {
1696 var a = try Int.initSet(al, -0x7777777799999999ffffeeeeffffeeeeffffeeeef);
1697 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();
16981735
16991736 testing.expect(a.cmpAbs(b) == 1);
17001737 testing.expect(a.cmp(b) == -1);
17011738}
17021739
17031740test "big.int equality" {
1704 var a = try Int.initSet(al, 0xffffffff1);
1705 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();
17061745
17071746 testing.expect(a.eqAbs(b));
17081747 testing.expect(!a.eq(b));
17091748}
17101749
17111750test "big.int abs" {
1712 var a = try Int.initSet(al, -5);
1751 var a = try Int.initSet(testing.allocator, -5);
1752 defer a.deinit();
17131753
17141754 a.abs();
17151755 testing.expect((try a.to(u32)) == 5);
......@@ -1719,7 +1759,8 @@ test "big.int abs" {
17191759}
17201760
17211761test "big.int negate" {
1722 var a = try Int.initSet(al, 5);
1762 var a = try Int.initSet(testing.allocator, 5);
1763 defer a.deinit();
17231764
17241765 a.negate();
17251766 testing.expect((try a.to(i32)) == -5);
......@@ -1729,20 +1770,26 @@ test "big.int negate" {
17291770}
17301771
17311772test "big.int add single-single" {
1732 var a = try Int.initSet(al, 50);
1733 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();
17341777
1735 var c = try Int.init(al);
1778 var c = try Int.init(testing.allocator);
1779 defer c.deinit();
17361780 try c.add(a, b);
17371781
17381782 testing.expect((try c.to(u32)) == 55);
17391783}
17401784
17411785test "big.int add multi-single" {
1742 var a = try Int.initSet(al, maxInt(Limb) + 1);
1743 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();
17441790
1745 var c = try Int.init(al);
1791 var c = try Int.init(testing.allocator);
1792 defer c.deinit();
17461793
17471794 try c.add(a, b);
17481795 testing.expect((try c.to(DoubleLimb)) == maxInt(Limb) + 2);
......@@ -1754,20 +1801,26 @@ test "big.int add multi-single" {
17541801test "big.int add multi-multi" {
17551802 const op1 = 0xefefefef7f7f7f7f;
17561803 const op2 = 0xfefefefe9f9f9f9f;
1757 var a = try Int.initSet(al, op1);
1758 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();
17591808
1760 var c = try Int.init(al);
1809 var c = try Int.init(testing.allocator);
1810 defer c.deinit();
17611811 try c.add(a, b);
17621812
17631813 testing.expect((try c.to(u128)) == op1 + op2);
17641814}
17651815
17661816test "big.int add zero-zero" {
1767 var a = try Int.initSet(al, 0);
1768 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();
17691821
1770 var c = try Int.init(al);
1822 var c = try Int.init(testing.allocator);
1823 defer c.deinit();
17711824 try c.add(a, b);
17721825
17731826 testing.expect((try c.to(u32)) == 0);
......@@ -1775,8 +1828,10 @@ test "big.int add zero-zero" {
17751828
17761829test "big.int add alias multi-limb nonzero-zero" {
17771830 const op1 = 0xffffffff777777771;
1778 var a = try Int.initSet(al, op1);
1779 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();
17801835
17811836 try a.add(a, b);
17821837
......@@ -1784,12 +1839,17 @@ test "big.int add alias multi-limb nonzero-zero" {
17841839}
17851840
17861841test "big.int add sign" {
1787 var a = try Int.init(al);
1788
1789 const one = try Int.initSet(al, 1);
1790 const two = try Int.initSet(al, 2);
1791 const neg_one = try Int.initSet(al, -1);
1792 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();
17931853
17941854 try a.add(one, two);
17951855 testing.expect((try a.to(i32)) == 3);
......@@ -1805,20 +1865,26 @@ test "big.int add sign" {
18051865}
18061866
18071867test "big.int sub single-single" {
1808 var a = try Int.initSet(al, 50);
1809 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();
18101872
1811 var c = try Int.init(al);
1873 var c = try Int.init(testing.allocator);
1874 defer c.deinit();
18121875 try c.sub(a, b);
18131876
18141877 testing.expect((try c.to(u32)) == 45);
18151878}
18161879
18171880test "big.int sub multi-single" {
1818 var a = try Int.initSet(al, maxInt(Limb) + 1);
1819 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();
18201885
1821 var c = try Int.init(al);
1886 var c = try Int.init(testing.allocator);
1887 defer c.deinit();
18221888 try c.sub(a, b);
18231889
18241890 testing.expect((try c.to(Limb)) == maxInt(Limb));
......@@ -1828,32 +1894,43 @@ test "big.int sub multi-multi" {
18281894 const op1 = 0xefefefefefefefefefefefef;
18291895 const op2 = 0xabababababababababababab;
18301896
1831 var a = try Int.initSet(al, op1);
1832 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();
18331901
1834 var c = try Int.init(al);
1902 var c = try Int.init(testing.allocator);
1903 defer c.deinit();
18351904 try c.sub(a, b);
18361905
18371906 testing.expect((try c.to(u128)) == op1 - op2);
18381907}
18391908
18401909test "big.int sub equal" {
1841 var a = try Int.initSet(al, 0x11efefefefefefefefefefefef);
1842 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();
18431914
1844 var c = try Int.init(al);
1915 var c = try Int.init(testing.allocator);
1916 defer c.deinit();
18451917 try c.sub(a, b);
18461918
18471919 testing.expect((try c.to(u32)) == 0);
18481920}
18491921
18501922test "big.int sub sign" {
1851 var a = try Int.init(al);
1852
1853 const one = try Int.initSet(al, 1);
1854 const two = try Int.initSet(al, 2);
1855 const neg_one = try Int.initSet(al, -1);
1856 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();
18571934
18581935 try a.sub(one, two);
18591936 testing.expect((try a.to(i32)) == -1);
......@@ -1872,20 +1949,26 @@ test "big.int sub sign" {
18721949}
18731950
18741951test "big.int mul single-single" {
1875 var a = try Int.initSet(al, 50);
1876 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();
18771956
1878 var c = try Int.init(al);
1957 var c = try Int.init(testing.allocator);
1958 defer c.deinit();
18791959 try c.mul(a, b);
18801960
18811961 testing.expect((try c.to(u64)) == 250);
18821962}
18831963
18841964test "big.int mul multi-single" {
1885 var a = try Int.initSet(al, maxInt(Limb));
1886 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();
18871969
1888 var c = try Int.init(al);
1970 var c = try Int.init(testing.allocator);
1971 defer c.deinit();
18891972 try c.mul(a, b);
18901973
18911974 testing.expect((try c.to(DoubleLimb)) == 2 * maxInt(Limb));
......@@ -1894,18 +1977,23 @@ test "big.int mul multi-single" {
18941977test "big.int mul multi-multi" {
18951978 const op1 = 0x998888efefefefefefefef;
18961979 const op2 = 0x333000abababababababab;
1897 var a = try Int.initSet(al, op1);
1898 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();
18991984
1900 var c = try Int.init(al);
1985 var c = try Int.init(testing.allocator);
1986 defer c.deinit();
19011987 try c.mul(a, b);
19021988
19031989 testing.expect((try c.to(u256)) == op1 * op2);
19041990}
19051991
19061992test "big.int mul alias r with a" {
1907 var a = try Int.initSet(al, maxInt(Limb));
1908 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();
19091997
19101998 try a.mul(a, b);
19111999
......@@ -1913,8 +2001,10 @@ test "big.int mul alias r with a" {
19132001}
19142002
19152003test "big.int mul alias r with b" {
1916 var a = try Int.initSet(al, maxInt(Limb));
1917 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();
19182008
19192009 try a.mul(b, a);
19202010
......@@ -1922,7 +2012,8 @@ test "big.int mul alias r with b" {
19222012}
19232013
19242014test "big.int mul alias r with a and b" {
1925 var a = try Int.initSet(al, maxInt(Limb));
2015 var a = try Int.initSet(testing.allocator, maxInt(Limb));
2016 defer a.deinit();
19262017
19272018 try a.mul(a, a);
19282019
......@@ -1930,31 +2021,41 @@ test "big.int mul alias r with a and b" {
19302021}
19312022
19322023test "big.int mul a*0" {
1933 var a = try Int.initSet(al, 0xefefefefefefefef);
1934 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();
19352028
1936 var c = try Int.init(al);
2029 var c = try Int.init(testing.allocator);
2030 defer c.deinit();
19372031 try c.mul(a, b);
19382032
19392033 testing.expect((try c.to(u32)) == 0);
19402034}
19412035
19422036test "big.int mul 0*0" {
1943 var a = try Int.initSet(al, 0);
1944 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();
19452041
1946 var c = try Int.init(al);
2042 var c = try Int.init(testing.allocator);
2043 defer c.deinit();
19472044 try c.mul(a, b);
19482045
19492046 testing.expect((try c.to(u32)) == 0);
19502047}
19512048
19522049test "big.int div single-single no rem" {
1953 var a = try Int.initSet(al, 50);
1954 var b = try Int.initSet(al, 5);
1955
1956 var q = try Int.init(al);
1957 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();
19582059 try Int.divTrunc(&q, &r, a, b);
19592060
19602061 testing.expect((try q.to(u32)) == 10);
......@@ -1962,11 +2063,15 @@ test "big.int div single-single no rem" {
19622063}
19632064
19642065test "big.int div single-single with rem" {
1965 var a = try Int.initSet(al, 49);
1966 var b = try Int.initSet(al, 5);
1967
1968 var q = try Int.init(al);
1969 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();
19702075 try Int.divTrunc(&q, &r, a, b);
19712076
19722077 testing.expect((try q.to(u32)) == 9);
......@@ -1977,11 +2082,15 @@ test "big.int div multi-single no rem" {
19772082 const op1 = 0xffffeeeeddddcccc;
19782083 const op2 = 34;
19792084
1980 var a = try Int.initSet(al, op1);
1981 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();
19822089
1983 var q = try Int.init(al);
1984 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();
19852094 try Int.divTrunc(&q, &r, a, b);
19862095
19872096 testing.expect((try q.to(u64)) == op1 / op2);
......@@ -1992,11 +2101,15 @@ test "big.int div multi-single with rem" {
19922101 const op1 = 0xffffeeeeddddcccf;
19932102 const op2 = 34;
19942103
1995 var a = try Int.initSet(al, op1);
1996 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();
19972108
1998 var q = try Int.init(al);
1999 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();
20002113 try Int.divTrunc(&q, &r, a, b);
20012114
20022115 testing.expect((try q.to(u64)) == op1 / op2);
......@@ -2007,11 +2120,15 @@ test "big.int div multi>2-single" {
20072120 const op1 = 0xfefefefefefefefefefefefefefefefe;
20082121 const op2 = 0xefab8;
20092122
2010 var a = try Int.initSet(al, op1);
2011 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();
20122127
2013 var q = try Int.init(al);
2014 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();
20152132 try Int.divTrunc(&q, &r, a, b);
20162133
20172134 testing.expect((try q.to(u128)) == op1 / op2);
......@@ -2019,11 +2136,15 @@ test "big.int div multi>2-single" {
20192136}
20202137
20212138test "big.int div single-single q < r" {
2022 var a = try Int.initSet(al, 0x0078f432);
2023 var b = try Int.initSet(al, 0x01000000);
2024
2025 var q = try Int.init(al);
2026 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();
20272148 try Int.divTrunc(&q, &r, a, b);
20282149
20292150 testing.expect((try q.to(u64)) == 0);
......@@ -2031,11 +2152,15 @@ test "big.int div single-single q < r" {
20312152}
20322153
20332154test "big.int div single-single q == r" {
2034 var a = try Int.initSet(al, 10);
2035 var b = try Int.initSet(al, 10);
2036
2037 var q = try Int.init(al);
2038 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();
20392164 try Int.divTrunc(&q, &r, a, b);
20402165
20412166 testing.expect((try q.to(u64)) == 1);
......@@ -2043,8 +2168,10 @@ test "big.int div single-single q == r" {
20432168}
20442169
20452170test "big.int div q=0 alias" {
2046 var a = try Int.initSet(al, 3);
2047 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();
20482175
20492176 try Int.divTrunc(&a, &b, a, b);
20502177
......@@ -2055,11 +2182,15 @@ test "big.int div q=0 alias" {
20552182test "big.int div multi-multi q < r" {
20562183 const op1 = 0x1ffffffff0078f432;
20572184 const op2 = 0x1ffffffff01000000;
2058 var a = try Int.initSet(al, op1);
2059 var b = try Int.initSet(al, op2);
2060
2061 var q = try Int.init(al);
2062 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();
20632194 try Int.divTrunc(&q, &r, a, b);
20642195
20652196 testing.expect((try q.to(u128)) == 0);
......@@ -2070,11 +2201,15 @@ test "big.int div trunc single-single +/+" {
20702201 const u: i32 = 5;
20712202 const v: i32 = 3;
20722203
2073 var a = try Int.initSet(al, u);
2074 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();
20752208
2076 var q = try Int.init(al);
2077 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();
20782213 try Int.divTrunc(&q, &r, a, b);
20792214
20802215 // n = q * d + r
......@@ -2090,11 +2225,15 @@ test "big.int div trunc single-single -/+" {
20902225 const u: i32 = -5;
20912226 const v: i32 = 3;
20922227
2093 var a = try Int.initSet(al, u);
2094 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();
20952232
2096 var q = try Int.init(al);
2097 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();
20982237 try Int.divTrunc(&q, &r, a, b);
20992238
21002239 // n = q * d + r
......@@ -2110,11 +2249,15 @@ test "big.int div trunc single-single +/-" {
21102249 const u: i32 = 5;
21112250 const v: i32 = -3;
21122251
2113 var a = try Int.initSet(al, u);
2114 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();
21152256
2116 var q = try Int.init(al);
2117 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();
21182261 try Int.divTrunc(&q, &r, a, b);
21192262
21202263 // n = q * d + r
......@@ -2130,11 +2273,15 @@ test "big.int div trunc single-single -/-" {
21302273 const u: i32 = -5;
21312274 const v: i32 = -3;
21322275
2133 var a = try Int.initSet(al, u);
2134 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();
21352280
2136 var q = try Int.init(al);
2137 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();
21382285 try Int.divTrunc(&q, &r, a, b);
21392286
21402287 // n = q * d + r
......@@ -2150,11 +2297,15 @@ test "big.int div floor single-single +/+" {
21502297 const u: i32 = 5;
21512298 const v: i32 = 3;
21522299
2153 var a = try Int.initSet(al, u);
2154 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();
21552304
2156 var q = try Int.init(al);
2157 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();
21582309 try Int.divFloor(&q, &r, a, b);
21592310
21602311 // n = q * d + r
......@@ -2170,11 +2321,15 @@ test "big.int div floor single-single -/+" {
21702321 const u: i32 = -5;
21712322 const v: i32 = 3;
21722323
2173 var a = try Int.initSet(al, u);
2174 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();
21752328
2176 var q = try Int.init(al);
2177 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();
21782333 try Int.divFloor(&q, &r, a, b);
21792334
21802335 // n = q * d + r
......@@ -2190,11 +2345,15 @@ test "big.int div floor single-single +/-" {
21902345 const u: i32 = 5;
21912346 const v: i32 = -3;
21922347
2193 var a = try Int.initSet(al, u);
2194 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();
21952352
2196 var q = try Int.init(al);
2197 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();
21982357 try Int.divFloor(&q, &r, a, b);
21992358
22002359 // n = q * d + r
......@@ -2210,11 +2369,15 @@ test "big.int div floor single-single -/-" {
22102369 const u: i32 = -5;
22112370 const v: i32 = -3;
22122371
2213 var a = try Int.initSet(al, u);
2214 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();
22152376
2216 var q = try Int.init(al);
2217 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();
22182381 try Int.divFloor(&q, &r, a, b);
22192382
22202383 // n = q * d + r
......@@ -2227,11 +2390,15 @@ test "big.int div floor single-single -/-" {
22272390}
22282391
22292392test "big.int div multi-multi with rem" {
2230 var a = try Int.initSet(al, 0x8888999911110000ffffeeeeddddccccbbbbaaaa9999);
2231 var b = try Int.initSet(al, 0x99990000111122223333);
2232
2233 var q = try Int.init(al);
2234 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();
22352402 try Int.divTrunc(&q, &r, a, b);
22362403
22372404 testing.expect((try q.to(u128)) == 0xe38f38e39161aaabd03f0f1b);
......@@ -2239,11 +2406,15 @@ test "big.int div multi-multi with rem" {
22392406}
22402407
22412408test "big.int div multi-multi no rem" {
2242 var a = try Int.initSet(al, 0x8888999911110000ffffeeeedb4fec200ee3a4286361);
2243 var b = try Int.initSet(al, 0x99990000111122223333);
2244
2245 var q = try Int.init(al);
2246 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();
22472418 try Int.divTrunc(&q, &r, a, b);
22482419
22492420 testing.expect((try q.to(u128)) == 0xe38f38e39161aaabd03f0f1b);
......@@ -2251,11 +2422,15 @@ test "big.int div multi-multi no rem" {
22512422}
22522423
22532424test "big.int div multi-multi (2 branch)" {
2254 var a = try Int.initSet(al, 0x866666665555555588888887777777761111111111111111);
2255 var b = try Int.initSet(al, 0x86666666555555554444444433333333);
2256
2257 var q = try Int.init(al);
2258 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();
22592434 try Int.divTrunc(&q, &r, a, b);
22602435
22612436 testing.expect((try q.to(u128)) == 0x10000000000000000);
......@@ -2263,11 +2438,15 @@ test "big.int div multi-multi (2 branch)" {
22632438}
22642439
22652440test "big.int div multi-multi (3.1/3.3 branch)" {
2266 var a = try Int.initSet(al, 0x11111111111111111111111111111111111111111111111111111111111111);
2267 var b = try Int.initSet(al, 0x1111111111111111111111111111111111111111171);
2268
2269 var q = try Int.init(al);
2270 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();
22712450 try Int.divTrunc(&q, &r, a, b);
22722451
22732452 testing.expect((try q.to(u128)) == 0xfffffffffffffffffff);
......@@ -2275,145 +2454,189 @@ test "big.int div multi-multi (3.1/3.3 branch)" {
22752454}
22762455
22772456test "big.int div multi-single zero-limb trailing" {
2278 var a = try Int.initSet(al, 0x60000000000000000000000000000000000000000000000000000000000000000);
2279 var b = try Int.initSet(al, 0x10000000000000000);
2280
2281 var q = try Int.init(al);
2282 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();
22832466 try Int.divTrunc(&q, &r, a, b);
22842467
2285 var expected = try Int.initSet(al, 0x6000000000000000000000000000000000000000000000000);
2468 var expected = try Int.initSet(testing.allocator, 0x6000000000000000000000000000000000000000000000000);
2469 defer expected.deinit();
22862470 testing.expect(q.eq(expected));
22872471 testing.expect(r.eqZero());
22882472}
22892473
22902474test "big.int div multi-multi zero-limb trailing (with rem)" {
2291 var a = try Int.initSet(al, 0x86666666555555558888888777777776111111111111111100000000000000000000000000000000);
2292 var b = try Int.initSet(al, 0x8666666655555555444444443333333300000000000000000000000000000000);
2293
2294 var q = try Int.init(al);
2295 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();
22962484 try Int.divTrunc(&q, &r, a, b);
22972485
22982486 testing.expect((try q.to(u128)) == 0x10000000000000000);
22992487
2300 const rs = try r.toString(al, 16);
2488 const rs = try r.toString(testing.allocator, 16);
2489 defer testing.allocator.free(rs);
23012490 testing.expect(std.mem.eql(u8, rs, "4444444344444443111111111111111100000000000000000000000000000000"));
23022491}
23032492
23042493test "big.int div multi-multi zero-limb trailing (with rem) and dividend zero-limb count > divisor zero-limb count" {
2305 var a = try Int.initSet(al, 0x8666666655555555888888877777777611111111111111110000000000000000);
2306 var b = try Int.initSet(al, 0x8666666655555555444444443333333300000000000000000000000000000000);
2307
2308 var q = try Int.init(al);
2309 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();
23102503 try Int.divTrunc(&q, &r, a, b);
23112504
23122505 testing.expect((try q.to(u128)) == 0x1);
23132506
2314 const rs = try r.toString(al, 16);
2507 const rs = try r.toString(testing.allocator, 16);
2508 defer testing.allocator.free(rs);
23152509 testing.expect(std.mem.eql(u8, rs, "444444434444444311111111111111110000000000000000"));
23162510}
23172511
23182512test "big.int div multi-multi zero-limb trailing (with rem) and dividend zero-limb count < divisor zero-limb count" {
2319 var a = try Int.initSet(al, 0x86666666555555558888888777777776111111111111111100000000000000000000000000000000);
2320 var b = try Int.initSet(al, 0x866666665555555544444444333333330000000000000000);
2321
2322 var q = try Int.init(al);
2323 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();
23242522 try Int.divTrunc(&q, &r, a, b);
23252523
2326 const qs = try q.toString(al, 16);
2524 const qs = try q.toString(testing.allocator, 16);
2525 defer testing.allocator.free(qs);
23272526 testing.expect(std.mem.eql(u8, qs, "10000000000000000820820803105186f"));
23282527
2329 const rs = try r.toString(al, 16);
2528 const rs = try r.toString(testing.allocator, 16);
2529 defer testing.allocator.free(rs);
23302530 testing.expect(std.mem.eql(u8, rs, "4e11f2baa5896a321d463b543d0104e30000000000000000"));
23312531}
23322532
23332533test "big.int div multi-multi fuzz case #1" {
2334 var a = try Int.init(al);
2335 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();
23362538
23372539 try a.setString(16, "ffffffffffffffffffffffffffffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000");
23382540 try b.setString(16, "3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0000000000000000000000000000000000001ffffffffffffffffffffffffffffffffffffffffffffffffffc000000000000000000000000000000007fffffffffff");
23392541
2340 var q = try Int.init(al);
2341 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();
23422546 try Int.divTrunc(&q, &r, a, b);
23432547
2344 const qs = try q.toString(al, 16);
2548 const qs = try q.toString(testing.allocator, 16);
2549 defer testing.allocator.free(qs);
23452550 testing.expect(std.mem.eql(u8, qs, "3ffffffffffffffffffffffffffff0000000000000000000000000000000000001ffffffffffffffffffffffffffff7fffffffe000000000000000000000000000180000000000000000000003fffffbfffffffdfffffffffffffeffff800000100101000000100000000020003fffffdfbfffffe3ffffffffffffeffff7fffc00800a100000017ffe000002000400007efbfff7fe9f00000037ffff3fff7fffa004006100000009ffe00000190038200bf7d2ff7fefe80400060000f7d7f8fbf9401fe38e0403ffc0bdffffa51102c300d7be5ef9df4e5060007b0127ad3fa69f97d0f820b6605ff617ddf7f32ad7a05c0d03f2e7bc78a6000e087a8bbcdc59e07a5a079128a7861f553ddebed7e8e56701756f9ead39b48cd1b0831889ea6ec1fddf643d0565b075ff07e6caea4e2854ec9227fd635ed60a2f5eef2893052ffd54718fa08604acbf6a15e78a467c4a3c53c0278af06c4416573f925491b195e8fd79302cb1aaf7caf4ecfc9aec1254cc969786363ac729f914c6ddcc26738d6b0facd54eba026580aba2eb6482a088b0d224a8852420b91ec1"));
23462551
2347 const rs = try r.toString(al, 16);
2552 const rs = try r.toString(testing.allocator, 16);
2553 defer testing.allocator.free(rs);
23482554 testing.expect(std.mem.eql(u8, rs, "310d1d4c414426b4836c2635bad1df3a424e50cbdd167ffccb4dfff57d36b4aae0d6ca0910698220171a0f3373c1060a046c2812f0027e321f72979daa5e7973214170d49e885de0c0ecc167837d44502430674a82522e5df6a0759548052420b91ec1"));
23492555}
23502556
23512557test "big.int div multi-multi fuzz case #2" {
2352 var a = try Int.init(al);
2353 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();
23542562
23552563 try a.setString(16, "3ffffffffe00000000000000000000000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffe000000000000000000000000000000000000000000000000000000000000001fffffffffffffffff800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffc000000000000000000000000000000000000000000000000000000000000000");
23562564 try b.setString(16, "ffc0000000000000000000000000000000000000000000000000");
23572565
2358 var q = try Int.init(al);
2359 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();
23602570 try Int.divTrunc(&q, &r, a, b);
23612571
2362 const qs = try q.toString(al, 16);
2572 const qs = try q.toString(testing.allocator, 16);
2573 defer testing.allocator.free(qs);
23632574 testing.expect(std.mem.eql(u8, qs, "40100400fe3f8fe3f8fe3f8fe3f8fe3f8fe4f93e4f93e4f93e4f93e4f93e4f93e4f93e4f93e4f93e4f93e4f93e4f91e4791e4791e4791e4791e4791e4791e4791e4791e4791e4791e4791e4791e4992649926499264991e4791e4791e4791e4791e4791e4791e4791e4791e4791e4791e4791e4791e4791e4791e4791e4791e4791e4791e4791e4791e4791e4791e4791e4792e4b92e4b92e4b92e4b92a4a92a4a92a4"));
23642575
2365 const rs = try r.toString(al, 16);
2576 const rs = try r.toString(testing.allocator, 16);
2577 defer testing.allocator.free(rs);
23662578 testing.expect(std.mem.eql(u8, rs, "a900000000000000000000000000000000000000000000000000"));
23672579}
23682580
23692581test "big.int shift-right single" {
2370 var a = try Int.initSet(al, 0xffff0000);
2582 var a = try Int.initSet(testing.allocator, 0xffff0000);
2583 defer a.deinit();
23712584 try a.shiftRight(a, 16);
23722585
23732586 testing.expect((try a.to(u32)) == 0xffff);
23742587}
23752588
23762589test "big.int shift-right multi" {
2377 var a = try Int.initSet(al, 0xffff0000eeee1111dddd2222cccc3333);
2590 var a = try Int.initSet(testing.allocator, 0xffff0000eeee1111dddd2222cccc3333);
2591 defer a.deinit();
23782592 try a.shiftRight(a, 67);
23792593
23802594 testing.expect((try a.to(u64)) == 0x1fffe0001dddc222);
23812595}
23822596
23832597test "big.int shift-left single" {
2384 var a = try Int.initSet(al, 0xffff);
2598 var a = try Int.initSet(testing.allocator, 0xffff);
2599 defer a.deinit();
23852600 try a.shiftLeft(a, 16);
23862601
23872602 testing.expect((try a.to(u64)) == 0xffff0000);
23882603}
23892604
23902605test "big.int shift-left multi" {
2391 var a = try Int.initSet(al, 0x1fffe0001dddc222);
2606 var a = try Int.initSet(testing.allocator, 0x1fffe0001dddc222);
2607 defer a.deinit();
23922608 try a.shiftLeft(a, 67);
23932609
23942610 testing.expect((try a.to(u128)) == 0xffff0000eeee11100000000000000000);
23952611}
23962612
23972613test "big.int shift-right negative" {
2398 var a = try Int.init(al);
2614 var a = try Int.init(testing.allocator);
2615 defer a.deinit();
23992616
2400 try a.shiftRight(try Int.initSet(al, -20), 2);
2617 try a.shiftRight(try Int.initSet(testing.allocator, -20), 2);
2618 defer a.deinit();
24012619 testing.expect((try a.to(i32)) == -20 >> 2);
24022620
2403 try a.shiftRight(try Int.initSet(al, -5), 10);
2621 try a.shiftRight(try Int.initSet(testing.allocator, -5), 10);
2622 defer a.deinit();
24042623 testing.expect((try a.to(i32)) == -5 >> 10);
24052624}
24062625
24072626test "big.int shift-left negative" {
2408 var a = try Int.init(al);
2627 var a = try Int.init(testing.allocator);
2628 defer a.deinit();
24092629
2410 try a.shiftRight(try Int.initSet(al, -10), 1232);
2630 try a.shiftRight(try Int.initSet(testing.allocator, -10), 1232);
2631 defer a.deinit();
24112632 testing.expect((try a.to(i32)) == -10 >> 1232);
24122633}
24132634
24142635test "big.int bitwise and simple" {
2415 var a = try Int.initSet(al, 0xffffffff11111111);
2416 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();
24172640
24182641 try a.bitAnd(a, b);
24192642
......@@ -2421,8 +2644,10 @@ test "big.int bitwise and simple" {
24212644}
24222645
24232646test "big.int bitwise and multi-limb" {
2424 var a = try Int.initSet(al, maxInt(Limb) + 1);
2425 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();
24262651
24272652 try a.bitAnd(a, b);
24282653
......@@ -2430,8 +2655,10 @@ test "big.int bitwise and multi-limb" {
24302655}
24312656
24322657test "big.int bitwise xor simple" {
2433 var a = try Int.initSet(al, 0xffffffff11111111);
2434 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();
24352662
24362663 try a.bitXor(a, b);
24372664
......@@ -2439,8 +2666,10 @@ test "big.int bitwise xor simple" {
24392666}
24402667
24412668test "big.int bitwise xor multi-limb" {
2442 var a = try Int.initSet(al, maxInt(Limb) + 1);
2443 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();
24442673
24452674 try a.bitXor(a, b);
24462675
......@@ -2448,8 +2677,10 @@ test "big.int bitwise xor multi-limb" {
24482677}
24492678
24502679test "big.int bitwise or simple" {
2451 var a = try Int.initSet(al, 0xffffffff11111111);
2452 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();
24532684
24542685 try a.bitOr(a, b);
24552686
......@@ -2457,8 +2688,10 @@ test "big.int bitwise or simple" {
24572688}
24582689
24592690test "big.int bitwise or multi-limb" {
2460 var a = try Int.initSet(al, maxInt(Limb) + 1);
2461 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();
24622695
24632696 try a.bitOr(a, b);
24642697
......@@ -2467,11 +2700,19 @@ test "big.int bitwise or multi-limb" {
24672700}
24682701
24692702test "big.int var args" {
2470 var a = try Int.initSet(al, 5);
2703 var a = try Int.initSet(testing.allocator, 5);
2704 defer a.deinit();
24712705
2472 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);
24732709 testing.expect((try a.to(u64)) == 11);
24742710
2475 testing.expect(a.cmp(try Int.initSet(al, 11)) == 0);
2476 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);
24772718}
lib/std/math/big/rational.zig+98-53
......@@ -587,14 +587,13 @@ fn gcdLehmer(r: *Int, xa: Int, ya: Int) !void {
587587 r.swap(&x);
588588}
589589
590var buffer: [64 * 8192]u8 = undefined;
591var fixed = std.heap.FixedBufferAllocator.init(buffer[0..]);
592var al = &fixed.allocator;
593
594590test "big.rational gcd non-one small" {
595 var a = try Int.initSet(al, 17);
596 var b = try Int.initSet(al, 97);
597 var r = try Int.init(al);
591 var a = try Int.initSet(testing.allocator, 17);
592 defer a.deinit();
593 var b = try Int.initSet(testing.allocator, 97);
594 defer b.deinit();
595 var r = try Int.init(testing.allocator);
596 defer r.deinit();
598597
599598 try gcd(&r, a, b);
600599
......@@ -602,9 +601,12 @@ test "big.rational gcd non-one small" {
602601}
603602
604603test "big.rational gcd non-one small" {
605 var a = try Int.initSet(al, 4864);
606 var b = try Int.initSet(al, 3458);
607 var r = try Int.init(al);
604 var a = try Int.initSet(testing.allocator, 4864);
605 defer a.deinit();
606 var b = try Int.initSet(testing.allocator, 3458);
607 defer b.deinit();
608 var r = try Int.init(testing.allocator);
609 defer r.deinit();
608610
609611 try gcd(&r, a, b);
610612
......@@ -612,9 +614,12 @@ test "big.rational gcd non-one small" {
612614}
613615
614616test "big.rational gcd non-one large" {
615 var a = try Int.initSet(al, 0xffffffffffffffff);
616 var b = try Int.initSet(al, 0xffffffffffffffff7777);
617 var r = try Int.init(al);
617 var a = try Int.initSet(testing.allocator, 0xffffffffffffffff);
618 defer a.deinit();
619 var b = try Int.initSet(testing.allocator, 0xffffffffffffffff7777);
620 defer b.deinit();
621 var r = try Int.init(testing.allocator);
622 defer r.deinit();
618623
619624 try gcd(&r, a, b);
620625
......@@ -622,9 +627,12 @@ test "big.rational gcd non-one large" {
622627}
623628
624629test "big.rational gcd large multi-limb result" {
625 var a = try Int.initSet(al, 0x12345678123456781234567812345678123456781234567812345678);
626 var b = try Int.initSet(al, 0x12345671234567123456712345671234567123456712345671234567);
627 var r = try Int.init(al);
630 var a = try Int.initSet(testing.allocator, 0x12345678123456781234567812345678123456781234567812345678);
631 defer a.deinit();
632 var b = try Int.initSet(testing.allocator, 0x12345671234567123456712345671234567123456712345671234567);
633 defer b.deinit();
634 var r = try Int.init(testing.allocator);
635 defer r.deinit();
628636
629637 try gcd(&r, a, b);
630638
......@@ -632,9 +640,12 @@ test "big.rational gcd large multi-limb result" {
632640}
633641
634642test "big.rational gcd one large" {
635 var a = try Int.initSet(al, 1897056385327307);
636 var b = try Int.initSet(al, 2251799813685248);
637 var r = try Int.init(al);
643 var a = try Int.initSet(testing.allocator, 1897056385327307);
644 defer a.deinit();
645 var b = try Int.initSet(testing.allocator, 2251799813685248);
646 defer b.deinit();
647 var r = try Int.init(testing.allocator);
648 defer r.deinit();
638649
639650 try gcd(&r, a, b);
640651
......@@ -661,7 +672,8 @@ fn extractLowBits(a: Int, comptime T: type) T {
661672}
662673
663674test "big.rational extractLowBits" {
664 var a = try Int.initSet(al, 0x11112222333344441234567887654321);
675 var a = try Int.initSet(testing.allocator, 0x11112222333344441234567887654321);
676 defer a.deinit();
665677
666678 const a1 = extractLowBits(a, u8);
667679 testing.expect(a1 == 0x21);
......@@ -680,7 +692,8 @@ test "big.rational extractLowBits" {
680692}
681693
682694test "big.rational set" {
683 var a = try Rational.init(al);
695 var a = try Rational.init(testing.allocator);
696 defer a.deinit();
684697
685698 try a.setInt(5);
686699 testing.expect((try a.p.to(u32)) == 5);
......@@ -708,7 +721,8 @@ test "big.rational set" {
708721}
709722
710723test "big.rational setFloat" {
711 var a = try Rational.init(al);
724 var a = try Rational.init(testing.allocator);
725 defer a.deinit();
712726
713727 try a.setFloat(f64, 2.5);
714728 testing.expect((try a.p.to(i32)) == 5);
......@@ -732,7 +746,8 @@ test "big.rational setFloat" {
732746}
733747
734748test "big.rational setFloatString" {
735 var a = try Rational.init(al);
749 var a = try Rational.init(testing.allocator);
750 defer a.deinit();
736751
737752 try a.setFloatString("72.14159312071241458852455252781510353");
738753
......@@ -742,7 +757,8 @@ test "big.rational setFloatString" {
742757}
743758
744759test "big.rational toFloat" {
745 var a = try Rational.init(al);
760 var a = try Rational.init(testing.allocator);
761 defer a.deinit();
746762
747763 // = 3.14159297943115234375
748764 try a.setRatio(3294199, 1048576);
......@@ -754,7 +770,8 @@ test "big.rational toFloat" {
754770}
755771
756772test "big.rational set/to Float round-trip" {
757 var a = try Rational.init(al);
773 var a = try Rational.init(testing.allocator);
774 defer a.deinit();
758775 var prng = std.rand.DefaultPrng.init(0x5EED);
759776 var i: usize = 0;
760777 while (i < 512) : (i += 1) {
......@@ -765,23 +782,29 @@ test "big.rational set/to Float round-trip" {
765782}
766783
767784test "big.rational copy" {
768 var a = try Rational.init(al);
785 var a = try Rational.init(testing.allocator);
786 defer a.deinit();
769787
770 const b = try Int.initSet(al, 5);
788 const b = try Int.initSet(testing.allocator, 5);
789 defer b.deinit();
771790
772791 try a.copyInt(b);
773792 testing.expect((try a.p.to(u32)) == 5);
774793 testing.expect((try a.q.to(u32)) == 1);
775794
776 const c = try Int.initSet(al, 7);
777 const d = try Int.initSet(al, 3);
795 const c = try Int.initSet(testing.allocator, 7);
796 defer c.deinit();
797 const d = try Int.initSet(testing.allocator, 3);
798 defer d.deinit();
778799
779800 try a.copyRatio(c, d);
780801 testing.expect((try a.p.to(u32)) == 7);
781802 testing.expect((try a.q.to(u32)) == 3);
782803
783 const e = try Int.initSet(al, 9);
784 const f = try Int.initSet(al, 3);
804 const e = try Int.initSet(testing.allocator, 9);
805 defer e.deinit();
806 const f = try Int.initSet(testing.allocator, 3);
807 defer f.deinit();
785808
786809 try a.copyRatio(e, f);
787810 testing.expect((try a.p.to(u32)) == 3);
......@@ -789,7 +812,8 @@ test "big.rational copy" {
789812}
790813
791814test "big.rational negate" {
792 var a = try Rational.init(al);
815 var a = try Rational.init(testing.allocator);
816 defer a.deinit();
793817
794818 try a.setInt(-50);
795819 testing.expect((try a.p.to(i32)) == -50);
......@@ -805,7 +829,8 @@ test "big.rational negate" {
805829}
806830
807831test "big.rational abs" {
808 var a = try Rational.init(al);
832 var a = try Rational.init(testing.allocator);
833 defer a.deinit();
809834
810835 try a.setInt(-50);
811836 testing.expect((try a.p.to(i32)) == -50);
......@@ -821,8 +846,10 @@ test "big.rational abs" {
821846}
822847
823848test "big.rational swap" {
824 var a = try Rational.init(al);
825 var b = try Rational.init(al);
849 var a = try Rational.init(testing.allocator);
850 defer a.deinit();
851 var b = try Rational.init(testing.allocator);
852 defer b.deinit();
826853
827854 try a.setRatio(50, 23);
828855 try b.setRatio(17, 3);
......@@ -843,8 +870,10 @@ test "big.rational swap" {
843870}
844871
845872test "big.rational cmp" {
846 var a = try Rational.init(al);
847 var b = try Rational.init(al);
873 var a = try Rational.init(testing.allocator);
874 defer a.deinit();
875 var b = try Rational.init(testing.allocator);
876 defer b.deinit();
848877
849878 try a.setRatio(500, 231);
850879 try b.setRatio(18903, 8584);
......@@ -856,8 +885,10 @@ test "big.rational cmp" {
856885}
857886
858887test "big.rational add single-limb" {
859 var a = try Rational.init(al);
860 var b = try Rational.init(al);
888 var a = try Rational.init(testing.allocator);
889 defer a.deinit();
890 var b = try Rational.init(testing.allocator);
891 defer b.deinit();
861892
862893 try a.setRatio(500, 231);
863894 try b.setRatio(18903, 8584);
......@@ -869,9 +900,12 @@ test "big.rational add single-limb" {
869900}
870901
871902test "big.rational add" {
872 var a = try Rational.init(al);
873 var b = try Rational.init(al);
874 var r = try Rational.init(al);
903 var a = try Rational.init(testing.allocator);
904 defer a.deinit();
905 var b = try Rational.init(testing.allocator);
906 defer b.deinit();
907 var r = try Rational.init(testing.allocator);
908 defer r.deinit();
875909
876910 try a.setRatio(78923, 23341);
877911 try b.setRatio(123097, 12441414);
......@@ -882,9 +916,12 @@ test "big.rational add" {
882916}
883917
884918test "big.rational sub" {
885 var a = try Rational.init(al);
886 var b = try Rational.init(al);
887 var r = try Rational.init(al);
919 var a = try Rational.init(testing.allocator);
920 defer a.deinit();
921 var b = try Rational.init(testing.allocator);
922 defer b.deinit();
923 var r = try Rational.init(testing.allocator);
924 defer r.deinit();
888925
889926 try a.setRatio(78923, 23341);
890927 try b.setRatio(123097, 12441414);
......@@ -895,9 +932,12 @@ test "big.rational sub" {
895932}
896933
897934test "big.rational mul" {
898 var a = try Rational.init(al);
899 var b = try Rational.init(al);
900 var r = try Rational.init(al);
935 var a = try Rational.init(testing.allocator);
936 defer a.deinit();
937 var b = try Rational.init(testing.allocator);
938 defer b.deinit();
939 var r = try Rational.init(testing.allocator);
940 defer r.deinit();
901941
902942 try a.setRatio(78923, 23341);
903943 try b.setRatio(123097, 12441414);
......@@ -908,9 +948,12 @@ test "big.rational mul" {
908948}
909949
910950test "big.rational div" {
911 var a = try Rational.init(al);
912 var b = try Rational.init(al);
913 var r = try Rational.init(al);
951 var a = try Rational.init(testing.allocator);
952 defer a.deinit();
953 var b = try Rational.init(testing.allocator);
954 defer b.deinit();
955 var r = try Rational.init(testing.allocator);
956 defer r.deinit();
914957
915958 try a.setRatio(78923, 23341);
916959 try b.setRatio(123097, 12441414);
......@@ -921,8 +964,10 @@ test "big.rational div" {
921964}
922965
923966test "big.rational div" {
924 var a = try Rational.init(al);
925 var r = try Rational.init(al);
967 var a = try Rational.init(testing.allocator);
968 defer a.deinit();
969 var r = try Rational.init(testing.allocator);
970 defer r.deinit();
926971
927972 try a.setRatio(78923, 23341);
928973 a.invert();
lib/std/mem.zig+30-14
......@@ -1011,11 +1011,21 @@ pub fn join(allocator: *Allocator, separator: []const u8, slices: []const []cons
10111011}
10121012
10131013test "mem.join" {
1014 var buf: [1024]u8 = undefined;
1015 const a = &std.heap.FixedBufferAllocator.init(&buf).allocator;
1016 testing.expect(eql(u8, try join(a, ",", &[_][]const u8{ "a", "b", "c" }), "a,b,c"));
1017 testing.expect(eql(u8, try join(a, ",", &[_][]const u8{"a"}), "a"));
1018 testing.expect(eql(u8, try join(a, ",", &[_][]const u8{ "a", "", "b", "", "c" }), "a,,b,,c"));
1014 {
1015 const str = try join(testing.allocator, ",", &[_][]const u8{ "a", "b", "c" });
1016 defer testing.allocator.free(str);
1017 testing.expect(eql(u8, str, "a,b,c"));
1018 }
1019 {
1020 const str = try join(testing.allocator, ",", &[_][]const u8{"a"});
1021 defer testing.allocator.free(str);
1022 testing.expect(eql(u8, str, "a"));
1023 }
1024 {
1025 const str = try join(testing.allocator, ",", &[_][]const u8{ "a", "", "b", "", "c" });
1026 defer testing.allocator.free(str);
1027 testing.expect(eql(u8, str, "a,,b,,c"));
1028 }
10191029}
10201030
10211031/// Copies each T from slices into a new slice that exactly holds all the elements.
......@@ -1044,15 +1054,21 @@ pub fn concat(allocator: *Allocator, comptime T: type, slices: []const []const T
10441054}
10451055
10461056test "concat" {
1047 var buf: [1024]u8 = undefined;
1048 const a = &std.heap.FixedBufferAllocator.init(&buf).allocator;
1049 testing.expect(eql(u8, try concat(a, u8, &[_][]const u8{ "abc", "def", "ghi" }), "abcdefghi"));
1050 testing.expect(eql(u32, try concat(a, u32, &[_][]const u32{
1051 &[_]u32{ 0, 1 },
1052 &[_]u32{ 2, 3, 4 },
1053 &[_]u32{},
1054 &[_]u32{5},
1055 }), &[_]u32{ 0, 1, 2, 3, 4, 5 }));
1057 {
1058 const str = try concat(testing.allocator, u8, &[_][]const u8{ "abc", "def", "ghi" });
1059 defer testing.allocator.free(str);
1060 testing.expect(eql(u8, str, "abcdefghi"));
1061 }
1062 {
1063 const str = try concat(testing.allocator, u32, &[_][]const u32{
1064 &[_]u32{ 0, 1 },
1065 &[_]u32{ 2, 3, 4 },
1066 &[_]u32{},
1067 &[_]u32{5},
1068 });
1069 defer testing.allocator.free(str);
1070 testing.expect(eql(u32, str, &[_]u32{ 0, 1, 2, 3, 4, 5 }));
1071 }
10561072}
10571073
10581074test "testStringEquality" {
lib/std/net/test.zig+1-3
......@@ -67,10 +67,8 @@ test "resolve DNS" {
6767 // DNS resolution not implemented on Windows yet.
6868 return error.SkipZigTest;
6969 }
70 var buf: [1000 * 10]u8 = undefined;
71 const a = &std.heap.FixedBufferAllocator.init(&buf).allocator;
7270
73 const address_list = net.getAddressList(a, "example.com", 80) catch |err| switch (err) {
71 const address_list = net.getAddressList(testing.allocator, "example.com", 80) catch |err| switch (err) {
7472 // The tests are required to work even when there is no Internet connection,
7573 // so some of these errors we must accept and skip the test.
7674 error.UnknownHostName => return error.SkipZigTest,
lib/std/testing.zig+1-1
......@@ -12,7 +12,7 @@ pub var allocator_instance = LeakCountAllocator.init(&base_allocator_instance.al
1212pub const failing_allocator = &FailingAllocator.init(&base_allocator_instance.allocator, 0).allocator;
1313
1414pub var base_allocator_instance = std.heap.ThreadSafeFixedBufferAllocator.init(allocator_mem[0..]);
15var allocator_mem: [512 * 1024]u8 = undefined;
15var allocator_mem: [1024 * 1024]u8 = undefined;
1616
1717/// This function is intended to be used only in tests. It prints diagnostics to stderr
1818/// and then aborts when actual_error_union is not expected_error.