1*88d15eacSSasha Smundak// Copyright 2017, The Go Authors. All rights reserved. 2*88d15eacSSasha Smundak// Use of this source code is governed by a BSD-style 3*88d15eacSSasha Smundak// license that can be found in the LICENSE file. 4*88d15eacSSasha Smundak 5*88d15eacSSasha Smundakpackage teststructs 6*88d15eacSSasha Smundak 7*88d15eacSSasha Smundakimport ( 8*88d15eacSSasha Smundak "time" 9*88d15eacSSasha Smundak 10*88d15eacSSasha Smundak pb "github.com/google/go-cmp/cmp/internal/testprotos" 11*88d15eacSSasha Smundak) 12*88d15eacSSasha Smundak 13*88d15eacSSasha Smundak// This is an sanitized example of equality from a real use-case. 14*88d15eacSSasha Smundak// The original equality function was as follows: 15*88d15eacSSasha Smundak/* 16*88d15eacSSasha Smundakfunc equalBatch(b1, b2 *GermBatch) bool { 17*88d15eacSSasha Smundak for _, b := range []*GermBatch{b1, b2} { 18*88d15eacSSasha Smundak for _, l := range b.DirtyGerms { 19*88d15eacSSasha Smundak sort.Slice(l, func(i, j int) bool { return l[i].String() < l[j].String() }) 20*88d15eacSSasha Smundak } 21*88d15eacSSasha Smundak for _, l := range b.CleanGerms { 22*88d15eacSSasha Smundak sort.Slice(l, func(i, j int) bool { return l[i].String() < l[j].String() }) 23*88d15eacSSasha Smundak } 24*88d15eacSSasha Smundak } 25*88d15eacSSasha Smundak if !pb.DeepEqual(b1.DirtyGerms, b2.DirtyGerms) || 26*88d15eacSSasha Smundak !pb.DeepEqual(b1.CleanGerms, b2.CleanGerms) || 27*88d15eacSSasha Smundak !pb.DeepEqual(b1.GermMap, b2.GermMap) { 28*88d15eacSSasha Smundak return false 29*88d15eacSSasha Smundak } 30*88d15eacSSasha Smundak if len(b1.DishMap) != len(b2.DishMap) { 31*88d15eacSSasha Smundak return false 32*88d15eacSSasha Smundak } 33*88d15eacSSasha Smundak for id := range b1.DishMap { 34*88d15eacSSasha Smundak kpb1, err1 := b1.DishMap[id].Proto() 35*88d15eacSSasha Smundak kpb2, err2 := b2.DishMap[id].Proto() 36*88d15eacSSasha Smundak if !pb.Equal(kpb1, kpb2) || !reflect.DeepEqual(err1, err2) { 37*88d15eacSSasha Smundak return false 38*88d15eacSSasha Smundak } 39*88d15eacSSasha Smundak } 40*88d15eacSSasha Smundak return b1.HasPreviousResult == b2.HasPreviousResult && 41*88d15eacSSasha Smundak b1.DirtyID == b2.DirtyID && 42*88d15eacSSasha Smundak b1.CleanID == b2.CleanID && 43*88d15eacSSasha Smundak b1.GermStrain == b2.GermStrain && 44*88d15eacSSasha Smundak b1.TotalDirtyGerms == b2.TotalDirtyGerms && 45*88d15eacSSasha Smundak b1.InfectedAt.Equal(b2.InfectedAt) 46*88d15eacSSasha Smundak} 47*88d15eacSSasha Smundak*/ 48*88d15eacSSasha Smundak 49*88d15eacSSasha Smundaktype GermBatch struct { 50*88d15eacSSasha Smundak DirtyGerms, CleanGerms map[int32][]*pb.Germ 51*88d15eacSSasha Smundak GermMap map[int32]*pb.Germ 52*88d15eacSSasha Smundak DishMap map[int32]*Dish 53*88d15eacSSasha Smundak HasPreviousResult bool 54*88d15eacSSasha Smundak DirtyID, CleanID int32 55*88d15eacSSasha Smundak GermStrain int32 56*88d15eacSSasha Smundak TotalDirtyGerms int 57*88d15eacSSasha Smundak InfectedAt time.Time 58*88d15eacSSasha Smundak} 59*88d15eacSSasha Smundak 60*88d15eacSSasha Smundaktype Dish struct { 61*88d15eacSSasha Smundak pb *pb.Dish 62*88d15eacSSasha Smundak err error 63*88d15eacSSasha Smundak} 64*88d15eacSSasha Smundak 65*88d15eacSSasha Smundakfunc CreateDish(m *pb.Dish, err error) *Dish { 66*88d15eacSSasha Smundak return &Dish{pb: m, err: err} 67*88d15eacSSasha Smundak} 68*88d15eacSSasha Smundak 69*88d15eacSSasha Smundakfunc (d *Dish) Proto() (*pb.Dish, error) { 70*88d15eacSSasha Smundak if d.err != nil { 71*88d15eacSSasha Smundak return nil, d.err 72*88d15eacSSasha Smundak } 73*88d15eacSSasha Smundak return d.pb, nil 74*88d15eacSSasha Smundak} 75