authorgravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2022-05-04 23:12:59+02:00
committergravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2022-05-05 21:43:36+02:00
log3cef23129a37676cfd1e86efbc20d6089d7812e5
tree2a377fd7f775006bb17b9657ff3f7caf96de4cfe
parentd112cd52f36cbb00e18009417044ab1e4496dd80

test: test more int sizes for @mulWithOverflow builtin


1 files changed, 154 insertions(+), 1 deletions(-)

test/behavior/math.zig+154-1
......@@ -664,7 +664,7 @@ test "small int addition" {
664664 try expect(result == 0);
665665}
666666
667test "@mulWithOverflow" {
667test "basic @mulWithOverflow" {
668668 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
669669
670670 var result: u8 = undefined;
......@@ -683,6 +683,159 @@ test "@mulWithOverflow" {
683683 try expect(result == 236);
684684}
685685
686// TODO migrate to this for all backends once they handle more cases
687test "extensive @mulWithOverflow" {
688 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
689 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
690 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
691 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
692
693 {
694 var a: u8 = 3;
695 var b: u8 = 85;
696 var res: u8 = undefined;
697
698 try expect(!@mulWithOverflow(u8, a, b, &res));
699 try expect(res == 255);
700
701 b = 86;
702 try expect(@mulWithOverflow(u8, a, b, &res));
703 try expect(res == 2);
704 }
705
706 {
707 var a: i8 = 3;
708 var b: i8 = -42;
709 var res: i8 = undefined;
710 try expect(!@mulWithOverflow(i8, a, b, &res));
711 try expect(res == -126);
712
713 b = -43;
714 try expect(@mulWithOverflow(i8, a, b, &res));
715 try expect(res == 127);
716 }
717
718 {
719 var a: u16 = 3;
720 var b: u16 = 0x5555;
721 var res: u16 = undefined;
722 try expect(!@mulWithOverflow(u16, a, b, &res));
723 try expect(res == 0xffff);
724
725 b = 0x5556;
726 try expect(@mulWithOverflow(u16, a, b, &res));
727 try expect(res == 2);
728 }
729
730 {
731 var a: i16 = 3;
732 var b: i16 = -0x2aaa;
733 var res: i16 = undefined;
734 try expect(!@mulWithOverflow(i16, a, b, &res));
735 try expect(res == -0x7ffe);
736
737 b = -0x2aab;
738 try expect(@mulWithOverflow(i16, a, b, &res));
739 try expect(res == 0x7fff);
740 }
741
742 {
743 var a: u30 = 3;
744 var b: u30 = 0x15555555;
745 var res: u30 = undefined;
746 try expect(!@mulWithOverflow(u30, a, b, &res));
747 try expect(res == 0x3fffffff);
748
749 b = 0x15555556;
750 try expect(@mulWithOverflow(u30, a, b, &res));
751 try expect(res == 2);
752 }
753
754 {
755 var a: i30 = 3;
756 var b: i30 = -0xaaaaaaa;
757 var res: i30 = undefined;
758 try expect(!@mulWithOverflow(i30, a, b, &res));
759 try expect(res == -0x1ffffffe);
760
761 b = -0xaaaaaab;
762 try expect(@mulWithOverflow(i30, a, b, &res));
763 try expect(res == 0x1fffffff);
764 }
765
766 {
767 var a: u32 = 3;
768 var b: u32 = 0x55555555;
769 var res: u32 = undefined;
770 try expect(!@mulWithOverflow(u32, a, b, &res));
771 try expect(res == 0xffffffff);
772
773 b = 0x55555556;
774 try expect(@mulWithOverflow(u32, a, b, &res));
775 try expect(res == 2);
776 }
777
778 {
779 var a: i32 = 3;
780 var b: i32 = -0x2aaaaaaa;
781 var res: i32 = undefined;
782 try expect(!@mulWithOverflow(i32, a, b, &res));
783 try expect(res == -0x7ffffffe);
784
785 b = -0x2aaaaaab;
786 try expect(@mulWithOverflow(i32, a, b, &res));
787 try expect(res == 0x7fffffff);
788 }
789
790 {
791 var a: u62 = 3;
792 var b: u62 = 0x1555555555555555;
793 var res: u62 = undefined;
794 try expect(!@mulWithOverflow(u62, a, b, &res));
795 try expect(res == 0x3fffffffffffffff);
796
797 b = 0x1555555555555556;
798 try expect(@mulWithOverflow(u62, a, b, &res));
799 try expect(res == 2);
800 }
801
802 {
803 var a: i62 = 3;
804 var b: i62 = -0xaaaaaaaaaaaaaaa;
805 var res: i62 = undefined;
806 try expect(!@mulWithOverflow(i62, a, b, &res));
807 try expect(res == -0x1ffffffffffffffe);
808
809 b = -0xaaaaaaaaaaaaaab;
810 try expect(@mulWithOverflow(i62, a, b, &res));
811 try expect(res == 0x1fffffffffffffff);
812 }
813
814 {
815 var a: u64 = 3;
816 var b: u64 = 0x5555555555555555;
817 var res: u64 = undefined;
818 try expect(!@mulWithOverflow(u64, a, b, &res));
819 try expect(res == 0xffffffffffffffff);
820
821 b = 0x5555555555555556;
822 try expect(@mulWithOverflow(u64, a, b, &res));
823 try expect(res == 2);
824 }
825
826 {
827 var a: i64 = 3;
828 var b: i64 = -0x2aaaaaaaaaaaaaaa;
829 var res: i64 = undefined;
830 try expect(!@mulWithOverflow(i64, a, b, &res));
831 try expect(res == -0x7ffffffffffffffe);
832
833 b = -0x2aaaaaaaaaaaaaab;
834 try expect(@mulWithOverflow(i64, a, b, &res));
835 try expect(res == 0x7fffffffffffffff);
836 }
837}
838
686839test "@subWithOverflow" {
687840 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
688841