// run

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

// Test types of constant expressions, using reflect.

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 {
		println("type of f is", t, "want", want)
		panic("fail")
	}

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