shithub: hugo

Download patch

ref: f4cb8e1688b1459472413f3c85cb3b6297397020
parent: 789aa6ad76fe2f6c7b911da6042a7f2a697e94ea
author: Noah Campbell <[email protected]>
date: Tue Oct 29 16:24:29 EDT 2013

Adding benchmark for transformation module.

--- /dev/null
+++ b/baseline.txt
@@ -1,0 +1,4 @@
+PASS
+BenchmarkChain	   10000	    101219 ns/op	   23919 B/op	     222 allocs/op
+BenchmarkTransform	   50000	     51625 ns/op	   11858 B/op	     135 allocs/op
+ok  	github.com/spf13/hugo/transform	4.172s
--- a/transform/chain_test.go
+++ b/transform/chain_test.go
@@ -16,7 +16,7 @@
 
 func TestChainOneTransformer(t *testing.T) {
 	tr := NewChain(&AbsURL{BaseURL: "http://base"})
-	apply(t, tr, abs_url_tests)
+	apply(t.Errorf, tr, abs_url_tests)
 }
 
 const H5_JS_CONTENT_ABS_URL_WITH_NAV = "<!DOCTYPE html><html><head><script src=\"/foobar.js\"></script></head><body><nav><ul><li hugo-nav=\"section_0\"></li><li hugo-nav=\"section_1\"></li></ul></nav><article>content <a href=\"/foobar\">foobar</a>. Follow up</article></body></html>"
@@ -32,5 +32,16 @@
 		&AbsURL{BaseURL: "http://two"},
 		&NavActive{Section: "section_1"},
 	)
-	apply(t, tr, two_chain_tests)
+	apply(t.Errorf, tr, two_chain_tests)
+}
+
+func BenchmarkChain(b *testing.B) {
+
+	tr := NewChain(
+		&AbsURL{BaseURL: "http://two"},
+		&NavActive{Section: "section_1"},
+	)
+	for i := 0; i < b.N; i++ {
+		apply(b.Errorf, tr, two_chain_tests)
+	}
 }
--- a/transform/nav_test.go
+++ b/transform/nav_test.go
@@ -58,3 +58,13 @@
 		t.Errorf("NavActive.Apply output expected and got:\n%q\n%q", expected, out.String())
 	}
 }
+
+func BenchmarkTransform(b *testing.B) {
+	for i := 0; i < b.N; i++ {
+		tr := &NavActive{Section: "section_2"}
+		out := new(bytes.Buffer)
+		if err := tr.Apply(out, strings.NewReader(HTML_WITH_NAV)); err != nil {
+			b.Errorf("Unexpected error in Apply() for NavActive: %s", err)
+		}
+	}
+}
--- a/transform/posttrans_test.go
+++ b/transform/posttrans_test.go
@@ -21,7 +21,7 @@
 		BaseURL: "http://base",
 	}
 
-	apply(t, tr, abs_url_tests)
+	apply(t.Errorf, tr, abs_url_tests)
 }
 
 type test struct {
@@ -35,15 +35,17 @@
 	{H5_JS_CONTENT_ABS_URL, H5_JS_CONTENT_ABS_URL},
 }
 
-func apply(t *testing.T, tr Transformer, tests []test) {
+type errorf func (string, ...interface{})
+
+func apply(ef errorf, tr Transformer, tests []test) {
 	for _, test := range tests {
 		out := new(bytes.Buffer)
 		err := tr.Apply(out, strings.NewReader(test.content))
 		if err != nil {
-			t.Errorf("Unexpected error: %s", err)
+			ef("Unexpected error: %s", err)
 		}
 		if test.expected != string(out.Bytes()) {
-			t.Errorf("Expected:\n%s\nGot:\n%s", test.expected, string(out.Bytes()))
+			ef("Expected:\n%s\nGot:\n%s", test.expected, string(out.Bytes()))
 		}
 	}
 }