Files

59 lines
859 B
Go

package main
import "testing"
// go test -bench=. -benchmem performance_test.go
type ValueInterface interface {
Add() int
}
type Value struct {
number int
}
//go:noinline
func (v Value) Add() int {
return v.number + v.number
}
type Value2 struct {
number int
}
//go:noinline
func (v Value2) Add() int {
return v.number + v.number
}
var Result int
func Get(index int) ValueInterface {
if index == 0 {
return Value{}
} else {
return Value2{}
}
}
func BenchmarkDirect(b *testing.B) {
var value Value
for i := 0; i < b.N; i++ {
Result = value.Add()
}
}
func BenchmarkWithInterface1(b *testing.B) {
var iface ValueInterface = Get(0)
for i := 0; i < b.N; i++ {
Result = iface.Add()
}
}
func BenchmarkWithInterface2(b *testing.B) {
var iface ValueInterface = Get(1)
for i := 0; i < b.N; i++ {
Result = iface.(Value2).Add()
}
}