From 144e36770ed7d7e1ddbcae61742cf76bfb8b0e41 Mon Sep 17 00:00:00 2001 From: Jarred Sumner Date: Sun, 16 Jan 2022 17:26:49 -0800 Subject: [PATCH 1/2] Fix missing `!void` in std.MultiArrayList Calling `insert` on a `std.MultiArrayList` currently fails with a compiler error due to using a `try` without the `!` annotation on the return type ```zig this.list.insert(allocator, 0, listener); ``` ```zig /Users/jarred/Build/zig/lib/std/multi_array_list.zig:192:13: error: expected type 'void', found '@typeInfo(@typeInfo(@TypeOf(std.multi_array_list.MultiArrayList(src.javascript.jsc.node.types.Listener).ensureUnusedCapacity)).Fn.return_type.?).ErrorUnion.error_set' try self.ensureUnusedCapacity(gpa, 1); ``` --- lib/std/multi_array_list.zig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/std/multi_array_list.zig b/lib/std/multi_array_list.zig index a651076aba..7195aef55a 100644 --- a/lib/std/multi_array_list.zig +++ b/lib/std/multi_array_list.zig @@ -188,7 +188,7 @@ pub fn MultiArrayList(comptime S: type) type { /// after and including the specified index back by one and /// sets the given index to the specified element. May reallocate /// and invalidate iterators. - pub fn insert(self: *Self, gpa: Allocator, index: usize, elem: S) void { + pub fn insert(self: *Self, gpa: Allocator, index: usize, elem: S) !void { try self.ensureUnusedCapacity(gpa, 1); self.insertAssumeCapacity(index, elem); } From 90343d1868df01899b5cceea96f680e7bca38767 Mon Sep 17 00:00:00 2001 From: Jakub Konka Date: Mon, 17 Jan 2022 12:26:48 +0100 Subject: [PATCH 2/2] libstd: add smoke test for insert methods in MultiArrayList --- lib/std/multi_array_list.zig | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/lib/std/multi_array_list.zig b/lib/std/multi_array_list.zig index 7195aef55a..47d12884df 100644 --- a/lib/std/multi_array_list.zig +++ b/lib/std/multi_array_list.zig @@ -602,3 +602,22 @@ test "ensure capacity on empty list" { try testing.expectEqualSlices(u32, &[_]u32{ 9, 11 }, list.items(.a)); try testing.expectEqualSlices(u8, &[_]u8{ 10, 12 }, list.items(.b)); } + +test "insert elements" { + const ally = testing.allocator; + + const Foo = struct { + a: u8, + b: u32, + }; + + var list = MultiArrayList(Foo){}; + defer list.deinit(ally); + + try list.insert(ally, 0, .{ .a = 1, .b = 2 }); + try list.ensureUnusedCapacity(ally, 1); + list.insertAssumeCapacity(1, .{ .a = 2, .b = 3 }); + + try testing.expectEqualSlices(u8, &[_]u8{ 1, 2 }, list.items(.a)); + try testing.expectEqualSlices(u32, &[_]u32{ 2, 3 }, list.items(.b)); +}