shithub: hugo

Download patch

ref: 53a5932fa44e915dfa331876de08cd965c54e943
parent: d7588fac21e9bf3a7d1b8d140dacbe93c38fd1d2
author: Bjørn Erik Pedersen <[email protected]>
date: Fri Nov 13 16:21:03 EST 2015

Get rid of allocation in the BenchmarkReplaceShortcodeTokens itself

So we can see the real numbers.

See #1516

--- a/hugolib/shortcode_test.go
+++ b/hugolib/shortcode_test.go
@@ -349,34 +349,47 @@
 
 func BenchmarkReplaceShortcodeTokens(b *testing.B) {
 
+	type input struct {
+		in           []byte
+		replacements map[string]string
+		expect       []byte
+	}
+
 	data := []struct {
 		input        string
 		replacements map[string]string
-		expect       interface{}
+		expect       []byte
 	}{
-		{"Hello {@{@HUGOSHORTCODE-1@}@}.", map[string]string{"{@{@HUGOSHORTCODE-1@}@}": "World"}, "Hello World."},
-		{strings.Repeat("A", 100) + " {@{@HUGOSHORTCODE-1@}@}.", map[string]string{"{@{@HUGOSHORTCODE-1@}@}": "Hello World"}, strings.Repeat("A", 100) + " Hello World."},
-		{strings.Repeat("A", 500) + " {@{@HUGOSHORTCODE-1@}@}.", map[string]string{"{@{@HUGOSHORTCODE-1@}@}": "Hello World"}, strings.Repeat("A", 500) + " Hello World."},
-		{strings.Repeat("ABCD ", 500) + " {@{@HUGOSHORTCODE-1@}@}.", map[string]string{"{@{@HUGOSHORTCODE-1@}@}": "Hello World"}, strings.Repeat("ABCD ", 500) + " Hello World."},
-		{strings.Repeat("A", 500) + " {@{@HUGOSHORTCODE-1@}@}." + strings.Repeat("BC", 500) + " {@{@HUGOSHORTCODE-1@}@}.", map[string]string{"{@{@HUGOSHORTCODE-1@}@}": "Hello World"}, strings.Repeat("A", 500) + " Hello World." + strings.Repeat("BC", 500) + " Hello World."},
+		{"Hello {@{@HUGOSHORTCODE-1@}@}.", map[string]string{"{@{@HUGOSHORTCODE-1@}@}": "World"}, []byte("Hello World.")},
+		{strings.Repeat("A", 100) + " {@{@HUGOSHORTCODE-1@}@}.", map[string]string{"{@{@HUGOSHORTCODE-1@}@}": "Hello World"}, []byte(strings.Repeat("A", 100) + " Hello World.")},
+		{strings.Repeat("A", 500) + " {@{@HUGOSHORTCODE-1@}@}.", map[string]string{"{@{@HUGOSHORTCODE-1@}@}": "Hello World"}, []byte(strings.Repeat("A", 500) + " Hello World.")},
+		{strings.Repeat("ABCD ", 500) + " {@{@HUGOSHORTCODE-1@}@}.", map[string]string{"{@{@HUGOSHORTCODE-1@}@}": "Hello World"}, []byte(strings.Repeat("ABCD ", 500) + " Hello World.")},
+		{strings.Repeat("A", 500) + " {@{@HUGOSHORTCODE-1@}@}." + strings.Repeat("BC", 500) + " {@{@HUGOSHORTCODE-1@}@}.", map[string]string{"{@{@HUGOSHORTCODE-1@}@}": "Hello World"}, []byte(strings.Repeat("A", 500) + " Hello World." + strings.Repeat("BC", 500) + " Hello World.")},
 	}
+
+	var in []input = make([]input, b.N*len(data))
+	var cnt = 0
+	for i := 0; i < b.N; i++ {
+		for _, this := range data {
+			in[cnt] = input{[]byte(this.input), this.replacements, this.expect}
+			cnt++
+		}
+	}
+
 	b.ResetTimer()
+	cnt = 0
 	for i := 0; i < b.N; i++ {
-		for i, this := range data {
-			results, err := replaceShortcodeTokens([]byte(this.input), "HUGOSHORTCODE", this.replacements)
+		for j := range data {
+			currIn := in[cnt]
+			cnt++
+			results, err := replaceShortcodeTokens(currIn.in, "HUGOSHORTCODE", currIn.replacements)
 
-			if expectSuccess, ok := this.expect.(bool); ok && !expectSuccess {
-				if err == nil {
-					b.Fatalf("[%d] replaceShortcodeTokens didn't return an expected error", i)
-				}
-			} else {
-				if err != nil {
-					b.Fatalf("[%d] failed: %s", i, err)
-					continue
-				}
-				if !reflect.DeepEqual(results, []byte(this.expect.(string))) {
-					b.Fatalf("[%d] replaceShortcodeTokens, got \n%q but expected \n%q", i, results, this.expect)
-				}
+			if err != nil {
+				b.Fatalf("[%d] failed: %s", i, err)
+				continue
+			}
+			if len(results) != len(currIn.expect) {
+				b.Fatalf("[%d] replaceShortcodeTokens, got \n%q but expected \n%q", j, results, currIn.expect)
 			}
 
 		}