zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

commit bf863878acb6ac65ef10064b8ffd457ef756eba8 (tree)
parent 7a8f7dcb8c25d4c78ac8f1190ab8e163ff1cb80d
Author: r00ster91 <r00ster91@proton.me>
Date:   Wed,  7 Dec 2022 20:57:00 +0100

behavior: add test coverage for slice and array-related issues

Closes #10684
Closes #6905
Closes #8646

Diffstat:
Mtest/behavior.zig | 3+++
Atest/behavior/bugs/10684.zig | 19+++++++++++++++++++
Atest/behavior/bugs/6905.zig | 23+++++++++++++++++++++++
Atest/behavior/bugs/8646.zig | 18++++++++++++++++++
4 files changed, 63 insertions(+), 0 deletions(-)

diff --git a/test/behavior.zig b/test/behavior.zig @@ -65,14 +65,17 @@ test { _ = @import("behavior/bugs/6456.zig"); _ = @import("behavior/bugs/6781.zig"); _ = @import("behavior/bugs/6850.zig"); + _ = @import("behavior/bugs/6905.zig"); _ = @import("behavior/bugs/7003.zig"); _ = @import("behavior/bugs/7047.zig"); _ = @import("behavior/bugs/7187.zig"); _ = @import("behavior/bugs/7325.zig"); + _ = @import("behavior/bugs/8646.zig"); _ = @import("behavior/bugs/9584.zig"); _ = @import("behavior/bugs/10138.zig"); _ = @import("behavior/bugs/10147.zig"); _ = @import("behavior/bugs/10970.zig"); + _ = @import("behavior/bugs/10684.zig"); _ = @import("behavior/bugs/11046.zig"); _ = @import("behavior/bugs/11100.zig"); _ = @import("behavior/bugs/11139.zig"); diff --git a/test/behavior/bugs/10684.zig b/test/behavior/bugs/10684.zig @@ -0,0 +1,19 @@ +const std = @import("std"); +const builtin = @import("builtin"); +const expectEqualStrings = std.testing.expectEqualStrings; + +test "slicing slices" { + 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_x86) 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 foo = "1234"; + const bar = foo[0..4]; + try expectEqualStrings("1234", bar); + try expectEqualStrings("2", bar[1..2]); + try expectEqualStrings("3", bar[2..3]); + try expectEqualStrings("4", bar[3..4]); + try expectEqualStrings("34", bar[2..4]); +} diff --git a/test/behavior/bugs/6905.zig b/test/behavior/bugs/6905.zig @@ -0,0 +1,23 @@ +const expect = @import("std").testing.expect; +const builtin = @import("builtin"); + +test "sentinel-terminated 0-length slices" { + 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_x86) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO + + var u32s: [4]u32 = [_]u32{ 0, 1, 2, 3 }; + + var index: u8 = 2; + var slice = u32s[index..index :2]; + var array_ptr = u32s[2..2 :2]; + const comptime_known_array_value = u32s[2..2 :2].*; + var runtime_array_value = u32s[2..2 :2].*; + + try expect(slice[0] == 2); + try expect(array_ptr[0] == 2); + try expect(comptime_known_array_value[0] == 2); + try expect(runtime_array_value[0] == 2); +} diff --git a/test/behavior/bugs/8646.zig b/test/behavior/bugs/8646.zig @@ -0,0 +1,18 @@ +const std = @import("std"); +const builtin = @import("builtin"); + +const array = [_][]const []const u8{ + &.{"hello"}, + &.{ "world", "hello" }, +}; + +test { + 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_x86) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO + + try std.testing.expect(array[0].len == 1); + try std.testing.expectEqualStrings("hello", array[0][0]); +}