xref: /aosp_15_r20/external/go-cmp/cmp/internal/teststructs/project2.go (revision 88d15eac089d7f20c739ff1001d56b91872b21a1)
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