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

// This file tests built-in calls on generic types.

package builtins

type Bmc interface {
	type map[rune]string, chan int
}

type Bms interface {
	type map[string]int, []int
}

type Bcs interface {
	type chan bool, []float64
}

type Bss interface {
	type []int, []string
}

func _[T any] () {
	_ = make(T /* ERROR invalid argument */ )
	_ = make(T /* ERROR invalid argument */ , 10)
	_ = make(T /* ERROR invalid argument */ , 10, 20)
}

func _[T Bmc] () {
	_ = make(T)
	_ = make(T, 10)
	_ = make /* ERROR expects 1 or 2 arguments */ (T, 10, 20)
}

func _[T Bms] () {
	_ = make /* ERROR expects 2 arguments */ (T)
	_ = make(T, 10)
	_ = make /* ERROR expects 2 arguments */ (T, 10, 20)
}

func _[T Bcs] () {
	_ = make /* ERROR expects 2 arguments */ (T)
	_ = make(T, 10)
	_ = make /* ERROR expects 2 arguments */ (T, 10, 20)
}

func _[T Bss] () {
	_ = make /* ERROR expects 2 or 3 arguments */ (T)
	_ = make(T, 10)
	_ = make(T, 10, 20)
}
