Source file src/cmd/compile/internal/importer/genmeth_test.go

     1  // Copyright 2026 The Go Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  //go:build goexperiment.genericmethods
     6  
     7  package importer
     8  
     9  import (
    10  	"cmd/compile/internal/syntax"
    11  	"cmd/compile/internal/types2"
    12  	"internal/testenv"
    13  	"os"
    14  	"path/filepath"
    15  	"runtime"
    16  	"strings"
    17  	"testing"
    18  )
    19  
    20  func TestGenMeth(t *testing.T) {
    21  	testenv.MustHaveGoBuild(t)
    22  
    23  	// This package only handles gc export data.
    24  	if runtime.Compiler != "gc" {
    25  		t.Skipf("gc-built packages not available (compiler = %s)", runtime.Compiler)
    26  	}
    27  
    28  	tmpdir := t.TempDir()
    29  	testoutdir := filepath.Join(tmpdir, "testdata")
    30  	if err := os.Mkdir(testoutdir, 0700); err != nil {
    31  		t.Fatalf("making output dir: %v", err)
    32  	}
    33  
    34  	compile(t, "testdata", "genmeth.go", testoutdir, nil)
    35  
    36  	genmeth, err := Import(make(map[string]*types2.Package), "./testdata/genmeth", tmpdir, nil)
    37  	if err != nil {
    38  		t.Fatal(err)
    39  	}
    40  
    41  	check := func(pkgname, src string, imports importMap) (*types2.Package, error) {
    42  		f, err := syntax.Parse(syntax.NewFileBase(pkgname), strings.NewReader(src), nil, nil, 0)
    43  		if err != nil {
    44  			return nil, err
    45  		}
    46  		config := &types2.Config{
    47  			Importer: imports,
    48  		}
    49  		return config.Check(pkgname, []*syntax.File{f}, nil)
    50  	}
    51  
    52  	const pSrc = `package p
    53  
    54  import "genmeth"
    55  
    56  func _() {
    57  	var ex func(int) genmeth.List[int]
    58  	var fl func(genmeth.List[int]) genmeth.List[int]
    59  
    60  	var l genmeth.List[int]
    61  	l = l.Map(ex).FlatMap(fl)
    62  
    63  	var bl genmeth.BiList[int, any]
    64  	bl = bl.MapKeys(ex).Flip().FlatMapValues(fl).Flip()
    65  
    66  	var id func(int) int
    67  
    68  	var op genmeth.Option[int]
    69  	var _ int = op.MapIfPresent(id).Get()
    70  
    71  	var ol genmeth.OrderedList[int]
    72  	var _ int = ol.Min().Get()
    73  
    74  	var b genmeth.Box[int]
    75  	b.Set(42)
    76  	var _ int = b.Get()
    77  }
    78  `
    79  
    80  	importer := importMap{
    81  		"genmeth": genmeth,
    82  	}
    83  	if _, err := check("p", pSrc, importer); err != nil {
    84  		t.Errorf("Check failed: %v", err)
    85  	}
    86  }
    87  

View as plain text