Add benchmark test for replaceShortcodeTokens
authorbep <bjorn.erik.pedersen@gmail.com>
Tue, 19 May 2015 20:00:48 +0000 (22:00 +0200)
committerbep <bjorn.erik.pedersen@gmail.com>
Tue, 19 May 2015 20:00:48 +0000 (22:00 +0200)
hugolib/shortcode_test.go

index 3aa9b1ed29b1a3d7522c0fae4ab246f863efe351..12302c3271d59383b79fb09fb9c96487572bb609 100644 (file)
@@ -323,6 +323,43 @@ func collectAndSortShortcodes(shortcodes map[string]shortcode) []string {
 
 }
 
+func BenchmarkReplaceShortcodeTokens(b *testing.B) {
+
+       data := []struct {
+               input        string
+               replacements map[string]string
+               expect       interface{}
+       }{
+               {"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."},
+       }
+       b.ResetTimer()
+       for i := 0; i < b.N; i++ {
+               for i, this := range data {
+                       results, err := replaceShortcodeTokens([]byte(this.input), "HUGOSHORTCODE", false, this.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)
+                               }
+                       }
+
+               }
+
+       }
+}
+
 func TestReplaceShortcodeTokens(t *testing.T) {
        for i, this := range []struct {
                input        string