• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1'use strict';
2const common = require('../common');
3const { finished } = require('node:stream/promises');
4
5const reporter = require('../fixtures/empty-test-reporter');
6
7const { describe, it } = require('node:test');
8
9const bench = common.createBenchmark(main, {
10  numberOfSuites: [10, 100],
11  testsPerSuite: [10, 100, 1000],
12  testType: ['sync', 'async'],
13  concurrency: ['yes', 'no'],
14}, {
15  // We don't want to test the reporter here
16  flags: ['--test-reporter=./benchmark/fixtures/empty-test-reporter.js'],
17});
18
19async function run({ numberOfSuites, testsPerSuite, testType, concurrency }) {
20  concurrency = concurrency === 'yes';
21
22  // eslint-disable-next-line no-unused-vars
23  let avoidV8Optimization;
24
25  switch (testType) {
26    case 'sync': {
27      for (let i = 0; i < numberOfSuites; i++) {
28        describe(`${i}`, { concurrency }, () => {
29          for (let j = 0; j < testsPerSuite; j++) {
30            it(`${j}`, () => {
31              avoidV8Optimization = i;
32            });
33          }
34        });
35      }
36
37      break;
38    }
39
40    case 'async': {
41      for (let i = 0; i < numberOfSuites; i++) {
42        describe(`${i}`, { concurrency }, () => {
43          for (let j = 0; j < testsPerSuite; j++) {
44            it(`${j}`, async () => {
45              avoidV8Optimization = i;
46            });
47          }
48        });
49      }
50
51      break;
52    }
53  }
54
55  await finished(reporter);
56
57  return numberOfSuites * testsPerSuite;
58}
59
60function main(params) {
61  bench.start();
62  run(params).then((ops) => {
63    bench.end(ops);
64  });
65}
66