mirror of
https://github.com/anomalyco/opencode.git
synced 2026-10-26 14:41:12 +00:00
57 lines
1.8 KiB
TypeScript
57 lines
1.8 KiB
TypeScript
// Differential fuzzing: patchmark one-shot HTML vs commonmark.js (core) and micromark + GFM (gfm: true).
|
|
// Usage: bun scripts/fuzz-differential.ts [coreCases=100000] [gfmCases=30000] [seed=1]
|
|
import { generate, mutate, normalizeHtml, patchmark, referenceCore, referenceGfm, rng } from "../test/fuzz"
|
|
import { isKnownGfmDivergence } from "../test/fuzz-known"
|
|
|
|
const coreCases = Number(process.argv[2] ?? 100_000)
|
|
const gfmCases = Number(process.argv[3] ?? 30_000)
|
|
const seed = Number(process.argv[4] ?? 1)
|
|
const r = rng(seed)
|
|
|
|
let coreDiffs = 0
|
|
const t0 = performance.now()
|
|
|
|
for (let i = 0; i < coreCases; i++) {
|
|
const md = r() < 0.6 ? generate(r, false) : mutate(r)
|
|
const want = referenceCore(md)
|
|
const got = patchmark(md, false)
|
|
|
|
if (got !== want) {
|
|
coreDiffs++
|
|
|
|
if (coreDiffs <= 15)
|
|
console.log(`CORE DIFF #${i} ${JSON.stringify(md)}\n got ${JSON.stringify(got)}\n want ${JSON.stringify(want)}`)
|
|
}
|
|
}
|
|
|
|
const t1 = performance.now()
|
|
|
|
let gfmDiffs = 0
|
|
let gfmKnown = 0
|
|
|
|
for (let i = 0; i < gfmCases; i++) {
|
|
const md = r() < 0.7 ? generate(r, true) : mutate(r)
|
|
const want = normalizeHtml(referenceGfm(md))
|
|
const got = normalizeHtml(patchmark(md, true))
|
|
|
|
if (got !== want) {
|
|
if (isKnownGfmDivergence(md, got, want)) {
|
|
gfmKnown++
|
|
continue
|
|
}
|
|
|
|
gfmDiffs++
|
|
|
|
if (gfmDiffs <= 15)
|
|
console.log(`GFM DIFF #${i} ${JSON.stringify(md)}\n got ${JSON.stringify(got)}\n want ${JSON.stringify(want)}`)
|
|
}
|
|
}
|
|
|
|
const t2 = performance.now()
|
|
|
|
console.log(`Core CommonMark: ${coreCases} cases in ${((t1 - t0) / 1000).toFixed(1)}s — ${coreDiffs} diffs`)
|
|
console.log(
|
|
`GFM: ${gfmCases} cases in ${((t2 - t1) / 1000).toFixed(1)}s — ${gfmDiffs} unexpected diffs (${gfmKnown} known narrow divergences)`,
|
|
)
|
|
|
|
if (coreDiffs > 0 || gfmDiffs > 0) process.exit(1)
|