mirror of
https://github.com/overleaf/overleaf.git
synced 2024-11-21 20:47:08 -05:00
Merge pull request #19057 from overleaf/mj-benchmark-seed-random
[web] Add quick and dirty PRNG for seeding benchmark runs GitOrigin-RevId: 079f9b565f17b44d7062f6b93c26f694e486c6b9
This commit is contained in:
parent
a8cb423078
commit
94694a6385
2 changed files with 27 additions and 2 deletions
19
services/web/scripts/lezer-latex/random.mjs
Normal file
19
services/web/scripts/lezer-latex/random.mjs
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
// Super quick and dirty LCG PRNG
|
||||||
|
|
||||||
|
const m = 0xffffffff
|
||||||
|
let X = Math.floor(Math.random() * (m - 1))
|
||||||
|
const a = 16807
|
||||||
|
const c = 0
|
||||||
|
|
||||||
|
// Should probably be a large-ish number
|
||||||
|
export function seed(i) {
|
||||||
|
if (i < 0) {
|
||||||
|
throw new Error('Seed must be a positive integer')
|
||||||
|
}
|
||||||
|
X = i & m
|
||||||
|
}
|
||||||
|
|
||||||
|
export function random() {
|
||||||
|
X = (a * X + c) % m
|
||||||
|
return X / m
|
||||||
|
}
|
|
@ -5,10 +5,16 @@ import * as path from 'path'
|
||||||
import { fileURLToPath } from 'url'
|
import { fileURLToPath } from 'url'
|
||||||
import { TreeFragment } from '@lezer/common'
|
import { TreeFragment } from '@lezer/common'
|
||||||
import minimist from 'minimist'
|
import minimist from 'minimist'
|
||||||
|
import { seed, random } from './random.mjs'
|
||||||
|
|
||||||
const argv = minimist(process.argv.slice(2))
|
const argv = minimist(process.argv.slice(2))
|
||||||
const NUMBER_OF_OPS = argv.ops || 1000
|
const NUMBER_OF_OPS = argv.ops || 1000
|
||||||
const CSV_OUTPUT = argv.csv || false
|
const CSV_OUTPUT = argv.csv || false
|
||||||
|
const SEED = argv.seed
|
||||||
|
|
||||||
|
if (SEED) {
|
||||||
|
seed(SEED)
|
||||||
|
}
|
||||||
|
|
||||||
const __dirname = path.dirname(fileURLToPath(import.meta.url))
|
const __dirname = path.dirname(fileURLToPath(import.meta.url))
|
||||||
|
|
||||||
|
@ -108,13 +114,13 @@ function writeTextAt(document, position, text) {
|
||||||
|
|
||||||
function randomInsertions(document, num) {
|
function randomInsertions(document, num) {
|
||||||
return timedChanges(document, num, currentDoc =>
|
return timedChanges(document, num, currentDoc =>
|
||||||
insertAt(currentDoc, Math.floor(Math.random() * currentDoc.length), 'a')
|
insertAt(currentDoc, Math.floor(random() * currentDoc.length), 'a')
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
function randomDeletions(document, num) {
|
function randomDeletions(document, num) {
|
||||||
return timedChanges(document, num, currentDoc =>
|
return timedChanges(document, num, currentDoc =>
|
||||||
deleteAt(currentDoc, Math.floor(Math.random() * currentDoc.length), 1)
|
deleteAt(currentDoc, Math.floor(random() * currentDoc.length), 1)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue