package refs import ( "math/rand" "strconv" "testing" ) func BenchmarkObjectIDSlice(b *testing.B) { for _, size := range []int{0, 1, 50} { b.Run(strconv.Itoa(size)+" elements", func(b *testing.B) { benchmarkObjectIDSlice(b, size) }) } } func benchmarkObjectIDSlice(b *testing.B, size int) { ids := make([]ObjectID, size) for i := range ids { ids[i].val = make([]byte, 32) rand.Read(ids[i].val) } raw := ObjectIDListToGRPCMessage(ids) b.Run("to grpc message", func(b *testing.B) { b.ReportAllocs() for i := 0; i < b.N; i++ { raw := ObjectIDListToGRPCMessage(ids) if len(raw) != len(ids) { b.FailNow() } } }) b.Run("from grpc message", func(b *testing.B) { b.ReportAllocs() for i := 0; i < b.N; i++ { ids, err := ObjectIDListFromGRPCMessage(raw) if err != nil || len(raw) != len(ids) { b.FailNow() } } }) b.Run("marshal", func(b *testing.B) { b.ReportAllocs() for i := 0; i < b.N; i++ { buf := make([]byte, ObjectIDNestedListSize(1, ids)) n := ObjectIDNestedListMarshal(1, buf, ids) if n != len(buf) { b.FailNow() } } }) }