1
2
3
4
5
6
7 package gcimporter_test
8
9 import (
10 "internal/testenv"
11 "os"
12 "path/filepath"
13 "runtime"
14 "testing"
15
16 "go/ast"
17 "go/parser"
18 "go/token"
19 "go/types"
20
21 . "go/internal/gcimporter"
22 )
23
24 func TestGenMeth(t *testing.T) {
25 testenv.MustHaveGoBuild(t)
26
27
28 if runtime.Compiler != "gc" {
29 t.Skipf("gc-built packages not available (compiler = %s)", runtime.Compiler)
30 }
31
32 tmpdir := t.TempDir()
33 testoutdir := filepath.Join(tmpdir, "testdata")
34 if err := os.Mkdir(testoutdir, 0700); err != nil {
35 t.Fatalf("making output dir: %v", err)
36 }
37
38 compile(t, "testdata", "genmeth.go", testoutdir, nil)
39
40 fset := token.NewFileSet()
41
42 genmeth, err := Import(fset, make(map[string]*types.Package), "./testdata/genmeth", tmpdir, nil)
43 if err != nil {
44 t.Fatal(err)
45 }
46
47 check := func(pkgname, src string, imports importMap) (*types.Package, error) {
48 f, err := parser.ParseFile(fset, "genmeth.go", src, 0)
49 if err != nil {
50 return nil, err
51 }
52 config := &types.Config{
53 Importer: imports,
54 }
55 return config.Check(pkgname, fset, []*ast.File{f}, nil)
56 }
57
58 const pSrc = `package p
59
60 import "genmeth"
61
62 func _() {
63 var ex func(int) genmeth.List[int]
64 var fl func(genmeth.List[int]) genmeth.List[int]
65
66 var l genmeth.List[int]
67 l = l.Map(ex).FlatMap(fl)
68
69 var bl genmeth.BiList[int, any]
70 bl = bl.MapKeys(ex).Flip().FlatMapValues(fl).Flip()
71
72 var id func(int) int
73
74 var op genmeth.Option[int]
75 var _ int = op.MapIfPresent(id).Get()
76
77 var ol genmeth.OrderedList[int]
78 var _ int = ol.Min().Get()
79
80 var b genmeth.Box[int]
81 b.Set(42)
82 var _ int = b.Get()
83 }
84 `
85
86 importer := importMap{
87 "genmeth": genmeth,
88 }
89 if _, err := check("p", pSrc, importer); err != nil {
90 t.Errorf("Check failed: %v", err)
91 }
92 }
93
View as plain text