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 9package main 10 11import "fmt" 12 13const ( 14 a = iota 15 b 16 c 17 d 18 e 19) 20 21var x = []int{1, 2, 3} 22 23func f(x int, len *byte) { 24 *len = byte(x) 25} 26 27func 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 45func 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 64func 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 78func 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} 86