Source file
test/convT2X.go
1
2
3
4
5
6
7
8
9 package main
10
11 type J interface {
12 Method()
13 }
14
15 type (
16 U16 uint16
17 U32 uint32
18 U64 uint64
19 U128 [2]uint64
20 F32 float32
21 F64 float64
22 C128 complex128
23 S string
24 B []byte
25 M map[int]int
26 C chan int
27 Z struct{}
28 )
29
30 func (U16) Method() {}
31 func (U32) Method() {}
32 func (U64) Method() {}
33 func (U128) Method() {}
34 func (F32) Method() {}
35 func (F64) Method() {}
36 func (C128) Method() {}
37 func (S) Method() {}
38 func (B) Method() {}
39 func (M) Method() {}
40 func (C) Method() {}
41 func (Z) Method() {}
42
43 var (
44 u16 = U16(1)
45 u32 = U32(2)
46 u64 = U64(3)
47 u128 = U128{4, 5}
48 f32 = F32(6)
49 f64 = F64(7)
50 c128 = C128(8 + 9i)
51 s = S("10")
52 b = B("11")
53 m = M{12: 13}
54 c = make(C, 14)
55 z = Z{}
56 p = &z
57 pp = &p
58 )
59
60 var (
61 iu16 interface{} = u16
62 iu32 interface{} = u32
63 iu64 interface{} = u64
64 iu128 interface{} = u128
65 if32 interface{} = f32
66 if64 interface{} = f64
67 ic128 interface{} = c128
68 is interface{} = s
69 ib interface{} = b
70 im interface{} = m
71 ic interface{} = c
72 iz interface{} = z
73 ip interface{} = p
74 ipp interface{} = pp
75
76 ju16 J = u16
77 ju32 J = u32
78 ju64 J = u64
79 ju128 J = u128
80 jf32 J = f32
81 jf64 J = f64
82 jc128 J = c128
83 js J = s
84 jb J = b
85 jm J = m
86 jc J = c
87 jz J = z
88 jp J = p
89
90 )
91
92 func second(a ...interface{}) interface{} {
93 return a[1]
94 }
95
96 func main() {
97
98 if u16 != iu16 {
99 panic("u16 != iu16")
100 }
101 if u16 != ju16 {
102 panic("u16 != ju16")
103 }
104 if u32 != iu32 {
105 panic("u32 != iu32")
106 }
107 if u32 != ju32 {
108 panic("u32 != ju32")
109 }
110 if u64 != iu64 {
111 panic("u64 != iu64")
112 }
113 if u64 != ju64 {
114 panic("u64 != ju64")
115 }
116 if u128 != iu128 {
117 panic("u128 != iu128")
118 }
119 if u128 != ju128 {
120 panic("u128 != ju128")
121 }
122 if f32 != if32 {
123 panic("f32 != if32")
124 }
125 if f32 != jf32 {
126 panic("f32 != jf32")
127 }
128 if f64 != if64 {
129 panic("f64 != if64")
130 }
131 if f64 != jf64 {
132 panic("f64 != jf64")
133 }
134 if c128 != ic128 {
135 panic("c128 != ic128")
136 }
137 if c128 != jc128 {
138 panic("c128 != jc128")
139 }
140 if s != is {
141 panic("s != is")
142 }
143 if s != js {
144 panic("s != js")
145 }
146 if c != ic {
147 panic("c != ic")
148 }
149 if c != jc {
150 panic("c != jc")
151 }
152
153 if z != iz {
154 panic("z != iz")
155 }
156 if z != jz {
157 panic("z != jz")
158 }
159 if p != ip {
160 panic("p != ip")
161 }
162 if p != jp {
163 panic("p != jp")
164 }
165 if pp != ipp {
166 panic("pp != ipp")
167 }
168
169
170
171 if got := second(z, p, pp, u16, u32, u64, u128, f32, f64, c128, s, b, m, c); got != ip {
172 println("second: got", got, "want", ip)
173 panic("fail")
174 }
175
176
177 const n = 100
178 uc := make(chan interface{})
179 go func() {
180 for i := 0; i < n; i++ {
181 select {
182 case uc <- nil:
183 case uc <- u32:
184 case uc <- u64:
185 case uc <- u128:
186 }
187 }
188 }()
189 for i := 0; i < n; i++ {
190 if got := <-uc; got != nil && got != u32 && got != u64 && got != u128 {
191 println("recv: i", i, "got", got)
192 panic("fail")
193 }
194 }
195 }
196
View as plain text