Skip to content

Commit

Permalink
Add bench test for large core with two non-sparse readers
Browse files Browse the repository at this point in the history
  • Loading branch information
LuKks committed Jul 13, 2023
1 parent a60d17b commit 431789b
Show file tree
Hide file tree
Showing 2 changed files with 73 additions and 0 deletions.
2 changes: 2 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -57,13 +57,15 @@
},
"devDependencies": {
"brittle": "^3.0.0",
"byte-size": "^8.1.1",
"hyperswarm": "^4.3.6",
"random-access-memory": "^6.1.0",
"random-access-memory-overlay": "^3.0.0",
"range-parser": "^1.2.1",
"speedometer": "^1.1.0",
"standard": "^17.0.0",
"tiny-byte-size": "^1.1.0",
"tiny-crayon": "^1.0.5",
"tmp-promise": "^3.0.2",
"udx-native": "^1.6.1"
}
Expand Down
71 changes: 71 additions & 0 deletions test/bench/large.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
const test = require('brittle')
const Hypercore = require('../../index.js')
const RAM = require('random-access-memory')
const { replicate, createTmpDir } = require('../helpers')
const speedometer = require('speedometer')
const byteSize = require('byte-size')
const crayon = require('tiny-crayon')

test('large core with two non-sparse readers', { timeout: 999999999 }, async function (t) {
const dir = createTmpDir(t)

const writer = new Hypercore(dir)
await writer.ready()

const clone1 = new Hypercore(RAM, writer.key)
const clone2 = new Hypercore(RAM, writer.key)

for (let i = writer.length; i < 1000000; i++) {
await writer.append(Math.random().toString(16).substr(2))

if (i % 100000 === 0) t.comment('Append ' + i)
}

t.comment('Writer complete')

intervalSpeed(t, writer, 'Writer')
intervalSpeed(t, clone1, 'Clone1')
intervalSpeed(t, clone2, 'Clone2')

replicate(writer, clone1, t)
replicate(writer, clone2, t)

const dl1 = clone1.download()
const dl2 = clone2.download()

await dl1.done()
await dl2.done()

t.comment('Done')

await writer.close()
await clone1.close()
await clone2.close()
})

function intervalSpeed (t, core, name) {
const info = {
blocks: { down: speedometer(), up: speedometer() },
network: { down: speedometer(), up: speedometer() }
}

core.on('download', onspeed.bind(null, 'down', info))
core.on('upload', onspeed.bind(null, 'up', info))

const id = setInterval(() => {
t.comment(
name,
crayon.green('↓') + ' ' + crayon.yellow(Math.ceil(info.blocks.down())),
crayon.cyan('↑') + ' ' + crayon.yellow(Math.ceil(info.blocks.up())) + ' blks/s',
crayon.green('↓') + ' ' + crayon.yellow(byteSize(info.network.down())),
crayon.cyan('↑') + ' ' + crayon.yellow(byteSize(info.network.up()))
)
}, 1000)

t.teardown(() => clearInterval(id))
}

function onspeed (eventName, info, index, byteLength, from) {
info.blocks[eventName](1)
info.network[eventName](byteLength)
}

0 comments on commit 431789b

Please sign in to comment.