Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | 2x 2x 2x 4x 4x 2x 2x 4x 2x 4x 2x 2x 2x 1x 1x 1x 2x | import Table from 'cli-table3'
import { formatNumber, Options, Suite } from 'benchmark'
export function runBenchmark(
suites: Record<string, () => any>,
options?: Options,
) {
const table = new Table({
head: ['name', 'ops/sec'],
colAligns: ['left', 'right'],
})
const suite = new Suite()
let expectFastestName: string | undefined
for (let name of Object.keys(suites)) {
const fn = suites[name]
if (name.endsWith('!fastest')) {
name = name.replace(/!fastest$/, '')
expectFastestName = name
}
suite.add(name, fn)
}
suite.on('cycle', function (event: any) {
table.push([event.target.name, formatNumber(Math.round(event.target.hz))])
})
suite.on('complete', function (this: any) {
const actualFastestName = this.filter('fastest').map('name')[0]
if (expectFastestName != null && expectFastestName !== actualFastestName) {
throw new Error(
`Expect fastest is ${expectFastestName}, actual fastest is ${actualFastestName}.`,
)
}
console.log(
table
.sort(
(a, b) =>
(b as any)[1].replace(/,/, '') - (a as any)[1].replace(/,/, ''),
)
.toString(),
)
})
suite.run(options)
}
|