internal/bench/render_bench_test.go

package bench

import (
	"bytes"
	"strings"
	"testing"

	"mercemay.top/src/tilstream/internal/render/markdown"
)

var renderSrc = strings.Repeat(`# Heading

A **paragraph** with *emphasis*, `+"`inline code`"+`, and a [link](https://example.com).

- Item one
- Item two
- Item three

> A short blockquote.

`+"```go"+`
package main

func main() {
    println("hello")
}
`+"```"+`

`, 50)

func BenchmarkParse(b *testing.B) {
	p := markdown.NewParser()
	b.ReportAllocs()
	b.SetBytes(int64(len(renderSrc)))
	for i := 0; i < b.N; i++ {
		if _, err := p.Parse([]byte(renderSrc)); err != nil {
			b.Fatal(err)
		}
	}
}

func BenchmarkRender(b *testing.B) {
	p := markdown.NewParser()
	r := markdown.NewRenderer()
	doc, err := p.Parse([]byte(renderSrc))
	if err != nil {
		b.Fatal(err)
	}
	b.ReportAllocs()
	b.SetBytes(int64(len(renderSrc)))
	for i := 0; i < b.N; i++ {
		var buf bytes.Buffer
		if err := r.Render(&buf, doc); err != nil {
			b.Fatal(err)
		}
	}
}

func BenchmarkParseAndRender(b *testing.B) {
	p := markdown.NewParser()
	r := markdown.NewRenderer()
	b.ReportAllocs()
	b.SetBytes(int64(len(renderSrc)))
	for i := 0; i < b.N; i++ {
		doc, err := p.Parse([]byte(renderSrc))
		if err != nil {
			b.Fatal(err)
		}
		var buf bytes.Buffer
		if err := r.Render(&buf, doc); err != nil {
			b.Fatal(err)
		}
	}
}