// 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. //go:build goexperiment.genericmethods package importer import ( "cmd/compile/internal/syntax" "cmd/compile/internal/types2" "internal/testenv" "os" "path/filepath" "runtime" "strings" "testing" ) func TestGenMeth(t *testing.T) { testenv.MustHaveGoBuild(t) // This package only handles gc export data. if runtime.Compiler != "gc" { t.Skipf("gc-built packages not available (compiler = %s)", runtime.Compiler) } tmpdir := t.TempDir() testoutdir := filepath.Join(tmpdir, "testdata") if err := os.Mkdir(testoutdir, 0700); err != nil { t.Fatalf("making output dir: %v", err) } compile(t, "testdata", "genmeth.go", testoutdir, nil) genmeth, err := Import(make(map[string]*types2.Package), "./testdata/genmeth", tmpdir, nil) if err != nil { t.Fatal(err) } check := func(pkgname, src string, imports importMap) (*types2.Package, error) { f, err := syntax.Parse(syntax.NewFileBase(pkgname), strings.NewReader(src), nil, nil, 0) if err != nil { return nil, err } config := &types2.Config{ Importer: imports, } return config.Check(pkgname, []*syntax.File{f}, nil) } const pSrc = `package p import "genmeth" func _() { var ex func(int) genmeth.List[int] var fl func(genmeth.List[int]) genmeth.List[int] var l genmeth.List[int] l = l.Map(ex).FlatMap(fl) var bl genmeth.BiList[int, any] bl = bl.MapKeys(ex).Flip().FlatMapValues(fl).Flip() var id func(int) int var op genmeth.Option[int] var _ int = op.MapIfPresent(id).Get() var ol genmeth.OrderedList[int] var _ int = ol.Min().Get() var b genmeth.Box[int] b.Set(42) var _ int = b.Get() } ` importer := importMap{ "genmeth": genmeth, } if _, err := check("p", pSrc, importer); err != nil { t.Errorf("Check failed: %v", err) } }