xref: /aosp_15_r20/external/go-cmp/cmp/internal/teststructs/structs.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 Smundaktype InterfaceA interface {
8*88d15eacSSasha Smundak	InterfaceA()
9*88d15eacSSasha Smundak}
10*88d15eacSSasha Smundak
11*88d15eacSSasha Smundaktype (
12*88d15eacSSasha Smundak	StructA struct{ X string } // Equal method on value receiver
13*88d15eacSSasha Smundak	StructB struct{ X string } // Equal method on pointer receiver
14*88d15eacSSasha Smundak	StructC struct{ X string } // Equal method (with interface argument) on value receiver
15*88d15eacSSasha Smundak	StructD struct{ X string } // Equal method (with interface argument) on pointer receiver
16*88d15eacSSasha Smundak	StructE struct{ X string } // Equal method (with interface argument on value receiver) on pointer receiver
17*88d15eacSSasha Smundak	StructF struct{ X string } // Equal method (with interface argument on pointer receiver) on value receiver
18*88d15eacSSasha Smundak
19*88d15eacSSasha Smundak	// These embed the above types as a value.
20*88d15eacSSasha Smundak	StructA1 struct {
21*88d15eacSSasha Smundak		StructA
22*88d15eacSSasha Smundak		X string
23*88d15eacSSasha Smundak	}
24*88d15eacSSasha Smundak	StructB1 struct {
25*88d15eacSSasha Smundak		StructB
26*88d15eacSSasha Smundak		X string
27*88d15eacSSasha Smundak	}
28*88d15eacSSasha Smundak	StructC1 struct {
29*88d15eacSSasha Smundak		StructC
30*88d15eacSSasha Smundak		X string
31*88d15eacSSasha Smundak	}
32*88d15eacSSasha Smundak	StructD1 struct {
33*88d15eacSSasha Smundak		StructD
34*88d15eacSSasha Smundak		X string
35*88d15eacSSasha Smundak	}
36*88d15eacSSasha Smundak	StructE1 struct {
37*88d15eacSSasha Smundak		StructE
38*88d15eacSSasha Smundak		X string
39*88d15eacSSasha Smundak	}
40*88d15eacSSasha Smundak	StructF1 struct {
41*88d15eacSSasha Smundak		StructF
42*88d15eacSSasha Smundak		X string
43*88d15eacSSasha Smundak	}
44*88d15eacSSasha Smundak
45*88d15eacSSasha Smundak	// These embed the above types as a pointer.
46*88d15eacSSasha Smundak	StructA2 struct {
47*88d15eacSSasha Smundak		*StructA
48*88d15eacSSasha Smundak		X string
49*88d15eacSSasha Smundak	}
50*88d15eacSSasha Smundak	StructB2 struct {
51*88d15eacSSasha Smundak		*StructB
52*88d15eacSSasha Smundak		X string
53*88d15eacSSasha Smundak	}
54*88d15eacSSasha Smundak	StructC2 struct {
55*88d15eacSSasha Smundak		*StructC
56*88d15eacSSasha Smundak		X string
57*88d15eacSSasha Smundak	}
58*88d15eacSSasha Smundak	StructD2 struct {
59*88d15eacSSasha Smundak		*StructD
60*88d15eacSSasha Smundak		X string
61*88d15eacSSasha Smundak	}
62*88d15eacSSasha Smundak	StructE2 struct {
63*88d15eacSSasha Smundak		*StructE
64*88d15eacSSasha Smundak		X string
65*88d15eacSSasha Smundak	}
66*88d15eacSSasha Smundak	StructF2 struct {
67*88d15eacSSasha Smundak		*StructF
68*88d15eacSSasha Smundak		X string
69*88d15eacSSasha Smundak	}
70*88d15eacSSasha Smundak
71*88d15eacSSasha Smundak	StructNo struct{ X string } // Equal method (with interface argument) on non-satisfying receiver
72*88d15eacSSasha Smundak
73*88d15eacSSasha Smundak	AssignA func() int
74*88d15eacSSasha Smundak	AssignB struct{ A int }
75*88d15eacSSasha Smundak	AssignC chan bool
76*88d15eacSSasha Smundak	AssignD <-chan bool
77*88d15eacSSasha Smundak)
78*88d15eacSSasha Smundak
79*88d15eacSSasha Smundakfunc (x StructA) Equal(y StructA) bool     { return true }
80*88d15eacSSasha Smundakfunc (x *StructB) Equal(y *StructB) bool   { return true }
81*88d15eacSSasha Smundakfunc (x StructC) Equal(y InterfaceA) bool  { return true }
82*88d15eacSSasha Smundakfunc (x StructC) InterfaceA()              {}
83*88d15eacSSasha Smundakfunc (x *StructD) Equal(y InterfaceA) bool { return true }
84*88d15eacSSasha Smundakfunc (x *StructD) InterfaceA()             {}
85*88d15eacSSasha Smundakfunc (x *StructE) Equal(y InterfaceA) bool { return true }
86*88d15eacSSasha Smundakfunc (x StructE) InterfaceA()              {}
87*88d15eacSSasha Smundakfunc (x StructF) Equal(y InterfaceA) bool  { return true }
88*88d15eacSSasha Smundakfunc (x *StructF) InterfaceA()             {}
89*88d15eacSSasha Smundakfunc (x StructNo) Equal(y InterfaceA) bool { return true }
90*88d15eacSSasha Smundak
91*88d15eacSSasha Smundakfunc (x AssignA) Equal(y func() int) bool      { return true }
92*88d15eacSSasha Smundakfunc (x AssignB) Equal(y struct{ A int }) bool { return true }
93*88d15eacSSasha Smundakfunc (x AssignC) Equal(y chan bool) bool       { return true }
94*88d15eacSSasha Smundakfunc (x AssignD) Equal(y <-chan bool) bool     { return true }
95*88d15eacSSasha Smundak
96*88d15eacSSasha Smundakvar _ = func(
97*88d15eacSSasha Smundak	a StructA, b StructB, c StructC, d StructD, e StructE, f StructF,
98*88d15eacSSasha Smundak	ap *StructA, bp *StructB, cp *StructC, dp *StructD, ep *StructE, fp *StructF,
99*88d15eacSSasha Smundak	a1 StructA1, b1 StructB1, c1 StructC1, d1 StructD1, e1 StructE1, f1 StructF1,
100*88d15eacSSasha Smundak	a2 StructA2, b2 StructB2, c2 StructC2, d2 StructD2, e2 StructE2, f2 StructF1,
101*88d15eacSSasha Smundak) {
102*88d15eacSSasha Smundak	a.Equal(a)
103*88d15eacSSasha Smundak	b.Equal(&b)
104*88d15eacSSasha Smundak	c.Equal(c)
105*88d15eacSSasha Smundak	d.Equal(&d)
106*88d15eacSSasha Smundak	e.Equal(e)
107*88d15eacSSasha Smundak	f.Equal(&f)
108*88d15eacSSasha Smundak
109*88d15eacSSasha Smundak	ap.Equal(*ap)
110*88d15eacSSasha Smundak	bp.Equal(bp)
111*88d15eacSSasha Smundak	cp.Equal(*cp)
112*88d15eacSSasha Smundak	dp.Equal(dp)
113*88d15eacSSasha Smundak	ep.Equal(*ep)
114*88d15eacSSasha Smundak	fp.Equal(fp)
115*88d15eacSSasha Smundak
116*88d15eacSSasha Smundak	a1.Equal(a1.StructA)
117*88d15eacSSasha Smundak	b1.Equal(&b1.StructB)
118*88d15eacSSasha Smundak	c1.Equal(c1)
119*88d15eacSSasha Smundak	d1.Equal(&d1)
120*88d15eacSSasha Smundak	e1.Equal(e1)
121*88d15eacSSasha Smundak	f1.Equal(&f1)
122*88d15eacSSasha Smundak
123*88d15eacSSasha Smundak	a2.Equal(*a2.StructA)
124*88d15eacSSasha Smundak	b2.Equal(b2.StructB)
125*88d15eacSSasha Smundak	c2.Equal(c2)
126*88d15eacSSasha Smundak	d2.Equal(&d2)
127*88d15eacSSasha Smundak	e2.Equal(e2)
128*88d15eacSSasha Smundak	f2.Equal(&f2)
129*88d15eacSSasha Smundak}
130*88d15eacSSasha Smundak
131*88d15eacSSasha Smundaktype (
132*88d15eacSSasha Smundak	privateStruct struct{ Public, private int }
133*88d15eacSSasha Smundak	PublicStruct  struct{ Public, private int }
134*88d15eacSSasha Smundak	ParentStructA struct{ privateStruct }
135*88d15eacSSasha Smundak	ParentStructB struct{ PublicStruct }
136*88d15eacSSasha Smundak	ParentStructC struct {
137*88d15eacSSasha Smundak		privateStruct
138*88d15eacSSasha Smundak		Public, private int
139*88d15eacSSasha Smundak	}
140*88d15eacSSasha Smundak	ParentStructD struct {
141*88d15eacSSasha Smundak		PublicStruct
142*88d15eacSSasha Smundak		Public, private int
143*88d15eacSSasha Smundak	}
144*88d15eacSSasha Smundak	ParentStructE struct {
145*88d15eacSSasha Smundak		privateStruct
146*88d15eacSSasha Smundak		PublicStruct
147*88d15eacSSasha Smundak	}
148*88d15eacSSasha Smundak	ParentStructF struct {
149*88d15eacSSasha Smundak		privateStruct
150*88d15eacSSasha Smundak		PublicStruct
151*88d15eacSSasha Smundak		Public, private int
152*88d15eacSSasha Smundak	}
153*88d15eacSSasha Smundak	ParentStructG struct {
154*88d15eacSSasha Smundak		*privateStruct
155*88d15eacSSasha Smundak	}
156*88d15eacSSasha Smundak	ParentStructH struct {
157*88d15eacSSasha Smundak		*PublicStruct
158*88d15eacSSasha Smundak	}
159*88d15eacSSasha Smundak	ParentStructI struct {
160*88d15eacSSasha Smundak		*privateStruct
161*88d15eacSSasha Smundak		*PublicStruct
162*88d15eacSSasha Smundak	}
163*88d15eacSSasha Smundak	ParentStructJ struct {
164*88d15eacSSasha Smundak		*privateStruct
165*88d15eacSSasha Smundak		*PublicStruct
166*88d15eacSSasha Smundak		Public  PublicStruct
167*88d15eacSSasha Smundak		private privateStruct
168*88d15eacSSasha Smundak	}
169*88d15eacSSasha Smundak)
170*88d15eacSSasha Smundak
171*88d15eacSSasha Smundakfunc NewParentStructG() *ParentStructG {
172*88d15eacSSasha Smundak	return &ParentStructG{new(privateStruct)}
173*88d15eacSSasha Smundak}
174*88d15eacSSasha Smundakfunc NewParentStructH() *ParentStructH {
175*88d15eacSSasha Smundak	return &ParentStructH{new(PublicStruct)}
176*88d15eacSSasha Smundak}
177*88d15eacSSasha Smundakfunc NewParentStructI() *ParentStructI {
178*88d15eacSSasha Smundak	return &ParentStructI{new(privateStruct), new(PublicStruct)}
179*88d15eacSSasha Smundak}
180*88d15eacSSasha Smundakfunc NewParentStructJ() *ParentStructJ {
181*88d15eacSSasha Smundak	return &ParentStructJ{
182*88d15eacSSasha Smundak		privateStruct: new(privateStruct), PublicStruct: new(PublicStruct),
183*88d15eacSSasha Smundak	}
184*88d15eacSSasha Smundak}
185*88d15eacSSasha Smundakfunc (s *privateStruct) SetPrivate(i int)              { s.private = i }
186*88d15eacSSasha Smundakfunc (s *PublicStruct) SetPrivate(i int)               { s.private = i }
187*88d15eacSSasha Smundakfunc (s *ParentStructC) SetPrivate(i int)              { s.private = i }
188*88d15eacSSasha Smundakfunc (s *ParentStructD) SetPrivate(i int)              { s.private = i }
189*88d15eacSSasha Smundakfunc (s *ParentStructF) SetPrivate(i int)              { s.private = i }
190*88d15eacSSasha Smundakfunc (s *ParentStructA) PrivateStruct() *privateStruct { return &s.privateStruct }
191*88d15eacSSasha Smundakfunc (s *ParentStructC) PrivateStruct() *privateStruct { return &s.privateStruct }
192*88d15eacSSasha Smundakfunc (s *ParentStructE) PrivateStruct() *privateStruct { return &s.privateStruct }
193*88d15eacSSasha Smundakfunc (s *ParentStructF) PrivateStruct() *privateStruct { return &s.privateStruct }
194*88d15eacSSasha Smundakfunc (s *ParentStructG) PrivateStruct() *privateStruct { return s.privateStruct }
195*88d15eacSSasha Smundakfunc (s *ParentStructI) PrivateStruct() *privateStruct { return s.privateStruct }
196*88d15eacSSasha Smundakfunc (s *ParentStructJ) PrivateStruct() *privateStruct { return s.privateStruct }
197*88d15eacSSasha Smundakfunc (s *ParentStructJ) Private() *privateStruct       { return &s.private }
198