Skip to content

Commit fc47c9f

Browse files
committed
stage2: add vectorized overflow arithmetic behavior tests
1 parent a37c9a8 commit fc47c9f

File tree

1 file changed

+80
-0
lines changed

1 file changed

+80
-0
lines changed

test/behavior/vector.zig

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -879,3 +879,83 @@ test "saturating shift-left" {
879879
try S.doTheTest();
880880
comptime try S.doTheTest();
881881
}
882+
883+
test "@addWithOverflow" {
884+
if (builtin.zig_backend == .stage1) return error.SkipZigTest;
885+
if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
886+
if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
887+
if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
888+
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
889+
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
890+
891+
const S = struct {
892+
fn doTheTest() !void {
893+
var result: @Vector(4, u8) = undefined;
894+
var overflow = @addWithOverflow(@Vector(4, u8), @Vector(4, u8){ 250, 250, 250, 250 }, @Vector(4, u8){ 0, 5, 6, 10 }, &result);
895+
var expected: @Vector(4, bool) = .{ false, false, true, true };
896+
try expect(mem.eql(bool, &@as([4]bool, overflow), &@as([4]bool, expected)));
897+
}
898+
};
899+
try S.doTheTest();
900+
comptime try S.doTheTest();
901+
}
902+
903+
test "@subWithOverflow" {
904+
if (builtin.zig_backend == .stage1) return error.SkipZigTest;
905+
if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
906+
if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
907+
if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
908+
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
909+
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
910+
911+
const S = struct {
912+
fn doTheTest() !void {
913+
var result: @Vector(4, i8) = undefined;
914+
var overflow = @subWithOverflow(@Vector(4, i8), @Vector(4, i8){ -120, -120, 120, 120 }, @Vector(4, i8){ 8, 9, -7, -8 }, &result);
915+
var expected: @Vector(4, bool) = .{ false, true, false, true };
916+
try expect(mem.eql(bool, &@as([4]bool, overflow), &@as([4]bool, expected)));
917+
}
918+
};
919+
try S.doTheTest();
920+
comptime try S.doTheTest();
921+
}
922+
923+
test "@mulWithOverflow" {
924+
if (builtin.zig_backend == .stage1) return error.SkipZigTest;
925+
if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
926+
if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
927+
if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
928+
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
929+
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
930+
931+
const S = struct {
932+
fn doTheTest() !void {
933+
var result: @Vector(4, u8) = undefined;
934+
var overflow = @mulWithOverflow(@Vector(4, u8), @Vector(4, u8){ 10, 10, 10, 10 }, @Vector(4, u8){ 25, 26, 0, 30 }, &result);
935+
var expected: @Vector(4, bool) = .{ false, true, false, true };
936+
try expect(mem.eql(bool, &@as([4]bool, overflow), &@as([4]bool, expected)));
937+
}
938+
};
939+
try S.doTheTest();
940+
comptime try S.doTheTest();
941+
}
942+
943+
test "@shlWithOverflow" {
944+
if (builtin.zig_backend == .stage1) return error.SkipZigTest;
945+
if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
946+
if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
947+
if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
948+
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
949+
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
950+
951+
const S = struct {
952+
fn doTheTest() !void {
953+
var result: @Vector(4, u8) = undefined;
954+
var overflow = @shlWithOverflow(@Vector(4, u8), @Vector(4, u8){ 0, 1, 8, 255 }, @Vector(4, u3){ 7, 7, 7, 7 }, &result);
955+
var expected: @Vector(4, bool) = .{ false, false, true, true };
956+
try expect(mem.eql(bool, &@as([4]bool, overflow), &@as([4]bool, expected)));
957+
}
958+
};
959+
try S.doTheTest();
960+
comptime try S.doTheTest();
961+
}

0 commit comments

Comments
 (0)