proto: bench_test fixes

Don't fail on test cases with partial messages.

Create a new message on each decode cycle.

Change-Id: I7c1d91a2853e340fc0bae05a238bb28eb682e6ce
Reviewed-on: https://go-review.googlesource.com/c/protobuf/+/185377
Reviewed-by: Joe Tsai <thebrokentoaster@gmail.com>
diff --git a/proto/bench_test.go b/proto/bench_test.go
index dfaf141..19f9eaa 100644
--- a/proto/bench_test.go
+++ b/proto/bench_test.go
@@ -38,7 +38,7 @@
 						} else {
 							_, err = opts.Marshal(want)
 						}
-						if err != nil {
+						if err != nil && !test.partial {
 							b.Fatal(err)
 						}
 					}
@@ -55,16 +55,16 @@
 			opts := proto.UnmarshalOptions{AllowPartial: *allowPartial}
 			b.Run(fmt.Sprintf("%s (%T)", test.desc, want), func(b *testing.B) {
 				b.RunParallel(func(pb *testing.PB) {
-					m := reflect.New(reflect.TypeOf(want).Elem()).Interface().(proto.Message)
-					v1 := m.(protoV1.Message)
 					for pb.Next() {
+						m := reflect.New(reflect.TypeOf(want).Elem()).Interface().(proto.Message)
+						v1 := m.(protoV1.Message)
 						var err error
 						if *benchV1 {
 							err = protoV1.Unmarshal(test.wire, v1)
 						} else {
 							err = opts.Unmarshal(test.wire, m)
 						}
-						if err != nil {
+						if err != nil && !test.partial {
 							b.Fatal(err)
 						}
 					}