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

func typeof(x interface{}) string {
	return reflect.Typeof(x).String();
}

func f() int {
	return 0;
}

func g() int {
	return 0;
}

type T func() int

var m = map[string] T {
	"f": f
}

type A int
type B int

var a A = 1;
var b B = 2;
var x int;

func main() {
	want := typeof(g);
	if t := typeof(f); t != want {
		panicln("type of f is", t, "want", want);
	}

	want = typeof(a);
	if t := typeof(+a); t != want {
		panicln("type of +a is", t, "want", want);
	}
	if t := typeof(a+0); t != want {
		panicln("type of a+0 is", t, "want", want);
	}
}
