...
Run Format

Source file test/bench/go1/template_test.go

     1	// Copyright 2011 The Go Authors. All rights reserved.
     2	// Use of this source code is governed by a BSD-style
     3	// license that can be found in the LICENSE file.
     4	
     5	// This benchmark tests text/template throughput,
     6	// converting a large data structure with a simple template.
     7	
     8	package go1
     9	
    10	import (
    11		"bytes"
    12		"io/ioutil"
    13		"strings"
    14		"testing"
    15		"text/template"
    16	)
    17	
    18	// After removing \t and \n this generates identical output to
    19	// json.Marshal, making it easy to test for correctness.
    20	const tmplText = `
    21	{
    22		"tree":{{template "node" .Tree}},
    23		"username":"{{.Username}}"
    24	}
    25	{{define "node"}}
    26	{
    27		"name":"{{.Name}}",
    28		"kids":[
    29		{{range $i, $k := .Kids}}
    30			{{if $i}}
    31				,
    32			{{end}}
    33			{{template "node" $k}}
    34		{{end}}
    35		],
    36		"cl_weight":{{.CLWeight}},
    37		"touches":{{.Touches}},
    38		"min_t":{{.MinT}},
    39		"max_t":{{.MaxT}},
    40		"mean_t":{{.MeanT}}
    41	}
    42	{{end}}
    43	`
    44	
    45	func stripTabNL(r rune) rune {
    46		if r == '\t' || r == '\n' {
    47			return -1
    48		}
    49		return r
    50	}
    51	
    52	var tmpl = template.Must(template.New("main").Parse(strings.Map(stripTabNL, tmplText)))
    53	
    54	func init() {
    55		var buf bytes.Buffer
    56		if err := tmpl.Execute(&buf, &jsondata); err != nil {
    57			panic(err)
    58		}
    59		if !bytes.Equal(buf.Bytes(), jsonbytes) {
    60			println(buf.Len(), len(jsonbytes))
    61			panic("wrong output")
    62		}
    63	}
    64	
    65	func tmplexec() {
    66		if err := tmpl.Execute(ioutil.Discard, &jsondata); err != nil {
    67			panic(err)
    68		}
    69	}
    70	
    71	func BenchmarkTemplate(b *testing.B) {
    72		b.SetBytes(int64(len(jsonbytes)))
    73		for i := 0; i < b.N; i++ {
    74			tmplexec()
    75		}
    76	}
    77	

View as plain text