parser: Add benchmarks for stringifyYAMLMapKeys
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Mon, 12 Feb 2018 16:31:37 +0000 (17:31 +0100)
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Mon, 12 Feb 2018 17:16:48 +0000 (18:16 +0100)
```bash
BenchmarkStringifyMapKeysStringsOnlyInterfaceMaps-4       500000              3269 ns/op            1080 B/op         16 allocs/op
BenchmarkStringifyMapKeysStringsOnlyStringMaps-4        300000000                4.79 ns/op            0 B/op          0 allocs/op
BenchmarkStringifyMapKeysIntegers-4                       500000              2707 ns/op            1080 B/op         16 allocs/op
```

parser/frontmatter_test.go

index a7a35fa076d4dfe68f4165107a513aa35a4ec93f..9ac9749515c187acee99f4aa9ec2a72fe48d6f07 100644 (file)
@@ -323,7 +323,7 @@ func TestRemoveTOMLIdentifier(t *testing.T) {
 
 func TestStringifyYAMLMapKeys(t *testing.T) {
        cases := []struct {
-               input map[interface{}]interface{}
+               input interface{}
                want  map[string]interface{}
        }{
                {
@@ -346,6 +346,10 @@ func TestStringifyYAMLMapKeys(t *testing.T) {
                        map[interface{}]interface{}{"a": map[interface{}]interface{}{"b": 1}},
                        map[string]interface{}{"a": map[string]interface{}{"b": 1}},
                },
+               {
+                       map[string]interface{}{"a": map[string]interface{}{"b": 1}},
+                       map[string]interface{}{"a": map[string]interface{}{"b": 1}},
+               },
        }
 
        for i, c := range cases {
@@ -365,6 +369,69 @@ func BenchmarkFrontmatterTags(b *testing.B) {
        }
 }
 
+func BenchmarkStringifyMapKeysStringsOnlyInterfaceMaps(b *testing.B) {
+       maps := make([]map[interface{}]interface{}, b.N)
+       for i := 0; i < b.N; i++ {
+               maps[i] = map[interface{}]interface{}{
+                       "a": map[interface{}]interface{}{
+                               "b": 32,
+                               "c": 43,
+                               "d": map[interface{}]interface{}{
+                                       "b": 32,
+                                       "c": 43,
+                               },
+                       },
+                       "b": []interface{}{"a", "b"},
+                       "c": "d",
+               }
+       }
+       b.ResetTimer()
+       for i := 0; i < b.N; i++ {
+               stringifyYAMLMapKeys(maps[i])
+       }
+}
+
+func BenchmarkStringifyMapKeysStringsOnlyStringMaps(b *testing.B) {
+       m := map[string]interface{}{
+               "a": map[string]interface{}{
+                       "b": 32,
+                       "c": 43,
+                       "d": map[string]interface{}{
+                               "b": 32,
+                               "c": 43,
+                       },
+               },
+               "b": []interface{}{"a", "b"},
+               "c": "d",
+       }
+
+       b.ResetTimer()
+       for i := 0; i < b.N; i++ {
+               stringifyYAMLMapKeys(m)
+       }
+}
+
+func BenchmarkStringifyMapKeysIntegers(b *testing.B) {
+       maps := make([]map[interface{}]interface{}, b.N)
+       for i := 0; i < b.N; i++ {
+               maps[i] = map[interface{}]interface{}{
+                       1: map[interface{}]interface{}{
+                               4: 32,
+                               5: 43,
+                               6: map[interface{}]interface{}{
+                                       7: 32,
+                                       8: 43,
+                               },
+                       },
+                       2: []interface{}{"a", "b"},
+                       3: "d",
+               }
+       }
+       b.ResetTimer()
+       for i := 0; i < b.N; i++ {
+               stringifyYAMLMapKeys(maps[i])
+       }
+}
 func doBenchmarkFrontmatter(b *testing.B, fileformat string, numTags int) {
        yamlTemplate := `---
 name: "Tags"