Skip to content

Commit 2d503cc

Browse files
committed
script to make a big tree for testing large walks
1 parent 3128b34 commit 2d503cc

File tree

5 files changed

+69
-10
lines changed

5 files changed

+69
-10
lines changed

Diff for: .gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -10,3 +10,4 @@
1010
/coverage
1111
/test/fixtures
1212
/bench-working-dir
13+
/scripts/fixture

Diff for: .prettierignore

+2
Original file line numberDiff line numberDiff line change
@@ -7,3 +7,5 @@
77
/.nyc_output
88
/coverage
99
/benchmark
10+
/scripts/fixture
11+
/test/fixture

Diff for: package-lock.json

+8-8
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Diff for: package.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -69,9 +69,9 @@
6969
"@types/tap": "^15.0.7",
7070
"c8": "^7.12.0",
7171
"eslint-config-prettier": "^8.6.0",
72-
"mkdirp": "^2.0.0",
72+
"mkdirp": "^2.1.4",
7373
"prettier": "^2.8.3",
74-
"rimraf": "^4.1.1",
74+
"rimraf": "^4.1.3",
7575
"tap": "^16.3.4",
7676
"ts-node": "^10.9.1",
7777
"typedoc": "^0.23.24",

Diff for: scripts/make-big-tree.js

+56
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
#!/usr/bin/env node
2+
const mkdirp = require('mkdirp')
3+
const { readFileSync } = require('fs')
4+
const { writeFile } = require('fs/promises')
5+
const rimraf = require('rimraf')
6+
const filesPerDir = 10
7+
const dirsPerDir = 5
8+
const max = (module === require.main && +process.argv[2]) || 1_000_000
9+
const { now } = performance
10+
let lastReported = now()
11+
12+
const report = s => {
13+
if (!process.stderr.isTTY) return
14+
process.stderr.write('\r' + s.padEnd(40))
15+
}
16+
17+
let made = 0
18+
const makeStep = async dir => {
19+
if (now() - lastReported > 250) report('growing: ' + made)
20+
const promises = []
21+
for (let i = 0; i < filesPerDir && made < max; i++) {
22+
made++
23+
promises.push(writeFile(`${dir}/${i}.txt`, ''))
24+
}
25+
await Promise.all(promises)
26+
27+
const childDirs = []
28+
for (let i = 0; i < dirsPerDir && made < max; i++) {
29+
made++
30+
await mkdirp(`${dir}/${i}`)
31+
childDirs.push(makeStep(`${dir}/${i}`))
32+
}
33+
await Promise.all(childDirs)
34+
}
35+
36+
const make = async root => {
37+
try {
38+
const already = +readFileSync(`${root}/bigtree.txt`)
39+
if (already === max) {
40+
console.log('already done!')
41+
return
42+
}
43+
} catch (_) {}
44+
report('chop down previous bigtree...')
45+
await rimraf(root + '/bigtree')
46+
report('creating bigtree...')
47+
report('\n')
48+
await mkdirp(root + '/bigtree')
49+
await makeStep(root + '/bigtree')
50+
await writeFile(`${root}/bigtree.txt`, `${max}`)
51+
}
52+
53+
make(__dirname + '/fixture').then(() => {
54+
if (process.stderr.isTTY) process.stderr.write('\r'.padEnd(40) + '\r')
55+
console.log('done')
56+
})

0 commit comments

Comments
 (0)