From bf863878acb6ac65ef10064b8ffd457ef756eba8 Mon Sep 17 00:00:00 2001 From: r00ster91 Date: Wed, 7 Dec 2022 20:57:00 +0100 Subject: [PATCH] behavior: add test coverage for slice and array-related issues Closes #10684 Closes #6905 Closes #8646 --- test/behavior.zig | 3 +++ test/behavior/bugs/10684.zig | 19 +++++++++++++++++++ test/behavior/bugs/6905.zig | 23 +++++++++++++++++++++++ test/behavior/bugs/8646.zig | 18 ++++++++++++++++++ 4 files changed, 63 insertions(+) create mode 100644 test/behavior/bugs/10684.zig create mode 100644 test/behavior/bugs/6905.zig create mode 100644 test/behavior/bugs/8646.zig diff --git a/test/behavior.zig b/test/behavior.zig index 0588fba11c..94e06145f2 100644 --- 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 new file mode 100644 index 0000000000..8b0bd6ebca --- /dev/null +++ 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 new file mode 100644 index 0000000000..f274c81a63 --- /dev/null +++ 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 new file mode 100644 index 0000000000..2e181a682e --- /dev/null +++ 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]); +}