| ... | ... | @@ -903,3 +903,95 @@ test "multiplication-assignment operator with an array operand" { |
| 903 | 903 | try S.doTheTest(); |
| 904 | 904 | comptime try S.doTheTest(); |
| 905 | 905 | } |
| 906 | |
| 907 | test "@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 | |
| 930 | test "@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 | |
| 953 | test "@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 | |
| 976 | test "@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 | } |