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

// Test wrappers/interfaces for generic type embedding another generic type.

package main

import "fmt"

type A[T any] struct {
	B[T]
}

type B[T any] struct {
	val T
}

func (b *B[T]) get() T {
	return b.val
}

type getter[T any] interface {
	get() T
}

//go:noinline
func doGet[T any](i getter[T]) T {
	return i.get()
}

//go:noline
func doGet2[T any](i interface{}) T {
	i2 := i.(getter[T])
	return i2.get()
}

func main() {
	a := A[int]{B: B[int]{3}}
	var i getter[int] = &a

	if got, want := doGet(i), 3; got != want {
		panic(fmt.Sprintf("got %v, want %v", got, want))
	}

	as := A[string]{B: B[string]{"abc"}}
	if got, want := doGet2[string](&as), "abc"; got != want {
		panic(fmt.Sprintf("got %v, want %v", got, want))
	}
}
