| ... | ... | @@ -188,6 +188,14 @@ pub fn AlignedArrayList(comptime T: type, comptime alignment: ?u29) type { |
| 188 | 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 | 199 | /// Adjust the list's length to `new_len`. Doesn't initialize |
| 192 | 200 | /// added items if any. |
| 193 | 201 | pub fn resize(self: *Self, new_len: usize) !void { |
| ... | ... | @@ -311,6 +319,23 @@ test "std.ArrayList.basic" { |
| 311 | 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 | 339 | test "std.ArrayList.orderedRemove" { |
| 315 | 340 | var list = ArrayList(i32).init(testing.allocator); |
| 316 | 341 | defer list.deinit(); |