1*1c12ee1eSDan Willemsen// Copyright 2019 The Go Authors. All rights reserved. 2*1c12ee1eSDan Willemsen// Use of this source code is governed by a BSD-style 3*1c12ee1eSDan Willemsen// license that can be found in the LICENSE file. 4*1c12ee1eSDan Willemsen 5*1c12ee1eSDan Willemsenpackage proto_test 6*1c12ee1eSDan Willemsen 7*1c12ee1eSDan Willemsenimport ( 8*1c12ee1eSDan Willemsen "math" 9*1c12ee1eSDan Willemsen "testing" 10*1c12ee1eSDan Willemsen 11*1c12ee1eSDan Willemsen "google.golang.org/protobuf/encoding/prototext" 12*1c12ee1eSDan Willemsen "google.golang.org/protobuf/internal/pragma" 13*1c12ee1eSDan Willemsen "google.golang.org/protobuf/proto" 14*1c12ee1eSDan Willemsen "google.golang.org/protobuf/testing/protopack" 15*1c12ee1eSDan Willemsen 16*1c12ee1eSDan Willemsen testpb "google.golang.org/protobuf/internal/testprotos/test" 17*1c12ee1eSDan Willemsen test3pb "google.golang.org/protobuf/internal/testprotos/test3" 18*1c12ee1eSDan Willemsen) 19*1c12ee1eSDan Willemsen 20*1c12ee1eSDan Willemsenfunc TestEqual(t *testing.T) { 21*1c12ee1eSDan Willemsen identicalPtrPb := &testpb.TestAllTypes{MapStringString: map[string]string{"a": "b", "c": "d"}} 22*1c12ee1eSDan Willemsen 23*1c12ee1eSDan Willemsen type incomparableMessage struct { 24*1c12ee1eSDan Willemsen *testpb.TestAllTypes 25*1c12ee1eSDan Willemsen pragma.DoNotCompare 26*1c12ee1eSDan Willemsen } 27*1c12ee1eSDan Willemsen 28*1c12ee1eSDan Willemsen tests := []struct { 29*1c12ee1eSDan Willemsen x, y proto.Message 30*1c12ee1eSDan Willemsen eq bool 31*1c12ee1eSDan Willemsen }{ 32*1c12ee1eSDan Willemsen { 33*1c12ee1eSDan Willemsen x: nil, 34*1c12ee1eSDan Willemsen y: nil, 35*1c12ee1eSDan Willemsen eq: true, 36*1c12ee1eSDan Willemsen }, { 37*1c12ee1eSDan Willemsen x: (*testpb.TestAllTypes)(nil), 38*1c12ee1eSDan Willemsen y: nil, 39*1c12ee1eSDan Willemsen eq: false, 40*1c12ee1eSDan Willemsen }, { 41*1c12ee1eSDan Willemsen x: (*testpb.TestAllTypes)(nil), 42*1c12ee1eSDan Willemsen y: (*testpb.TestAllTypes)(nil), 43*1c12ee1eSDan Willemsen eq: true, 44*1c12ee1eSDan Willemsen }, { 45*1c12ee1eSDan Willemsen x: new(testpb.TestAllTypes), 46*1c12ee1eSDan Willemsen y: (*testpb.TestAllTypes)(nil), 47*1c12ee1eSDan Willemsen eq: false, 48*1c12ee1eSDan Willemsen }, { 49*1c12ee1eSDan Willemsen x: new(testpb.TestAllTypes), 50*1c12ee1eSDan Willemsen y: new(testpb.TestAllTypes), 51*1c12ee1eSDan Willemsen eq: true, 52*1c12ee1eSDan Willemsen }, { 53*1c12ee1eSDan Willemsen x: (*testpb.TestAllTypes)(nil), 54*1c12ee1eSDan Willemsen y: (*testpb.TestAllExtensions)(nil), 55*1c12ee1eSDan Willemsen eq: false, 56*1c12ee1eSDan Willemsen }, { 57*1c12ee1eSDan Willemsen x: (*testpb.TestAllTypes)(nil), 58*1c12ee1eSDan Willemsen y: new(testpb.TestAllExtensions), 59*1c12ee1eSDan Willemsen eq: false, 60*1c12ee1eSDan Willemsen }, { 61*1c12ee1eSDan Willemsen x: new(testpb.TestAllTypes), 62*1c12ee1eSDan Willemsen y: new(testpb.TestAllExtensions), 63*1c12ee1eSDan Willemsen eq: false, 64*1c12ee1eSDan Willemsen }, 65*1c12ee1eSDan Willemsen 66*1c12ee1eSDan Willemsen // Identical input pointers 67*1c12ee1eSDan Willemsen { 68*1c12ee1eSDan Willemsen x: identicalPtrPb, 69*1c12ee1eSDan Willemsen y: identicalPtrPb, 70*1c12ee1eSDan Willemsen eq: true, 71*1c12ee1eSDan Willemsen }, 72*1c12ee1eSDan Willemsen 73*1c12ee1eSDan Willemsen // Incomparable types. The top-level types are not actually directly 74*1c12ee1eSDan Willemsen // compared (which would panic), but rather the comparison happens on the 75*1c12ee1eSDan Willemsen // objects returned by ProtoReflect(). These tests are here just to ensure 76*1c12ee1eSDan Willemsen // that any short-circuit checks do not accidentally try to compare 77*1c12ee1eSDan Willemsen // incomparable top-level types. 78*1c12ee1eSDan Willemsen { 79*1c12ee1eSDan Willemsen x: incomparableMessage{TestAllTypes: identicalPtrPb}, 80*1c12ee1eSDan Willemsen y: incomparableMessage{TestAllTypes: identicalPtrPb}, 81*1c12ee1eSDan Willemsen eq: true, 82*1c12ee1eSDan Willemsen }, 83*1c12ee1eSDan Willemsen { 84*1c12ee1eSDan Willemsen x: identicalPtrPb, 85*1c12ee1eSDan Willemsen y: incomparableMessage{TestAllTypes: identicalPtrPb}, 86*1c12ee1eSDan Willemsen eq: true, 87*1c12ee1eSDan Willemsen }, 88*1c12ee1eSDan Willemsen { 89*1c12ee1eSDan Willemsen x: identicalPtrPb, 90*1c12ee1eSDan Willemsen y: &incomparableMessage{TestAllTypes: identicalPtrPb}, 91*1c12ee1eSDan Willemsen eq: true, 92*1c12ee1eSDan Willemsen }, 93*1c12ee1eSDan Willemsen 94*1c12ee1eSDan Willemsen // Proto2 scalars. 95*1c12ee1eSDan Willemsen { 96*1c12ee1eSDan Willemsen x: &testpb.TestAllTypes{OptionalInt32: proto.Int32(1)}, 97*1c12ee1eSDan Willemsen y: &testpb.TestAllTypes{OptionalInt32: proto.Int32(2)}, 98*1c12ee1eSDan Willemsen }, { 99*1c12ee1eSDan Willemsen x: &testpb.TestAllTypes{OptionalInt64: proto.Int64(1)}, 100*1c12ee1eSDan Willemsen y: &testpb.TestAllTypes{OptionalInt64: proto.Int64(2)}, 101*1c12ee1eSDan Willemsen }, { 102*1c12ee1eSDan Willemsen x: &testpb.TestAllTypes{OptionalUint32: proto.Uint32(1)}, 103*1c12ee1eSDan Willemsen y: &testpb.TestAllTypes{OptionalUint32: proto.Uint32(2)}, 104*1c12ee1eSDan Willemsen }, { 105*1c12ee1eSDan Willemsen x: &testpb.TestAllTypes{OptionalUint64: proto.Uint64(1)}, 106*1c12ee1eSDan Willemsen y: &testpb.TestAllTypes{OptionalUint64: proto.Uint64(2)}, 107*1c12ee1eSDan Willemsen }, { 108*1c12ee1eSDan Willemsen x: &testpb.TestAllTypes{OptionalSint32: proto.Int32(1)}, 109*1c12ee1eSDan Willemsen y: &testpb.TestAllTypes{OptionalSint32: proto.Int32(2)}, 110*1c12ee1eSDan Willemsen }, { 111*1c12ee1eSDan Willemsen x: &testpb.TestAllTypes{OptionalSint64: proto.Int64(1)}, 112*1c12ee1eSDan Willemsen y: &testpb.TestAllTypes{OptionalSint64: proto.Int64(2)}, 113*1c12ee1eSDan Willemsen }, { 114*1c12ee1eSDan Willemsen x: &testpb.TestAllTypes{OptionalFixed32: proto.Uint32(1)}, 115*1c12ee1eSDan Willemsen y: &testpb.TestAllTypes{OptionalFixed32: proto.Uint32(2)}, 116*1c12ee1eSDan Willemsen }, { 117*1c12ee1eSDan Willemsen x: &testpb.TestAllTypes{OptionalFixed64: proto.Uint64(1)}, 118*1c12ee1eSDan Willemsen y: &testpb.TestAllTypes{OptionalFixed64: proto.Uint64(2)}, 119*1c12ee1eSDan Willemsen }, { 120*1c12ee1eSDan Willemsen x: &testpb.TestAllTypes{OptionalSfixed32: proto.Int32(1)}, 121*1c12ee1eSDan Willemsen y: &testpb.TestAllTypes{OptionalSfixed32: proto.Int32(2)}, 122*1c12ee1eSDan Willemsen }, { 123*1c12ee1eSDan Willemsen x: &testpb.TestAllTypes{OptionalSfixed64: proto.Int64(1)}, 124*1c12ee1eSDan Willemsen y: &testpb.TestAllTypes{OptionalSfixed64: proto.Int64(2)}, 125*1c12ee1eSDan Willemsen }, { 126*1c12ee1eSDan Willemsen x: &testpb.TestAllTypes{OptionalFloat: proto.Float32(1)}, 127*1c12ee1eSDan Willemsen y: &testpb.TestAllTypes{OptionalFloat: proto.Float32(2)}, 128*1c12ee1eSDan Willemsen }, { 129*1c12ee1eSDan Willemsen x: &testpb.TestAllTypes{OptionalDouble: proto.Float64(1)}, 130*1c12ee1eSDan Willemsen y: &testpb.TestAllTypes{OptionalDouble: proto.Float64(2)}, 131*1c12ee1eSDan Willemsen }, { 132*1c12ee1eSDan Willemsen x: &testpb.TestAllTypes{OptionalFloat: proto.Float32(float32(math.NaN()))}, 133*1c12ee1eSDan Willemsen y: &testpb.TestAllTypes{OptionalFloat: proto.Float32(0)}, 134*1c12ee1eSDan Willemsen }, { 135*1c12ee1eSDan Willemsen x: &testpb.TestAllTypes{OptionalDouble: proto.Float64(float64(math.NaN()))}, 136*1c12ee1eSDan Willemsen y: &testpb.TestAllTypes{OptionalDouble: proto.Float64(0)}, 137*1c12ee1eSDan Willemsen }, { 138*1c12ee1eSDan Willemsen x: &testpb.TestAllTypes{OptionalBool: proto.Bool(true)}, 139*1c12ee1eSDan Willemsen y: &testpb.TestAllTypes{OptionalBool: proto.Bool(false)}, 140*1c12ee1eSDan Willemsen }, { 141*1c12ee1eSDan Willemsen x: &testpb.TestAllTypes{OptionalString: proto.String("a")}, 142*1c12ee1eSDan Willemsen y: &testpb.TestAllTypes{OptionalString: proto.String("b")}, 143*1c12ee1eSDan Willemsen }, { 144*1c12ee1eSDan Willemsen x: &testpb.TestAllTypes{OptionalBytes: []byte("a")}, 145*1c12ee1eSDan Willemsen y: &testpb.TestAllTypes{OptionalBytes: []byte("b")}, 146*1c12ee1eSDan Willemsen }, { 147*1c12ee1eSDan Willemsen x: &testpb.TestAllTypes{OptionalNestedEnum: testpb.TestAllTypes_FOO.Enum()}, 148*1c12ee1eSDan Willemsen y: &testpb.TestAllTypes{OptionalNestedEnum: testpb.TestAllTypes_BAR.Enum()}, 149*1c12ee1eSDan Willemsen }, { 150*1c12ee1eSDan Willemsen x: &testpb.TestAllTypes{OptionalInt32: proto.Int32(2)}, 151*1c12ee1eSDan Willemsen y: &testpb.TestAllTypes{OptionalInt32: proto.Int32(2)}, 152*1c12ee1eSDan Willemsen eq: true, 153*1c12ee1eSDan Willemsen }, { 154*1c12ee1eSDan Willemsen x: &testpb.TestAllTypes{OptionalInt64: proto.Int64(2)}, 155*1c12ee1eSDan Willemsen y: &testpb.TestAllTypes{OptionalInt64: proto.Int64(2)}, 156*1c12ee1eSDan Willemsen eq: true, 157*1c12ee1eSDan Willemsen }, { 158*1c12ee1eSDan Willemsen x: &testpb.TestAllTypes{OptionalUint32: proto.Uint32(2)}, 159*1c12ee1eSDan Willemsen y: &testpb.TestAllTypes{OptionalUint32: proto.Uint32(2)}, 160*1c12ee1eSDan Willemsen eq: true, 161*1c12ee1eSDan Willemsen }, { 162*1c12ee1eSDan Willemsen x: &testpb.TestAllTypes{OptionalUint64: proto.Uint64(2)}, 163*1c12ee1eSDan Willemsen y: &testpb.TestAllTypes{OptionalUint64: proto.Uint64(2)}, 164*1c12ee1eSDan Willemsen eq: true, 165*1c12ee1eSDan Willemsen }, { 166*1c12ee1eSDan Willemsen x: &testpb.TestAllTypes{OptionalSint32: proto.Int32(2)}, 167*1c12ee1eSDan Willemsen y: &testpb.TestAllTypes{OptionalSint32: proto.Int32(2)}, 168*1c12ee1eSDan Willemsen eq: true, 169*1c12ee1eSDan Willemsen }, { 170*1c12ee1eSDan Willemsen x: &testpb.TestAllTypes{OptionalSint64: proto.Int64(2)}, 171*1c12ee1eSDan Willemsen y: &testpb.TestAllTypes{OptionalSint64: proto.Int64(2)}, 172*1c12ee1eSDan Willemsen eq: true, 173*1c12ee1eSDan Willemsen }, { 174*1c12ee1eSDan Willemsen x: &testpb.TestAllTypes{OptionalFixed32: proto.Uint32(2)}, 175*1c12ee1eSDan Willemsen y: &testpb.TestAllTypes{OptionalFixed32: proto.Uint32(2)}, 176*1c12ee1eSDan Willemsen eq: true, 177*1c12ee1eSDan Willemsen }, { 178*1c12ee1eSDan Willemsen x: &testpb.TestAllTypes{OptionalFixed64: proto.Uint64(2)}, 179*1c12ee1eSDan Willemsen y: &testpb.TestAllTypes{OptionalFixed64: proto.Uint64(2)}, 180*1c12ee1eSDan Willemsen eq: true, 181*1c12ee1eSDan Willemsen }, { 182*1c12ee1eSDan Willemsen x: &testpb.TestAllTypes{OptionalSfixed32: proto.Int32(2)}, 183*1c12ee1eSDan Willemsen y: &testpb.TestAllTypes{OptionalSfixed32: proto.Int32(2)}, 184*1c12ee1eSDan Willemsen eq: true, 185*1c12ee1eSDan Willemsen }, { 186*1c12ee1eSDan Willemsen x: &testpb.TestAllTypes{OptionalSfixed64: proto.Int64(2)}, 187*1c12ee1eSDan Willemsen y: &testpb.TestAllTypes{OptionalSfixed64: proto.Int64(2)}, 188*1c12ee1eSDan Willemsen eq: true, 189*1c12ee1eSDan Willemsen }, { 190*1c12ee1eSDan Willemsen x: &testpb.TestAllTypes{OptionalFloat: proto.Float32(2)}, 191*1c12ee1eSDan Willemsen y: &testpb.TestAllTypes{OptionalFloat: proto.Float32(2)}, 192*1c12ee1eSDan Willemsen eq: true, 193*1c12ee1eSDan Willemsen }, { 194*1c12ee1eSDan Willemsen x: &testpb.TestAllTypes{OptionalDouble: proto.Float64(2)}, 195*1c12ee1eSDan Willemsen y: &testpb.TestAllTypes{OptionalDouble: proto.Float64(2)}, 196*1c12ee1eSDan Willemsen eq: true, 197*1c12ee1eSDan Willemsen }, { 198*1c12ee1eSDan Willemsen x: &testpb.TestAllTypes{OptionalFloat: proto.Float32(float32(math.NaN()))}, 199*1c12ee1eSDan Willemsen y: &testpb.TestAllTypes{OptionalFloat: proto.Float32(float32(math.NaN()))}, 200*1c12ee1eSDan Willemsen eq: true, 201*1c12ee1eSDan Willemsen }, { 202*1c12ee1eSDan Willemsen x: &testpb.TestAllTypes{OptionalDouble: proto.Float64(float64(math.NaN()))}, 203*1c12ee1eSDan Willemsen y: &testpb.TestAllTypes{OptionalDouble: proto.Float64(float64(math.NaN()))}, 204*1c12ee1eSDan Willemsen eq: true, 205*1c12ee1eSDan Willemsen }, { 206*1c12ee1eSDan Willemsen x: &testpb.TestAllTypes{OptionalBool: proto.Bool(true)}, 207*1c12ee1eSDan Willemsen y: &testpb.TestAllTypes{OptionalBool: proto.Bool(true)}, 208*1c12ee1eSDan Willemsen eq: true, 209*1c12ee1eSDan Willemsen }, { 210*1c12ee1eSDan Willemsen x: &testpb.TestAllTypes{OptionalString: proto.String("abc")}, 211*1c12ee1eSDan Willemsen y: &testpb.TestAllTypes{OptionalString: proto.String("abc")}, 212*1c12ee1eSDan Willemsen eq: true, 213*1c12ee1eSDan Willemsen }, { 214*1c12ee1eSDan Willemsen x: &testpb.TestAllTypes{OptionalBytes: []byte("abc")}, 215*1c12ee1eSDan Willemsen y: &testpb.TestAllTypes{OptionalBytes: []byte("abc")}, 216*1c12ee1eSDan Willemsen eq: true, 217*1c12ee1eSDan Willemsen }, { 218*1c12ee1eSDan Willemsen x: &testpb.TestAllTypes{OptionalNestedEnum: testpb.TestAllTypes_FOO.Enum()}, 219*1c12ee1eSDan Willemsen y: &testpb.TestAllTypes{OptionalNestedEnum: testpb.TestAllTypes_FOO.Enum()}, 220*1c12ee1eSDan Willemsen eq: true, 221*1c12ee1eSDan Willemsen }, 222*1c12ee1eSDan Willemsen 223*1c12ee1eSDan Willemsen // Proto2 presence. 224*1c12ee1eSDan Willemsen { 225*1c12ee1eSDan Willemsen x: &testpb.TestAllTypes{}, 226*1c12ee1eSDan Willemsen y: &testpb.TestAllTypes{OptionalInt32: proto.Int32(0)}, 227*1c12ee1eSDan Willemsen }, { 228*1c12ee1eSDan Willemsen x: &testpb.TestAllTypes{}, 229*1c12ee1eSDan Willemsen y: &testpb.TestAllTypes{OptionalInt64: proto.Int64(0)}, 230*1c12ee1eSDan Willemsen }, { 231*1c12ee1eSDan Willemsen x: &testpb.TestAllTypes{}, 232*1c12ee1eSDan Willemsen y: &testpb.TestAllTypes{OptionalUint32: proto.Uint32(0)}, 233*1c12ee1eSDan Willemsen }, { 234*1c12ee1eSDan Willemsen x: &testpb.TestAllTypes{}, 235*1c12ee1eSDan Willemsen y: &testpb.TestAllTypes{OptionalUint64: proto.Uint64(0)}, 236*1c12ee1eSDan Willemsen }, { 237*1c12ee1eSDan Willemsen x: &testpb.TestAllTypes{}, 238*1c12ee1eSDan Willemsen y: &testpb.TestAllTypes{OptionalSint32: proto.Int32(0)}, 239*1c12ee1eSDan Willemsen }, { 240*1c12ee1eSDan Willemsen x: &testpb.TestAllTypes{}, 241*1c12ee1eSDan Willemsen y: &testpb.TestAllTypes{OptionalSint64: proto.Int64(0)}, 242*1c12ee1eSDan Willemsen }, { 243*1c12ee1eSDan Willemsen x: &testpb.TestAllTypes{}, 244*1c12ee1eSDan Willemsen y: &testpb.TestAllTypes{OptionalFixed32: proto.Uint32(0)}, 245*1c12ee1eSDan Willemsen }, { 246*1c12ee1eSDan Willemsen x: &testpb.TestAllTypes{}, 247*1c12ee1eSDan Willemsen y: &testpb.TestAllTypes{OptionalFixed64: proto.Uint64(0)}, 248*1c12ee1eSDan Willemsen }, { 249*1c12ee1eSDan Willemsen x: &testpb.TestAllTypes{}, 250*1c12ee1eSDan Willemsen y: &testpb.TestAllTypes{OptionalSfixed32: proto.Int32(0)}, 251*1c12ee1eSDan Willemsen }, { 252*1c12ee1eSDan Willemsen x: &testpb.TestAllTypes{}, 253*1c12ee1eSDan Willemsen y: &testpb.TestAllTypes{OptionalSfixed64: proto.Int64(0)}, 254*1c12ee1eSDan Willemsen }, { 255*1c12ee1eSDan Willemsen x: &testpb.TestAllTypes{}, 256*1c12ee1eSDan Willemsen y: &testpb.TestAllTypes{OptionalFloat: proto.Float32(0)}, 257*1c12ee1eSDan Willemsen }, { 258*1c12ee1eSDan Willemsen x: &testpb.TestAllTypes{}, 259*1c12ee1eSDan Willemsen y: &testpb.TestAllTypes{OptionalDouble: proto.Float64(0)}, 260*1c12ee1eSDan Willemsen }, { 261*1c12ee1eSDan Willemsen x: &testpb.TestAllTypes{}, 262*1c12ee1eSDan Willemsen y: &testpb.TestAllTypes{OptionalBool: proto.Bool(false)}, 263*1c12ee1eSDan Willemsen }, { 264*1c12ee1eSDan Willemsen x: &testpb.TestAllTypes{}, 265*1c12ee1eSDan Willemsen y: &testpb.TestAllTypes{OptionalString: proto.String("")}, 266*1c12ee1eSDan Willemsen }, { 267*1c12ee1eSDan Willemsen x: &testpb.TestAllTypes{}, 268*1c12ee1eSDan Willemsen y: &testpb.TestAllTypes{OptionalBytes: []byte{}}, 269*1c12ee1eSDan Willemsen }, { 270*1c12ee1eSDan Willemsen x: &testpb.TestAllTypes{}, 271*1c12ee1eSDan Willemsen y: &testpb.TestAllTypes{OptionalNestedEnum: testpb.TestAllTypes_FOO.Enum()}, 272*1c12ee1eSDan Willemsen }, 273*1c12ee1eSDan Willemsen 274*1c12ee1eSDan Willemsen // Proto3 presence. 275*1c12ee1eSDan Willemsen { 276*1c12ee1eSDan Willemsen x: &test3pb.TestAllTypes{}, 277*1c12ee1eSDan Willemsen y: &test3pb.TestAllTypes{OptionalInt32: proto.Int32(0)}, 278*1c12ee1eSDan Willemsen }, { 279*1c12ee1eSDan Willemsen x: &test3pb.TestAllTypes{}, 280*1c12ee1eSDan Willemsen y: &test3pb.TestAllTypes{OptionalInt64: proto.Int64(0)}, 281*1c12ee1eSDan Willemsen }, { 282*1c12ee1eSDan Willemsen x: &test3pb.TestAllTypes{}, 283*1c12ee1eSDan Willemsen y: &test3pb.TestAllTypes{OptionalUint32: proto.Uint32(0)}, 284*1c12ee1eSDan Willemsen }, { 285*1c12ee1eSDan Willemsen x: &test3pb.TestAllTypes{}, 286*1c12ee1eSDan Willemsen y: &test3pb.TestAllTypes{OptionalUint64: proto.Uint64(0)}, 287*1c12ee1eSDan Willemsen }, { 288*1c12ee1eSDan Willemsen x: &test3pb.TestAllTypes{}, 289*1c12ee1eSDan Willemsen y: &test3pb.TestAllTypes{OptionalSint32: proto.Int32(0)}, 290*1c12ee1eSDan Willemsen }, { 291*1c12ee1eSDan Willemsen x: &test3pb.TestAllTypes{}, 292*1c12ee1eSDan Willemsen y: &test3pb.TestAllTypes{OptionalSint64: proto.Int64(0)}, 293*1c12ee1eSDan Willemsen }, { 294*1c12ee1eSDan Willemsen x: &test3pb.TestAllTypes{}, 295*1c12ee1eSDan Willemsen y: &test3pb.TestAllTypes{OptionalFixed32: proto.Uint32(0)}, 296*1c12ee1eSDan Willemsen }, { 297*1c12ee1eSDan Willemsen x: &test3pb.TestAllTypes{}, 298*1c12ee1eSDan Willemsen y: &test3pb.TestAllTypes{OptionalFixed64: proto.Uint64(0)}, 299*1c12ee1eSDan Willemsen }, { 300*1c12ee1eSDan Willemsen x: &test3pb.TestAllTypes{}, 301*1c12ee1eSDan Willemsen y: &test3pb.TestAllTypes{OptionalSfixed32: proto.Int32(0)}, 302*1c12ee1eSDan Willemsen }, { 303*1c12ee1eSDan Willemsen x: &test3pb.TestAllTypes{}, 304*1c12ee1eSDan Willemsen y: &test3pb.TestAllTypes{OptionalSfixed64: proto.Int64(0)}, 305*1c12ee1eSDan Willemsen }, { 306*1c12ee1eSDan Willemsen x: &test3pb.TestAllTypes{}, 307*1c12ee1eSDan Willemsen y: &test3pb.TestAllTypes{OptionalFloat: proto.Float32(0)}, 308*1c12ee1eSDan Willemsen }, { 309*1c12ee1eSDan Willemsen x: &test3pb.TestAllTypes{}, 310*1c12ee1eSDan Willemsen y: &test3pb.TestAllTypes{OptionalDouble: proto.Float64(0)}, 311*1c12ee1eSDan Willemsen }, { 312*1c12ee1eSDan Willemsen x: &test3pb.TestAllTypes{}, 313*1c12ee1eSDan Willemsen y: &test3pb.TestAllTypes{OptionalBool: proto.Bool(false)}, 314*1c12ee1eSDan Willemsen }, { 315*1c12ee1eSDan Willemsen x: &test3pb.TestAllTypes{}, 316*1c12ee1eSDan Willemsen y: &test3pb.TestAllTypes{OptionalString: proto.String("")}, 317*1c12ee1eSDan Willemsen }, { 318*1c12ee1eSDan Willemsen x: &test3pb.TestAllTypes{}, 319*1c12ee1eSDan Willemsen y: &test3pb.TestAllTypes{OptionalBytes: []byte{}}, 320*1c12ee1eSDan Willemsen }, { 321*1c12ee1eSDan Willemsen x: &test3pb.TestAllTypes{}, 322*1c12ee1eSDan Willemsen y: &test3pb.TestAllTypes{OptionalNestedEnum: test3pb.TestAllTypes_FOO.Enum()}, 323*1c12ee1eSDan Willemsen }, 324*1c12ee1eSDan Willemsen 325*1c12ee1eSDan Willemsen // Proto2 default values are not considered by Equal, so the following are still unequal. 326*1c12ee1eSDan Willemsen { 327*1c12ee1eSDan Willemsen x: &testpb.TestAllTypes{DefaultInt32: proto.Int32(81)}, 328*1c12ee1eSDan Willemsen y: &testpb.TestAllTypes{}, 329*1c12ee1eSDan Willemsen }, { 330*1c12ee1eSDan Willemsen x: &testpb.TestAllTypes{}, 331*1c12ee1eSDan Willemsen y: &testpb.TestAllTypes{DefaultInt32: proto.Int32(81)}, 332*1c12ee1eSDan Willemsen }, { 333*1c12ee1eSDan Willemsen x: &testpb.TestAllTypes{}, 334*1c12ee1eSDan Willemsen y: &testpb.TestAllTypes{DefaultInt64: proto.Int64(82)}, 335*1c12ee1eSDan Willemsen }, { 336*1c12ee1eSDan Willemsen x: &testpb.TestAllTypes{}, 337*1c12ee1eSDan Willemsen y: &testpb.TestAllTypes{DefaultUint32: proto.Uint32(83)}, 338*1c12ee1eSDan Willemsen }, { 339*1c12ee1eSDan Willemsen x: &testpb.TestAllTypes{}, 340*1c12ee1eSDan Willemsen y: &testpb.TestAllTypes{DefaultUint64: proto.Uint64(84)}, 341*1c12ee1eSDan Willemsen }, { 342*1c12ee1eSDan Willemsen x: &testpb.TestAllTypes{}, 343*1c12ee1eSDan Willemsen y: &testpb.TestAllTypes{DefaultSint32: proto.Int32(-85)}, 344*1c12ee1eSDan Willemsen }, { 345*1c12ee1eSDan Willemsen x: &testpb.TestAllTypes{}, 346*1c12ee1eSDan Willemsen y: &testpb.TestAllTypes{DefaultSint64: proto.Int64(86)}, 347*1c12ee1eSDan Willemsen }, { 348*1c12ee1eSDan Willemsen x: &testpb.TestAllTypes{}, 349*1c12ee1eSDan Willemsen y: &testpb.TestAllTypes{DefaultFixed32: proto.Uint32(87)}, 350*1c12ee1eSDan Willemsen }, { 351*1c12ee1eSDan Willemsen x: &testpb.TestAllTypes{}, 352*1c12ee1eSDan Willemsen y: &testpb.TestAllTypes{DefaultFixed64: proto.Uint64(88)}, 353*1c12ee1eSDan Willemsen }, { 354*1c12ee1eSDan Willemsen x: &testpb.TestAllTypes{}, 355*1c12ee1eSDan Willemsen y: &testpb.TestAllTypes{DefaultSfixed32: proto.Int32(89)}, 356*1c12ee1eSDan Willemsen }, { 357*1c12ee1eSDan Willemsen x: &testpb.TestAllTypes{}, 358*1c12ee1eSDan Willemsen y: &testpb.TestAllTypes{DefaultSfixed64: proto.Int64(-90)}, 359*1c12ee1eSDan Willemsen }, { 360*1c12ee1eSDan Willemsen x: &testpb.TestAllTypes{}, 361*1c12ee1eSDan Willemsen y: &testpb.TestAllTypes{DefaultFloat: proto.Float32(91.5)}, 362*1c12ee1eSDan Willemsen }, { 363*1c12ee1eSDan Willemsen x: &testpb.TestAllTypes{}, 364*1c12ee1eSDan Willemsen y: &testpb.TestAllTypes{DefaultDouble: proto.Float64(92e3)}, 365*1c12ee1eSDan Willemsen }, { 366*1c12ee1eSDan Willemsen x: &testpb.TestAllTypes{}, 367*1c12ee1eSDan Willemsen y: &testpb.TestAllTypes{DefaultBool: proto.Bool(true)}, 368*1c12ee1eSDan Willemsen }, { 369*1c12ee1eSDan Willemsen x: &testpb.TestAllTypes{}, 370*1c12ee1eSDan Willemsen y: &testpb.TestAllTypes{DefaultString: proto.String("hello")}, 371*1c12ee1eSDan Willemsen }, { 372*1c12ee1eSDan Willemsen x: &testpb.TestAllTypes{}, 373*1c12ee1eSDan Willemsen y: &testpb.TestAllTypes{DefaultBytes: []byte("world")}, 374*1c12ee1eSDan Willemsen }, { 375*1c12ee1eSDan Willemsen x: &testpb.TestAllTypes{}, 376*1c12ee1eSDan Willemsen y: &testpb.TestAllTypes{DefaultNestedEnum: testpb.TestAllTypes_BAR.Enum()}, 377*1c12ee1eSDan Willemsen }, 378*1c12ee1eSDan Willemsen 379*1c12ee1eSDan Willemsen // Groups. 380*1c12ee1eSDan Willemsen { 381*1c12ee1eSDan Willemsen x: &testpb.TestAllTypes{Optionalgroup: &testpb.TestAllTypes_OptionalGroup{ 382*1c12ee1eSDan Willemsen A: proto.Int32(1), 383*1c12ee1eSDan Willemsen }}, 384*1c12ee1eSDan Willemsen y: &testpb.TestAllTypes{Optionalgroup: &testpb.TestAllTypes_OptionalGroup{ 385*1c12ee1eSDan Willemsen A: proto.Int32(2), 386*1c12ee1eSDan Willemsen }}, 387*1c12ee1eSDan Willemsen }, { 388*1c12ee1eSDan Willemsen x: &testpb.TestAllTypes{}, 389*1c12ee1eSDan Willemsen y: &testpb.TestAllTypes{Optionalgroup: &testpb.TestAllTypes_OptionalGroup{}}, 390*1c12ee1eSDan Willemsen }, 391*1c12ee1eSDan Willemsen 392*1c12ee1eSDan Willemsen // Messages. 393*1c12ee1eSDan Willemsen { 394*1c12ee1eSDan Willemsen x: &testpb.TestAllTypes{OptionalNestedMessage: &testpb.TestAllTypes_NestedMessage{ 395*1c12ee1eSDan Willemsen A: proto.Int32(1), 396*1c12ee1eSDan Willemsen }}, 397*1c12ee1eSDan Willemsen y: &testpb.TestAllTypes{OptionalNestedMessage: &testpb.TestAllTypes_NestedMessage{ 398*1c12ee1eSDan Willemsen A: proto.Int32(2), 399*1c12ee1eSDan Willemsen }}, 400*1c12ee1eSDan Willemsen }, { 401*1c12ee1eSDan Willemsen x: &testpb.TestAllTypes{}, 402*1c12ee1eSDan Willemsen y: &testpb.TestAllTypes{OptionalNestedMessage: &testpb.TestAllTypes_NestedMessage{}}, 403*1c12ee1eSDan Willemsen }, { 404*1c12ee1eSDan Willemsen x: &test3pb.TestAllTypes{}, 405*1c12ee1eSDan Willemsen y: &test3pb.TestAllTypes{OptionalNestedMessage: &test3pb.TestAllTypes_NestedMessage{}}, 406*1c12ee1eSDan Willemsen }, 407*1c12ee1eSDan Willemsen 408*1c12ee1eSDan Willemsen // Lists. 409*1c12ee1eSDan Willemsen { 410*1c12ee1eSDan Willemsen x: &testpb.TestAllTypes{RepeatedInt32: []int32{1}}, 411*1c12ee1eSDan Willemsen y: &testpb.TestAllTypes{RepeatedInt32: []int32{1, 2}}, 412*1c12ee1eSDan Willemsen }, { 413*1c12ee1eSDan Willemsen x: &testpb.TestAllTypes{RepeatedInt32: []int32{1, 2}}, 414*1c12ee1eSDan Willemsen y: &testpb.TestAllTypes{RepeatedInt32: []int32{1, 3}}, 415*1c12ee1eSDan Willemsen }, { 416*1c12ee1eSDan Willemsen x: &testpb.TestAllTypes{RepeatedInt64: []int64{1, 2}}, 417*1c12ee1eSDan Willemsen y: &testpb.TestAllTypes{RepeatedInt64: []int64{1, 3}}, 418*1c12ee1eSDan Willemsen }, { 419*1c12ee1eSDan Willemsen x: &testpb.TestAllTypes{RepeatedUint32: []uint32{1, 2}}, 420*1c12ee1eSDan Willemsen y: &testpb.TestAllTypes{RepeatedUint32: []uint32{1, 3}}, 421*1c12ee1eSDan Willemsen }, { 422*1c12ee1eSDan Willemsen x: &testpb.TestAllTypes{RepeatedUint64: []uint64{1, 2}}, 423*1c12ee1eSDan Willemsen y: &testpb.TestAllTypes{RepeatedUint64: []uint64{1, 3}}, 424*1c12ee1eSDan Willemsen }, { 425*1c12ee1eSDan Willemsen x: &testpb.TestAllTypes{RepeatedSint32: []int32{1, 2}}, 426*1c12ee1eSDan Willemsen y: &testpb.TestAllTypes{RepeatedSint32: []int32{1, 3}}, 427*1c12ee1eSDan Willemsen }, { 428*1c12ee1eSDan Willemsen x: &testpb.TestAllTypes{RepeatedSint64: []int64{1, 2}}, 429*1c12ee1eSDan Willemsen y: &testpb.TestAllTypes{RepeatedSint64: []int64{1, 3}}, 430*1c12ee1eSDan Willemsen }, { 431*1c12ee1eSDan Willemsen x: &testpb.TestAllTypes{RepeatedFixed32: []uint32{1, 2}}, 432*1c12ee1eSDan Willemsen y: &testpb.TestAllTypes{RepeatedFixed32: []uint32{1, 3}}, 433*1c12ee1eSDan Willemsen }, { 434*1c12ee1eSDan Willemsen x: &testpb.TestAllTypes{RepeatedFixed64: []uint64{1, 2}}, 435*1c12ee1eSDan Willemsen y: &testpb.TestAllTypes{RepeatedFixed64: []uint64{1, 3}}, 436*1c12ee1eSDan Willemsen }, { 437*1c12ee1eSDan Willemsen x: &testpb.TestAllTypes{RepeatedSfixed32: []int32{1, 2}}, 438*1c12ee1eSDan Willemsen y: &testpb.TestAllTypes{RepeatedSfixed32: []int32{1, 3}}, 439*1c12ee1eSDan Willemsen }, { 440*1c12ee1eSDan Willemsen x: &testpb.TestAllTypes{RepeatedSfixed64: []int64{1, 2}}, 441*1c12ee1eSDan Willemsen y: &testpb.TestAllTypes{RepeatedSfixed64: []int64{1, 3}}, 442*1c12ee1eSDan Willemsen }, { 443*1c12ee1eSDan Willemsen x: &testpb.TestAllTypes{RepeatedFloat: []float32{1, 2}}, 444*1c12ee1eSDan Willemsen y: &testpb.TestAllTypes{RepeatedFloat: []float32{1, 3}}, 445*1c12ee1eSDan Willemsen }, { 446*1c12ee1eSDan Willemsen x: &testpb.TestAllTypes{RepeatedDouble: []float64{1, 2}}, 447*1c12ee1eSDan Willemsen y: &testpb.TestAllTypes{RepeatedDouble: []float64{1, 3}}, 448*1c12ee1eSDan Willemsen }, { 449*1c12ee1eSDan Willemsen x: &testpb.TestAllTypes{RepeatedBool: []bool{true, false}}, 450*1c12ee1eSDan Willemsen y: &testpb.TestAllTypes{RepeatedBool: []bool{true, true}}, 451*1c12ee1eSDan Willemsen }, { 452*1c12ee1eSDan Willemsen x: &testpb.TestAllTypes{RepeatedString: []string{"a", "b"}}, 453*1c12ee1eSDan Willemsen y: &testpb.TestAllTypes{RepeatedString: []string{"a", "c"}}, 454*1c12ee1eSDan Willemsen }, { 455*1c12ee1eSDan Willemsen x: &testpb.TestAllTypes{RepeatedBytes: [][]byte{[]byte("a"), []byte("b")}}, 456*1c12ee1eSDan Willemsen y: &testpb.TestAllTypes{RepeatedBytes: [][]byte{[]byte("a"), []byte("c")}}, 457*1c12ee1eSDan Willemsen }, { 458*1c12ee1eSDan Willemsen x: &testpb.TestAllTypes{RepeatedNestedEnum: []testpb.TestAllTypes_NestedEnum{testpb.TestAllTypes_FOO}}, 459*1c12ee1eSDan Willemsen y: &testpb.TestAllTypes{RepeatedNestedEnum: []testpb.TestAllTypes_NestedEnum{testpb.TestAllTypes_BAR}}, 460*1c12ee1eSDan Willemsen }, { 461*1c12ee1eSDan Willemsen x: &testpb.TestAllTypes{Repeatedgroup: []*testpb.TestAllTypes_RepeatedGroup{ 462*1c12ee1eSDan Willemsen {A: proto.Int32(1)}, 463*1c12ee1eSDan Willemsen {A: proto.Int32(2)}, 464*1c12ee1eSDan Willemsen }}, 465*1c12ee1eSDan Willemsen y: &testpb.TestAllTypes{Repeatedgroup: []*testpb.TestAllTypes_RepeatedGroup{ 466*1c12ee1eSDan Willemsen {A: proto.Int32(1)}, 467*1c12ee1eSDan Willemsen {A: proto.Int32(3)}, 468*1c12ee1eSDan Willemsen }}, 469*1c12ee1eSDan Willemsen }, { 470*1c12ee1eSDan Willemsen x: &testpb.TestAllTypes{RepeatedNestedMessage: []*testpb.TestAllTypes_NestedMessage{ 471*1c12ee1eSDan Willemsen {A: proto.Int32(1)}, 472*1c12ee1eSDan Willemsen {A: proto.Int32(2)}, 473*1c12ee1eSDan Willemsen }}, 474*1c12ee1eSDan Willemsen y: &testpb.TestAllTypes{RepeatedNestedMessage: []*testpb.TestAllTypes_NestedMessage{ 475*1c12ee1eSDan Willemsen {A: proto.Int32(1)}, 476*1c12ee1eSDan Willemsen {A: proto.Int32(3)}, 477*1c12ee1eSDan Willemsen }}, 478*1c12ee1eSDan Willemsen }, 479*1c12ee1eSDan Willemsen 480*1c12ee1eSDan Willemsen // Maps: various configurations. 481*1c12ee1eSDan Willemsen { 482*1c12ee1eSDan Willemsen x: &testpb.TestAllTypes{MapInt32Int32: map[int32]int32{1: 2}}, 483*1c12ee1eSDan Willemsen y: &testpb.TestAllTypes{MapInt32Int32: map[int32]int32{3: 4}}, 484*1c12ee1eSDan Willemsen }, { 485*1c12ee1eSDan Willemsen x: &testpb.TestAllTypes{MapInt32Int32: map[int32]int32{1: 2}}, 486*1c12ee1eSDan Willemsen y: &testpb.TestAllTypes{MapInt32Int32: map[int32]int32{1: 2, 3: 4}}, 487*1c12ee1eSDan Willemsen }, { 488*1c12ee1eSDan Willemsen x: &testpb.TestAllTypes{MapInt32Int32: map[int32]int32{1: 2, 3: 4}}, 489*1c12ee1eSDan Willemsen y: &testpb.TestAllTypes{MapInt32Int32: map[int32]int32{1: 2}}, 490*1c12ee1eSDan Willemsen }, 491*1c12ee1eSDan Willemsen 492*1c12ee1eSDan Willemsen // Maps: various types. 493*1c12ee1eSDan Willemsen { 494*1c12ee1eSDan Willemsen x: &testpb.TestAllTypes{MapInt32Int32: map[int32]int32{1: 2, 3: 4}}, 495*1c12ee1eSDan Willemsen y: &testpb.TestAllTypes{MapInt32Int32: map[int32]int32{1: 2, 3: 5}}, 496*1c12ee1eSDan Willemsen }, { 497*1c12ee1eSDan Willemsen x: &testpb.TestAllTypes{MapInt64Int64: map[int64]int64{1: 2, 3: 4}}, 498*1c12ee1eSDan Willemsen y: &testpb.TestAllTypes{MapInt64Int64: map[int64]int64{1: 2, 3: 5}}, 499*1c12ee1eSDan Willemsen }, { 500*1c12ee1eSDan Willemsen x: &testpb.TestAllTypes{MapUint32Uint32: map[uint32]uint32{1: 2, 3: 4}}, 501*1c12ee1eSDan Willemsen y: &testpb.TestAllTypes{MapUint32Uint32: map[uint32]uint32{1: 2, 3: 5}}, 502*1c12ee1eSDan Willemsen }, { 503*1c12ee1eSDan Willemsen x: &testpb.TestAllTypes{MapUint64Uint64: map[uint64]uint64{1: 2, 3: 4}}, 504*1c12ee1eSDan Willemsen y: &testpb.TestAllTypes{MapUint64Uint64: map[uint64]uint64{1: 2, 3: 5}}, 505*1c12ee1eSDan Willemsen }, { 506*1c12ee1eSDan Willemsen x: &testpb.TestAllTypes{MapSint32Sint32: map[int32]int32{1: 2, 3: 4}}, 507*1c12ee1eSDan Willemsen y: &testpb.TestAllTypes{MapSint32Sint32: map[int32]int32{1: 2, 3: 5}}, 508*1c12ee1eSDan Willemsen }, { 509*1c12ee1eSDan Willemsen x: &testpb.TestAllTypes{MapSint64Sint64: map[int64]int64{1: 2, 3: 4}}, 510*1c12ee1eSDan Willemsen y: &testpb.TestAllTypes{MapSint64Sint64: map[int64]int64{1: 2, 3: 5}}, 511*1c12ee1eSDan Willemsen }, { 512*1c12ee1eSDan Willemsen x: &testpb.TestAllTypes{MapFixed32Fixed32: map[uint32]uint32{1: 2, 3: 4}}, 513*1c12ee1eSDan Willemsen y: &testpb.TestAllTypes{MapFixed32Fixed32: map[uint32]uint32{1: 2, 3: 5}}, 514*1c12ee1eSDan Willemsen }, { 515*1c12ee1eSDan Willemsen x: &testpb.TestAllTypes{MapFixed64Fixed64: map[uint64]uint64{1: 2, 3: 4}}, 516*1c12ee1eSDan Willemsen y: &testpb.TestAllTypes{MapFixed64Fixed64: map[uint64]uint64{1: 2, 3: 5}}, 517*1c12ee1eSDan Willemsen }, { 518*1c12ee1eSDan Willemsen x: &testpb.TestAllTypes{MapSfixed32Sfixed32: map[int32]int32{1: 2, 3: 4}}, 519*1c12ee1eSDan Willemsen y: &testpb.TestAllTypes{MapSfixed32Sfixed32: map[int32]int32{1: 2, 3: 5}}, 520*1c12ee1eSDan Willemsen }, { 521*1c12ee1eSDan Willemsen x: &testpb.TestAllTypes{MapSfixed64Sfixed64: map[int64]int64{1: 2, 3: 4}}, 522*1c12ee1eSDan Willemsen y: &testpb.TestAllTypes{MapSfixed64Sfixed64: map[int64]int64{1: 2, 3: 5}}, 523*1c12ee1eSDan Willemsen }, { 524*1c12ee1eSDan Willemsen x: &testpb.TestAllTypes{MapInt32Float: map[int32]float32{1: 2, 3: 4}}, 525*1c12ee1eSDan Willemsen y: &testpb.TestAllTypes{MapInt32Float: map[int32]float32{1: 2, 3: 5}}, 526*1c12ee1eSDan Willemsen }, { 527*1c12ee1eSDan Willemsen x: &testpb.TestAllTypes{MapInt32Double: map[int32]float64{1: 2, 3: 4}}, 528*1c12ee1eSDan Willemsen y: &testpb.TestAllTypes{MapInt32Double: map[int32]float64{1: 2, 3: 5}}, 529*1c12ee1eSDan Willemsen }, { 530*1c12ee1eSDan Willemsen x: &testpb.TestAllTypes{MapBoolBool: map[bool]bool{true: false, false: true}}, 531*1c12ee1eSDan Willemsen y: &testpb.TestAllTypes{MapBoolBool: map[bool]bool{true: false, false: false}}, 532*1c12ee1eSDan Willemsen }, { 533*1c12ee1eSDan Willemsen x: &testpb.TestAllTypes{MapStringString: map[string]string{"a": "b", "c": "d"}}, 534*1c12ee1eSDan Willemsen y: &testpb.TestAllTypes{MapStringString: map[string]string{"a": "b", "c": "e"}}, 535*1c12ee1eSDan Willemsen }, { 536*1c12ee1eSDan Willemsen x: &testpb.TestAllTypes{MapStringBytes: map[string][]byte{"a": []byte("b"), "c": []byte("d")}}, 537*1c12ee1eSDan Willemsen y: &testpb.TestAllTypes{MapStringBytes: map[string][]byte{"a": []byte("b"), "c": []byte("e")}}, 538*1c12ee1eSDan Willemsen }, { 539*1c12ee1eSDan Willemsen x: &testpb.TestAllTypes{MapStringNestedMessage: map[string]*testpb.TestAllTypes_NestedMessage{ 540*1c12ee1eSDan Willemsen "a": {A: proto.Int32(1)}, 541*1c12ee1eSDan Willemsen "b": {A: proto.Int32(2)}, 542*1c12ee1eSDan Willemsen }}, 543*1c12ee1eSDan Willemsen y: &testpb.TestAllTypes{MapStringNestedMessage: map[string]*testpb.TestAllTypes_NestedMessage{ 544*1c12ee1eSDan Willemsen "a": {A: proto.Int32(1)}, 545*1c12ee1eSDan Willemsen "b": {A: proto.Int32(3)}, 546*1c12ee1eSDan Willemsen }}, 547*1c12ee1eSDan Willemsen }, { 548*1c12ee1eSDan Willemsen x: &testpb.TestAllTypes{MapStringNestedEnum: map[string]testpb.TestAllTypes_NestedEnum{ 549*1c12ee1eSDan Willemsen "a": testpb.TestAllTypes_FOO, 550*1c12ee1eSDan Willemsen "b": testpb.TestAllTypes_BAR, 551*1c12ee1eSDan Willemsen }}, 552*1c12ee1eSDan Willemsen y: &testpb.TestAllTypes{MapStringNestedEnum: map[string]testpb.TestAllTypes_NestedEnum{ 553*1c12ee1eSDan Willemsen "a": testpb.TestAllTypes_FOO, 554*1c12ee1eSDan Willemsen "b": testpb.TestAllTypes_BAZ, 555*1c12ee1eSDan Willemsen }}, 556*1c12ee1eSDan Willemsen }, 557*1c12ee1eSDan Willemsen 558*1c12ee1eSDan Willemsen // Extensions. 559*1c12ee1eSDan Willemsen { 560*1c12ee1eSDan Willemsen x: build(&testpb.TestAllExtensions{}, 561*1c12ee1eSDan Willemsen extend(testpb.E_OptionalInt32, int32(1)), 562*1c12ee1eSDan Willemsen ), 563*1c12ee1eSDan Willemsen y: build(&testpb.TestAllExtensions{}, 564*1c12ee1eSDan Willemsen extend(testpb.E_OptionalInt32, int32(2)), 565*1c12ee1eSDan Willemsen ), 566*1c12ee1eSDan Willemsen }, { 567*1c12ee1eSDan Willemsen x: &testpb.TestAllExtensions{}, 568*1c12ee1eSDan Willemsen y: build(&testpb.TestAllExtensions{}, 569*1c12ee1eSDan Willemsen extend(testpb.E_OptionalInt32, int32(2)), 570*1c12ee1eSDan Willemsen ), 571*1c12ee1eSDan Willemsen }, 572*1c12ee1eSDan Willemsen 573*1c12ee1eSDan Willemsen // Unknown fields. 574*1c12ee1eSDan Willemsen { 575*1c12ee1eSDan Willemsen x: build(&testpb.TestAllTypes{}, unknown(protopack.Message{ 576*1c12ee1eSDan Willemsen protopack.Tag{100000, protopack.VarintType}, protopack.Varint(1), 577*1c12ee1eSDan Willemsen }.Marshal())), 578*1c12ee1eSDan Willemsen y: build(&testpb.TestAllTypes{}, unknown(protopack.Message{ 579*1c12ee1eSDan Willemsen protopack.Tag{100000, protopack.VarintType}, protopack.Varint(2), 580*1c12ee1eSDan Willemsen }.Marshal())), 581*1c12ee1eSDan Willemsen }, { 582*1c12ee1eSDan Willemsen x: build(&testpb.TestAllTypes{}, unknown(protopack.Message{ 583*1c12ee1eSDan Willemsen protopack.Tag{100000, protopack.VarintType}, protopack.Varint(1), 584*1c12ee1eSDan Willemsen }.Marshal())), 585*1c12ee1eSDan Willemsen y: &testpb.TestAllTypes{}, 586*1c12ee1eSDan Willemsen }, 587*1c12ee1eSDan Willemsen } 588*1c12ee1eSDan Willemsen 589*1c12ee1eSDan Willemsen for _, tt := range tests { 590*1c12ee1eSDan Willemsen if !tt.eq && !proto.Equal(tt.x, tt.x) { 591*1c12ee1eSDan Willemsen t.Errorf("Equal(x, x) = false, want true\n==== x ====\n%v", prototext.Format(tt.x)) 592*1c12ee1eSDan Willemsen } 593*1c12ee1eSDan Willemsen if !tt.eq && !proto.Equal(tt.y, tt.y) { 594*1c12ee1eSDan Willemsen t.Errorf("Equal(y, y) = false, want true\n==== y ====\n%v", prototext.Format(tt.y)) 595*1c12ee1eSDan Willemsen } 596*1c12ee1eSDan Willemsen if eq := proto.Equal(tt.x, tt.y); eq != tt.eq { 597*1c12ee1eSDan Willemsen t.Errorf("Equal(x, y) = %v, want %v\n==== x ====\n%v==== y ====\n%v", eq, tt.eq, prototext.Format(tt.x), prototext.Format(tt.y)) 598*1c12ee1eSDan Willemsen } 599*1c12ee1eSDan Willemsen } 600*1c12ee1eSDan Willemsen} 601*1c12ee1eSDan Willemsen 602*1c12ee1eSDan Willemsenfunc BenchmarkEqualWithSmallEmpty(b *testing.B) { 603*1c12ee1eSDan Willemsen x := &testpb.ForeignMessage{} 604*1c12ee1eSDan Willemsen y := &testpb.ForeignMessage{} 605*1c12ee1eSDan Willemsen 606*1c12ee1eSDan Willemsen b.ResetTimer() 607*1c12ee1eSDan Willemsen for i := 0; i < b.N; i++ { 608*1c12ee1eSDan Willemsen proto.Equal(x, y) 609*1c12ee1eSDan Willemsen } 610*1c12ee1eSDan Willemsen} 611*1c12ee1eSDan Willemsen 612*1c12ee1eSDan Willemsenfunc BenchmarkEqualWithIdenticalPtrEmpty(b *testing.B) { 613*1c12ee1eSDan Willemsen x := &testpb.ForeignMessage{} 614*1c12ee1eSDan Willemsen 615*1c12ee1eSDan Willemsen b.ResetTimer() 616*1c12ee1eSDan Willemsen for i := 0; i < b.N; i++ { 617*1c12ee1eSDan Willemsen proto.Equal(x, x) 618*1c12ee1eSDan Willemsen } 619*1c12ee1eSDan Willemsen} 620*1c12ee1eSDan Willemsen 621*1c12ee1eSDan Willemsenfunc BenchmarkEqualWithLargeEmpty(b *testing.B) { 622*1c12ee1eSDan Willemsen x := &testpb.TestAllTypes{} 623*1c12ee1eSDan Willemsen y := &testpb.TestAllTypes{} 624*1c12ee1eSDan Willemsen 625*1c12ee1eSDan Willemsen b.ResetTimer() 626*1c12ee1eSDan Willemsen for i := 0; i < b.N; i++ { 627*1c12ee1eSDan Willemsen proto.Equal(x, y) 628*1c12ee1eSDan Willemsen } 629*1c12ee1eSDan Willemsen} 630*1c12ee1eSDan Willemsen 631*1c12ee1eSDan Willemsenfunc makeNested(depth int) *testpb.TestAllTypes { 632*1c12ee1eSDan Willemsen if depth <= 0 { 633*1c12ee1eSDan Willemsen return nil 634*1c12ee1eSDan Willemsen } 635*1c12ee1eSDan Willemsen return &testpb.TestAllTypes{ 636*1c12ee1eSDan Willemsen OptionalNestedMessage: &testpb.TestAllTypes_NestedMessage{ 637*1c12ee1eSDan Willemsen Corecursive: makeNested(depth - 1), 638*1c12ee1eSDan Willemsen }, 639*1c12ee1eSDan Willemsen } 640*1c12ee1eSDan Willemsen} 641*1c12ee1eSDan Willemsen 642*1c12ee1eSDan Willemsenfunc BenchmarkEqualWithDeeplyNestedEqual(b *testing.B) { 643*1c12ee1eSDan Willemsen x := makeNested(20) 644*1c12ee1eSDan Willemsen y := makeNested(20) 645*1c12ee1eSDan Willemsen 646*1c12ee1eSDan Willemsen b.ResetTimer() 647*1c12ee1eSDan Willemsen for i := 0; i < b.N; i++ { 648*1c12ee1eSDan Willemsen proto.Equal(x, y) 649*1c12ee1eSDan Willemsen } 650*1c12ee1eSDan Willemsen} 651*1c12ee1eSDan Willemsen 652*1c12ee1eSDan Willemsenfunc BenchmarkEqualWithDeeplyNestedDifferent(b *testing.B) { 653*1c12ee1eSDan Willemsen x := makeNested(20) 654*1c12ee1eSDan Willemsen y := makeNested(21) 655*1c12ee1eSDan Willemsen 656*1c12ee1eSDan Willemsen b.ResetTimer() 657*1c12ee1eSDan Willemsen for i := 0; i < b.N; i++ { 658*1c12ee1eSDan Willemsen proto.Equal(x, y) 659*1c12ee1eSDan Willemsen } 660*1c12ee1eSDan Willemsen} 661*1c12ee1eSDan Willemsen 662*1c12ee1eSDan Willemsenfunc BenchmarkEqualWithDeeplyNestedIdenticalPtr(b *testing.B) { 663*1c12ee1eSDan Willemsen x := makeNested(20) 664*1c12ee1eSDan Willemsen 665*1c12ee1eSDan Willemsen b.ResetTimer() 666*1c12ee1eSDan Willemsen for i := 0; i < b.N; i++ { 667*1c12ee1eSDan Willemsen proto.Equal(x, x) 668*1c12ee1eSDan Willemsen } 669*1c12ee1eSDan Willemsen} 670