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

package generics

func _[A, B any](a A, b B) int {}
func _[T any](x, y T) T

type T[P any] struct{}
type T[P1, P2, P3 any] struct{}

type T[P C] struct{}
type T[P1, P2, P3 C] struct{}

type T[P C[P]] struct{}
type T[P1, P2, P3 C[P1, P2, P3]] struct{}

func f[P any](x P)
func f[P1, P2, P3 any](x1 P1, x2 P2, x3 P3) struct{}

func f[P interface{}](x P)
func f[P1, P2, P3 interface{ m1(P1); ~P2|~P3 }](x1 P1, x2 P2, x3 P3) struct{}
func f[P any](T1[P], T2[P]) T3[P]

func (x T[P]) m()
func ((T[P])) m(x T[P]) P

func _() {
	type _ []T[P]
	var _ []T[P]
	_ = []T[P]{}
}

// type constraint literals with elided interfaces
func _[P ~int, Q int | string]() {}
func _[P struct{f int}, Q *P]() {}

// various potentially ambiguous type parameter lists (issue #49482)
type _[P *T,] struct{}
type _[P T | T] struct{}
type _[P T | T | T | T] struct{}
type _[P *T, _ any] struct{}
type _[P (*T),] struct{}
type _[P (*T), _ any] struct{}
type _[P (T),] struct{}
type _[P (T), _ any] struct{}

type _[P *struct{}] struct{}
type _[P (*struct{})] struct{}
type _[P ([]int)] struct{}

// a type literal in an |-expression indicates a type parameter list (blank after type parameter list and type)
type _[P *[]int] struct{}
type _[P *T | T, Q T] struct{}
type _[P *[]T | T] struct{}
type _[P *T | T | T | T | ~T] struct{}
type _[P *T | T | T | ~T | T] struct{}
type _[P *T | T | struct{} | T] struct{}
type _[P <-chan int] struct{}
type _[P *T | struct{} | T] struct{}

// a trailing comma always indicates a (possibly invalid) type parameter list (blank after type parameter list and type)
type _[P *T,] struct{}
type _[P *T | T,] struct{}
type _[P *T | <-T | T,] struct{}

// slice/array type declarations (no blank between array length and element type)
type _ []byte
type _ [n]byte
type _ [P(T)]byte
type _ [P((T))]byte
type _ [P * *T]byte
type _ [P * T]byte
type _ [P(*T)]byte
type _ [P(**T)]byte
type _ [P * T - T]byte
type _ [P * T - T]byte
type _ [P * T | T]byte
type _ [P * T | <-T | T]byte

// equivalent test cases for potentially ambiguous type parameter lists, except
// for function declarations there is no ambiguity (issue #51548)
func _[P *T,]() {}
func _[P *T, _ any]() {}
func _[P (*T),]() {}
func _[P (*T), _ any]() {}
func _[P (T),]() {}
func _[P (T), _ any]() {}

func _[P *struct{}] () {}
func _[P (*struct{})] () {}
func _[P ([]int)] () {}

func _ [P(T)]() {}
func _ [P((T))]() {}
func _ [P * *T]() {}
func _ [P * T]() {}
func _ [P(*T)]() {}
func _ [P(**T)]() {}
func _ [P * T]() {}

func _[
	P *T,
]() {}
