mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
[dev.regabi] cmd/compile: split out package test [generated]
[git-generate] cd src/cmd/compile/internal/gc rf ' mv bench_test.go constFold_test.go dep_test.go \ fixedbugs_test.go iface_test.go float_test.go global_test.go \ inl_test.go lang_test.go logic_test.go \ reproduciblebuilds_test.go shift_test.go ssa_test.go \ truncconst_test.go zerorange_test.go \ cmd/compile/internal/test ' mv testdata ../test Change-Id: I041971b7e9766673f7a331679bfe1c8110dcda66 Reviewed-on: https://go-review.googlesource.com/c/go/+/279480 Trust: Russ Cox <rsc@golang.org> Run-TryBot: Russ Cox <rsc@golang.org> Reviewed-by: Matthew Dempsky <mdempsky@google.com>
This commit is contained in:
parent
3d8a3cb06b
commit
37f138df6b
56 changed files with 18 additions and 22 deletions
126
src/cmd/compile/internal/test/iface_test.go
Normal file
126
src/cmd/compile/internal/test/iface_test.go
Normal file
|
|
@ -0,0 +1,126 @@
|
|||
// Copyright 2016 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.
|
||||
|
||||
package test
|
||||
|
||||
import "testing"
|
||||
|
||||
// Test to make sure we make copies of the values we
|
||||
// put in interfaces.
|
||||
|
||||
var x int
|
||||
|
||||
func TestEfaceConv1(t *testing.T) {
|
||||
a := 5
|
||||
i := interface{}(a)
|
||||
a += 2
|
||||
if got := i.(int); got != 5 {
|
||||
t.Errorf("wanted 5, got %d\n", got)
|
||||
}
|
||||
}
|
||||
|
||||
func TestEfaceConv2(t *testing.T) {
|
||||
a := 5
|
||||
sink = &a
|
||||
i := interface{}(a)
|
||||
a += 2
|
||||
if got := i.(int); got != 5 {
|
||||
t.Errorf("wanted 5, got %d\n", got)
|
||||
}
|
||||
}
|
||||
|
||||
func TestEfaceConv3(t *testing.T) {
|
||||
x = 5
|
||||
if got := e2int3(x); got != 5 {
|
||||
t.Errorf("wanted 5, got %d\n", got)
|
||||
}
|
||||
}
|
||||
|
||||
//go:noinline
|
||||
func e2int3(i interface{}) int {
|
||||
x = 7
|
||||
return i.(int)
|
||||
}
|
||||
|
||||
func TestEfaceConv4(t *testing.T) {
|
||||
a := 5
|
||||
if got := e2int4(a, &a); got != 5 {
|
||||
t.Errorf("wanted 5, got %d\n", got)
|
||||
}
|
||||
}
|
||||
|
||||
//go:noinline
|
||||
func e2int4(i interface{}, p *int) int {
|
||||
*p = 7
|
||||
return i.(int)
|
||||
}
|
||||
|
||||
type Int int
|
||||
|
||||
var y Int
|
||||
|
||||
type I interface {
|
||||
foo()
|
||||
}
|
||||
|
||||
func (i Int) foo() {
|
||||
}
|
||||
|
||||
func TestIfaceConv1(t *testing.T) {
|
||||
a := Int(5)
|
||||
i := interface{}(a)
|
||||
a += 2
|
||||
if got := i.(Int); got != 5 {
|
||||
t.Errorf("wanted 5, got %d\n", int(got))
|
||||
}
|
||||
}
|
||||
|
||||
func TestIfaceConv2(t *testing.T) {
|
||||
a := Int(5)
|
||||
sink = &a
|
||||
i := interface{}(a)
|
||||
a += 2
|
||||
if got := i.(Int); got != 5 {
|
||||
t.Errorf("wanted 5, got %d\n", int(got))
|
||||
}
|
||||
}
|
||||
|
||||
func TestIfaceConv3(t *testing.T) {
|
||||
y = 5
|
||||
if got := i2Int3(y); got != 5 {
|
||||
t.Errorf("wanted 5, got %d\n", int(got))
|
||||
}
|
||||
}
|
||||
|
||||
//go:noinline
|
||||
func i2Int3(i I) Int {
|
||||
y = 7
|
||||
return i.(Int)
|
||||
}
|
||||
|
||||
func TestIfaceConv4(t *testing.T) {
|
||||
a := Int(5)
|
||||
if got := i2Int4(a, &a); got != 5 {
|
||||
t.Errorf("wanted 5, got %d\n", int(got))
|
||||
}
|
||||
}
|
||||
|
||||
//go:noinline
|
||||
func i2Int4(i I, p *Int) Int {
|
||||
*p = 7
|
||||
return i.(Int)
|
||||
}
|
||||
|
||||
func BenchmarkEfaceInteger(b *testing.B) {
|
||||
sum := 0
|
||||
for i := 0; i < b.N; i++ {
|
||||
sum += i2int(i)
|
||||
}
|
||||
sink = sum
|
||||
}
|
||||
|
||||
//go:noinline
|
||||
func i2int(i interface{}) int {
|
||||
return i.(int)
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue