repositories / pi-ext
pi-ext
bugabingas pi extensions
owned by admin
extensions/nushell/__bench__/calls.bench.ts
Rawimport path from "node:path";
import { createPiSession } from "../../../test/fixture/create-pi-session.ts";
import { findNu } from "../runtime.ts";
const rounds = Number(process.env["NUSHELL_BENCH_ROUNDS"] ?? 25);
const warmups = Number(process.env["NUSHELL_BENCH_WARMUPS"] ?? 3);
if (
!Number.isSafeInteger(rounds) ||
rounds < 1 ||
!Number.isSafeInteger(warmups) ||
warmups < 0
)
throw new Error(
"Benchmark rounds must be positive integers; warmups may be zero",
);
if (!findNu()) throw new Error("nu executable missing on PATH");
const session = await createPiSession({
cwd: process.cwd(),
extensionPaths: [path.resolve(import.meta.dirname, "../index.ts")],
});
try {
const runner = session.session.extensionRunner;
const fresh = session.extensions[0]?.tools.get("nu")?.definition;
if (!fresh) throw new Error("Nushell fresh tool not registered");
const exec = async () => {
const result = await fresh.execute(
"bench",
{ command: "1 + 2" },
undefined,
undefined,
runner.createToolContext("bench", undefined),
);
if (
!result.content.some(
(part: { type: string; text?: string }) =>
part.type === "text" && (part.text?.includes("3") ?? false),
)
)
throw new Error("Incorrect benchmark output");
};
const measure = async (record: boolean) => {
const start = process.hrtime.bigint();
await exec();
if (record)
console.log(
`BenchmarkNuFresh\t1\t${process.hrtime.bigint() - start} ns/op`,
);
};
console.log(`goos: ${process.platform}`);
console.log(`goarch: ${process.arch}`);
console.log("pkg: pi-ext/nushell");
console.log(`node: ${process.version}`);
for (let index = -warmups; index < rounds; index++) await measure(index >= 0);
} finally {
await session.dispose();
}