diff options
| author | William Sengir <william@sengir.com> | 2022-03-26 16:07:52 -0700 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2022-05-16 13:55:26 -0700 |
| commit | 21be3d9166e8ea159ef334243b945bd20ed62652 (patch) | |
| tree | f17fef7d87ab29a44e6dd00b4d737d319629a8bc /test/behavior/vector.zig | |
| parent | afc714d5e5ff4d10a2b5dcc8f4c2eac8245de35c (diff) | |
| download | zig-21be3d9166e8ea159ef334243b945bd20ed62652.tar.gz zig-21be3d9166e8ea159ef334243b945bd20ed62652.zip | |
stage2: add vectorized overflow arithmetic behavior tests
Diffstat (limited to 'test/behavior/vector.zig')
| -rw-r--r-- | test/behavior/vector.zig | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/test/behavior/vector.zig b/test/behavior/vector.zig index 9847054692..e8150dde7a 100644 --- a/test/behavior/vector.zig +++ b/test/behavior/vector.zig @@ -903,3 +903,95 @@ test "multiplication-assignment operator with an array operand" { try S.doTheTest(); comptime try S.doTheTest(); } + +test "@addWithOverflow" { + if (builtin.zig_backend == .stage1) { + // stage1 doesn't support vector args + return error.SkipZigTest; + } + if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO + + const S = struct { + fn doTheTest() !void { + var result: @Vector(4, u8) = undefined; + var overflow = @addWithOverflow(@Vector(4, u8), @Vector(4, u8){ 250, 250, 250, 250 }, @Vector(4, u8){ 0, 5, 6, 10 }, &result); + var expected: @Vector(4, bool) = .{ false, false, true, true }; + try expect(mem.eql(bool, &@as([4]bool, overflow), &@as([4]bool, expected))); + } + }; + try S.doTheTest(); + comptime try S.doTheTest(); +} + +test "@subWithOverflow" { + if (builtin.zig_backend == .stage1) { + // stage1 doesn't support vector args + return error.SkipZigTest; + } + if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO + + const S = struct { + fn doTheTest() !void { + var result: @Vector(4, i8) = undefined; + var overflow = @subWithOverflow(@Vector(4, i8), @Vector(4, i8){ -120, -120, 120, 120 }, @Vector(4, i8){ 8, 9, -7, -8 }, &result); + var expected: @Vector(4, bool) = .{ false, true, false, true }; + try expect(mem.eql(bool, &@as([4]bool, overflow), &@as([4]bool, expected))); + } + }; + try S.doTheTest(); + comptime try S.doTheTest(); +} + +test "@mulWithOverflow" { + if (builtin.zig_backend == .stage1) { + // stage1 doesn't support vector args + return error.SkipZigTest; + } + if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO + + const S = struct { + fn doTheTest() !void { + var result: @Vector(4, u8) = undefined; + var overflow = @mulWithOverflow(@Vector(4, u8), @Vector(4, u8){ 10, 10, 10, 10 }, @Vector(4, u8){ 25, 26, 0, 30 }, &result); + var expected: @Vector(4, bool) = .{ false, true, false, true }; + try expect(mem.eql(bool, &@as([4]bool, overflow), &@as([4]bool, expected))); + } + }; + try S.doTheTest(); + comptime try S.doTheTest(); +} + +test "@shlWithOverflow" { + if (builtin.zig_backend == .stage1) { + // stage1 doesn't support vector args + return error.SkipZigTest; + } + if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO + + const S = struct { + fn doTheTest() !void { + var result: @Vector(4, u8) = undefined; + var overflow = @shlWithOverflow(@Vector(4, u8), @Vector(4, u8){ 0, 1, 8, 255 }, @Vector(4, u3){ 7, 7, 7, 7 }, &result); + var expected: @Vector(4, bool) = .{ false, false, true, true }; + try expect(mem.eql(bool, &@as([4]bool, overflow), &@as([4]bool, expected))); + } + }; + try S.doTheTest(); + comptime try S.doTheTest(); +} |
