]> Cypherpunks.ru repositories - gostls13.git/blob - test/ken/convert.go
cmd/compile/internal/inline: score call sites exposed by inlines
[gostls13.git] / test / ken / convert.go
1 // run
2
3 // Copyright 2010 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 // Test, near-exhaustive, of converting numbers between types.
8 // No complex numbers though.
9
10 package main
11
12 var i8 int8;
13 var u8 uint8;
14 var i16 int16;
15 var u16 uint16;
16 var i32 int32;
17 var u32 uint32;
18 var i64 int64;
19 var u64 uint64;
20 var f32 float32;
21 var f64 float64;
22
23 type    big     float64
24
25 type    t       struct {
26         from, to        int
27         val             big
28 }
29
30 const (
31         ti8     = iota+1
32         tu8
33         ti16
34         tu16
35         ti32
36         tu32
37         ti64
38         tu64
39         tf32
40         tf64
41 )
42
43 var     x = []t{
44
45         /* value good in all types (10) */
46         { ti8,  ti8,  10 }, { ti8,  tu8,  10 }, { ti8,  ti16, 10 }, { ti8,  tu16, 10 },
47         { ti8,  ti32, 10 }, { ti8,  tu32, 10 }, { ti8,  ti64, 10 }, { ti8,  tu64, 10 },
48         { ti8,  tf32, 10 }, { ti8,  tf64, 10 },
49
50         { tu8,  ti8,  10 }, { tu8,  tu8,  10 }, { tu8,  ti16, 10 }, { tu8,  tu16, 10 },
51         { tu8,  ti32, 10 }, { tu8,  tu32, 10 }, { tu8,  ti64, 10 }, { tu8,  tu64, 10 },
52         { tu8,  tf32, 10 }, { tu8,  tf64, 10 },
53
54         { ti16, ti8,  10 }, { ti16, tu8,  10 }, { ti16, ti16, 10 }, { ti16, tu16, 10 },
55         { ti16, ti32, 10 }, { ti16, tu32, 10 }, { ti16, ti64, 10 }, { ti16, tu64, 10 },
56         { ti16, tf32, 10 }, { ti16, tf64, 10 },
57
58         { tu16, ti8,  10 }, { tu16, tu8,  10 }, { tu16, ti16, 10 }, { tu16, tu16, 10 },
59         { tu16, ti32, 10 }, { tu16, tu32, 10 }, { tu16, ti64, 10 }, { tu16, tu64, 10 },
60         { tu16, tf32, 10 }, { tu16, tf64, 10 },
61
62         { ti32, ti8,  10 }, { ti32, tu8,  10 }, { ti32, ti16, 10 }, { ti32, tu16, 10 },
63         { ti32, ti32, 10 }, { ti32, tu32, 10 }, { ti32, ti64, 10 }, { ti32, tu64, 10 },
64         { ti32, tf32, 10 }, { ti32, tf64, 10 },
65
66         { tu32, ti8,  10 }, { tu32, tu8,  10 }, { tu32, ti16, 10 }, { tu32, tu16, 10 },
67         { tu32, ti32, 10 }, { tu32, tu32, 10 }, { tu32, ti64, 10 }, { tu32, tu64, 10 },
68         { tu32, tf32, 10 }, { tu32, tf64, 10 },
69
70         { ti64, ti8,  10 }, { ti64, tu8,  10 }, { ti64, ti16, 10 }, { ti64, tu16, 10 },
71         { ti64, ti32, 10 }, { ti64, tu32, 10 }, { ti64, ti64, 10 }, { ti64, tu64, 10 },
72         { ti64, tf32, 10 }, { ti64, tf64, 10 },
73
74         { tu64, ti8,  10 }, { tu64, tu8,  10 }, { tu64, ti16, 10 }, { tu64, tu16, 10 },
75         { tu64, ti32, 10 }, { tu64, tu32, 10 }, { tu64, ti64, 10 }, { tu64, tu64, 10 },
76         { tu64, tf32, 10 }, { tu64, tf64, 10 },
77
78         { tf32, ti8,  10 }, { tf32, tu8,  10 }, { tf32, ti16, 10 }, { tf32, tu16, 10 },
79         { tf32, ti32, 10 }, { tf32, tu32, 10 }, { tf32, ti64, 10 }, { tf32, tu64, 10 },
80         { tf32, tf32, 10 }, { tf32, tf64, 10 },
81
82         { tf64, ti8,  10 }, { tf64, tu8,  10 }, { tf64, ti16, 10 }, { tf64, tu16, 10 },
83         { tf64, ti32, 10 }, { tf64, tu32, 10 }, { tf64, ti64, 10 }, { tf64, tu64, 10 },
84         { tf64, tf32, 10 }, { tf64, tf64, 10 },
85
86         /* value good in all signed types (-4) */
87         { ti8,  ti8,  -4 }, { ti8,  ti16, -4 },
88         { ti8,  ti32, -4 }, { ti8,  ti64, -4 },
89         { ti8,  tf32, -4 }, { ti8,  tf64, -4 },
90
91         { ti16, ti8,  -4 }, { ti16, ti16, -4 },
92         { ti16, ti32, -4 }, { ti16, ti64, -4 },
93         { ti16, tf32, -4 },
94
95         { ti32, ti8,  -4 }, { ti32, ti16, -4 },
96         { ti32, ti32, -4 }, { ti32, ti64, -4 },
97         { ti32, tf32, -4 }, { ti32, tf64, -4 },
98
99         { ti64, ti8,  -4 }, { ti64, ti16, -4 },
100         { ti64, ti32, -4 }, { ti64, ti64, -4 },
101         { ti64, tf32, -4 },
102
103         { tf32, ti8,  -4 }, { tf32, ti16, -4 },
104         { tf32, ti32, -4 }, { tf32, ti64, -4 },
105         { tf32, tf32, -4 },
106
107         { tf64, ti8,  -4 }, { tf64, ti16, -4 },
108         { tf64, ti32, -4 }, { tf64, ti64, -4 },
109         { tf64, tf32, -4 }, { tf64, tf64, -4 },
110
111         /* value good in u8 and up (175) */
112         { tu8,  tu8,  175 }, { tu8,  ti16, 175 }, { tu8,  tu16, 175 },
113         { tu8,  ti32, 175 }, { tu8,  tu32, 175 }, { tu8,  ti64, 175 }, { tu8,  tu64, 175 },
114         { tu8,  tf32, 175 }, { tu8,  tf64, 175 },
115
116         { ti16, tu8,  175 }, { ti16, ti16, 175 }, { ti16, tu16, 175 },
117         { ti16, ti32, 175 }, { ti16, tu32, 175 }, { ti16, ti64, 175 }, { ti16, tu64, 175 },
118         { ti16, tf32, 175 }, { ti16, tf64, 175 },
119
120         { tu16, tu8,  175 }, { tu16, ti16, 175 }, { tu16, tu16, 175 },
121         { tu16, ti32, 175 }, { tu16, tu32, 175 }, { tu16, ti64, 175 }, { tu16, tu64, 175 },
122         { tu16, tf32, 175 }, { tu16, tf64, 175 },
123
124         { ti32, tu8,  175 }, { ti32, ti16, 175 }, { ti32, tu16, 175 },
125         { ti32, ti32, 175 }, { ti32, tu32, 175 }, { ti32, ti64, 175 }, { ti32, tu64, 175 },
126         { ti32, tf32, 175 }, { ti32, tf64, 175 },
127
128         { tu32, tu8,  175 }, { tu32, ti16, 175 }, { tu32, tu16, 175 },
129         { tu32, ti32, 175 }, { tu32, tu32, 175 }, { tu32, ti64, 175 }, { tu32, tu64, 175 },
130         { tu32, tf32, 175 }, { tu32, tf64, 175 },
131
132         { ti64, tu8,  175 }, { ti64, ti16, 175 }, { ti64, tu16, 175 },
133         { ti64, ti32, 175 }, { ti64, tu32, 175 }, { ti64, ti64, 175 }, { ti64, tu64, 175 },
134         { ti64, tf32, 175 }, { ti64, tf64, 175 },
135
136         { tu64, tu8,  175 }, { tu64, ti16, 175 }, { tu64, tu16, 175 },
137         { tu64, ti32, 175 }, { tu64, tu32, 175 }, { tu64, ti64, 175 }, { tu64, tu64, 175 },
138         { tu64, tf32, 175 }, { tu64, tf64, 175 },
139
140         { tf32, tu8,  175 }, { tf32, ti16, 175 }, { tf32, tu16, 175 },
141         { tf32, ti32, 175 }, { tf32, tu32, 175 }, { tf32, ti64, 175 }, { tf32, tu64, 175 },
142         { tf32, tf32, 175 }, { tf32, tf64, 175 },
143
144         { tf64, tu8,  175 }, { tf64, ti16, 175 }, { tf64, tu16, 175 },
145         { tf64, ti32, 175 }, { tf64, tu32, 175 }, { tf64, ti64, 175 }, { tf64, tu64, 175 },
146         { tf64, tf32, 175 }, { tf64, tf64, 175 },
147
148         /* value good in u16 and up (41259) */
149         { tu16, tu16, 41259 },
150         { tu16, ti32, 41259 }, { tu16, ti64, 41259 }, { tu16, tu64, 41259 },
151         { tu16, tf32, 41259 }, { tu16, tf64, 41259 },
152
153         { ti32, tu16, 41259 },
154         { ti32, ti32, 41259 }, { ti32, tu32, 41259 }, { ti32, ti64, 41259 }, { ti32, tu64, 41259 },
155         { ti32, tf32, 41259 }, { ti32, tf64, 41259 },
156
157         { tu32, tu16, 41259 },
158         { tu32, ti32, 41259 }, { tu32, tu32, 41259 }, { tu32, ti64, 41259 }, { tu32, tu64, 41259 },
159         { tu32, tf32, 41259 }, { tu32, tf64, 41259 },
160
161         { ti64, tu16, 41259 },
162         { ti64, ti32, 41259 }, { ti64, tu32, 41259 }, { ti64, ti64, 41259 }, { ti64, tu64, 41259 },
163         { ti64, tf32, 41259 }, { ti64, tf64, 41259 },
164
165         { tu64, tu16, 41259 },
166         { tu64, ti32, 41259 }, { tu64, tu32, 41259 }, { tu64, ti64, 41259 }, { tu64, tu64, 41259 },
167         { tu64, tf32, 41259 }, { tu64, tf64, 41259 },
168
169         { tf32, tu16, 41259 },
170         { tf32, ti32, 41259 }, { tf32, tu32, 41259 }, { tf32, ti64, 41259 }, { tf32, tu64, 41259 },
171         { tf32, tf32, 41259 }, { tf32, tf64, 41259 },
172
173         { tf64, tu16, 41259 },
174         { tf64, ti32, 41259 }, { tf64, tu32, 41259 }, { tf64, ti64, 41259 }, { tf64, tu64, 41259 },
175         { tf64, tf32, 41259 }, { tf64, tf64, 41259 },
176
177         /* value good in u32 and up (3758096384) */
178         { tu32, tu32, 3758096384 }, { tu32, ti64, 3758096384 }, { tu32, tu64, 3758096384 },
179         { tu32, tf32, 3758096384 }, { tu32, tf64, 3758096384 },
180
181         { ti64, tu32, 3758096384 }, { ti64, ti64, 3758096384 }, { ti64, tu64, 3758096384 },
182         { ti64, tf32, 3758096384 }, { ti64, tf64, 3758096384 },
183
184         { tu64, tu32, 3758096384 }, { tu64, ti64, 3758096384 }, { tu64, tu64, 3758096384 },
185         { tu64, tf32, 3758096384 }, { tu64, tf64, 3758096384 },
186
187         { tf32, tu32, 3758096384 }, { tf32, ti64, 3758096384 }, { tf32, tu64, 3758096384 },
188         { tf32, tf32, 3758096384 }, { tf32, tf64, 3758096384 },
189
190         { tf64, tu32, 3758096384 }, { tf64, ti64, 3758096384 }, { tf64, tu64, 3758096384 },
191         { tf64, tf32, 3758096384 }, { tf64, tf64, 3758096384 },
192
193         /* value good in u64 and up (16717361816799281152) */
194         { tu64, tu64, 16717361816799281152 },
195         { tu64, tf32, 16717361816799281152 }, { tu64, tf64, 16717361816799281152 },
196
197         { tf32, tu64, 16717361816799281152 },
198         { tf32, tf32, 16717361816799281152 }, { tf32, tf64, 16717361816799281152 },
199
200         { tf64, tu64, 16717361816799281152 },
201         { tf64, tf32, 16717361816799281152 }, { tf64, tf64, 16717361816799281152 },
202 }
203
204 func main() {
205         for i:=0; i<len(x); i++ {
206                 v := x[i].val           // input value
207                 w := big(0)             // output value
208                 f := x[i].from          // input type
209                 t := x[i].to            // output type
210
211                 i8  = 0; u8  = 0; i16 = 0; u16 = 0
212                 i32 = 0; u32 = 0; i64 = 0; u64 = 0
213                 f32 = 0; f64 = 0
214
215                 switch f*100 + t {
216                 default:
217                         println("missing case", i, v, f, t)
218                         w = v
219
220                 case ti8*100 + ti8:
221                         i8 = int8(v); i8 = int8(i8); w = big(i8)
222                 case ti8*100 + tu8:
223                         i8 = int8(v); u8 = uint8(i8); w = big(u8)
224                 case ti8*100 + ti16:
225                         i8 = int8(v); i16 = int16(i8); w = big(i16)
226                 case ti8*100 + tu16:
227                         i8 = int8(v); u16 = uint16(i8); w = big(u16)
228                 case ti8*100 + ti32:
229                         i8 = int8(v); i32 = int32(i8); w = big(i32)
230                 case ti8*100 + tu32:
231                         i8 = int8(v); u32 = uint32(i8); w = big(u32)
232                 case ti8*100 + ti64:
233                         i8 = int8(v); i64 = int64(i8); w = big(i64)
234                 case ti8*100 + tu64:
235                         i8 = int8(v); u64 = uint64(i8); w = big(u64)
236                 case ti8*100 + tf32:
237                         i8 = int8(v); f32 = float32(i8); w = big(f32)
238                 case ti8*100 + tf64:
239                         i8 = int8(v); f64 = float64(i8); w = big(f64)
240
241                 case tu8*100 + ti8:
242                         u8 = uint8(v); i8 = int8(u8); w = big(i8)
243                 case tu8*100 + tu8:
244                         u8 = uint8(v); u8 = uint8(u8); w = big(u8)
245                 case tu8*100 + ti16:
246                         u8 = uint8(v); i16 = int16(u8); w = big(i16)
247                 case tu8*100 + tu16:
248                         u8 = uint8(v); u16 = uint16(u8); w = big(u16)
249                 case tu8*100 + ti32:
250                         u8 = uint8(v); i32 = int32(u8); w = big(i32)
251                 case tu8*100 + tu32:
252                         u8 = uint8(v); u32 = uint32(u8); w = big(u32)
253                 case tu8*100 + ti64:
254                         u8 = uint8(v); i64 = int64(u8); w = big(i64)
255                 case tu8*100 + tu64:
256                         u8 = uint8(v); u64 = uint64(u8); w = big(u64)
257                 case tu8*100 + tf32:
258                         u8 = uint8(v); f32 = float32(u8); w = big(f32)
259                 case tu8*100 + tf64:
260                         u8 = uint8(v); f64 = float64(u8); w = big(f64)
261
262                 case ti16*100 + ti8:
263                         i16 = int16(v); i8 = int8(i16); w = big(i8)
264                 case ti16*100 + tu8:
265                         i16 = int16(v); u8 = uint8(i16); w = big(u8)
266                 case ti16*100 + ti16:
267                         i16 = int16(v); i16 = int16(i16); w = big(i16)
268                 case ti16*100 + tu16:
269                         i16 = int16(v); u16 = uint16(i16); w = big(u16)
270                 case ti16*100 + ti32:
271                         i16 = int16(v); i32 = int32(i16); w = big(i32)
272                 case ti16*100 + tu32:
273                         i16 = int16(v); u32 = uint32(i16); w = big(u32)
274                 case ti16*100 + ti64:
275                         i16 = int16(v); i64 = int64(i16); w = big(i64)
276                 case ti16*100 + tu64:
277                         i16 = int16(v); u64 = uint64(i16); w = big(u64)
278                 case ti16*100 + tf32:
279                         i16 = int16(v); f32 = float32(i16); w = big(f32)
280                 case ti16*100 + tf64:
281                         i16 = int16(v); f64 = float64(i16); w = big(f64)
282
283                 case tu16*100 + ti8:
284                         u16 = uint16(v); i8 = int8(u16); w = big(i8)
285                 case tu16*100 + tu8:
286                         u16 = uint16(v); u8 = uint8(u16); w = big(u8)
287                 case tu16*100 + ti16:
288                         u16 = uint16(v); i16 = int16(u16); w = big(i16)
289                 case tu16*100 + tu16:
290                         u16 = uint16(v); u16 = uint16(u16); w = big(u16)
291                 case tu16*100 + ti32:
292                         u16 = uint16(v); i32 = int32(u16); w = big(i32)
293                 case tu16*100 + tu32:
294                         u16 = uint16(v); u32 = uint32(u16); w = big(u32)
295                 case tu16*100 + ti64:
296                         u16 = uint16(v); i64 = int64(u16); w = big(i64)
297                 case tu16*100 + tu64:
298                         u16 = uint16(v); u64 = uint64(u16); w = big(u64)
299                 case tu16*100 + tf32:
300                         u16 = uint16(v); f32 = float32(u16); w = big(f32)
301                 case tu16*100 + tf64:
302                         u16 = uint16(v); f64 = float64(u16); w = big(f64)
303
304                 case ti32*100 + ti8:
305                         i32 = int32(v); i8 = int8(i32); w = big(i8)
306                 case ti32*100 + tu8:
307                         i32 = int32(v); u8 = uint8(i32); w = big(u8)
308                 case ti32*100 + ti16:
309                         i32 = int32(v); i16 = int16(i32); w = big(i16)
310                 case ti32*100 + tu16:
311                         i32 = int32(v); u16 = uint16(i32); w = big(u16)
312                 case ti32*100 + ti32:
313                         i32 = int32(v); i32 = int32(i32); w = big(i32)
314                 case ti32*100 + tu32:
315                         i32 = int32(v); u32 = uint32(i32); w = big(u32)
316                 case ti32*100 + ti64:
317                         i32 = int32(v); i64 = int64(i32); w = big(i64)
318                 case ti32*100 + tu64:
319                         i32 = int32(v); u64 = uint64(i32); w = big(u64)
320                 case ti32*100 + tf32:
321                         i32 = int32(v); f32 = float32(i32); w = big(f32)
322                 case ti32*100 + tf64:
323                         i32 = int32(v); f64 = float64(i32); w = big(f64)
324
325                 case tu32*100 + ti8:
326                         u32 = uint32(v); i8 = int8(u32); w = big(i8)
327                 case tu32*100 + tu8:
328                         u32 = uint32(v); u8 = uint8(u32); w = big(u8)
329                 case tu32*100 + ti16:
330                         u32 = uint32(v); i16 = int16(u32); w = big(i16)
331                 case tu32*100 + tu16:
332                         u32 = uint32(v); u16 = uint16(u32); w = big(u16)
333                 case tu32*100 + ti32:
334                         u32 = uint32(v); i32 = int32(u32); w = big(i32)
335                 case tu32*100 + tu32:
336                         u32 = uint32(v); u32 = uint32(u32); w = big(u32)
337                 case tu32*100 + ti64:
338                         u32 = uint32(v); i64 = int64(u32); w = big(i64)
339                 case tu32*100 + tu64:
340                         u32 = uint32(v); u64 = uint64(u32); w = big(u64)
341                 case tu32*100 + tf32:
342                         u32 = uint32(v); f32 = float32(u32); w = big(f32)
343                 case tu32*100 + tf64:
344                         u32 = uint32(v); f64 = float64(u32); w = big(f64)
345
346                 case ti64*100 + ti8:
347                         i64 = int64(v); i8 = int8(i64); w = big(i8)
348                 case ti64*100 + tu8:
349                         i64 = int64(v); u8 = uint8(i64); w = big(u8)
350                 case ti64*100 + ti16:
351                         i64 = int64(v); i16 = int16(i64); w = big(i16)
352                 case ti64*100 + tu16:
353                         i64 = int64(v); u16 = uint16(i64); w = big(u16)
354                 case ti64*100 + ti32:
355                         i64 = int64(v); i32 = int32(i64); w = big(i32)
356                 case ti64*100 + tu32:
357                         i64 = int64(v); u32 = uint32(i64); w = big(u32)
358                 case ti64*100 + ti64:
359                         i64 = int64(v); i64 = int64(i64); w = big(i64)
360                 case ti64*100 + tu64:
361                         i64 = int64(v); u64 = uint64(i64); w = big(u64)
362                 case ti64*100 + tf32:
363                         i64 = int64(v); f32 = float32(i64); w = big(f32)
364                 case ti64*100 + tf64:
365                         i64 = int64(v); f64 = float64(i64); w = big(f64)
366
367                 case tu64*100 + ti8:
368                         u64 = uint64(v); i8 = int8(u64); w = big(i8)
369                 case tu64*100 + tu8:
370                         u64 = uint64(v); u8 = uint8(u64); w = big(u8)
371                 case tu64*100 + ti16:
372                         u64 = uint64(v); i16 = int16(u64); w = big(i16)
373                 case tu64*100 + tu16:
374                         u64 = uint64(v); u16 = uint16(u64); w = big(u16)
375                 case tu64*100 + ti32:
376                         u64 = uint64(v); i32 = int32(u64); w = big(i32)
377                 case tu64*100 + tu32:
378                         u64 = uint64(v); u32 = uint32(u64); w = big(u32)
379                 case tu64*100 + ti64:
380                         u64 = uint64(v); i64 = int64(u64); w = big(i64)
381                 case tu64*100 + tu64:
382                         u64 = uint64(v); u64 = uint64(u64); w = big(u64)
383                 case tu64*100 + tf32:
384                         u64 = uint64(v); f32 = float32(u64); w = big(f32)
385                 case tu64*100 + tf64:
386                         u64 = uint64(v); f64 = float64(u64); w = big(f64)
387
388                 case tf32*100 + ti8:
389                         f32 = float32(v); i8 = int8(f32); w = big(i8)
390                 case tf32*100 + tu8:
391                         f32 = float32(v); u8 = uint8(f32); w = big(u8)
392                 case tf32*100 + ti16:
393                         f32 = float32(v); i16 = int16(f32); w = big(i16)
394                 case tf32*100 + tu16:
395                         f32 = float32(v); u16 = uint16(f32); w = big(u16)
396                 case tf32*100 + ti32:
397                         f32 = float32(v); i32 = int32(f32); w = big(i32)
398                 case tf32*100 + tu32:
399                         f32 = float32(v); u32 = uint32(f32); w = big(u32)
400                 case tf32*100 + ti64:
401                         f32 = float32(v); i64 = int64(f32); w = big(i64)
402                 case tf32*100 + tu64:
403                         f32 = float32(v); u64 = uint64(f32); w = big(u64)
404                 case tf32*100 + tf32:
405                         f32 = float32(v); f32 = float32(f32); w = big(f32)
406                 case tf32*100 + tf64:
407                         f32 = float32(v); f64 = float64(f32); w = big(f64)
408
409                 case tf64*100 + ti8:
410                         f64 = float64(v); i8 = int8(f64); w = big(i8)
411                 case tf64*100 + tu8:
412                         f64 = float64(v); u8 = uint8(f64); w = big(u8)
413                 case tf64*100 + ti16:
414                         f64 = float64(v); i16 = int16(f64); w = big(i16)
415                 case tf64*100 + tu16:
416                         f64 = float64(v); u16 = uint16(f64); w = big(u16)
417                 case tf64*100 + ti32:
418                         f64 = float64(v); i32 = int32(f64); w = big(i32)
419                 case tf64*100 + tu32:
420                         f64 = float64(v); u32 = uint32(f64); w = big(u32)
421                 case tf64*100 + ti64:
422                         f64 = float64(v); i64 = int64(f64); w = big(i64)
423                 case tf64*100 + tu64:
424                         f64 = float64(v); u64 = uint64(f64); w = big(u64)
425                 case tf64*100 + tf32:
426                         f64 = float64(v); f32 = float32(f64); w = big(f32)
427                 case tf64*100 + tf64:
428                         f64 = float64(v); f64 = float64(f64); w = big(f64)
429                 }
430                 if v != w { println(i, v, w, f, t) }
431         }
432 }