// $G $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 { i int; f float; s string; next *T }

type R struct { num int }

func itor(a int) *R {
	r := new(R);
	r.num = a;
	return r;
}

func eq(a []*R) {
	for i := 0; i < len(a); i++ {
		if a[i].num != i { panic("bad") }
	}
}

type P struct { a, b int };
func NewP(a, b int) *P {
	return &P{a, b}
}

func main() {
	var t T;
	t = T{0, 7.2, "hi", &t};

	var tp *T;
	tp = &T{0, 7.2, "hi", &t};

	a1 := []int{1,2,3};
	if len(a1) != 3 { panic("a1") }
	a2 := [10]int{1,2,3};
	if len(a2) != 10 || cap(a2) != 10 { panic("a2") }

	a3 := [10]int{1,2,3,};
	if len(a3) != 10 || a2[3] != 0 { panic("a3") }

	var oai []int;
	oai = []int{1,2,3};
	if len(oai) != 3 { panic("oai") }

	at := [...]*T{&t, tp, &t};
	if len(at) != 3 { panic("at") }

	c := make(chan int);
	ac := []chan int{c, c, c};
	if len(ac) != 3 { panic("ac") }

	aat := [][len(at)]*T{at, at};
	if len(aat) != 2 || len(aat[1]) != 3 { panic("aat") }

	s := string([]byte{'h', 'e', 'l', 'l', 'o'});
	if s != "hello" { panic("s") }

	m := map[string]float{"one":1.0, "two":2.0, "pi":22./7.};
	if len(m) != 3 { panic("m") }

	eq([]*R{itor(0), itor(1), itor(2), itor(3), itor(4), itor(5)});

	p1 := NewP(1, 2);
	p2 := NewP(1, 2);
	if p1 == p2 { panic("NewP") }
}
