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

import (
	"fmt";
	"os";
)

type T struct {
	a float64;
	b int64;
	c string;
	d byte;
}

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

func arraycmptest() {
	a1 := a;
	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
}

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