]> Cypherpunks.ru repositories - gostls13.git/blob - test/typeswitch1.go
cmd/compile/internal/inline: score call sites exposed by inlines
[gostls13.git] / test / typeswitch1.go
1 // run
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 // Test simple type switches on basic types.
8
9 package main
10
11 import "fmt"
12
13 const (
14         a = iota
15         b
16         c
17         d
18         e
19 )
20
21 var x = []int{1, 2, 3}
22
23 func f(x int, len *byte) {
24         *len = byte(x)
25 }
26
27 func whatis(x interface{}) string {
28         switch xx := x.(type) {
29         default:
30                 return fmt.Sprint("default ", xx)
31         case int, int8, int16, int32:
32                 return fmt.Sprint("signed ", xx)
33         case int64:
34                 return fmt.Sprint("signed64 ", int64(xx))
35         case uint, uint8, uint16, uint32:
36                 return fmt.Sprint("unsigned ", xx)
37         case uint64:
38                 return fmt.Sprint("unsigned64 ", uint64(xx))
39         case nil:
40                 return fmt.Sprint("nil ", xx)
41         }
42         panic("not reached")
43 }
44
45 func whatis1(x interface{}) string {
46         xx := x
47         switch xx.(type) {
48         default:
49                 return fmt.Sprint("default ", xx)
50         case int, int8, int16, int32:
51                 return fmt.Sprint("signed ", xx)
52         case int64:
53                 return fmt.Sprint("signed64 ", xx.(int64))
54         case uint, uint8, uint16, uint32:
55                 return fmt.Sprint("unsigned ", xx)
56         case uint64:
57                 return fmt.Sprint("unsigned64 ", xx.(uint64))
58         case nil:
59                 return fmt.Sprint("nil ", xx)
60         }
61         panic("not reached")
62 }
63
64 func check(x interface{}, s string) {
65         w := whatis(x)
66         if w != s {
67                 fmt.Println("whatis", x, "=>", w, "!=", s)
68                 panic("fail")
69         }
70
71         w = whatis1(x)
72         if w != s {
73                 fmt.Println("whatis1", x, "=>", w, "!=", s)
74                 panic("fail")
75         }
76 }
77
78 func main() {
79         check(1, "signed 1")
80         check(uint(1), "unsigned 1")
81         check(int64(1), "signed64 1")
82         check(uint64(1), "unsigned64 1")
83         check(1.5, "default 1.5")
84         check(nil, "nil <nil>")
85 }