// Copyright 2017, 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.md file. package teststructs import ( "time" pb "github.com/google/go-cmp/cmp/internal/testprotos" ) // This is an sanitized example of equality from a real use-case. // The original equality function was as follows: /* func equalBatch(b1, b2 *GermBatch) bool { for _, b := range []*GermBatch{b1, b2} { for _, l := range b.DirtyGerms { sort.Slice(l, func(i, j int) bool { return l[i].String() < l[j].String() }) } for _, l := range b.CleanGerms { sort.Slice(l, func(i, j int) bool { return l[i].String() < l[j].String() }) } } if !pb.DeepEqual(b1.DirtyGerms, b2.DirtyGerms) || !pb.DeepEqual(b1.CleanGerms, b2.CleanGerms) || !pb.DeepEqual(b1.GermMap, b2.GermMap) { return false } if len(b1.DishMap) != len(b2.DishMap) { return false } for id := range b1.DishMap { kpb1, err1 := b1.DishMap[id].Proto() kpb2, err2 := b2.DishMap[id].Proto() if !pb.Equal(kpb1, kpb2) || !reflect.DeepEqual(err1, err2) { return false } } return b1.HasPreviousResult == b2.HasPreviousResult && b1.DirtyID == b2.DirtyID && b1.CleanID == b2.CleanID && b1.GermStrain == b2.GermStrain && b1.TotalDirtyGerms == b2.TotalDirtyGerms && b1.InfectedAt.Equal(b2.InfectedAt) } */ type GermBatch struct { DirtyGerms, CleanGerms map[int32][]*pb.Germ GermMap map[int32]*pb.Germ DishMap map[int32]*Dish HasPreviousResult bool DirtyID, CleanID int32 GermStrain int32 TotalDirtyGerms int InfectedAt time.Time } type Dish struct { pb *pb.Dish err error } func CreateDish(m *pb.Dish, err error) *Dish { return &Dish{pb: m, err: err} } func (d *Dish) Proto() (*pb.Dish, error) { if d.err != nil { return nil, d.err } return d.pb, nil }