|  | // run | 
|  |  | 
|  | // Copyright 2011 The Go Authors. All rights reserved. | 
|  | // Use of this source code is governed by a BSD-style | 
|  | // license that can be found in the LICENSE file. | 
|  |  | 
|  | // Test that dynamic interface checks treat byte=uint8 | 
|  | // and rune=int or rune=int32. | 
|  |  | 
|  | package main | 
|  |  | 
|  | func main() { | 
|  | var x interface{} | 
|  |  | 
|  | x = byte(1) | 
|  | switch x.(type) { | 
|  | case uint8: | 
|  | // ok | 
|  | default: | 
|  | panic("byte != uint8") | 
|  | } | 
|  |  | 
|  | x = uint8(2) | 
|  | switch x.(type) { | 
|  | case byte: | 
|  | // ok | 
|  | default: | 
|  | panic("uint8 != byte") | 
|  | } | 
|  |  | 
|  | rune32 := false | 
|  | x = rune(3) | 
|  | switch x.(type) { | 
|  | case int: | 
|  | // ok | 
|  | case int32: | 
|  | // must be new code | 
|  | rune32 = true | 
|  | default: | 
|  | panic("rune != int and rune != int32") | 
|  | } | 
|  |  | 
|  | if rune32 { | 
|  | x = int32(4) | 
|  | } else { | 
|  | x = int(5) | 
|  | } | 
|  | switch x.(type) { | 
|  | case rune: | 
|  | // ok | 
|  | default: | 
|  | panic("int (or int32) != rune") | 
|  | } | 
|  | } |