diff options
| author | Andrew Kelley <andrew@ziglang.org> | 2020-02-20 18:36:04 -0500 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2020-02-20 18:36:04 -0500 |
| commit | 903127f36cf995d251a474438d3ecc6c6e0e30d2 (patch) | |
| tree | 10b45461abfb8933b2ac6c8121026490b22d1c6d /lib/std/array_list.zig | |
| parent | 0f016b368de2ac93a298ab771646931329062fb5 (diff) | |
| parent | e381a42de9c0f0c5439a926b0ac99026a0373f49 (diff) | |
| download | zig-903127f36cf995d251a474438d3ecc6c6e0e30d2.tar.gz zig-903127f36cf995d251a474438d3ecc6c6e0e30d2.zip | |
Merge remote-tracking branch 'origin/master' into sub-architecture-annihilation
Diffstat (limited to 'lib/std/array_list.zig')
| -rw-r--r-- | lib/std/array_list.zig | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/lib/std/array_list.zig b/lib/std/array_list.zig index f212ae8659..d1946be02a 100644 --- a/lib/std/array_list.zig +++ b/lib/std/array_list.zig @@ -188,6 +188,14 @@ pub fn AlignedArrayList(comptime T: type, comptime alignment: ?u29) type { self.len += items.len; } + /// Append a value to the list `n` times. Allocates more memory + /// as necessary. + pub fn appendNTimes(self: *Self, value: T, n: usize) !void { + const old_len = self.len; + try self.resize(self.len + n); + mem.set(T, self.items[old_len..self.len], value); + } + /// Adjust the list's length to `new_len`. Doesn't initialize /// added items if any. pub fn resize(self: *Self, new_len: usize) !void { @@ -311,6 +319,23 @@ test "std.ArrayList.basic" { testing.expect(list.pop() == 33); } +test "std.ArrayList.appendNTimes" { + var list = ArrayList(i32).init(testing.allocator); + defer list.deinit(); + + try list.appendNTimes(2, 10); + testing.expectEqual(@as(usize, 10), list.len); + for (list.toSlice()) |element| { + testing.expectEqual(@as(i32, 2), element); + } +} + +test "std.ArrayList.appendNTimes with failing allocator" { + var list = ArrayList(i32).init(testing.failing_allocator); + defer list.deinit(); + testing.expectError(error.OutOfMemory, list.appendNTimes(2, 10)); +} + test "std.ArrayList.orderedRemove" { var list = ArrayList(i32).init(testing.allocator); defer list.deinit(); |
