| ... | ... | @@ -587,14 +587,13 @@ fn gcdLehmer(r: *Int, xa: Int, ya: Int) !void { |
| 587 | 587 | r.swap(&x); |
| 588 | 588 | } |
| 589 | 589 | |
| 590 | | var buffer: [64 * 8192]u8 = undefined; |
| 591 | | var fixed = std.heap.FixedBufferAllocator.init(buffer[0..]); |
| 592 | | var al = &fixed.allocator; |
| 593 | | |
| 594 | 590 | test "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(); |
| 598 | 597 | |
| 599 | 598 | try gcd(&r, a, b); |
| 600 | 599 | |
| ... | ... | @@ -602,9 +601,12 @@ test "big.rational gcd non-one small" { |
| 602 | 601 | } |
| 603 | 602 | |
| 604 | 603 | test "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(); |
| 608 | 610 | |
| 609 | 611 | try gcd(&r, a, b); |
| 610 | 612 | |
| ... | ... | @@ -612,9 +614,12 @@ test "big.rational gcd non-one small" { |
| 612 | 614 | } |
| 613 | 615 | |
| 614 | 616 | test "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(); |
| 618 | 623 | |
| 619 | 624 | try gcd(&r, a, b); |
| 620 | 625 | |
| ... | ... | @@ -622,9 +627,12 @@ test "big.rational gcd non-one large" { |
| 622 | 627 | } |
| 623 | 628 | |
| 624 | 629 | test "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(); |
| 628 | 636 | |
| 629 | 637 | try gcd(&r, a, b); |
| 630 | 638 | |
| ... | ... | @@ -632,9 +640,12 @@ test "big.rational gcd large multi-limb result" { |
| 632 | 640 | } |
| 633 | 641 | |
| 634 | 642 | test "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(); |
| 638 | 649 | |
| 639 | 650 | try gcd(&r, a, b); |
| 640 | 651 | |
| ... | ... | @@ -661,7 +672,8 @@ fn extractLowBits(a: Int, comptime T: type) T { |
| 661 | 672 | } |
| 662 | 673 | |
| 663 | 674 | test "big.rational extractLowBits" { |
| 664 | | var a = try Int.initSet(al, 0x11112222333344441234567887654321); |
| 675 | var a = try Int.initSet(testing.allocator, 0x11112222333344441234567887654321); |
| 676 | defer a.deinit(); |
| 665 | 677 | |
| 666 | 678 | const a1 = extractLowBits(a, u8); |
| 667 | 679 | testing.expect(a1 == 0x21); |
| ... | ... | @@ -680,7 +692,8 @@ test "big.rational extractLowBits" { |
| 680 | 692 | } |
| 681 | 693 | |
| 682 | 694 | test "big.rational set" { |
| 683 | | var a = try Rational.init(al); |
| 695 | var a = try Rational.init(testing.allocator); |
| 696 | defer a.deinit(); |
| 684 | 697 | |
| 685 | 698 | try a.setInt(5); |
| 686 | 699 | testing.expect((try a.p.to(u32)) == 5); |
| ... | ... | @@ -708,7 +721,8 @@ test "big.rational set" { |
| 708 | 721 | } |
| 709 | 722 | |
| 710 | 723 | test "big.rational setFloat" { |
| 711 | | var a = try Rational.init(al); |
| 724 | var a = try Rational.init(testing.allocator); |
| 725 | defer a.deinit(); |
| 712 | 726 | |
| 713 | 727 | try a.setFloat(f64, 2.5); |
| 714 | 728 | testing.expect((try a.p.to(i32)) == 5); |
| ... | ... | @@ -732,7 +746,8 @@ test "big.rational setFloat" { |
| 732 | 746 | } |
| 733 | 747 | |
| 734 | 748 | test "big.rational setFloatString" { |
| 735 | | var a = try Rational.init(al); |
| 749 | var a = try Rational.init(testing.allocator); |
| 750 | defer a.deinit(); |
| 736 | 751 | |
| 737 | 752 | try a.setFloatString("72.14159312071241458852455252781510353"); |
| 738 | 753 | |
| ... | ... | @@ -742,7 +757,8 @@ test "big.rational setFloatString" { |
| 742 | 757 | } |
| 743 | 758 | |
| 744 | 759 | test "big.rational toFloat" { |
| 745 | | var a = try Rational.init(al); |
| 760 | var a = try Rational.init(testing.allocator); |
| 761 | defer a.deinit(); |
| 746 | 762 | |
| 747 | 763 | // = 3.14159297943115234375 |
| 748 | 764 | try a.setRatio(3294199, 1048576); |
| ... | ... | @@ -754,7 +770,8 @@ test "big.rational toFloat" { |
| 754 | 770 | } |
| 755 | 771 | |
| 756 | 772 | test "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(); |
| 758 | 775 | var prng = std.rand.DefaultPrng.init(0x5EED); |
| 759 | 776 | var i: usize = 0; |
| 760 | 777 | while (i < 512) : (i += 1) { |
| ... | ... | @@ -765,23 +782,29 @@ test "big.rational set/to Float round-trip" { |
| 765 | 782 | } |
| 766 | 783 | |
| 767 | 784 | test "big.rational copy" { |
| 768 | | var a = try Rational.init(al); |
| 785 | var a = try Rational.init(testing.allocator); |
| 786 | defer a.deinit(); |
| 769 | 787 | |
| 770 | | const b = try Int.initSet(al, 5); |
| 788 | const b = try Int.initSet(testing.allocator, 5); |
| 789 | defer b.deinit(); |
| 771 | 790 | |
| 772 | 791 | try a.copyInt(b); |
| 773 | 792 | testing.expect((try a.p.to(u32)) == 5); |
| 774 | 793 | testing.expect((try a.q.to(u32)) == 1); |
| 775 | 794 | |
| 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(); |
| 778 | 799 | |
| 779 | 800 | try a.copyRatio(c, d); |
| 780 | 801 | testing.expect((try a.p.to(u32)) == 7); |
| 781 | 802 | testing.expect((try a.q.to(u32)) == 3); |
| 782 | 803 | |
| 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(); |
| 785 | 808 | |
| 786 | 809 | try a.copyRatio(e, f); |
| 787 | 810 | testing.expect((try a.p.to(u32)) == 3); |
| ... | ... | @@ -789,7 +812,8 @@ test "big.rational copy" { |
| 789 | 812 | } |
| 790 | 813 | |
| 791 | 814 | test "big.rational negate" { |
| 792 | | var a = try Rational.init(al); |
| 815 | var a = try Rational.init(testing.allocator); |
| 816 | defer a.deinit(); |
| 793 | 817 | |
| 794 | 818 | try a.setInt(-50); |
| 795 | 819 | testing.expect((try a.p.to(i32)) == -50); |
| ... | ... | @@ -805,7 +829,8 @@ test "big.rational negate" { |
| 805 | 829 | } |
| 806 | 830 | |
| 807 | 831 | test "big.rational abs" { |
| 808 | | var a = try Rational.init(al); |
| 832 | var a = try Rational.init(testing.allocator); |
| 833 | defer a.deinit(); |
| 809 | 834 | |
| 810 | 835 | try a.setInt(-50); |
| 811 | 836 | testing.expect((try a.p.to(i32)) == -50); |
| ... | ... | @@ -821,8 +846,10 @@ test "big.rational abs" { |
| 821 | 846 | } |
| 822 | 847 | |
| 823 | 848 | test "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(); |
| 826 | 853 | |
| 827 | 854 | try a.setRatio(50, 23); |
| 828 | 855 | try b.setRatio(17, 3); |
| ... | ... | @@ -843,8 +870,10 @@ test "big.rational swap" { |
| 843 | 870 | } |
| 844 | 871 | |
| 845 | 872 | test "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(); |
| 848 | 877 | |
| 849 | 878 | try a.setRatio(500, 231); |
| 850 | 879 | try b.setRatio(18903, 8584); |
| ... | ... | @@ -856,8 +885,10 @@ test "big.rational cmp" { |
| 856 | 885 | } |
| 857 | 886 | |
| 858 | 887 | test "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(); |
| 861 | 892 | |
| 862 | 893 | try a.setRatio(500, 231); |
| 863 | 894 | try b.setRatio(18903, 8584); |
| ... | ... | @@ -869,9 +900,12 @@ test "big.rational add single-limb" { |
| 869 | 900 | } |
| 870 | 901 | |
| 871 | 902 | test "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(); |
| 875 | 909 | |
| 876 | 910 | try a.setRatio(78923, 23341); |
| 877 | 911 | try b.setRatio(123097, 12441414); |
| ... | ... | @@ -882,9 +916,12 @@ test "big.rational add" { |
| 882 | 916 | } |
| 883 | 917 | |
| 884 | 918 | test "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(); |
| 888 | 925 | |
| 889 | 926 | try a.setRatio(78923, 23341); |
| 890 | 927 | try b.setRatio(123097, 12441414); |
| ... | ... | @@ -895,9 +932,12 @@ test "big.rational sub" { |
| 895 | 932 | } |
| 896 | 933 | |
| 897 | 934 | test "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(); |
| 901 | 941 | |
| 902 | 942 | try a.setRatio(78923, 23341); |
| 903 | 943 | try b.setRatio(123097, 12441414); |
| ... | ... | @@ -908,9 +948,12 @@ test "big.rational mul" { |
| 908 | 948 | } |
| 909 | 949 | |
| 910 | 950 | test "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(); |
| 914 | 957 | |
| 915 | 958 | try a.setRatio(78923, 23341); |
| 916 | 959 | try b.setRatio(123097, 12441414); |
| ... | ... | @@ -921,8 +964,10 @@ test "big.rational div" { |
| 921 | 964 | } |
| 922 | 965 | |
| 923 | 966 | test "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(); |
| 926 | 971 | |
| 927 | 972 | try a.setRatio(78923, 23341); |
| 928 | 973 | a.invert(); |