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