// errorcheck

// 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 that basic operations on named types are valid
// and preserve the type.
// Does not compile.

package main

type Bool bool

type Map map[int]int

func (Map) M() {}

type Slice []byte

var slice Slice

func asBool(Bool)     {}
func asString(String) {}

type String string

func main() {
	var (
		b    Bool = true
		i, j int
		c    = make(chan int)
		m    = make(Map)
	)

	asBool(b)
	asBool(!b)
	asBool(true)
	asBool(*&b)
	asBool(Bool(true))
	asBool(1 != 2) // ok now
	asBool(i < j)  // ok now

	_, b = m[2] // ok now

	var inter interface{}
	_, b = inter.(Map) // ok now
	_ = b

	var minter interface {
		M()
	}
	_, b = minter.(Map) // ok now
	_ = b

	_, bb := <-c
	asBool(bb) // ERROR "cannot use.*type bool.*as type Bool"
	_, b = <-c // ok now
	_ = b

	asString(String(slice)) // ok
}
