package object

import (
	"math/rand"
	"testing"

	"github.com/stretchr/testify/require"
)

func randString(n int) string {
	x := make([]byte, n)
	for i := range x {
		x[i] = byte('a' + rand.Intn('z'-'a'))
	}
	return string(x)
}

func BenchmarkAttributesMarshal(b *testing.B) {
	attrs := make([]Attribute, 50)
	for i := range attrs {
		attrs[i].key = SysAttributePrefix + randString(10)
		attrs[i].val = randString(10)
	}
	raw := AttributesToGRPC(attrs)
	require.Equal(b, len(raw), len(attrs))

	b.Run("marshal", func(b *testing.B) {
		b.ReportAllocs()
		for i := 0; i < b.N; i++ {
			res := AttributesToGRPC(attrs)
			if len(res) != len(raw) {
				b.FailNow()
			}
		}
	})
	b.Run("unmarshal", func(b *testing.B) {
		b.ReportAllocs()
		for i := 0; i < b.N; i++ {
			res, err := AttributesFromGRPC(raw)
			if err != nil || len(res) != len(raw) {
				b.FailNow()
			}
		}
	})
}