mirror of
https://github.com/zebrajr/node.git
synced 2025-12-06 00:20:08 +01:00
benchmark: add benchmarks for the test_runner
PR-URL: https://github.com/nodejs/node/pull/48931 Reviewed-By: Moshe Atlow <moshe@atlow.co.il> Reviewed-By: Chemi Atlow <chemi@atlow.co.il> Reviewed-By: Debadree Chatterjee <debadree333@gmail.com>
This commit is contained in:
parent
ee391f3781
commit
f458e5b573
8
benchmark/fixtures/empty-test-reporter.js
Normal file
8
benchmark/fixtures/empty-test-reporter.js
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
const { PassThrough } = require('node:stream');
|
||||
|
||||
module.exports = new PassThrough({
|
||||
objectMode: true,
|
||||
transform(chunk, encoding, callback) {
|
||||
callback(null)
|
||||
},
|
||||
});
|
||||
46
benchmark/test_runner/global-concurrent-tests.js
Normal file
46
benchmark/test_runner/global-concurrent-tests.js
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
'use strict';
|
||||
const common = require('../common');
|
||||
const { it } = require('node:test');
|
||||
|
||||
const bench = common.createBenchmark(main, {
|
||||
n: [100, 1000, 1e4],
|
||||
type: ['sync', 'async'],
|
||||
}, {
|
||||
// We don't want to test the reporter here
|
||||
flags: ['--test-reporter=./benchmark/fixtures/empty-test-reporter.js'],
|
||||
});
|
||||
|
||||
async function run(n, type) {
|
||||
const promises = new Array(n);
|
||||
|
||||
// eslint-disable-next-line no-unused-vars
|
||||
let avoidV8Optimization;
|
||||
|
||||
switch (type) {
|
||||
case 'sync': {
|
||||
for (let i = 0; i < n; i++) {
|
||||
promises[i] = it(`${i}`, () => {
|
||||
avoidV8Optimization = i;
|
||||
});
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case 'async':
|
||||
for (let i = 0; i < n; i++) {
|
||||
promises[i] = it(`${i}`, async () => {
|
||||
avoidV8Optimization = i;
|
||||
});
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
await Promise.all(promises);
|
||||
}
|
||||
|
||||
function main({ n, type }) {
|
||||
bench.start();
|
||||
run(n, type).then(() => {
|
||||
bench.end(n);
|
||||
});
|
||||
}
|
||||
46
benchmark/test_runner/global-sequential-tests.js
Normal file
46
benchmark/test_runner/global-sequential-tests.js
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
'use strict';
|
||||
const common = require('../common');
|
||||
const { it } = require('node:test');
|
||||
|
||||
|
||||
const bench = common.createBenchmark(main, {
|
||||
n: [100, 1000, 1e4],
|
||||
type: ['sync', 'async'],
|
||||
}, {
|
||||
// We don't want to test the reporter here
|
||||
flags: ['--test-reporter=./benchmark/fixtures/empty-test-reporter.js'],
|
||||
});
|
||||
|
||||
async function run(n, type) {
|
||||
// eslint-disable-next-line no-unused-vars
|
||||
let avoidV8Optimization;
|
||||
|
||||
const promises = new Array(n);
|
||||
switch (type) {
|
||||
case 'sync': {
|
||||
for (let i = 0; i < n; i++) {
|
||||
await it(`${i}`, () => {
|
||||
avoidV8Optimization = i;
|
||||
});
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case 'async':
|
||||
for (let i = 0; i < n; i++) {
|
||||
await it(`${i}`, async () => {
|
||||
avoidV8Optimization = i;
|
||||
});
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
await Promise.all(promises);
|
||||
}
|
||||
|
||||
function main({ n }) {
|
||||
bench.start();
|
||||
run(n).then(() => {
|
||||
bench.end(n);
|
||||
});
|
||||
}
|
||||
65
benchmark/test_runner/suite-tests.js
Normal file
65
benchmark/test_runner/suite-tests.js
Normal file
|
|
@ -0,0 +1,65 @@
|
|||
'use strict';
|
||||
const common = require('../common');
|
||||
const { finished } = require('node:stream/promises');
|
||||
|
||||
const reporter = require('../fixtures/empty-test-reporter');
|
||||
|
||||
const { describe, it } = require('node:test');
|
||||
|
||||
const bench = common.createBenchmark(main, {
|
||||
numberOfSuites: [10, 100],
|
||||
testsPerSuite: [10, 100, 1000],
|
||||
testType: ['sync', 'async'],
|
||||
concurrency: ['yes', 'no'],
|
||||
}, {
|
||||
// We don't want to test the reporter here
|
||||
flags: ['--test-reporter=./benchmark/fixtures/empty-test-reporter.js'],
|
||||
});
|
||||
|
||||
async function run({ numberOfSuites, testsPerSuite, testType, concurrency }) {
|
||||
concurrency = concurrency === 'yes';
|
||||
|
||||
// eslint-disable-next-line no-unused-vars
|
||||
let avoidV8Optimization;
|
||||
|
||||
switch (testType) {
|
||||
case 'sync': {
|
||||
for (let i = 0; i < numberOfSuites; i++) {
|
||||
describe(`${i}`, { concurrency }, () => {
|
||||
for (let j = 0; j < testsPerSuite; j++) {
|
||||
it(`${j}`, () => {
|
||||
avoidV8Optimization = i;
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case 'async': {
|
||||
for (let i = 0; i < numberOfSuites; i++) {
|
||||
describe(`${i}`, { concurrency }, () => {
|
||||
for (let j = 0; j < testsPerSuite; j++) {
|
||||
it(`${j}`, async () => {
|
||||
avoidV8Optimization = i;
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
await finished(reporter);
|
||||
|
||||
return numberOfSuites * testsPerSuite;
|
||||
}
|
||||
|
||||
function main(params) {
|
||||
bench.start();
|
||||
run(params).then((ops) => {
|
||||
bench.end(ops);
|
||||
});
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user