Skip to content

Commit 6d8d0cb

Browse files
committed
stage2: add vectorized overflow arithmetic behavior tests
1 parent 63f10e8 commit 6d8d0cb

File tree

1 file changed

+76
-0
lines changed

1 file changed

+76
-0
lines changed

test/behavior/vector.zig

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

0 commit comments

Comments
 (0)