// $G $D/$F.go && $L $F.$A && ./$A.out

// 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.

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")
	}
}
