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)
}
}
}