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

import (
	"fmt";
	"strconv";
)

const count = 100;

func P(a []string) string {
	s := "{";
	for i := 0; i < len(a); i++ {
		if i > 0 {
			s += ","
		}
		s += `"` + a[i] + `"`;
	}
	s +="}";
	return s;
}

func main() {
	// Test a map literal.
	mlit := map[string] int { "0":0, "1":1, "2":2, "3":3, "4":4 };
	for i := 0; i < len(mlit); i++ {
		s := string([]byte{byte(i)+'0'});
		if mlit[s] != i {
			fmt.Printf("mlit[%s] = %d\n", s, mlit[s])
		}
	}

	mib := make(map[int] bool);
	mii := make(map[int] int);
	mfi := make(map[float] int);
	mif := make(map[int] float);
	msi := make(map[string] int);
	mis := make(map[int] string);
	mss := make(map[string] string);
	mspa := make(map[string] []string);
	// BUG need an interface map both ways too

	type T struct {
		i int64;	// can't use string here; struct values are only compared at the top level
		f float;
	};
	mipT := make(map[int] *T);
	mpTi := make(map[*T] int);
	mit := make(map[int] T);
//	mti := make(map[T] int);

	type M map[int] int;
	mipM := make(map[int] M);

	var apT [2*count]*T;

	for i := 0; i < count; i++ {
		s := strconv.Itoa(i);
		s10 := strconv.Itoa(i*10);
		f := float(i);
		t := T{int64(i),f};
		apT[i] = new(T);
		apT[i].i = int64(i);
		apT[i].f = f;
		apT[2*i] = new(T);	// need twice as many entries as we use, for the nonexistence check
		apT[2*i].i = int64(i);
		apT[2*i].f = f;
		m := M{i: i+1};
		mib[i] = (i != 0);
		mii[i] = 10*i;
		mfi[float(i)] = 10*i;
		mif[i] = 10.0*f;
		mis[i] = s;
		msi[s] = i;
		mss[s] = s10;
		mss[s] = s10;
		as := make([]string, 2);
			as[0] = s10;
			as[1] = s10;
		mspa[s] = as;
		mipT[i] = apT[i];
		mpTi[apT[i]] = i;
		mipM[i] = m;
		mit[i] = t;
	//	mti[t] = i;
	}

	// test len
	if len(mib) != count {
		fmt.Printf("len(mib) = %d\n", len(mib));
	}
	if len(mii) != count {
		fmt.Printf("len(mii) = %d\n", len(mii));
	}
	if len(mfi) != count {
		fmt.Printf("len(mfi) = %d\n", len(mfi));
	}
	if len(mif) != count {
		fmt.Printf("len(mif) = %d\n", len(mif));
	}
	if len(msi) != count {
		fmt.Printf("len(msi) = %d\n", len(msi));
	}
	if len(mis) != count {
		fmt.Printf("len(mis) = %d\n", len(mis));
	}
	if len(mss) != count {
		fmt.Printf("len(mss) = %d\n", len(mss));
	}
	if len(mspa) != count {
		fmt.Printf("len(mspa) = %d\n", len(mspa));
	}
	if len(mipT) != count {
		fmt.Printf("len(mipT) = %d\n", len(mipT));
	}
	if len(mpTi) != count {
		fmt.Printf("len(mpTi) = %d\n", len(mpTi));
	}
//	if len(mti) != count {
//		fmt.Printf("len(mti) = %d\n", len(mti));
//	}
	if len(mipM) != count {
		fmt.Printf("len(mipM) = %d\n", len(mipM));
	}
//	if len(mti) != count {
//		fmt.Printf("len(mti) = %d\n", len(mti));
//	}
	if len(mit) != count {
		fmt.Printf("len(mit) = %d\n", len(mit));
	}

	// test construction directly
	for i := 0; i < count; i++ {
		s := strconv.Itoa(i);
		s10 := strconv.Itoa(i*10);
		f := float(i);
		// BUG m := M(i, i+1);
		if mib[i] != (i != 0) {
			fmt.Printf("mib[%d] = %t\n", i, mib[i]);
		}
		if(mii[i] != 10*i) {
			fmt.Printf("mii[%d] = %d\n", i, mii[i]);
		}
		if(mfi[f] != 10*i) {
			fmt.Printf("mfi[%d] = %d\n", i, mfi[f]);
		}
		if(mif[i] != 10.0*f) {
			fmt.Printf("mif[%d] = %g\n", i, mif[i]);
		}
		if(mis[i] != s) {
			fmt.Printf("mis[%d] = %s\n", i, mis[i]);
		}
		if(msi[s] != i) {
			fmt.Printf("msi[%s] = %d\n", s, msi[s]);
		}
		if mss[s] != s10 {
			fmt.Printf("mss[%s] = %g\n", s, mss[s]);
		}
		for j := 0; j < len(mspa[s]); j++ {
			if mspa[s][j] != s10 {
				fmt.Printf("mspa[%s][%d] = %s\n", s, j, mspa[s][j]);
			}
		}
		if(mipT[i].i != int64(i) || mipT[i].f != f) {
			fmt.Printf("mipT[%d] = %v\n", i, mipT[i]);
		}
		if(mpTi[apT[i]] != i) {
			fmt.Printf("mpTi[apT[%d]] = %d\n", i, mpTi[apT[i]]);
		}
	//	if(mti[t] != i) {
	//		fmt.Printf("mti[%s] = %s\n", s, mti[t]);
	//	}
		if (mipM[i][i] != i + 1) {
			fmt.Printf("mipM[%d][%d] = %d\n", i, i, mipM[i][i]);
		}
	//	if(mti[t] != i) {
	//		fmt.Printf("mti[%v] = %d\n", t, mti[t]);
	//	}
		if(mit[i].i != int64(i) || mit[i].f != f) {
			fmt.Printf("mit[%d] = {%d %g}\n", i, mit[i].i, mit[i].f);
		}
	}

	// test existence with tuple check
	// failed lookups yield a false value for the boolean.
	for i := 0; i < count; i++ {
		s := strconv.Itoa(i);
		f := float(i);
		{
			_, b := mib[i];
			if !b {
				fmt.Printf("tuple existence decl: mib[%d]\n", i);
			}
			_, b = mib[i];
			if !b {
				fmt.Printf("tuple existence assign: mib[%d]\n", i);
			}
		}
		{
			_, b := mii[i];
			if !b {
				fmt.Printf("tuple existence decl: mii[%d]\n", i);
			}
			_, b = mii[i];
			if !b {
				fmt.Printf("tuple existence assign: mii[%d]\n", i);
			}
		}
		{
			_, b := mfi[f];
			if !b {
				fmt.Printf("tuple existence decl: mfi[%d]\n", i);
			}
			_, b = mfi[f];
			if !b {
				fmt.Printf("tuple existence assign: mfi[%d]\n", i);
			}
		}
		{
			_, b := mif[i];
			if !b {
				fmt.Printf("tuple existence decl: mif[%d]\n", i);
			}
			_, b = mif[i];
			if !b {
				fmt.Printf("tuple existence assign: mif[%d]\n", i);
			}
		}
		{
			_, b := mis[i];
			if !b {
				fmt.Printf("tuple existence decl: mis[%d]\n", i);
			}
			_, b = mis[i];
			if !b {
				fmt.Printf("tuple existence assign: mis[%d]\n", i);
			}
		}
		{
			_, b := msi[s];
			if !b {
				fmt.Printf("tuple existence decl: msi[%d]\n", i);
			}
			_, b = msi[s];
			if !b {
				fmt.Printf("tuple existence assign: msi[%d]\n", i);
			}
		}
		{
			_, b := mss[s];
			if !b {
				fmt.Printf("tuple existence decl: mss[%d]\n", i);
			}
			_, b = mss[s];
			if !b {
				fmt.Printf("tuple existence assign: mss[%d]\n", i);
			}
		}
		{
			_, b := mspa[s];
			if !b {
				fmt.Printf("tuple existence decl: mspa[%d]\n", i);
			}
			_, b = mspa[s];
			if !b {
				fmt.Printf("tuple existence assign: mspa[%d]\n", i);
			}
		}
		{
			_, b := mipT[i];
			if !b {
				fmt.Printf("tuple existence decl: mipT[%d]\n", i);
			}
			_, b = mipT[i];
			if !b {
				fmt.Printf("tuple existence assign: mipT[%d]\n", i);
			}
		}
		{
			_, b := mpTi[apT[i]];
			if !b {
				fmt.Printf("tuple existence decl: mpTi[apT[%d]]\n", i);
			}
			_, b = mpTi[apT[i]];
			if !b {
				fmt.Printf("tuple existence assign: mpTi[apT[%d]]\n", i);
			}
		}
		{
			_, b := mipM[i];
			if !b {
				fmt.Printf("tuple existence decl: mipM[%d]\n", i);
			}
			_, b = mipM[i];
			if !b {
				fmt.Printf("tuple existence assign: mipM[%d]\n", i);
			}
		}
		{
			_, b := mit[i];
			if !b {
				fmt.Printf("tuple existence decl: mit[%d]\n", i);
			}
			_, b = mit[i];
			if !b {
				fmt.Printf("tuple existence assign: mit[%d]\n", i);
			}
		}
//		{
//			_, b := mti[t];
//			if !b {
//				fmt.Printf("tuple existence decl: mti[%d]\n", i);
//			}
//			_, b = mti[t];
//			if !b {
//				fmt.Printf("tuple existence assign: mti[%d]\n", i);
//			}
//		}
	}

	// test nonexistence with tuple check
	// failed lookups yield a false value for the boolean.
	for i := count; i < 2*count; i++ {
		s := strconv.Itoa(i);
		f := float(i);
		{
			_, b := mib[i];
			if b {
				fmt.Printf("tuple nonexistence decl: mib[%d]", i);
			}
			_, b = mib[i];
			if b {
				fmt.Printf("tuple nonexistence assign: mib[%d]", i);
			}
		}
		{
			_, b := mii[i];
			if b {
				fmt.Printf("tuple nonexistence decl: mii[%d]", i);
			}
			_, b = mii[i];
			if b {
				fmt.Printf("tuple nonexistence assign: mii[%d]", i);
			}
		}
		{
			_, b := mfi[f];
			if b {
				fmt.Printf("tuple nonexistence decl: mfi[%d]", i);
			}
			_, b = mfi[f];
			if b {
				fmt.Printf("tuple nonexistence assign: mfi[%d]", i);
			}
		}
		{
			_, b := mif[i];
			if b {
				fmt.Printf("tuple nonexistence decl: mif[%d]", i);
			}
			_, b = mif[i];
			if b {
				fmt.Printf("tuple nonexistence assign: mif[%d]", i);
			}
		}
		{
			_, b := mis[i];
			if b {
				fmt.Printf("tuple nonexistence decl: mis[%d]", i);
			}
			_, b = mis[i];
			if b {
				fmt.Printf("tuple nonexistence assign: mis[%d]", i);
			}
		}
		{
			_, b := msi[s];
			if b {
				fmt.Printf("tuple nonexistence decl: msi[%d]", i);
			}
			_, b = msi[s];
			if b {
				fmt.Printf("tuple nonexistence assign: msi[%d]", i);
			}
		}
		{
			_, b := mss[s];
			if b {
				fmt.Printf("tuple nonexistence decl: mss[%d]", i);
			}
			_, b = mss[s];
			if b {
				fmt.Printf("tuple nonexistence assign: mss[%d]", i);
			}
		}
		{
			_, b := mspa[s];
			if b {
				fmt.Printf("tuple nonexistence decl: mspa[%d]", i);
			}
			_, b = mspa[s];
			if b {
				fmt.Printf("tuple nonexistence assign: mspa[%d]", i);
			}
		}
		{
			_, b := mipT[i];
			if b {
				fmt.Printf("tuple nonexistence decl: mipT[%d]", i);
			}
			_, b = mipT[i];
			if b {
				fmt.Printf("tuple nonexistence assign: mipT[%d]", i);
			}
		}
		{
			_, b := mpTi[apT[i]];
			if b {
				fmt.Printf("tuple nonexistence decl: mpTi[apt[%d]]", i);
			}
			_, b = mpTi[apT[i]];
			if b {
				fmt.Printf("tuple nonexistence assign: mpTi[apT[%d]]", i);
			}
		}
		{
			_, b := mipM[i];
			if b {
				fmt.Printf("tuple nonexistence decl: mipM[%d]", i);
			}
			_, b = mipM[i];
			if b {
				fmt.Printf("tuple nonexistence assign: mipM[%d]", i);
			}
		}
//		{
//			_, b := mti[t];
//			if b {
//				fmt.Printf("tuple nonexistence decl: mti[%d]", i);
//			}
//			_, b = mti[t];
//			if b {
//				fmt.Printf("tuple nonexistence assign: mti[%d]", i);
//			}
//		}
		{
			_, b := mit[i];
			if b {
				fmt.Printf("tuple nonexistence decl: mit[%d]", i);
			}
			_, b = mit[i];
			if b {
				fmt.Printf("tuple nonexistence assign: mit[%d]", i);
			}
		}
	}


	// tests for structured map element updates
	for i := 0; i < count; i++ {
		s := strconv.Itoa(i);
		mspa[s][i % 2] = "deleted";
		if mspa[s][i % 2] != "deleted" {
			fmt.Printf("update mspa[%s][%d] = %s\n", s, i %2, mspa[s][i % 2]);
		}

		mipT[i].i += 1;
		if mipT[i].i != int64(i)+1 {
			fmt.Printf("update mipT[%d].i = %d\n", i, mipT[i].i);
		}
		mipT[i].f = float(i + 1);
		if (mipT[i].f != float(i + 1)) {
			fmt.Printf("update mipT[%d].f = %g\n", i, mipT[i].f);
		}

		mipM[i][i]++;
		if mipM[i][i] != (i + 1) + 1 {
			fmt.Printf("update mipM[%d][%d] = %i\n", i, i, mipM[i][i]);
		}
	}

	// test range on nil map
	var mnil map[string] int;
	for _, _ = range mnil {
		panic("range mnil");
	}
}
