1
2
3
4
5
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
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