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

package main

import (
	"a"
	"fmt"
)

func main() {
	const want = 2
	if got := a.Min[int](2, 3); got != want {
		panic(fmt.Sprintf("got %d, want %d", got, want))
	}

	if got := a.Min(2, 3); got != want {
		panic(fmt.Sprintf("want %d, got %d", want, got))
	}

	if got := a.Min[float64](3.5, 2.0); got != want {
		panic(fmt.Sprintf("got %d, want %d", got, want))
	}

	if got := a.Min(3.5, 2.0); got != want {
		panic(fmt.Sprintf("got %d, want %d", got, want))
	}

	const want2 = "ay"
	if got := a.Min[string]("bb", "ay"); got != want2 { // ERROR "string does not satisfy"
		panic(fmt.Sprintf("got %d, want %d", got, want2))
	}

	if got := a.Min("bb", "ay"); got != want2 { // ERROR "string does not satisfy"
		panic(fmt.Sprintf("got %d, want %d", got, want2))
	}
}
