hugo/transform/nav_test.go
Noah Campbell 9af47f07d3 Improve rendering time
50% speedup.  Fix #91

to run the benchmark:

		go test -test.run=NONE -bench=".*" -test.benchmem=true ./transform/ > new.txt

to compare the results:

		/usr/local/go/misc/benchcmp baseline.txt new.txt

Speedup and memory improvements

		benchmark             old ns/op    new ns/op    delta
		BenchmarkChain           101219        50453  -50.15%
		BenchmarkTransform        51625        45531  -11.80%

		benchmark            old allocs   new allocs    delta
		BenchmarkChain              222          103  -53.60%
		BenchmarkTransform          135          106  -21.48%

		benchmark             old bytes    new bytes    delta
		BenchmarkChain            23919        10998  -54.02%
		BenchmarkTransform        11858        10665  -10.06%
2013-11-01 09:59:57 -07:00

58 lines
1.3 KiB
Go

package transform
import (
"bytes"
"strings"
"testing"
)
const HTML_WITH_NAV = `<!DOCTYPE html>
<html>
<head></head>
<body>
<nav>
<ul class="nav navbar-nav">
<li hugo-nav="section_1"><a href="#">Section 1</a></li>
<li hugo-nav="section_2"><a href="#">Section 2</a></li>
</ul>
</nav>
</body>
</html>
`
const EXPECTED_HTML_WITH_NAV_1 = `<!DOCTYPE html><html><head></head>
<body>
<nav>
<ul class="nav navbar-nav">
<li hugo-nav="section_1"><a href="#">Section 1</a></li>
<li hugo-nav="section_2" class="active"><a href="#">Section 2</a></li>
</ul>
</nav>
</body></html>`
func TestSetNav(t *testing.T) {
trs := NavActive("section_2", "hugo-nav")
chain := NewChain(trs...)
out := new(bytes.Buffer)
if err := chain.Apply(out, strings.NewReader(HTML_WITH_NAV)); err != nil {
t.Errorf("Unexpected error in Apply() for NavActive: %s", err)
}
expected := EXPECTED_HTML_WITH_NAV_1
if out.String() != expected {
t.Errorf("NavActive.Apply output expected and got:\n%q\n%q", expected, out.String())
}
}
func BenchmarkTransform(b *testing.B) {
tr := NavActive("section_2", "hugo-nav")
chain := NewChain(tr...)
out := new(bytes.Buffer)
for i := 0; i < b.N; i++ {
if err := chain.Apply(out, strings.NewReader(HTML_WITH_NAV)); err != nil {
b.Errorf("Unexpected error in Apply() for NavActive: %s", err)
}
out.Reset()
}
}