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

// Copyright 2010 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

var a [12]complex128
var s []complex128
var c chan complex128
var f struct {
	c complex128
}
var m map[complex128]complex128

func main() {
	// array of complex128
	for i := 0; i < len(a); i++ {
		a[i] = complex(float64(i), float64(-i))
	}
	if a[5] != 5-5i {
		panic(a[5])
	}

	// slice of complex128
	s = make([]complex128, len(a))
	for i := 0; i < len(s); i++ {
		s[i] = a[i]
	}
	if s[5] != 5-5i {
		panic(s[5])
	}

	// chan
	c = make(chan complex128)
	go chantest(c)
	vc := <-c
	if vc != 5-5i {
		panic(vc)
	}

	// pointer of complex128
	v := a[5]
	pv := &v
	if *pv != 5-5i {
		panic(*pv)
	}

	// field of complex128
	f.c = a[5]
	if f.c != 5-5i {
		panic(f.c)
	}

	// map of complex128
	m = make(map[complex128]complex128)
	for i := 0; i < len(s); i++ {
		m[-a[i]] = a[i]
	}
	if m[5i-5] != 5-5i {
		panic(m[5i-5])
	}
	vm := m[complex(-5, 5)]
	if vm != 5-5i {
		panic(vm)
	}
}

func chantest(c chan complex128) { c <- a[5] }
