criterion-polyglot 0.1.0

An extension trait for criterion providing benchmark methods for various non-Rust programming languages
Documentation
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,
    }
}