blob: 85c6402e7c2be275bdf7890e2adadddd96845793 [file] [edit]
// run -goexperiment genericmethods
// Copyright 2026 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.
// Verify that generic methods are assembled correctly.
package main
import "fmt"
type List[E any] []E
func (l List[E]) apply[P any](f func(E) P) List[P] {
r := make(List[P], len(l))
for i, x := range l {
r[i] = f(x)
}
return r
}
func (l List[E]) print() string {
s := ""
for i, x := range l {
if i > 0 {
s += "->"
}
s += fmt.Sprint(x)
}
return s
}
func main() {
l := make(List[int], 3)
for i := range l {
l[i] = i
}
f := func(i int) string {
return string("abc"[i])
}
if r := l.apply(f).print(); r != "a->b->c" {
panic(fmt.Sprintf("got %s, want a->b->c", r))
}
}