Skip to content

Commit 06f58fc

Browse files
committed
test: test more int sizes for @mulWithOverflow builtin
1 parent 7a56681 commit 06f58fc

File tree

1 file changed

+144
-12
lines changed

1 file changed

+144
-12
lines changed

test/behavior/math.zig

Lines changed: 144 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -667,20 +667,152 @@ test "small int addition" {
667667
test "@mulWithOverflow" {
668668
if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
669669

670-
var result: u8 = undefined;
671-
try expect(@mulWithOverflow(u8, 86, 3, &result));
672-
try expect(result == 2);
673-
try expect(!@mulWithOverflow(u8, 85, 3, &result));
674-
try expect(result == 255);
670+
{
671+
var a: u8 = 3;
672+
var b: u8 = 85;
673+
var res: u8 = undefined;
675674

676-
var a: u8 = 123;
677-
var b: u8 = 2;
678-
try expect(!@mulWithOverflow(u8, a, b, &result));
679-
try expect(result == 246);
675+
try expect(!@mulWithOverflow(u8, a, b, &res));
676+
try expect(res == 255);
677+
678+
b = 86;
679+
try expect(@mulWithOverflow(u8, a, b, &res));
680+
try expect(res == 2);
681+
}
682+
683+
{
684+
var a: i8 = 3;
685+
var b: i8 = -42;
686+
var res: i8 = undefined;
687+
try expect(!@mulWithOverflow(i8, a, b, &res));
688+
try expect(res == -126);
689+
690+
b = -43;
691+
try expect(@mulWithOverflow(i8, a, b, &res));
692+
try expect(res == 127);
693+
}
694+
695+
{
696+
var a: u16 = 3;
697+
var b: u16 = 0x5555;
698+
var res: u16 = undefined;
699+
try expect(!@mulWithOverflow(u16, a, b, &res));
700+
try expect(res == 0xffff);
701+
702+
b = 0x5556;
703+
try expect(@mulWithOverflow(u16, a, b, &res));
704+
try expect(res == 2);
705+
}
706+
707+
{
708+
var a: i16 = 3;
709+
var b: i16 = -0x2aaa;
710+
var res: i16 = undefined;
711+
try expect(!@mulWithOverflow(i16, a, b, &res));
712+
try expect(res == -0x7ffe);
713+
714+
b = -0x2aab;
715+
try expect(@mulWithOverflow(i16, a, b, &res));
716+
try expect(res == 0x7fff);
717+
}
680718

681-
b = 4;
682-
try expect(@mulWithOverflow(u8, a, b, &result));
683-
try expect(result == 236);
719+
{
720+
var a: u32 = 3;
721+
var b: u32 = 0x55555555;
722+
var res: u32 = undefined;
723+
try expect(!@mulWithOverflow(u32, a, b, &res));
724+
try expect(res == 0xffffffff);
725+
726+
b = 0x55555556;
727+
try expect(@mulWithOverflow(u32, a, b, &res));
728+
try expect(res == 2);
729+
}
730+
731+
{
732+
var a: i32 = 3;
733+
var b: i32 = -0x2aaaaaaa;
734+
var res: i32 = undefined;
735+
try expect(!@mulWithOverflow(i32, a, b, &res));
736+
try expect(res == -0x7ffffffe);
737+
738+
b = -0x2aaaaaab;
739+
try expect(@mulWithOverflow(i32, a, b, &res));
740+
try expect(res == 0x7fffffff);
741+
}
742+
743+
{
744+
var a: u64 = 3;
745+
var b: u64 = 0x5555555555555555;
746+
var res: u64 = undefined;
747+
try expect(!@mulWithOverflow(u64, a, b, &res));
748+
try expect(res == 0xffffffffffffffff);
749+
750+
b = 0x5555555555555556;
751+
try expect(@mulWithOverflow(u64, a, b, &res));
752+
try expect(res == 2);
753+
}
754+
755+
{
756+
var a: i64 = 3;
757+
var b: i64 = -0x2aaaaaaaaaaaaaaa;
758+
var res: i64 = undefined;
759+
try expect(!@mulWithOverflow(i64, a, b, &res));
760+
try expect(res == -0x7ffffffffffffffe);
761+
762+
b = -0x2aaaaaaaaaaaaaab;
763+
try expect(@mulWithOverflow(i64, a, b, &res));
764+
try expect(res == 0x7fffffffffffffff);
765+
}
766+
}
767+
768+
test "@mulWithOverflow - non-power-of-two integers" {
769+
{
770+
var a: u30 = 3;
771+
var b: u30 = 0x15555555;
772+
var res: u30 = undefined;
773+
try expect(!@mulWithOverflow(u30, a, b, &res));
774+
try expect(res == 0x3fffffff);
775+
776+
b = 0x15555556;
777+
try expect(@mulWithOverflow(u30, a, b, &res));
778+
try expect(res == 2);
779+
}
780+
781+
{
782+
var a: i30 = 3;
783+
var b: i30 = -0xaaaaaaa;
784+
var res: i30 = undefined;
785+
try expect(!@mulWithOverflow(i30, a, b, &res));
786+
try expect(res == -0x1ffffffe);
787+
788+
b = -0xaaaaaab;
789+
try expect(@mulWithOverflow(i30, a, b, &res));
790+
try expect(res == 0x1fffffff);
791+
}
792+
793+
{
794+
var a: u62 = 3;
795+
var b: u62 = 0x1555555555555555;
796+
var res: u62 = undefined;
797+
try expect(!@mulWithOverflow(u62, a, b, &res));
798+
try expect(res == 0x3fffffffffffffff);
799+
800+
b = 0x1555555555555556;
801+
try expect(@mulWithOverflow(u62, a, b, &res));
802+
try expect(res == 2);
803+
}
804+
805+
{
806+
var a: i62 = 3;
807+
var b: i62 = -0xaaaaaaaaaaaaaaa;
808+
var res: i62 = undefined;
809+
try expect(!@mulWithOverflow(i62, a, b, &res));
810+
try expect(res == -0x1ffffffffffffffe);
811+
812+
b = -0xaaaaaaaaaaaaaab;
813+
try expect(@mulWithOverflow(i62, a, b, &res));
814+
try expect(res == 0x1fffffffffffffff);
815+
}
684816
}
685817

686818
test "@subWithOverflow" {

0 commit comments

Comments
 (0)