// run -gcflags=-G=3

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

// Smoke test for constraint literals with elided interface
// per issue #48424.

package main

func identity[T int](x T) T {
	return x
}

func min[T int | string](x, y T) T {
	if x < y {
		return x
	}
	return y
}

func max[T ~int | ~float64](x, y T) T {
	if x > y {
		return x
	}
	return y
}

func main() {
	if identity(1) != 1 {
		panic("identity(1) failed")
	}

	if min(2, 3) != 2 {
		panic("min(2, 3) failed")
	}

	if min("foo", "bar") != "bar" {
		panic(`min("foo", "bar") failed`)
	}

	if max(2, 3) != 3 {
		panic("max(2, 3) failed")
	}
}

// Some random type parameter lists with elided interfaces.

type (
	_[T struct{}]                     struct{}
	_[M map[K]V, K comparable, V any] struct{}
	_[_ interface{} | int]            struct{}
)
