// run // Copyright 2009 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 interfaces on basic types. package main type myint int type mystring string type I0 interface{} func f() { var ia, ib I0 var i myint var s mystring if ia != ib { panic("1") } i = 1 ia = i ib = i if ia != ib { panic("2") } if ia == nil { panic("3") } i = 2 ia = i if ia == ib { panic("4") } ia = nil if ia == ib { panic("5") } ib = nil if ia != ib { panic("6") } if ia != nil { panic("7") } s = "abc" ia = s ib = nil if ia == ib { panic("8") } s = "def" ib = s if ia == ib { panic("9") } s = "abc" ib = s if ia != ib { panic("a") } } func main() { var ia [20]I0 var b bool var s string var i8 int8 var i16 int16 var i32 int32 var i64 int64 var u8 uint8 var u16 uint16 var u32 uint32 var u64 uint64 f() ia[0] = "xxx" ia[1] = 12345 ia[2] = true s = "now is" ia[3] = s b = false ia[4] = b i8 = 29 ia[5] = i8 i16 = 994 ia[6] = i16 i32 = 3434 ia[7] = i32 i64 = 1234567 ia[8] = i64 u8 = 12 ia[9] = u8 u16 = 799 ia[10] = u16 u32 = 4455 ia[11] = u32 u64 = 765432 ia[12] = u64 s = ia[0].(string) if s != "xxx" { println(0, s) panic("fail") } i32 = int32(ia[1].(int)) if i32 != 12345 { println(1, i32) panic("fail") } b = ia[2].(bool) if b != true { println(2, b) panic("fail") } s = ia[3].(string) if s != "now is" { println(3, s) panic("fail") } b = ia[4].(bool) if b != false { println(4, b) panic("fail") } i8 = ia[5].(int8) if i8 != 29 { println(5, i8) panic("fail") } i16 = ia[6].(int16) if i16 != 994 { println(6, i16) panic("fail") } i32 = ia[7].(int32) if i32 != 3434 { println(7, i32) panic("fail") } i64 = ia[8].(int64) if i64 != 1234567 { println(8, i64) panic("fail") } u8 = ia[9].(uint8) if u8 != 12 { println(5, u8) panic("fail") } u16 = ia[10].(uint16) if u16 != 799 { println(6, u16) panic("fail") } u32 = ia[11].(uint32) if u32 != 4455 { println(7, u32) panic("fail") } u64 = ia[12].(uint64) if u64 != 765432 { println(8, u64) panic("fail") } }