Skip to content

Commit 6326013

Browse files
committed
benchmark: refactor args parsing code
1 parent c581573 commit 6326013

File tree

1 file changed

+31
-41
lines changed

1 file changed

+31
-41
lines changed

benchmark/benchmark.js

Lines changed: 31 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,15 @@ const maxTime = 5;
1414
// The minimum sample size required to perform statistical analysis.
1515
const minSamples = 5;
1616

17+
// Get the revisions and make things happen!
18+
const { benchmarks, revisions } = getArguments(process.argv.slice(2));
19+
const benchmarkProjects = prepareBenchmarkProjects(revisions);
20+
21+
runBenchmarks(benchmarks, benchmarkProjects).catch((error) => {
22+
console.error(error);
23+
process.exit(1);
24+
});
25+
1726
function localDir(...paths) {
1827
return path.join(__dirname, '..', ...paths);
1928
}
@@ -230,9 +239,7 @@ function maxBy(array, fn) {
230239
}
231240

232241
// Prepare all revisions and run benchmarks matching a pattern against them.
233-
async function runBenchmarks(benchmarks, revisions) {
234-
const benchmarkProjects = prepareBenchmarkProjects(revisions);
235-
242+
async function runBenchmarks(benchmarks, benchmarkProjects) {
236243
for (const benchmark of benchmarks) {
237244
const results = [];
238245
for (let i = 0; i < benchmarkProjects.length; ++i) {
@@ -266,31 +273,34 @@ async function runBenchmarks(benchmarks, revisions) {
266273

267274
function getArguments(argv) {
268275
const revsIdx = argv.indexOf('--revs');
269-
const revsArgs = revsIdx === -1 ? [] : argv.slice(revsIdx + 1);
270-
const specificBenchmarks = revsIdx === -1 ? argv : argv.slice(0, revsIdx);
271-
let assumeArgs;
272-
let revisions;
273-
switch (revsArgs.length) {
276+
const revisions = revsIdx === -1 ? [] : argv.slice(revsIdx + 1);
277+
const benchmarks = revsIdx === -1 ? argv : argv.slice(0, revsIdx);
278+
279+
switch (revisions.length) {
274280
case 0:
275-
assumeArgs = [...specificBenchmarks, '--revs', 'local', 'HEAD'];
276-
revisions = [LOCAL, 'HEAD'];
277-
break;
281+
revisions.unshift('HEAD');
278282
case 1:
279-
assumeArgs = [...specificBenchmarks, '--revs', 'local', revsArgs[0]];
280-
revisions = [LOCAL, revsArgs[0]];
281-
break;
282-
default:
283-
revisions = revsArgs;
283+
revisions.unshift('local');
284+
285+
const assumeArgv = ['benchmark', ...benchmarks, '--revs', ...revisions];
286+
console.warn('Assuming you meant: ' + bold(assumeArgv.join(' ')));
284287
break;
285288
}
286289

287-
if (assumeArgs) {
288-
console.warn(
289-
'Assuming you meant: ' + bold('benchmark ' + assumeArgs.join(' ')),
290-
);
290+
if (benchmarks.length === 0) {
291+
benchmarks.push(...findAllBenchmarks());
291292
}
292293

293-
return { specificBenchmarks, revisions };
294+
return { benchmarks, revisions };
295+
}
296+
297+
function findAllBenchmarks() {
298+
return fs
299+
.readdirSync(localDir('benchmark'), { withFileTypes: true })
300+
.filter((dirent) => dirent.isFile())
301+
.map((dirent) => dirent.name)
302+
.filter((name) => name.endsWith('-benchmark.js'))
303+
.map((name) => path.join('benchmark', name));
294304
}
295305

296306
function bold(str) {
@@ -317,26 +327,6 @@ function grey(str) {
317327
return '\u001b[90m' + str + '\u001b[0m';
318328
}
319329

320-
function findAllBenchmarks() {
321-
return fs
322-
.readdirSync(localDir('benchmark'), { withFileTypes: true })
323-
.filter((dirent) => dirent.isFile())
324-
.map((dirent) => dirent.name)
325-
.filter((name) => name.endsWith('-benchmark.js'))
326-
.map((name) => path.join('benchmark', name));
327-
}
328-
329-
// Get the revisions and make things happen!
330-
if (require.main === module) {
331-
const { specificBenchmarks, revisions } = getArguments(process.argv.slice(2));
332-
const benchmarks =
333-
specificBenchmarks.length > 0 ? specificBenchmarks : findAllBenchmarks();
334-
runBenchmarks(benchmarks, revisions).catch((error) => {
335-
console.error(error);
336-
process.exit(1);
337-
});
338-
}
339-
340330
function sampleModule(modulePath) {
341331
const sampleCode = `
342332
const assert = require('assert');

0 commit comments

Comments
 (0)