Merge from mainline (167278:168000).
[official-gcc/graphite-test-results.git] / gcc / testsuite / go.test / test / ken / embed.go
blob9805e479bb92c4e415838a34180a6c5d3b624365
1 // $G $D/$F.go && $L $F.$A && ./$A.out
3 // Copyright 2009 The Go Authors. All rights reserved.
4 // Use of this source code is governed by a BSD-style
5 // license that can be found in the LICENSE file.
7 package main
10 type I interface {
11 test1() int
12 test2() int
13 test3() int
14 test4() int
15 test5() int
16 test6() int
17 test7() int
20 /******
21 ******
22 ******/
24 type SubpSubp struct {
25 a7 int
26 a int
29 func (p *SubpSubp) test7() int {
30 if p.a != p.a7 {
31 println("SubpSubp", p, p.a7)
32 panic("fail")
34 return p.a
36 func (p *SubpSubp) testx() { println("SubpSubp", p, p.a7) }
38 /******
39 ******
40 ******/
42 type SubpSub struct {
43 a6 int
44 SubpSubp
45 a int
48 func (p *SubpSub) test6() int {
49 if p.a != p.a6 {
50 println("SubpSub", p, p.a6)
51 panic("fail")
53 return p.a
55 func (p *SubpSub) testx() { println("SubpSub", p, p.a6) }
57 /******
58 ******
59 ******/
61 type SubSubp struct {
62 a5 int
63 a int
66 func (p *SubSubp) test5() int {
67 if p.a != p.a5 {
68 println("SubpSub", p, p.a5)
69 panic("fail")
71 return p.a
74 /******
75 ******
76 ******/
78 type SubSub struct {
79 a4 int
80 a int
83 func (p *SubSub) test4() int {
84 if p.a != p.a4 {
85 println("SubpSub", p, p.a4)
86 panic("fail")
88 return p.a
91 /******
92 ******
93 ******/
95 type Subp struct {
96 a3 int
97 *SubpSubp
98 SubpSub
99 a int
102 func (p *Subp) test3() int {
103 if p.a != p.a3 {
104 println("SubpSub", p, p.a3)
105 panic("fail")
107 return p.a
110 /******
111 ******
112 ******/
114 type Sub struct {
115 a2 int
116 *SubSubp
117 SubSub
118 a int
121 func (p *Sub) test2() int {
122 if p.a != p.a2 {
123 println("SubpSub", p, p.a2)
124 panic("fail")
126 return p.a
129 /******
130 ******
131 ******/
133 type S struct {
134 a1 int
136 *Subp
137 a int
140 func (p *S) test1() int {
141 if p.a != p.a1 {
142 println("SubpSub", p, p.a1)
143 panic("fail")
145 return p.a
148 /******
149 ******
150 ******/
152 func main() {
153 var i I
154 var s *S
156 // allocate
157 s = new(S)
158 s.Subp = new(Subp)
159 s.Sub.SubSubp = new(SubSubp)
160 s.Subp.SubpSubp = new(SubpSubp)
162 // explicit assignment
163 s.a = 1
164 s.Sub.a = 2
165 s.Subp.a = 3
166 s.Sub.SubSub.a = 4
167 s.Sub.SubSubp.a = 5
168 s.Subp.SubpSub.a = 6
169 s.Subp.SubpSubp.a = 7
171 // embedded (unique) assignment
172 s.a1 = 1
173 s.a2 = 2
174 s.a3 = 3
175 s.a4 = 4
176 s.a5 = 5
177 s.a6 = 6
178 s.a7 = 7
180 // unique calls with explicit &
181 if s.test1() != 1 {
182 println("t1", 1)
183 panic("fail")
185 if (&s.Sub).test2() != 2 {
186 println("t1", 2)
187 panic("fail")
189 if s.Subp.test3() != 3 {
190 println("t1", 3)
191 panic("fail")
193 if (&s.Sub.SubSub).test4() != 4 {
194 println("t1", 4)
195 panic("fail")
197 if s.Sub.SubSubp.test5() != 5 {
198 println("t1", 5)
199 panic("fail")
201 if (&s.Subp.SubpSub).test6() != 6 {
202 println("t1", 6)
203 panic("fail")
205 if s.Subp.SubpSubp.test7() != 7 {
206 println("t1", 7)
207 panic("fail")
210 // automatic &
211 if s.Sub.test2() != 2 {
212 println("t2", 2)
213 panic("fail")
215 if s.Sub.SubSub.test4() != 4 {
216 println("t2", 4)
217 panic("fail")
219 if s.Subp.SubpSub.test6() != 6 {
220 println("t2", 6)
221 panic("fail")
224 // embedded calls
225 if s.test1() != s.a1 {
226 println("t3", 1)
227 panic("fail")
229 if s.test2() != s.a2 {
230 println("t3", 2)
231 panic("fail")
233 if s.test3() != s.a3 {
234 println("t3", 3)
235 panic("fail")
237 if s.test4() != s.a4 {
238 println("t3", 4)
239 panic("fail")
241 if s.test5() != s.a5 {
242 println("t3", 5)
243 panic("fail")
245 if s.test6() != s.a6 {
246 println("t3", 6)
247 panic("fail")
249 if s.test7() != s.a7 {
250 println("t3", 7)
251 panic("fail")
254 // run it thru an interface
255 i = s
256 s = i.(*S)
258 // same as t3
259 if s.test1() != s.a1 {
260 println("t4", 1)
261 panic("fail")
263 if s.test2() != s.a2 {
264 println("t4", 2)
265 panic("fail")
267 if s.test3() != s.a3 {
268 println("t4", 3)
269 panic("fail")
271 if s.test4() != s.a4 {
272 println("t4", 4)
273 panic("fail")
275 if s.test5() != s.a5 {
276 println("t4", 5)
277 panic("fail")
279 if s.test6() != s.a6 {
280 println("t4", 6)
281 panic("fail")
283 if s.test7() != s.a7 {
284 println("t4", 7)
285 panic("fail")
288 // call interface
289 if i.test1() != s.test1() {
290 println("t5", 1)
291 panic("fail")
293 if i.test2() != s.test2() {
294 println("t5", 2)
295 panic("fail")
297 if i.test3() != s.test3() {
298 println("t5", 3)
299 panic("fail")
301 if i.test4() != s.test4() {
302 println("t5", 4)
303 panic("fail")
305 if i.test5() != s.test5() {
306 println("t5", 5)
307 panic("fail")
309 if i.test6() != s.test6() {
310 println("t5", 6)
311 panic("fail")
313 if i.test7() != s.test7() {
314 println("t5", 7)
315 panic("fail")