authorgravatar for william@sengir.comWilliam Sengir <william@sengir.com> 2022-03-26 16:07:52-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2022-05-16 13:55:26-07:00
log21be3d9166e8ea159ef334243b945bd20ed62652
treef17fef7d87ab29a44e6dd00b4d737d319629a8bc
parentafc714d5e5ff4d10a2b5dcc8f4c2eac8245de35c

stage2: add vectorized overflow arithmetic behavior tests


1 files changed, 92 insertions(+), 0 deletions(-)

test/behavior/vector.zig+92
......@@ -903,3 +903,95 @@ test "multiplication-assignment operator with an array operand" {
903903 try S.doTheTest();
904904 comptime try S.doTheTest();
905905}
906
907test "@addWithOverflow" {
908 if (builtin.zig_backend == .stage1) {
909 // stage1 doesn't support vector args
910 return error.SkipZigTest;
911 }
912 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
913 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
914 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
915 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
916 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
917
918 const S = struct {
919 fn doTheTest() !void {
920 var result: @Vector(4, u8) = undefined;
921 var overflow = @addWithOverflow(@Vector(4, u8), @Vector(4, u8){ 250, 250, 250, 250 }, @Vector(4, u8){ 0, 5, 6, 10 }, &result);
922 var expected: @Vector(4, bool) = .{ false, false, true, true };
923 try expect(mem.eql(bool, &@as([4]bool, overflow), &@as([4]bool, expected)));
924 }
925 };
926 try S.doTheTest();
927 comptime try S.doTheTest();
928}
929
930test "@subWithOverflow" {
931 if (builtin.zig_backend == .stage1) {
932 // stage1 doesn't support vector args
933 return error.SkipZigTest;
934 }
935 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
936 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
937 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
938 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
939 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
940
941 const S = struct {
942 fn doTheTest() !void {
943 var result: @Vector(4, i8) = undefined;
944 var overflow = @subWithOverflow(@Vector(4, i8), @Vector(4, i8){ -120, -120, 120, 120 }, @Vector(4, i8){ 8, 9, -7, -8 }, &result);
945 var expected: @Vector(4, bool) = .{ false, true, false, true };
946 try expect(mem.eql(bool, &@as([4]bool, overflow), &@as([4]bool, expected)));
947 }
948 };
949 try S.doTheTest();
950 comptime try S.doTheTest();
951}
952
953test "@mulWithOverflow" {
954 if (builtin.zig_backend == .stage1) {
955 // stage1 doesn't support vector args
956 return error.SkipZigTest;
957 }
958 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
959 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
960 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
961 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
962 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
963
964 const S = struct {
965 fn doTheTest() !void {
966 var result: @Vector(4, u8) = undefined;
967 var overflow = @mulWithOverflow(@Vector(4, u8), @Vector(4, u8){ 10, 10, 10, 10 }, @Vector(4, u8){ 25, 26, 0, 30 }, &result);
968 var expected: @Vector(4, bool) = .{ false, true, false, true };
969 try expect(mem.eql(bool, &@as([4]bool, overflow), &@as([4]bool, expected)));
970 }
971 };
972 try S.doTheTest();
973 comptime try S.doTheTest();
974}
975
976test "@shlWithOverflow" {
977 if (builtin.zig_backend == .stage1) {
978 // stage1 doesn't support vector args
979 return error.SkipZigTest;
980 }
981 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
982 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
983 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
984 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
985 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
986
987 const S = struct {
988 fn doTheTest() !void {
989 var result: @Vector(4, u8) = undefined;
990 var overflow = @shlWithOverflow(@Vector(4, u8), @Vector(4, u8){ 0, 1, 8, 255 }, @Vector(4, u3){ 7, 7, 7, 7 }, &result);
991 var expected: @Vector(4, bool) = .{ false, false, true, true };
992 try expect(mem.eql(bool, &@as([4]bool, overflow), &@as([4]bool, expected)));
993 }
994 };
995 try S.doTheTest();
996 comptime try S.doTheTest();
997}