]> Cypherpunks.ru repositories - gostls13.git/blob - test/method.go
gc: fix reflect table method receiver
[gostls13.git] / test / method.go
1 // $G $D/$F.go && $L $F.$A && ./$A.out
2
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.
6
7 package main
8
9 type S string
10 type S1 string
11 type I int
12 type I1 int
13 type T struct {
14         x int
15 }
16 type T1 T
17
18 func (s S) val() int   { return 1 }
19 func (s *S1) val() int { return 2 }
20 func (i I) val() int   { return 3 }
21 func (i *I1) val() int { return 4 }
22 func (t T) val() int   { return 7 }
23 func (t *T1) val() int { return 8 }
24
25 type Val interface {
26         val() int
27 }
28
29 func val(v Val) int { return v.val() }
30
31 func main() {
32         var s S
33         var ps *S1
34         var i I
35         var pi *I1
36         var pt *T1
37         var t T
38         var v Val
39
40         if s.val() != 1 {
41                 println("s.val:", s.val())
42                 panic("fail")
43         }
44         if S.val(s) != 1 {
45                 println("S.val(s):", S.val(s))
46                 panic("fail")
47         }
48         if (*S).val(&s) != 1 {
49                 println("(*S).val(s):", (*S).val(&s))
50                 panic("fail")
51         }
52         if ps.val() != 2 {
53                 println("ps.val:", ps.val())
54                 panic("fail")
55         }
56         if (*S1).val(ps) != 2 {
57                 println("(*S1).val(ps):", (*S1).val(ps))
58                 panic("fail")
59         }
60         if i.val() != 3 {
61                 println("i.val:", i.val())
62                 panic("fail")
63         }
64         if I.val(i) != 3 {
65                 println("I.val(i):", I.val(i))
66                 panic("fail")
67         }
68         if (*I).val(&i) != 3 {
69                 println("(*I).val(&i):", (*I).val(&i))
70                 panic("fail")
71         }
72         if pi.val() != 4 {
73                 println("pi.val:", pi.val())
74                 panic("fail")
75         }
76         if (*I1).val(pi) != 4 {
77                 println("(*I1).val(pi):", (*I1).val(pi))
78                 panic("fail")
79         }
80         if t.val() != 7 {
81                 println("t.val:", t.val())
82                 panic("fail")
83         }
84         if pt.val() != 8 {
85                 println("pt.val:", pt.val())
86                 panic("fail")
87         }
88         if (*T1).val(pt) != 8 {
89                 println("(*T1).val(pt):", (*T1).val(pt))
90                 panic("fail")
91         }
92
93         if val(s) != 1 {
94                 println("s.val:", val(s))
95                 panic("fail")
96         }
97         if val(ps) != 2 {
98                 println("ps.val:", val(ps))
99                 panic("fail")
100         }
101         if val(i) != 3 {
102                 println("i.val:", val(i))
103                 panic("fail")
104         }
105         if val(pi) != 4 {
106                 println("pi.val:", val(pi))
107                 panic("fail")
108         }
109         if val(t) != 7 {
110                 println("t.val:", val(t))
111                 panic("fail")
112         }
113         if val(pt) != 8 {
114                 println("pt.val:", val(pt))
115                 panic("fail")
116         }
117
118         if Val.val(i) != 3 {
119                 println("Val.val(i):", Val.val(i))
120                 panic("fail")
121         }
122         v = i
123         if Val.val(v) != 3 {
124                 println("Val.val(v):", Val.val(v))
125                 panic("fail")
126         }
127         pv := &v
128         if pv.val() != 3 {
129                 println("pv.val():", pv.val())
130                 panic("fail")
131         }
132 }