| ... | @@ -188,6 +188,14 @@ pub fn AlignedArrayList(comptime T: type, comptime alignment: ?u29) type { | ... | @@ -188,6 +188,14 @@ pub fn AlignedArrayList(comptime T: type, comptime alignment: ?u29) type { |
| 188 | self.len += items.len; | 188 | self.len += items.len; |
| 189 | } | 189 | } |
| 190 | | 190 | |
| | 191 | /// Append a value to the list `n` times. Allocates more memory |
| | 192 | /// as necessary. |
| | 193 | pub fn appendNTimes(self: *Self, value: T, n: usize) !void { |
| | 194 | const old_len = self.len; |
| | 195 | try self.resize(self.len + n); |
| | 196 | mem.set(T, self.items[old_len..self.len], value); |
| | 197 | } |
| | 198 | |
| 191 | /// Adjust the list's length to `new_len`. Doesn't initialize | 199 | /// Adjust the list's length to `new_len`. Doesn't initialize |
| 192 | /// added items if any. | 200 | /// added items if any. |
| 193 | pub fn resize(self: *Self, new_len: usize) !void { | 201 | pub fn resize(self: *Self, new_len: usize) !void { |
| ... | @@ -311,6 +319,23 @@ test "std.ArrayList.basic" { | ... | @@ -311,6 +319,23 @@ test "std.ArrayList.basic" { |
| 311 | testing.expect(list.pop() == 33); | 319 | testing.expect(list.pop() == 33); |
| 312 | } | 320 | } |
| 313 | | 321 | |
| | 322 | test "std.ArrayList.appendNTimes" { |
| | 323 | var list = ArrayList(i32).init(testing.allocator); |
| | 324 | defer list.deinit(); |
| | 325 | |
| | 326 | try list.appendNTimes(2, 10); |
| | 327 | testing.expectEqual(@as(usize, 10), list.len); |
| | 328 | for (list.toSlice()) |element| { |
| | 329 | testing.expectEqual(@as(i32, 2), element); |
| | 330 | } |
| | 331 | } |
| | 332 | |
| | 333 | test "std.ArrayList.appendNTimes with failing allocator" { |
| | 334 | var list = ArrayList(i32).init(testing.failing_allocator); |
| | 335 | defer list.deinit(); |
| | 336 | testing.expectError(error.OutOfMemory, list.appendNTimes(2, 10)); |
| | 337 | } |
| | 338 | |
| 314 | test "std.ArrayList.orderedRemove" { | 339 | test "std.ArrayList.orderedRemove" { |
| 315 | var list = ArrayList(i32).init(testing.allocator); | 340 | var list = ArrayList(i32).init(testing.allocator); |
| 316 | defer list.deinit(); | 341 | defer list.deinit(); |