...

Source file src/github.com/pelletier/go-toml/v2/unstable/benchmark_test.go

Documentation: github.com/pelletier/go-toml/v2/unstable

     1  package unstable
     2  
     3  import (
     4  	"bytes"
     5  	"testing"
     6  )
     7  
     8  var valid10Ascii = []byte("1234567890")
     9  var valid10Utf8 = []byte("日本語a")
    10  var valid1kUtf8 = bytes.Repeat([]byte("0123456789日本語日本語日本語日abcdefghijklmnopqrstuvwx"), 16)
    11  var valid1MUtf8 = bytes.Repeat(valid1kUtf8, 1024)
    12  var valid1kAscii = bytes.Repeat([]byte("012345678998jhjklasDJKLAAdjdfjsdklfjdslkabcdefghijklmnopqrstuvwx"), 16)
    13  var valid1MAscii = bytes.Repeat(valid1kAscii, 1024)
    14  
    15  func BenchmarkScanComments(b *testing.B) {
    16  	wrap := func(x []byte) []byte {
    17  		return []byte("# " + string(x) + "\n")
    18  	}
    19  
    20  	inputs := map[string][]byte{
    21  		"10Valid":     wrap(valid10Ascii),
    22  		"1kValid":     wrap(valid1kAscii),
    23  		"1MValid":     wrap(valid1MAscii),
    24  		"10ValidUtf8": wrap(valid10Utf8),
    25  		"1kValidUtf8": wrap(valid1kUtf8),
    26  		"1MValidUtf8": wrap(valid1MUtf8),
    27  	}
    28  
    29  	for name, input := range inputs {
    30  		b.Run(name, func(b *testing.B) {
    31  			b.SetBytes(int64(len(input)))
    32  			b.ReportAllocs()
    33  			b.ResetTimer()
    34  
    35  			for i := 0; i < b.N; i++ {
    36  				scanComment(input)
    37  			}
    38  		})
    39  	}
    40  }
    41  
    42  func BenchmarkParseLiteralStringValid(b *testing.B) {
    43  	wrap := func(x []byte) []byte {
    44  		return []byte("'" + string(x) + "'")
    45  	}
    46  
    47  	inputs := map[string][]byte{
    48  		"10Valid":     wrap(valid10Ascii),
    49  		"1kValid":     wrap(valid1kAscii),
    50  		"1MValid":     wrap(valid1MAscii),
    51  		"10ValidUtf8": wrap(valid10Utf8),
    52  		"1kValidUtf8": wrap(valid1kUtf8),
    53  		"1MValidUtf8": wrap(valid1MUtf8),
    54  	}
    55  
    56  	for name, input := range inputs {
    57  		b.Run(name, func(b *testing.B) {
    58  			p := Parser{}
    59  			b.SetBytes(int64(len(input)))
    60  			b.ReportAllocs()
    61  			b.ResetTimer()
    62  
    63  			for i := 0; i < b.N; i++ {
    64  				_, _, _, err := p.parseLiteralString(input)
    65  				if err != nil {
    66  					panic(err)
    67  				}
    68  			}
    69  		})
    70  	}
    71  }
    72  

View as plain text