github.com/TrueCloudLab/frostfs-api-go/v2@v2.0.0-20230228134343-196241c4e79a/object/bench_test.go (about)

     1  package object
     2  
     3  import (
     4  	"math/rand"
     5  	"testing"
     6  
     7  	"github.com/stretchr/testify/require"
     8  )
     9  
    10  func randString(n int) string {
    11  	x := make([]byte, n)
    12  	for i := range x {
    13  		x[i] = byte('a' + rand.Intn('z'-'a'))
    14  	}
    15  	return string(x)
    16  }
    17  
    18  func BenchmarkAttributesMarshal(b *testing.B) {
    19  	attrs := make([]Attribute, 50)
    20  	for i := range attrs {
    21  		attrs[i].key = SysAttributePrefix + randString(10)
    22  		attrs[i].val = randString(10)
    23  	}
    24  	raw := AttributesToGRPC(attrs)
    25  	require.Equal(b, len(raw), len(attrs))
    26  
    27  	b.Run("marshal", func(b *testing.B) {
    28  		b.ReportAllocs()
    29  		for i := 0; i < b.N; i++ {
    30  			res := AttributesToGRPC(attrs)
    31  			if len(res) != len(raw) {
    32  				b.FailNow()
    33  			}
    34  		}
    35  	})
    36  	b.Run("unmarshal", func(b *testing.B) {
    37  		b.ReportAllocs()
    38  		for i := 0; i < b.N; i++ {
    39  			res, err := AttributesFromGRPC(raw)
    40  			if err != nil || len(res) != len(raw) {
    41  				b.FailNow()
    42  			}
    43  		}
    44  	})
    45  }