diff options
| author | Andrew Kelley <andrew@ziglang.org> | 2022-03-26 00:33:22 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-03-26 00:33:22 -0400 |
| commit | 88e98a0611b9fb41c1da026febac2467548bb129 (patch) | |
| tree | 038ccb88c632580be1898a536aa2433077c2e6d0 /test | |
| parent | bae35bdf2d8919b60dee9a0af3afbdd93dd72b59 (diff) | |
| parent | cd46daf7d047eeceb7690e2739af5952d60c3884 (diff) | |
| download | zig-88e98a0611b9fb41c1da026febac2467548bb129.tar.gz zig-88e98a0611b9fb41c1da026febac2467548bb129.zip | |
Merge pull request #11289 from schmee/stage2-select
stage2: implement `@select`
Diffstat (limited to 'test')
| -rw-r--r-- | test/behavior/select.zig | 75 |
1 files changed, 55 insertions, 20 deletions
diff --git a/test/behavior/select.zig b/test/behavior/select.zig index 8b4cba49bd..f731ded09e 100644 --- a/test/behavior/select.zig +++ b/test/behavior/select.zig @@ -3,24 +3,59 @@ const builtin = @import("builtin"); const mem = std.mem; const expect = std.testing.expect; -test "@select" { - if (@import("builtin").zig_backend != .stage1) return error.SkipZigTest; // TODO - - const S = struct { - fn doTheTest() !void { - var a: @Vector(4, bool) = [4]bool{ true, false, true, false }; - var b: @Vector(4, i32) = [4]i32{ -1, 4, 999, -31 }; - var c: @Vector(4, i32) = [4]i32{ -5, 1, 0, 1234 }; - var abc = @select(i32, a, b, c); - try expect(mem.eql(i32, &@as([4]i32, abc), &[4]i32{ -1, 1, 999, 1234 })); - - var x: @Vector(4, bool) = [4]bool{ false, false, false, true }; - var y: @Vector(4, f32) = [4]f32{ 0.001, 33.4, 836, -3381.233 }; - var z: @Vector(4, f32) = [4]f32{ 0.0, 312.1, -145.9, 9993.55 }; - var xyz = @select(f32, x, y, z); - try expect(mem.eql(f32, &@as([4]f32, xyz), &[4]f32{ 0.0, 312.1, -145.9, -3381.233 })); - } - }; - try S.doTheTest(); - comptime try S.doTheTest(); +test "@select vectors" { + if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO + + comptime try selectVectors(); + try selectVectors(); +} + +fn selectVectors() !void { + var a = @Vector(4, bool){ true, false, true, false }; + var b = @Vector(4, i32){ -1, 4, 999, -31 }; + var c = @Vector(4, i32){ -5, 1, 0, 1234 }; + var abc = @select(i32, a, b, c); + try expect(abc[0] == -1); + try expect(abc[1] == 1); + try expect(abc[2] == 999); + try expect(abc[3] == 1234); + + var x = @Vector(4, bool){ false, false, false, true }; + var y = @Vector(4, f32){ 0.001, 33.4, 836, -3381.233 }; + var z = @Vector(4, f32){ 0.0, 312.1, -145.9, 9993.55 }; + var xyz = @select(f32, x, y, z); + try expect(mem.eql(f32, &@as([4]f32, xyz), &[4]f32{ 0.0, 312.1, -145.9, -3381.233 })); +} + +test "@select arrays" { + if (builtin.zig_backend == .stage1) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO + + comptime try selectArrays(); + try selectArrays(); +} + +fn selectArrays() !void { + var a = [4]bool{ false, true, false, true }; + var b = [4]usize{ 0, 1, 2, 3 }; + var c = [4]usize{ 4, 5, 6, 7 }; + var abc = @select(usize, a, b, c); + try expect(abc[0] == 4); + try expect(abc[1] == 1); + try expect(abc[2] == 6); + try expect(abc[3] == 3); + + var x = [4]bool{ false, false, false, true }; + var y = [4]f32{ 0.001, 33.4, 836, -3381.233 }; + var z = [4]f32{ 0.0, 312.1, -145.9, 9993.55 }; + var xyz = @select(f32, x, y, z); + try expect(mem.eql(f32, &@as([4]f32, xyz), &[4]f32{ 0.0, 312.1, -145.9, -3381.233 })); } |
