xref: /aosp_15_r20/external/go-cmp/cmp/internal/teststructs/project4.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 equalCartel(x, y Cartel) bool {
17*88d15eacSSasha Smundak	if !(equalHeadquarter(x.Headquarter, y.Headquarter) &&
18*88d15eacSSasha Smundak		x.Source() == y.Source() &&
19*88d15eacSSasha Smundak		x.CreationDate().Equal(y.CreationDate()) &&
20*88d15eacSSasha Smundak		x.Boss() == y.Boss() &&
21*88d15eacSSasha Smundak		x.LastCrimeDate().Equal(y.LastCrimeDate())) {
22*88d15eacSSasha Smundak		return false
23*88d15eacSSasha Smundak	}
24*88d15eacSSasha Smundak	if len(x.Poisons()) != len(y.Poisons()) {
25*88d15eacSSasha Smundak		return false
26*88d15eacSSasha Smundak	}
27*88d15eacSSasha Smundak	for i := range x.Poisons() {
28*88d15eacSSasha Smundak		if !equalPoison(*x.Poisons()[i], *y.Poisons()[i]) {
29*88d15eacSSasha Smundak			return false
30*88d15eacSSasha Smundak		}
31*88d15eacSSasha Smundak	}
32*88d15eacSSasha Smundak	return true
33*88d15eacSSasha Smundak}
34*88d15eacSSasha Smundakfunc equalHeadquarter(x, y Headquarter) bool {
35*88d15eacSSasha Smundak	xr, yr := x.Restrictions(), y.Restrictions()
36*88d15eacSSasha Smundak	return x.ID() == y.ID() &&
37*88d15eacSSasha Smundak		x.Location() == y.Location() &&
38*88d15eacSSasha Smundak		reflect.DeepEqual(x.SubDivisions(), y.SubDivisions()) &&
39*88d15eacSSasha Smundak		x.IncorporatedDate().Equal(y.IncorporatedDate()) &&
40*88d15eacSSasha Smundak		pb.Equal(x.MetaData(), y.MetaData()) &&
41*88d15eacSSasha Smundak		bytes.Equal(x.PrivateMessage(), y.PrivateMessage()) &&
42*88d15eacSSasha Smundak		bytes.Equal(x.PublicMessage(), y.PublicMessage()) &&
43*88d15eacSSasha Smundak		x.HorseBack() == y.HorseBack() &&
44*88d15eacSSasha Smundak		x.Rattle() == y.Rattle() &&
45*88d15eacSSasha Smundak		x.Convulsion() == y.Convulsion() &&
46*88d15eacSSasha Smundak		x.Expansion() == y.Expansion() &&
47*88d15eacSSasha Smundak		x.Status() == y.Status() &&
48*88d15eacSSasha Smundak		pb.Equal(&xr, &yr) &&
49*88d15eacSSasha Smundak		x.CreationTime().Equal(y.CreationTime())
50*88d15eacSSasha Smundak}
51*88d15eacSSasha Smundakfunc equalPoison(x, y Poison) bool {
52*88d15eacSSasha Smundak	return x.PoisonType() == y.PoisonType() &&
53*88d15eacSSasha Smundak		x.Expiration().Equal(y.Expiration()) &&
54*88d15eacSSasha Smundak		x.Manufacturer() == y.Manufacturer() &&
55*88d15eacSSasha Smundak		x.Potency() == y.Potency()
56*88d15eacSSasha Smundak}
57*88d15eacSSasha Smundak*/
58*88d15eacSSasha Smundak
59*88d15eacSSasha Smundaktype Cartel struct {
60*88d15eacSSasha Smundak	Headquarter
61*88d15eacSSasha Smundak	source        string
62*88d15eacSSasha Smundak	creationDate  time.Time
63*88d15eacSSasha Smundak	boss          string
64*88d15eacSSasha Smundak	lastCrimeDate time.Time
65*88d15eacSSasha Smundak	poisons       []*Poison
66*88d15eacSSasha Smundak}
67*88d15eacSSasha Smundak
68*88d15eacSSasha Smundakfunc (p Cartel) Source() string           { return p.source }
69*88d15eacSSasha Smundakfunc (p Cartel) CreationDate() time.Time  { return p.creationDate }
70*88d15eacSSasha Smundakfunc (p Cartel) Boss() string             { return p.boss }
71*88d15eacSSasha Smundakfunc (p Cartel) LastCrimeDate() time.Time { return p.lastCrimeDate }
72*88d15eacSSasha Smundakfunc (p Cartel) Poisons() []*Poison       { return p.poisons }
73*88d15eacSSasha Smundak
74*88d15eacSSasha Smundakfunc (p *Cartel) SetSource(x string)           { p.source = x }
75*88d15eacSSasha Smundakfunc (p *Cartel) SetCreationDate(x time.Time)  { p.creationDate = x }
76*88d15eacSSasha Smundakfunc (p *Cartel) SetBoss(x string)             { p.boss = x }
77*88d15eacSSasha Smundakfunc (p *Cartel) SetLastCrimeDate(x time.Time) { p.lastCrimeDate = x }
78*88d15eacSSasha Smundakfunc (p *Cartel) SetPoisons(x []*Poison)       { p.poisons = x }
79*88d15eacSSasha Smundak
80*88d15eacSSasha Smundaktype Headquarter struct {
81*88d15eacSSasha Smundak	id               uint64
82*88d15eacSSasha Smundak	location         string
83*88d15eacSSasha Smundak	subDivisions     []string
84*88d15eacSSasha Smundak	incorporatedDate time.Time
85*88d15eacSSasha Smundak	metaData         *pb.MetaData
86*88d15eacSSasha Smundak	privateMessage   []byte
87*88d15eacSSasha Smundak	publicMessage    []byte
88*88d15eacSSasha Smundak	horseBack        string
89*88d15eacSSasha Smundak	rattle           string
90*88d15eacSSasha Smundak	convulsion       bool
91*88d15eacSSasha Smundak	expansion        uint64
92*88d15eacSSasha Smundak	status           pb.HoneyStatus
93*88d15eacSSasha Smundak	restrictions     pb.Restrictions
94*88d15eacSSasha Smundak	creationTime     time.Time
95*88d15eacSSasha Smundak}
96*88d15eacSSasha Smundak
97*88d15eacSSasha Smundakfunc (hq Headquarter) ID() uint64                    { return hq.id }
98*88d15eacSSasha Smundakfunc (hq Headquarter) Location() string              { return hq.location }
99*88d15eacSSasha Smundakfunc (hq Headquarter) SubDivisions() []string        { return hq.subDivisions }
100*88d15eacSSasha Smundakfunc (hq Headquarter) IncorporatedDate() time.Time   { return hq.incorporatedDate }
101*88d15eacSSasha Smundakfunc (hq Headquarter) MetaData() *pb.MetaData        { return hq.metaData }
102*88d15eacSSasha Smundakfunc (hq Headquarter) PrivateMessage() []byte        { return hq.privateMessage }
103*88d15eacSSasha Smundakfunc (hq Headquarter) PublicMessage() []byte         { return hq.publicMessage }
104*88d15eacSSasha Smundakfunc (hq Headquarter) HorseBack() string             { return hq.horseBack }
105*88d15eacSSasha Smundakfunc (hq Headquarter) Rattle() string                { return hq.rattle }
106*88d15eacSSasha Smundakfunc (hq Headquarter) Convulsion() bool              { return hq.convulsion }
107*88d15eacSSasha Smundakfunc (hq Headquarter) Expansion() uint64             { return hq.expansion }
108*88d15eacSSasha Smundakfunc (hq Headquarter) Status() pb.HoneyStatus        { return hq.status }
109*88d15eacSSasha Smundakfunc (hq Headquarter) Restrictions() pb.Restrictions { return hq.restrictions }
110*88d15eacSSasha Smundakfunc (hq Headquarter) CreationTime() time.Time       { return hq.creationTime }
111*88d15eacSSasha Smundak
112*88d15eacSSasha Smundakfunc (hq *Headquarter) SetID(x uint64)                    { hq.id = x }
113*88d15eacSSasha Smundakfunc (hq *Headquarter) SetLocation(x string)              { hq.location = x }
114*88d15eacSSasha Smundakfunc (hq *Headquarter) SetSubDivisions(x []string)        { hq.subDivisions = x }
115*88d15eacSSasha Smundakfunc (hq *Headquarter) SetIncorporatedDate(x time.Time)   { hq.incorporatedDate = x }
116*88d15eacSSasha Smundakfunc (hq *Headquarter) SetMetaData(x *pb.MetaData)        { hq.metaData = x }
117*88d15eacSSasha Smundakfunc (hq *Headquarter) SetPrivateMessage(x []byte)        { hq.privateMessage = x }
118*88d15eacSSasha Smundakfunc (hq *Headquarter) SetPublicMessage(x []byte)         { hq.publicMessage = x }
119*88d15eacSSasha Smundakfunc (hq *Headquarter) SetHorseBack(x string)             { hq.horseBack = x }
120*88d15eacSSasha Smundakfunc (hq *Headquarter) SetRattle(x string)                { hq.rattle = x }
121*88d15eacSSasha Smundakfunc (hq *Headquarter) SetConvulsion(x bool)              { hq.convulsion = x }
122*88d15eacSSasha Smundakfunc (hq *Headquarter) SetExpansion(x uint64)             { hq.expansion = x }
123*88d15eacSSasha Smundakfunc (hq *Headquarter) SetStatus(x pb.HoneyStatus)        { hq.status = x }
124*88d15eacSSasha Smundakfunc (hq *Headquarter) SetRestrictions(x pb.Restrictions) { hq.restrictions = x }
125*88d15eacSSasha Smundakfunc (hq *Headquarter) SetCreationTime(x time.Time)       { hq.creationTime = x }
126*88d15eacSSasha Smundak
127*88d15eacSSasha Smundaktype Poison struct {
128*88d15eacSSasha Smundak	poisonType   pb.PoisonType
129*88d15eacSSasha Smundak	expiration   time.Time
130*88d15eacSSasha Smundak	manufacturer string
131*88d15eacSSasha Smundak	potency      int
132*88d15eacSSasha Smundak}
133*88d15eacSSasha Smundak
134*88d15eacSSasha Smundakfunc (p Poison) PoisonType() pb.PoisonType { return p.poisonType }
135*88d15eacSSasha Smundakfunc (p Poison) Expiration() time.Time     { return p.expiration }
136*88d15eacSSasha Smundakfunc (p Poison) Manufacturer() string      { return p.manufacturer }
137*88d15eacSSasha Smundakfunc (p Poison) Potency() int              { return p.potency }
138*88d15eacSSasha Smundak
139*88d15eacSSasha Smundakfunc (p *Poison) SetPoisonType(x pb.PoisonType) { p.poisonType = x }
140*88d15eacSSasha Smundakfunc (p *Poison) SetExpiration(x time.Time)     { p.expiration = x }
141*88d15eacSSasha Smundakfunc (p *Poison) SetManufacturer(x string)      { p.manufacturer = x }
142*88d15eacSSasha Smundakfunc (p *Poison) SetPotency(x int)              { p.potency = x }
143