authorgravatar for r00ster91@proton.meWooster <r00ster91@proton.me> 2022-12-07 20:57:00+01:00
committergravatar for r00ster91@proton.meWooster <r00ster91@proton.me> 2022-12-10 12:34:42+01:00
logbf863878acb6ac65ef10064b8ffd457ef756eba8
treeafb514d4f77c2c1700b9733411e6abb37902a886
parent7a8f7dcb8c25d4c78ac8f1190ab8e163ff1cb80d

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

Closes #10684 Closes #6905 Closes #8646

4 files changed, 63 insertions(+), 0 deletions(-)

test/behavior.zig+3
...@@ -65,14 +65,17 @@ test {...@@ -65,14 +65,17 @@ test {
65 _ = @import("behavior/bugs/6456.zig");65 _ = @import("behavior/bugs/6456.zig");
66 _ = @import("behavior/bugs/6781.zig");66 _ = @import("behavior/bugs/6781.zig");
67 _ = @import("behavior/bugs/6850.zig");67 _ = @import("behavior/bugs/6850.zig");
68 _ = @import("behavior/bugs/6905.zig");
68 _ = @import("behavior/bugs/7003.zig");69 _ = @import("behavior/bugs/7003.zig");
69 _ = @import("behavior/bugs/7047.zig");70 _ = @import("behavior/bugs/7047.zig");
70 _ = @import("behavior/bugs/7187.zig");71 _ = @import("behavior/bugs/7187.zig");
71 _ = @import("behavior/bugs/7325.zig");72 _ = @import("behavior/bugs/7325.zig");
73 _ = @import("behavior/bugs/8646.zig");
72 _ = @import("behavior/bugs/9584.zig");74 _ = @import("behavior/bugs/9584.zig");
73 _ = @import("behavior/bugs/10138.zig");75 _ = @import("behavior/bugs/10138.zig");
74 _ = @import("behavior/bugs/10147.zig");76 _ = @import("behavior/bugs/10147.zig");
75 _ = @import("behavior/bugs/10970.zig");77 _ = @import("behavior/bugs/10970.zig");
78 _ = @import("behavior/bugs/10684.zig");
76 _ = @import("behavior/bugs/11046.zig");79 _ = @import("behavior/bugs/11046.zig");
77 _ = @import("behavior/bugs/11100.zig");80 _ = @import("behavior/bugs/11100.zig");
78 _ = @import("behavior/bugs/11139.zig");81 _ = @import("behavior/bugs/11139.zig");
test/behavior/bugs/10684.zig created+19
...@@ -0,0 +1,19 @@
1const std = @import("std");
2const builtin = @import("builtin");
3const expectEqualStrings = std.testing.expectEqualStrings;
4
5test "slicing slices" {
6 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
7 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
8 if (builtin.zig_backend == .stage2_x86) return error.SkipZigTest; // TODO
9 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
10 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
11
12 const foo = "1234";
13 const bar = foo[0..4];
14 try expectEqualStrings("1234", bar);
15 try expectEqualStrings("2", bar[1..2]);
16 try expectEqualStrings("3", bar[2..3]);
17 try expectEqualStrings("4", bar[3..4]);
18 try expectEqualStrings("34", bar[2..4]);
19}
test/behavior/bugs/6905.zig created+23
...@@ -0,0 +1,23 @@
1const expect = @import("std").testing.expect;
2const builtin = @import("builtin");
3
4test "sentinel-terminated 0-length slices" {
5 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
6 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
7 if (builtin.zig_backend == .stage2_x86) return error.SkipZigTest; // TODO
8 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
9 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
10
11 var u32s: [4]u32 = [_]u32{ 0, 1, 2, 3 };
12
13 var index: u8 = 2;
14 var slice = u32s[index..index :2];
15 var array_ptr = u32s[2..2 :2];
16 const comptime_known_array_value = u32s[2..2 :2].*;
17 var runtime_array_value = u32s[2..2 :2].*;
18
19 try expect(slice[0] == 2);
20 try expect(array_ptr[0] == 2);
21 try expect(comptime_known_array_value[0] == 2);
22 try expect(runtime_array_value[0] == 2);
23}
test/behavior/bugs/8646.zig created+18
...@@ -0,0 +1,18 @@
1const std = @import("std");
2const builtin = @import("builtin");
3
4const array = [_][]const []const u8{
5 &.{"hello"},
6 &.{ "world", "hello" },
7};
8
9test {
10 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
11 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
12 if (builtin.zig_backend == .stage2_x86) return error.SkipZigTest; // TODO
13 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
14 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
15
16 try std.testing.expect(array[0].len == 1);
17 try std.testing.expectEqualStrings("hello", array[0][0]);
18}