// run

// 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] }
