const path = require('path'); const Benchmark = require('benchmark'); const addonName = path.basename(__filename, '.js'); [ addonName, addonName + '_noexcept' ] .forEach((addonName) => { const rootAddon = require('bindings')({ bindings: addonName, module_root: __dirname }); delete rootAddon.path; const implems = Object.keys(rootAddon); const maxNameLength = implems.reduce((soFar, value) => Math.max(soFar, value.length), 0); const anObject = {}; console.log(`\n${addonName}: `); console.log('no arguments:'); implems.reduce((suite, implem) => { const fn = rootAddon[implem].noArgFunction; return suite.add(implem.padStart(maxNameLength, ' '), () => fn()); }, new Benchmark.Suite) .on('cycle', (event) => console.log(String(event.target))) .run(); console.log('one argument:'); implems.reduce((suite, implem) => { const fn = rootAddon[implem].oneArgFunction; return suite.add(implem.padStart(maxNameLength, ' '), () => fn('x')); }, new Benchmark.Suite) .on('cycle', (event) => console.log(String(event.target))) .run(); console.log('two arguments:'); implems.reduce((suite, implem) => { const fn = rootAddon[implem].twoArgFunction; return suite.add(implem.padStart(maxNameLength, ' '), () => fn('x', 12)); }, new Benchmark.Suite) .on('cycle', (event) => console.log(String(event.target))) .run(); console.log('three arguments:'); implems.reduce((suite, implem) => { const fn = rootAddon[implem].threeArgFunction; return suite.add(implem.padStart(maxNameLength, ' '), () => fn('x', 12, true)); }, new Benchmark.Suite) .on('cycle', (event) => console.log(String(event.target))) .run(); console.log('four arguments:'); implems.reduce((suite, implem) => { const fn = rootAddon[implem].fourArgFunction; return suite.add(implem.padStart(maxNameLength, ' '), () => fn('x', 12, true, anObject)); }, new Benchmark.Suite) .on('cycle', (event) => console.log(String(event.target))) .run(); });