// Copyright 2021 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 contains test cases for typeset-only constraint elements.

package p

type (
        _[_ t] t
        _[_ ~t] t
        _[_ t|t] t
        _[_ ~t|t] t
        _[_ t|~t] t
        _[_ ~t|~t] t

        _[_ t, _, _ t|t] t
        _[_ t, _, _ ~t|t] t
        _[_ t, _, _ t|~t] t
        _[_ t, _, _ ~t|~t] t

        _[_ t.t] t
        _[_ ~t.t] t
        _[_ t.t|t.t] t
        _[_ ~t.t|t.t] t
        _[_ t.t|~t.t] t
        _[_ ~t.t|~t.t] t

        _[_ t, _, _ t.t|t.t] t
        _[_ t, _, _ ~t.t|t.t] t
        _[_ t, _, _ t.t|~t.t] t
        _[_ t, _, _ ~t.t|~t.t] t

        _[_ struct{}] t
        _[_ ~struct{}] t

        _[_ struct{}|t] t
        _[_ ~struct{}|t] t
        _[_ struct{}|~t] t
        _[_ ~struct{}|~t] t

        _[_ t|struct{}] t
        _[_ ~t|struct{}] t
        _[_ t|~struct{}] t
        _[_ ~t|~struct{}] t

        // TODO(gri) fix this (issue #49175)
        // _[_ []t]t
        _[_ ~[]t]t
)

// test cases for issue #49174
func _[_ t]() {}
func _[_ []t]() {}
func _[_ []t | t]() {}
func _[_ t | []t]() {}
func _[_ []t | []t]() {}
func _[_ t[t] | t[t]]() {}

// Single-expression type parameter lists and those that don't start
// with a (type parameter) name are considered array sizes.
// The term must be a valid expression (it could be a type - and then
// a type-checker will complain - but we don't allow ~ in the expr).
type (
        _[t] t
        _[/* ERROR unexpected ~ */ ~t] t
        _[t|t] t
        _[/* ERROR unexpected ~ */ ~t|t] t
        _[t| /* ERROR unexpected ~ */ ~t] t
        _[/* ERROR unexpected ~ */ ~t|~t] t
)

type (
        _[_ t, t /* ERROR missing type constraint */ ] t
        _[_ ~t, t /* ERROR missing type constraint */ ] t
        _[_ t, /* ERROR type parameters must be named */ ~t] t
        _[_ ~t, /* ERROR type parameters must be named */ ~t] t

        _[_ t|t, /* ERROR type parameters must be named */ t|t] t
        _[_ ~t|t, /* ERROR type parameters must be named */ t|t] t
        _[_ t|t, /* ERROR type parameters must be named */ ~t|t] t
        _[_ ~t|t, /* ERROR type parameters must be named */ ~t|t] t
)
