Support section filter in benchmarks
This commit is contained in:
@@ -115,6 +115,13 @@ npm run bench
|
|||||||
# Run with a custom label
|
# Run with a custom label
|
||||||
npm run bench -- --label my-optimization
|
npm run bench -- --label my-optimization
|
||||||
|
|
||||||
|
# Filter templates by name (regex, case-insensitive)
|
||||||
|
npm run bench -- --grep "complex|recursive"
|
||||||
|
|
||||||
|
# Run only specific sections (regex, case-insensitive)
|
||||||
|
npm run bench -- --section precompil
|
||||||
|
npm run bench -- --section "compilation|precompil"
|
||||||
|
|
||||||
# Compare results
|
# Compare results
|
||||||
npm run bench:compare
|
npm run bench:compare
|
||||||
|
|
||||||
|
|||||||
+28
-4
@@ -51,6 +51,17 @@ if (grepIdx !== -1 && args[grepIdx + 1]) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const sectionIdx = args.indexOf('--section');
|
||||||
|
let sectionPattern = null;
|
||||||
|
if (sectionIdx !== -1 && args[sectionIdx + 1]) {
|
||||||
|
try {
|
||||||
|
sectionPattern = new RegExp(args[sectionIdx + 1], 'i');
|
||||||
|
} catch (e) {
|
||||||
|
console.error(`Invalid --section pattern: ${e.message}`);
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// ─── Filter templates ───────────────────────────────────────────────────────
|
// ─── Filter templates ───────────────────────────────────────────────────────
|
||||||
|
|
||||||
const templates = Object.fromEntries(
|
const templates = Object.fromEntries(
|
||||||
@@ -92,7 +103,14 @@ function createEnv(def) {
|
|||||||
return hb;
|
return hb;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function shouldRunSection(title) {
|
||||||
|
if (!sectionPattern) return true;
|
||||||
|
return sectionPattern.test(title);
|
||||||
|
}
|
||||||
|
|
||||||
async function runSection(title, config, setup) {
|
async function runSection(title, config, setup) {
|
||||||
|
if (!shouldRunSection(title)) return null;
|
||||||
|
|
||||||
printSectionHeader(title);
|
printSectionHeader(title);
|
||||||
|
|
||||||
const bench = newBench(config);
|
const bench = newBench(config);
|
||||||
@@ -120,6 +138,11 @@ async function run() {
|
|||||||
|
|
||||||
const allSections = [];
|
const allSections = [];
|
||||||
|
|
||||||
|
if (sectionPattern) {
|
||||||
|
console.log(`Filtering sections: /${sectionPattern.source}/i`);
|
||||||
|
console.log();
|
||||||
|
}
|
||||||
|
|
||||||
// ─── COMPILATION ────────────────────────────────────────────────────────────
|
// ─── COMPILATION ────────────────────────────────────────────────────────────
|
||||||
|
|
||||||
allSections.push(
|
allSections.push(
|
||||||
@@ -143,8 +166,7 @@ async function run() {
|
|||||||
|
|
||||||
const expectedOutputs = {};
|
const expectedOutputs = {};
|
||||||
|
|
||||||
allSections.push(
|
const execResult = await runSection(
|
||||||
await runSection(
|
|
||||||
'EXECUTION (template rendering)',
|
'EXECUTION (template rendering)',
|
||||||
EXEC_BENCH_CONFIG,
|
EXEC_BENCH_CONFIG,
|
||||||
(bench) => {
|
(bench) => {
|
||||||
@@ -156,10 +178,11 @@ async function run() {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
)
|
|
||||||
);
|
);
|
||||||
|
allSections.push(execResult);
|
||||||
|
|
||||||
// Verify outputs haven't changed during benchmarking
|
// Verify outputs haven't changed during benchmarking
|
||||||
|
if (execResult) {
|
||||||
let verifyFails = 0;
|
let verifyFails = 0;
|
||||||
for (const [name, def] of Object.entries(templates)) {
|
for (const [name, def] of Object.entries(templates)) {
|
||||||
const compiled = createEnv(def).compile(def.template);
|
const compiled = createEnv(def).compile(def.template);
|
||||||
@@ -177,6 +200,7 @@ async function run() {
|
|||||||
console.warn(`Output verification: ${verifyFails} mismatch(es)`);
|
console.warn(`Output verification: ${verifyFails} mismatch(es)`);
|
||||||
}
|
}
|
||||||
console.log();
|
console.log();
|
||||||
|
}
|
||||||
|
|
||||||
// ─── PRECOMPILATION ─────────────────────────────────────────────────────────
|
// ─── PRECOMPILATION ─────────────────────────────────────────────────────────
|
||||||
|
|
||||||
@@ -249,7 +273,7 @@ async function run() {
|
|||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
const filepath = saveMarkdownReport(allSections, {
|
const filepath = saveMarkdownReport(allSections.filter(Boolean), {
|
||||||
label,
|
label,
|
||||||
compileConfig: COMPILE_BENCH_CONFIG,
|
compileConfig: COMPILE_BENCH_CONFIG,
|
||||||
execConfig: EXEC_BENCH_CONFIG,
|
execConfig: EXEC_BENCH_CONFIG,
|
||||||
|
|||||||
Reference in New Issue
Block a user