repositories / pi-ext
pi-ext
bugabingas pi extensions
owned by admin
extensions/uv/__bench__/spawn-hook.bench.ts
Rawimport type { BashSpawnContext } from "@earendil-works/pi-coding-agent";
import { __test } from "../index.ts";
const ROUNDS = Number(process.env.UV_BENCH_ROUNDS ?? 12);
const MINIMUM_ROUND_NS = Number(
process.env.UV_BENCH_MINIMUM_ROUND_NS ?? 200_000_000,
);
let sink = 0;
const env = Object.fromEntries(
Array.from({ length: 100 }, (_, index) => [`UV_BENCH_${index}`, `${index}`]),
);
env.PATH = process.env.PATH ?? "";
const context = {
command: "git status",
cwd: process.cwd(),
env,
} as BashSpawnContext;
function benchmark(name: string, operation: () => void): void {
for (let index = 0; index < 1_000; index++) operation();
let iterations = 1;
while (true) {
const started = process.hrtime.bigint();
for (let index = 0; index < iterations; index++) operation();
if (Number(process.hrtime.bigint() - started) >= MINIMUM_ROUND_NS) break;
iterations *= 2;
}
for (let round = 0; round < ROUNDS; round++) {
const started = process.hrtime.bigint();
for (let index = 0; index < iterations; index++) operation();
const elapsed = Number(process.hrtime.bigint() - started);
console.log(
`Benchmark${name}\t${iterations}\t${(elapsed / iterations).toFixed(0)} ns/op`,
);
}
}
if (!Number.isInteger(ROUNDS) || ROUNDS < 1)
throw new Error("UV_BENCH_ROUNDS must be a positive integer");
if (!Number.isFinite(MINIMUM_ROUND_NS) || MINIMUM_ROUND_NS < 1)
throw new Error("UV_BENCH_MINIMUM_ROUND_NS must be positive");
console.log(`goos: ${process.platform}`);
console.log(`goarch: ${process.arch}`);
console.log("pkg: pi-ext/uv");
benchmark("AllowedCommand", () => {
sink ^= __test.getBlockedCommandMessage("git status")?.length ?? 0;
});
benchmark("BlockedPython", () => {
sink ^=
__test.getBlockedCommandMessage("python -m pip install rich")?.length ?? 0;
});
benchmark("PrependPath100Env", () => {
const rewritten = __test.prependInterceptedCommands(
context,
process.platform,
);
sink ^= rewritten.env.PATH?.length ?? 0;
});
if (sink === 42) console.error(sink);