authorgravatar for r00ster91@proton.meWooster <r00ster91@proton.me> 2022-12-07 18:00:52+01:00
committergravatar for r00ster91@proton.meWooster <r00ster91@proton.me> 2022-12-10 12:33:17+01:00
log75f8c04d6d8f7c0fafabad81ab8f1bf3e9377889
treeff3ae55e8c9ca0abdcc24c3c4996176a503e743f
parent7637ac584fc2cee95dc5a20f51844b72fc7ecc82

behavior: add test coverage for slicing zero length array field of struct

Closes #11787

3 files changed, 22 insertions(+), 4 deletions(-)

lib/std/segmented_list.zig+1-4
...@@ -412,10 +412,7 @@ pub fn SegmentedList(comptime T: type, comptime prealloc_item_count: usize) type...@@ -412,10 +412,7 @@ pub fn SegmentedList(comptime T: type, comptime prealloc_item_count: usize) type
412}412}
413413
414test "SegmentedList basic usage" {414test "SegmentedList basic usage" {
415 if (false) {415 try testSegmentedList(0);
416 // https://github.com/ziglang/zig/issues/11787
417 try testSegmentedList(0);
418 }
419 try testSegmentedList(1);416 try testSegmentedList(1);
420 try testSegmentedList(2);417 try testSegmentedList(2);
421 try testSegmentedList(4);418 try testSegmentedList(4);
test/behavior.zig+1
...@@ -81,6 +81,7 @@ test {...@@ -81,6 +81,7 @@ test {
81 _ = @import("behavior/bugs/11179.zig");81 _ = @import("behavior/bugs/11179.zig");
82 _ = @import("behavior/bugs/11181.zig");82 _ = @import("behavior/bugs/11181.zig");
83 _ = @import("behavior/bugs/11213.zig");83 _ = @import("behavior/bugs/11213.zig");
84 _ = @import("behavior/bugs/11787.zig");
84 _ = @import("behavior/bugs/11816.zig");85 _ = @import("behavior/bugs/11816.zig");
85 _ = @import("behavior/bugs/12003.zig");86 _ = @import("behavior/bugs/12003.zig");
86 _ = @import("behavior/bugs/12025.zig");87 _ = @import("behavior/bugs/12025.zig");
test/behavior/bugs/11787.zig created+20
...@@ -0,0 +1,20 @@
1const std = @import("std");
2const builtin = @import("builtin");
3const testing = std.testing;
4
5test "slicing zero length array field of struct" {
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 S = struct {
13 a: [0]usize,
14 fn foo(self: *@This(), start: usize, end: usize) []usize {
15 return self.a[start..end];
16 }
17 };
18 var s: S = undefined;
19 try testing.expect(s.foo(0, 0).len == 0);
20}