current commit
261019.11 · fs: reduce glob section allocations
'use strict';

const common = require('../common');
const assert = require('node:assert');
const { posix, win32 } = require('node:path');

const bench = common.createBenchmark(main, {
  n: [1e5],
  platform: ['posix', 'win32'],
  count: [1, 2, 4, 10, 16],
  result: ['hit', 'miss'],
});

function main({ n, platform, count, result }) {
  const implementation = platform === 'posix' ? posix : win32;
  const names = Array.from({ length: count - 1 }, (_, index) => `part${index}`);
  const pattern = ['**', ...names.flatMap((name) => [name, '**']), 'file.js'].join('/');
  const parts = ['root', ...names.flatMap((name) => [name, 'dir']), 'file.js'];
  if (result === 'miss') {
    if (names.length) parts[parts.length - 3] = 'absent';
    else parts[parts.length - 1] = 'file.txt';
  }
  const filename = parts.join(implementation.sep);
  const expected = result === 'hit';
  assert.strictEqual(implementation.matchesGlob(filename, pattern), expected);
  let actual;
  bench.start();
  for (let index = 0; index < n; index++) actual = implementation.matchesGlob(filename, pattern);
  bench.end(n);
  assert.strictEqual(actual, expected);
}