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 library itself.
Zig › std/ › hash/ › benchmark.zig › benchmarkHashSmallApi
benchmarkHashSmallApi
benchmark.benchmarkHashSmallApi
pub fn benchmarkHashSmallApi (comptime H : anytype , key_size : usize , bytes : usize , allocator : std .mem .Allocator , io : Io ) !Result
File
Code
pub fn benchmarkHashSmallApi (comptime H : anytype , key_size : usize , bytes : usize , allocator : std .mem .Allocator , io : Io ) !Result {
var blocks = try allocator .alloc (u8 , bytes );
defer allocator .free (blocks );
random .bytes (blocks );
const key_count = bytes / key_size ;
const start = benchTime (io );
var sum : u64 = 0 ;
for (0 ..key_count ) |i | {
const small_key = blocks [i * key_size ..][0 ..key_size ];
const final : u64 = blk : {
if (H .init_u8s ) |init | {
if (H .has_crypto_api ) {
break :blk @truncate (H .ty .toInt (small_key , init [0 ..H .ty .key_length ]));
} else {
break :blk H .ty .hashSmall (init , small_key );
}
}
if (H .init_u64 ) |init | {
break :blk H .ty .hashSmall (init , small_key );
}
break :blk H .ty .hashSmall (small_key );
};
sum +%= final ;
}
const elapsed_ns = benchTime (io ) - start ;
const elapsed_s = @as (f64 , @floatFromInt (elapsed_ns )) / time .ns_per_s ;
const throughput : u64 = @intFromFloat (@as (f64 , @floatFromInt (bytes )) / elapsed_s );
std .mem .doNotOptimizeAway (sum );
return Result {
.throughput = throughput ,
.hash = sum ,
};
}