Skip to content

Commit

Permalink
benchmark: refactor args parsing code
Browse files Browse the repository at this point in the history
  • Loading branch information
IvanGoncharov committed Mar 17, 2021
1 parent c581573 commit 6326013
Showing 1 changed file with 31 additions and 41 deletions.
72 changes: 31 additions & 41 deletions benchmark/benchmark.js
Expand Up @@ -14,6 +14,15 @@ const maxTime = 5;
// The minimum sample size required to perform statistical analysis.
const minSamples = 5;

// Get the revisions and make things happen!
const { benchmarks, revisions } = getArguments(process.argv.slice(2));
const benchmarkProjects = prepareBenchmarkProjects(revisions);

runBenchmarks(benchmarks, benchmarkProjects).catch((error) => {
console.error(error);
process.exit(1);
});

function localDir(...paths) {
return path.join(__dirname, '..', ...paths);
}
Expand Down Expand Up @@ -230,9 +239,7 @@ function maxBy(array, fn) {
}

// Prepare all revisions and run benchmarks matching a pattern against them.
async function runBenchmarks(benchmarks, revisions) {
const benchmarkProjects = prepareBenchmarkProjects(revisions);

async function runBenchmarks(benchmarks, benchmarkProjects) {
for (const benchmark of benchmarks) {
const results = [];
for (let i = 0; i < benchmarkProjects.length; ++i) {
Expand Down Expand Up @@ -266,31 +273,34 @@ async function runBenchmarks(benchmarks, revisions) {

function getArguments(argv) {
const revsIdx = argv.indexOf('--revs');
const revsArgs = revsIdx === -1 ? [] : argv.slice(revsIdx + 1);
const specificBenchmarks = revsIdx === -1 ? argv : argv.slice(0, revsIdx);
let assumeArgs;
let revisions;
switch (revsArgs.length) {
const revisions = revsIdx === -1 ? [] : argv.slice(revsIdx + 1);
const benchmarks = revsIdx === -1 ? argv : argv.slice(0, revsIdx);

switch (revisions.length) {
case 0:
assumeArgs = [...specificBenchmarks, '--revs', 'local', 'HEAD'];
revisions = [LOCAL, 'HEAD'];
break;
revisions.unshift('HEAD');
case 1:
assumeArgs = [...specificBenchmarks, '--revs', 'local', revsArgs[0]];
revisions = [LOCAL, revsArgs[0]];
break;
default:
revisions = revsArgs;
revisions.unshift('local');

const assumeArgv = ['benchmark', ...benchmarks, '--revs', ...revisions];
console.warn('Assuming you meant: ' + bold(assumeArgv.join(' ')));
break;
}

if (assumeArgs) {
console.warn(
'Assuming you meant: ' + bold('benchmark ' + assumeArgs.join(' ')),
);
if (benchmarks.length === 0) {
benchmarks.push(...findAllBenchmarks());
}

return { specificBenchmarks, revisions };
return { benchmarks, revisions };
}

function findAllBenchmarks() {
return fs
.readdirSync(localDir('benchmark'), { withFileTypes: true })
.filter((dirent) => dirent.isFile())
.map((dirent) => dirent.name)
.filter((name) => name.endsWith('-benchmark.js'))
.map((name) => path.join('benchmark', name));
}

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

function findAllBenchmarks() {
return fs
.readdirSync(localDir('benchmark'), { withFileTypes: true })
.filter((dirent) => dirent.isFile())
.map((dirent) => dirent.name)
.filter((name) => name.endsWith('-benchmark.js'))
.map((name) => path.join('benchmark', name));
}

// Get the revisions and make things happen!
if (require.main === module) {
const { specificBenchmarks, revisions } = getArguments(process.argv.slice(2));
const benchmarks =
specificBenchmarks.length > 0 ? specificBenchmarks : findAllBenchmarks();
runBenchmarks(benchmarks, revisions).catch((error) => {
console.error(error);
process.exit(1);
});
}

function sampleModule(modulePath) {
const sampleCode = `
const assert = require('assert');
Expand Down

0 comments on commit 6326013

Please sign in to comment.