...
1 package main
2
3
4
5 type I0 interface {
6 }
7 type I1 interface {
8 f()
9 }
10 type I2 interface {
11 f()
12 g()
13 }
14
15 type C0 struct{}
16 type C1 struct{}
17
18 func (C1) f() {}
19
20 type C2 struct{}
21
22 func (C2) f() {}
23 func (C2) g() {}
24
25 func main() {
26 var i0 I0
27 var i1 I1
28 var i2 I2
29
30
31
32 if _, ok := i0.(I0); ok {
33 panic("nil i0.(I0) succeeded")
34 }
35 if _, ok := i1.(I1); ok {
36 panic("nil i1.(I1) succeeded")
37 }
38 if _, ok := i2.(I2); ok {
39 panic("nil i2.(I2) succeeded")
40 }
41
42
43 _ = I0(i0)
44
45 _ = I0(i1)
46 _ = I1(i1)
47
48 _ = I0(i2)
49 _ = I1(i2)
50 _ = I2(i2)
51
52
53 i1 = C1{}
54 if _, ok := i1.(I0); !ok {
55 panic("C1 i1.(I0) failed")
56 }
57 if _, ok := i1.(I1); !ok {
58 panic("C1 i1.(I1) failed")
59 }
60 if _, ok := i1.(I2); ok {
61 panic("C1 i1.(I2) succeeded")
62 }
63
64 i1 = C2{}
65 if _, ok := i1.(I0); !ok {
66 panic("C2 i1.(I0) failed")
67 }
68 if _, ok := i1.(I1); !ok {
69 panic("C2 i1.(I1) failed")
70 }
71 if _, ok := i1.(I2); !ok {
72 panic("C2 i1.(I2) failed")
73 }
74
75
76 i1 = C1{}
77 if I0(i1) == nil {
78 panic("C1 I0(i1) was nil")
79 }
80 if I1(i1) == nil {
81 panic("C1 I1(i1) was nil")
82 }
83 }
84
View as plain text