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