// $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 T struct {
	a float64
	b int64
	c string
	d byte
}

var a = []int{ 1, 2, 3 }
var NIL []int

func arraycmptest() {
	if NIL != nil {
		println("fail1:", NIL, "!= nil")
	}
	if nil != NIL {
		println("fail2: nil !=", NIL)
	}
	if a == nil || nil == a {
		println("fail3:", a, "== nil")
	}
}

func SameArray(a, b []int) bool {
	if len(a) != len(b) || cap(a) != cap(b) {
		return false
	}
	if len(a) > 0 && &a[0] != &b[0] {
		return false
	}
	return true
}

var t = T{1.5, 123, "hello", 255}
var mt = make(map[int]T)
var ma = make(map[int][]int)

func maptest() {
	mt[0] = t
	t1 := mt[0]
	if t1.a != t.a || t1.b != t.b || t1.c != t.c || t1.d != t.d {
		println("fail: map val struct", t1.a, t1.b, t1.c, t1.d)
	}

	ma[1] = a
	a1 := ma[1]
	if !SameArray(a, a1) {
		println("fail: map val array", a, a1)
	}
}

var ct = make(chan T)
var ca = make(chan []int)

func send() {
	ct <- t
	ca <- a
}

func chantest() {
	go send()

	t1 := <-ct
	if t1.a != t.a || t1.b != t.b || t1.c != t.c || t1.d != t.d {
		println("fail: map val struct", t1.a, t1.b, t1.c, t1.d)
	}

	a1 := <-ca
	if !SameArray(a, a1) {
		println("fail: map val array", a, a1)
	}
}

type E struct { }
var e E

func interfacetest() {
	var i interface{}

	i = a
	a1 := i.([]int)
	if !SameArray(a, a1) {
		println("interface <-> []int", a, a1)
	}
	pa := new([]int)
	*pa = a
	i = pa
	a1 = *i.(*[]int)
	if !SameArray(a, a1) {
		println("interface <-> *[]int", a, a1)
	}

	i = t
	t1 := i.(T)
	if t1.a != t.a || t1.b != t.b || t1.c != t.c || t1.d != t.d {
		println("interface <-> struct", t1.a, t1.b, t1.c, t1.d)
	}

	i = e
	e1 := i.(E)
	// nothing to check; just verify it doesn't crash
	_ = e1
}

func main() {
	arraycmptest()
	maptest()
	chantest()
	interfacetest()
}
