-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbenchFunc_test.go
53 lines (46 loc) · 1 KB
/
benchFunc_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
package eudore_test
import (
"reflect"
"testing"
)
type Stmt interface {
Init(DatabaseContext) error
Build(DatabaseContext)
}
type DatabaseContext interface{}
type StmtSelect struct {
Name string
}
func (stmt *StmtSelect) Init(DatabaseContext) error {
_ = stmt.Name
return nil
}
func (stmt *StmtSelect) Build(DatabaseContext) {
}
func BenchmarkFuncReflect(b *testing.B) {
fn := reflect.ValueOf(func(ctx DatabaseContext, stmt *StmtSelect) {
stmt.Init(ctx)
stmt.Build(ctx)
})
var ctx DatabaseContext = 0
stmt := &StmtSelect{"eudore"}
b.ReportAllocs()
for i := 0; i < b.N; i++ {
reflect.TypeOf(stmt)
fn.Call([]reflect.Value{reflect.ValueOf(ctx), reflect.ValueOf(stmt)})
}
}
func BenchmarkFuncAassertions(b *testing.B) {
fn := func(ctx DatabaseContext, stmt Stmt) {
stmtSelect := stmt.(*StmtSelect)
stmtSelect.Init(ctx)
stmtSelect.Build(ctx)
}
var ctx DatabaseContext = 0
stmt := &StmtSelect{"eudore"}
b.ReportAllocs()
for i := 0; i < b.N; i++ {
reflect.TypeOf(stmt)
fn(ctx, stmt)
}
}