protobuf-go/proto/reset_test.go
Damien Neil a9940822d4 all: remove protoreflect.Message.Len
Len looks like it should be O(1), but the need to check for
non-zero-length repeated fields makes it at minimum O(n) where n is
the number of repeated fields. In practice, it's O(n) where n is the
number of fields altogether.

The Len function is not especially useful, easily duplicated with Range
and a counter, and can be surprisingly inefficient. Drop it.

Change-Id: I24b27433217e131e842bd18dd58475bcdf62ef97
Reviewed-on: https://go-review.googlesource.com/c/protobuf/+/183678
Reviewed-by: Joe Tsai <thebrokentoaster@gmail.com>
2019-06-25 21:59:46 +00:00

56 lines
1.6 KiB
Go

// Copyright 2019 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style.
// license that can be found in the LICENSE file.
package proto_test
import (
"testing"
"google.golang.org/protobuf/internal/scalar"
"google.golang.org/protobuf/proto"
testpb "google.golang.org/protobuf/internal/testprotos/test"
)
func TestReset(t *testing.T) {
m := &testpb.TestAllTypes{
OptionalSfixed64: scalar.Int64(5),
RepeatedInt32: []int32{},
RepeatedFloat: []float32{1.234, 5.678},
MapFixed64Fixed64: map[uint64]uint64{5: 7},
MapStringString: map[string]string{},
OptionalForeignMessage: &testpb.ForeignMessage{},
OneofField: (*testpb.TestAllTypes_OneofUint32)(nil),
}
m.ProtoReflect().SetUnknown([]byte{})
proto.Reset(m)
if m.OptionalSfixed64 != nil {
t.Errorf("m.OptionalSfixed64 = %p, want nil", m.OptionalSfixed64)
}
if m.RepeatedInt32 != nil {
t.Errorf("m.RepeatedInt32 = %p, want nil", m.RepeatedInt32)
}
if m.RepeatedFloat != nil {
t.Errorf("m.RepeatedFloat = %p, want nil", m.RepeatedFloat)
}
if m.MapFixed64Fixed64 != nil {
t.Errorf("m.MapFixed64Fixed64 = %p, want nil", m.MapFixed64Fixed64)
}
if m.MapStringString != nil {
t.Errorf("m.MapStringString = %p, want nil", m.MapStringString)
}
if m.OptionalForeignMessage != nil {
t.Errorf("m.OptionalForeignMessage = %p, want nil", m.OptionalForeignMessage)
}
if m.OneofField != nil {
t.Errorf("m.OneofField = %p, want nil", m.OneofField)
}
if got := m.ProtoReflect().GetUnknown(); got != nil {
t.Errorf("m.ProtoReflect().GetUnknown() = %d, want nil", got)
}
}