| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- const text = require('../app/js/sharejs/types/text.js')
- const TEST_RUNS = 1_000_000
- const MAX_OPS_BATCH_SIZE = 35
- const KB = 1000
- function runTestCase(testCase, documentSizeBytes) {
- const initialText = 'A'.repeat(documentSizeBytes)
- console.log(`test: ${testCase.name}`)
- console.log(`opsBatchSize\topsPerSeconds ${documentSizeBytes / 1000}KB`)
- for (let i = 1; i <= MAX_OPS_BATCH_SIZE; i++) {
- const ops = testCase(documentSizeBytes, i)
- let timeTotal = 0
- for (let i = 0; i < TEST_RUNS; i++) {
- const start = performance.now()
- try {
- text.apply(initialText, ops)
- } catch {
- console.error(`test failed: ${testCase.name}, with ops:`)
- console.error(ops)
- return
- }
- const done = performance.now()
- timeTotal += done - start
- }
- const opsPerSeconds = TEST_RUNS / (timeTotal / 1000)
- console.log(`${i}\t${opsPerSeconds}`)
- }
- }
- const randomAdditionTestCase = (docSize, opsSize) =>
- Array.from({ length: opsSize }, () => ({
- p: Math.floor(Math.random() * docSize),
- i: 'B',
- }))
- const sequentialAdditionsTestCase = (docSize, opsSize) =>
- Array.from({ length: opsSize }, (_, i) => ({ p: i + docSize, i: 'B' }))
- const sequentialAdditionsInMiddleTestCase = (docSize, opsSize) =>
- Array.from({ length: opsSize }, (_, i) => ({
- p: Math.floor(docSize / 2) + i,
- i: 'B',
- }))
- const randomDeletionTestCase = (docSize, opsSize) =>
- Array.from({ length: opsSize }, (_, i) => ({
- p: Math.floor(Math.random() * (docSize - 1 - i)),
- d: 'A',
- }))
- const sequentialDeletionTestCase = (docSize, opsSize) =>
- Array.from({ length: opsSize }, (_, i) => ({
- p: docSize - 1 - i,
- d: 'A',
- }))
- const sequentialDeletionInMiddleTestCase = (docSize, opsSize) =>
- Array.from({ length: opsSize }, (_, i) => ({
- p: Math.floor(docSize / 2),
- d: 'A',
- }))
- for (const docSize of [10 * KB, 100 * KB]) {
- for (const testCase of [
- randomAdditionTestCase,
- sequentialAdditionsTestCase,
- sequentialAdditionsInMiddleTestCase,
- randomDeletionTestCase,
- sequentialDeletionTestCase,
- sequentialDeletionInMiddleTestCase,
- ]) {
- runTestCase(testCase, docSize)
- }
- }
|