Skip to content

Commit 0995143

Browse files
committed
test: test more int sizes for @mulWithOverflow builtin
1 parent e422b04 commit 0995143

File tree

1 file changed

+154
-1
lines changed

1 file changed

+154
-1
lines changed

test/behavior/math.zig

Lines changed: 154 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -664,7 +664,7 @@ test "small int addition" {
664664
try expect(result == 0);
665665
}
666666

667-
test "@mulWithOverflow" {
667+
test "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
687+
test "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+
686839
test "@subWithOverflow" {
687840
if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
688841

0 commit comments

Comments
 (0)