Giant blob of minor changes
[dotfiles/.git] / .config / coc / extensions / coc-go-data / tools / pkg / mod / golang.org / x / tools@v0.0.0-20201105173854-bc9fc8d8c4bc / go / ssa / interp / testdata / ifaceprom.go
1 package main
2
3 // Test of promotion of methods of an interface embedded within a
4 // struct.  In particular, this test exercises that the correct
5 // method is called.
6
7 type I interface {
8         one() int
9         two() string
10 }
11
12 type S struct {
13         I
14 }
15
16 type impl struct{}
17
18 func (impl) one() int {
19         return 1
20 }
21
22 func (impl) two() string {
23         return "two"
24 }
25
26 func main() {
27         var s S
28         s.I = impl{}
29         if one := s.I.one(); one != 1 {
30                 panic(one)
31         }
32         if one := s.one(); one != 1 {
33                 panic(one)
34         }
35         closOne := s.I.one
36         if one := closOne(); one != 1 {
37                 panic(one)
38         }
39         closOne = s.one
40         if one := closOne(); one != 1 {
41                 panic(one)
42         }
43
44         if two := s.I.two(); two != "two" {
45                 panic(two)
46         }
47         if two := s.two(); two != "two" {
48                 panic(two)
49         }
50         closTwo := s.I.two
51         if two := closTwo(); two != "two" {
52                 panic(two)
53         }
54         closTwo = s.two
55         if two := closTwo(); two != "two" {
56                 panic(two)
57         }
58 }