const harness_std = @import("std");
@"imports"@
@"declarations"@
fn range(len: usize) []const void {
return @as([*]void, undefined)[0..len];
}
pub fn main() !void {
const stdin = harness_std.io.getStdIn().reader();
const stdout = harness_std.io.getStdOut().writer();
var timer = harness_std.time.Timer.start() catch unreachable;
var line_buf: [21]u8 = undefined; // 64-bit uint is 20 digits max
@"global"@
while (stdin.readUntilDelimiterOrEof(line_buf[0..], '\n')) |maybe_line| {
const line = maybe_line orelse harness_std.os.exit(0);
const n = harness_std.fmt.parseInt(u64, line, 10) catch |err| {
const msg = switch (err) {
error.InvalidCharacter => "could not parse value",
error.Overflow => "integer too large",
};
harness_std.log.err("{s}: `{s}`", .{msg, line});
harness_std.os.exit(1);
};
if (n == 0) {
try stdout.print("0 nsec\n", .{});
harness_std.os.exit(0);
}
@"sample"@
const iterations = range(n);
timer.reset();
for (iterations) |_| {
@"timed"@
}
const elapsed = timer.read();
try stdout.print("{d} nsec\n", .{elapsed});
} else |err| switch (err) {
error.StreamTooLong => {
harness_std.log.err("Input is too long", .{});
harness_std.os.exit(1);
},
else => return err,
}
}