Zig 0.17.0-dev (Split by item) This is an example of documentation generated by
ZigDoc , an alternative to Zig's built-in
Auto Doc feature. See also
examples in other modes/formats . The project being documented here (as the example) is the Zig standard library.
std › heap › testAllocator Public Function testAllocator Doc Source Public Function std.heap.testAllocator
pub fn testAllocator (base_allocator : mem .Allocator ) !void Params base_allocator : mem .Allocator File heap.zig: 430
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477 pub fn testAllocator (base_allocator : mem .Allocator ) !void {
var validationAllocator = mem .validationWrap (base_allocator );
const allocator = validationAllocator .allocator ();
var slice = try allocator .alloc (*i32 , 100 );
try testing .expect (slice .len == 100 );
for (slice , 0 ..) |*item , i | {
item .* = try allocator .create (i32 );
item .*.* = @as (i32 , @intCast (i ));
}
slice = try allocator .realloc (slice , 20000 );
try testing .expect (slice .len == 20000 );
for (slice [0 ..100 ], 0 ..) |item , i | {
try testing .expect (item .* == @as (i32 , @intCast (i )));
allocator .destroy (item );
}
if (allocator .resize (slice , 50 )) {
slice = slice [0 ..50 ];
if (allocator .resize (slice , 25 )) {
slice = slice [0 ..25 ];
try testing .expect (allocator .resize (slice , 0 ));
slice = slice [0 ..0 ];
slice = try allocator .realloc (slice , 10 );
try testing .expect (slice .len == 10 );
}
}
allocator .free (slice );
// Zero-length allocation
const empty = try allocator .alloc (u8 , 0 );
allocator .free (empty );
// Allocation with zero-sized types
const zero_bit_ptr = try allocator .create (u0 );
zero_bit_ptr .* = 0 ;
allocator .destroy (zero_bit_ptr );
const zero_len_array = try allocator .create ([0 ]u64 );
allocator .destroy (zero_len_array );
const oversize = try allocator .alignedAlloc (u32 , null , 5 );
try testing .expect (oversize .len >= 5 );
for (oversize ) |*item | {
item .* = 0xDEADBEEF ;
}
allocator .free (oversize );
}
This one should not try alignments that exceed what C malloc can handle.