///| Literal (source-preserving) renderer benchmarks.
///|
///| The literal renderer walks the same AST as the regular `render_html`
///| but emits one or two extra ``s per node and (when enabled)
///| `data-src-*` attributes / `
` slots. These benches measure how
///| much of the renderer's runtime that extra work costs, in absolute
///| terms and relative to `render_html` and `serialize`.
// Reuse the document generator from bench.mbt — the same shape of
// markdown stress-tests every Block / Inline variant.
///|
let lit_small_doc : ParseResult = parse(small_doc)
///|
let lit_medium_doc : ParseResult = parse(medium_doc)
///|
let lit_large_doc : ParseResult = parse(large_doc)
// === Baseline: render_html for comparison =================================
///|
test "render_html: small document" (b : @bench.T) {
b.bench(fn() {
let output = render_html(lit_small_doc.document)
b.keep(output)
})
}
///|
test "render_html: medium document" (b : @bench.T) {
b.bench(fn() {
let output = render_html(lit_medium_doc.document)
b.keep(output)
})
}
///|
test "render_html: large document" (b : @bench.T) {
b.bench(fn() {
let output = render_html(lit_large_doc.document)
b.keep(output)
})
}
// === Literal renderer: plain mode ==========================================
///|
test "render_html_literal: small document" (b : @bench.T) {
b.bench(fn() {
let output = render_html_literal(lit_small_doc.document)
b.keep(output)
})
}
///|
test "render_html_literal: medium document" (b : @bench.T) {
b.bench(fn() {
let output = render_html_literal(lit_medium_doc.document)
b.keep(output)
})
}
///|
test "render_html_literal: large document" (b : @bench.T) {
b.bench(fn() {
let output = render_html_literal(lit_large_doc.document)
b.keep(output)
})
}
// === Literal renderer: positions=true ======================================
///|
test "render_html_literal+positions: medium document" (b : @bench.T) {
b.bench(fn() {
let output = render_html_literal(lit_medium_doc.document, positions=true)
b.keep(output)
})
}
///|
test "render_html_literal+positions: large document" (b : @bench.T) {
b.bench(fn() {
let output = render_html_literal(lit_large_doc.document, positions=true)
b.keep(output)
})
}
// === Literal renderer: positions + image preview ==========================
///|
test "render_html_literal+positions+image: medium document" (b : @bench.T) {
b.bench(fn() {
let output = render_html_literal(
lit_medium_doc.document,
positions=true,
image_preview=true,
)
b.keep(output)
})
}
// === Parse + literal-render in one go (closer to consumer-side cost) ======
///|
test "md_to_html_literal: medium document" (b : @bench.T) {
b.bench(fn() {
let output = md_to_html_literal(medium_doc)
b.keep(output)
})
}
///|
test "md_to_html_literal+positions: medium document" (b : @bench.T) {
b.bench(fn() {
let output = md_to_html_literal(medium_doc, positions=true)
b.keep(output)
})
}