mirror of
https://github.com/golang/go.git
synced 2026-06-28 03:40:37 +00:00
test: use goexperiment.genericmethods for tests
Change-Id: I0f0627122a54e88a18d1547d9d5ea6a1c02b72dd Reviewed-on: https://go-review.googlesource.com/c/go/+/772541 Reviewed-by: Robert Griesemer <gri@google.com> LUCI-TryBot-Result: golang-scoped@luci-project-accounts.iam.gserviceaccount.com <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
This commit is contained in:
parent
aa62c18749
commit
fdd592745d
7 changed files with 184 additions and 143 deletions
|
|
@ -720,72 +720,3 @@ var _ issue63285.A[issue63285.B[any]]
|
|||
t.Errorf("Check failed: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestGenMeth(t *testing.T) {
|
||||
t.SkipNow() // TODO(mark): Turn on with UIR V4.
|
||||
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)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
86
src/cmd/compile/internal/importer/genmeth_test.go
Normal file
86
src/cmd/compile/internal/importer/genmeth_test.go
Normal file
|
|
@ -0,0 +1,86 @@
|
|||
// 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)
|
||||
}
|
||||
}
|
||||
|
|
@ -827,74 +827,3 @@ type S struct {
|
|||
}
|
||||
wg.Wait()
|
||||
}
|
||||
|
||||
func TestGenMeth(t *testing.T) {
|
||||
t.SkipNow() // TODO(mark): Turn on with UIR V4.
|
||||
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)
|
||||
|
||||
fset := token.NewFileSet()
|
||||
|
||||
genmeth, err := Import(fset, make(map[string]*types.Package), "./testdata/genmeth", tmpdir, nil)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
check := func(pkgname, src string, imports importMap) (*types.Package, error) {
|
||||
f, err := parser.ParseFile(fset, "genmeth.go", src, 0)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
config := &types.Config{
|
||||
Importer: imports,
|
||||
}
|
||||
return config.Check(pkgname, fset, []*ast.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)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
92
src/go/internal/gcimporter/genmeth_test.go
Normal file
92
src/go/internal/gcimporter/genmeth_test.go
Normal file
|
|
@ -0,0 +1,92 @@
|
|||
// 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 gcimporter_test
|
||||
|
||||
import (
|
||||
"internal/testenv"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"runtime"
|
||||
"testing"
|
||||
|
||||
"go/ast"
|
||||
"go/parser"
|
||||
"go/token"
|
||||
"go/types"
|
||||
|
||||
. "go/internal/gcimporter"
|
||||
)
|
||||
|
||||
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)
|
||||
|
||||
fset := token.NewFileSet()
|
||||
|
||||
genmeth, err := Import(fset, make(map[string]*types.Package), "./testdata/genmeth", tmpdir, nil)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
check := func(pkgname, src string, imports importMap) (*types.Package, error) {
|
||||
f, err := parser.ParseFile(fset, "genmeth.go", src, 0)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
config := &types.Config{
|
||||
Importer: imports,
|
||||
}
|
||||
return config.Check(pkgname, fset, []*ast.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)
|
||||
}
|
||||
}
|
||||
|
|
@ -1,4 +1,5 @@
|
|||
// skip
|
||||
// run
|
||||
//go:build goexperiment.genericmethods
|
||||
|
||||
// Copyright 2026 The Go Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
// skip
|
||||
// run
|
||||
//go:build goexperiment.genericmethods
|
||||
|
||||
// Copyright 2026 The Go Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
// skip
|
||||
// run
|
||||
//go:build goexperiment.genericmethods
|
||||
|
||||
// Copyright 2026 The Go Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue