1
2
3
4
5 package test
6
7 import "testing"
8
9
10
11
12 var x int
13
14 func TestEfaceConv1(t *testing.T) {
15 a := 5
16 i := interface{}(a)
17 a += 2
18 if got := i.(int); got != 5 {
19 t.Errorf("wanted 5, got %d\n", got)
20 }
21 }
22
23 func TestEfaceConv2(t *testing.T) {
24 a := 5
25 sink = &a
26 i := interface{}(a)
27 a += 2
28 if got := i.(int); got != 5 {
29 t.Errorf("wanted 5, got %d\n", got)
30 }
31 }
32
33 func TestEfaceConv3(t *testing.T) {
34 x = 5
35 if got := e2int3(x); got != 5 {
36 t.Errorf("wanted 5, got %d\n", got)
37 }
38 }
39
40
41 func e2int3(i interface{}) int {
42 x = 7
43 return i.(int)
44 }
45
46 func TestEfaceConv4(t *testing.T) {
47 a := 5
48 if got := e2int4(a, &a); got != 5 {
49 t.Errorf("wanted 5, got %d\n", got)
50 }
51 }
52
53
54 func e2int4(i interface{}, p *int) int {
55 *p = 7
56 return i.(int)
57 }
58
59 type Int int
60
61 var y Int
62
63 type I interface {
64 foo()
65 }
66
67 func (i Int) foo() {
68 }
69
70 func TestIfaceConv1(t *testing.T) {
71 a := Int(5)
72 i := interface{}(a)
73 a += 2
74 if got := i.(Int); got != 5 {
75 t.Errorf("wanted 5, got %d\n", int(got))
76 }
77 }
78
79 func TestIfaceConv2(t *testing.T) {
80 a := Int(5)
81 sink = &a
82 i := interface{}(a)
83 a += 2
84 if got := i.(Int); got != 5 {
85 t.Errorf("wanted 5, got %d\n", int(got))
86 }
87 }
88
89 func TestIfaceConv3(t *testing.T) {
90 y = 5
91 if got := i2Int3(y); got != 5 {
92 t.Errorf("wanted 5, got %d\n", int(got))
93 }
94 }
95
96
97 func i2Int3(i I) Int {
98 y = 7
99 return i.(Int)
100 }
101
102 func TestIfaceConv4(t *testing.T) {
103 a := Int(5)
104 if got := i2Int4(a, &a); got != 5 {
105 t.Errorf("wanted 5, got %d\n", int(got))
106 }
107 }
108
109
110 func i2Int4(i I, p *Int) Int {
111 *p = 7
112 return i.(Int)
113 }
114
115 func BenchmarkEfaceInteger(b *testing.B) {
116 sum := 0
117 for i := 0; i < b.N; i++ {
118 sum += i2int(i)
119 }
120 sink = sum
121 }
122
123
124 func i2int(i interface{}) int {
125 return i.(int)
126 }
127
128 func BenchmarkTypeAssert(b *testing.B) {
129 e := any(Int(0))
130 r := true
131 for i := 0; i < b.N; i++ {
132 _, ok := e.(I)
133 if !ok {
134 r = false
135 }
136 }
137 sink = r
138 }
139
View as plain text