blob: 42cf69340963ecd1484ad8ed03096a0c3e721fd3 [file] [log] [blame]
Russ Cox0b477ef2012-02-16 23:48:57 -05001// run
Russ Cox8658b362011-10-26 15:27:47 -07002
3// Copyright 2011 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
Russ Cox8658b362011-10-26 15:27:47 -07007// Test that dynamic interface checks treat byte=uint8
8// and rune=int or rune=int32.
9
Rob Pikefc0dc042012-02-19 13:19:43 +110010package main
11
Russ Cox8658b362011-10-26 15:27:47 -070012func main() {
13 var x interface{}
14
15 x = byte(1)
16 switch x.(type) {
17 case uint8:
18 // ok
19 default:
Alan Donovan052c9422013-02-12 13:17:49 -050020 panic("byte != uint8")
Russ Cox8658b362011-10-26 15:27:47 -070021 }
22
23 x = uint8(2)
24 switch x.(type) {
25 case byte:
26 // ok
27 default:
Alan Donovan052c9422013-02-12 13:17:49 -050028 panic("uint8 != byte")
Russ Cox8658b362011-10-26 15:27:47 -070029 }
30
31 rune32 := false
32 x = rune(3)
33 switch x.(type) {
34 case int:
35 // ok
36 case int32:
37 // must be new code
38 rune32 = true
39 default:
Alan Donovan052c9422013-02-12 13:17:49 -050040 panic("rune != int and rune != int32")
Russ Cox8658b362011-10-26 15:27:47 -070041 }
42
43 if rune32 {
44 x = int32(4)
45 } else {
46 x = int(5)
47 }
48 switch x.(type) {
49 case rune:
50 // ok
51 default:
Alan Donovan052c9422013-02-12 13:17:49 -050052 panic("int (or int32) != rune")
Russ Cox8658b362011-10-26 15:27:47 -070053 }
54}