Added benchmarks for 'ToXX' vs 'To[T type]'
They show some weird numbers considering the 'On' benchmarks
This commit is contained in:
parent
6917e06269
commit
697681d8d4
|
@ -323,16 +323,60 @@ func TestOn(t *testing.T) {
|
|||
var fnObj = func(_ *Object) error {
|
||||
return nil
|
||||
}
|
||||
var fnAct = func(_ *Actor) error {
|
||||
return nil
|
||||
}
|
||||
var fnA = func(_ *Activity) error {
|
||||
return nil
|
||||
}
|
||||
var fnIA = func(_ *IntransitiveActivity) error {
|
||||
return nil
|
||||
|
||||
func Benchmark_ToT_vs_To_T(b *testing.B) {
|
||||
maybeObject := Object{}
|
||||
b.Run("ToObject", func(b *testing.B) {
|
||||
for i := 0; i < b.N; i++ {
|
||||
ToObject(maybeObject)
|
||||
}
|
||||
})
|
||||
b.Run("To_T_Object", func(b *testing.B) {
|
||||
for i := 0; i < b.N; i++ {
|
||||
To[Object](maybeObject)
|
||||
}
|
||||
})
|
||||
maybeActor := Actor{}
|
||||
b.Run("ToActor", func(b *testing.B) {
|
||||
for i := 0; i < b.N; i++ {
|
||||
ToActor(maybeActor)
|
||||
}
|
||||
})
|
||||
b.Run("To_T_Actor", func(b *testing.B) {
|
||||
for i := 0; i < b.N; i++ {
|
||||
To[Actor](maybeActor)
|
||||
}
|
||||
})
|
||||
maybeActivity := Activity{}
|
||||
b.Run("ToActivity", func(b *testing.B) {
|
||||
for i := 0; i < b.N; i++ {
|
||||
ToActivity(maybeActivity)
|
||||
}
|
||||
})
|
||||
b.Run("To_T_Activity", func(b *testing.B) {
|
||||
for i := 0; i < b.N; i++ {
|
||||
To[Activity](maybeActivity)
|
||||
}
|
||||
})
|
||||
maybeIntransitiveActivity := IntransitiveActivity{}
|
||||
b.Run("ToIntransitiveActivity", func(b *testing.B) {
|
||||
for i := 0; i < b.N; i++ {
|
||||
ToIntransitiveActivity(maybeIntransitiveActivity)
|
||||
}
|
||||
})
|
||||
b.Run("To_T_IntransitiveActivity", func(b *testing.B) {
|
||||
for i := 0; i < b.N; i++ {
|
||||
To[IntransitiveActivity](maybeIntransitiveActivity)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
var (
|
||||
fnAct = func(_ *Actor) error { return nil }
|
||||
fnA = func(_ *Activity) error { return nil }
|
||||
fnIA = func(_ *IntransitiveActivity) error { return nil }
|
||||
)
|
||||
|
||||
func Benchmark_OnT_vs_On_T(b *testing.B) {
|
||||
var it Item
|
||||
b.Run("OnObject", func(b *testing.B) {
|
||||
|
|
|
@ -676,6 +676,9 @@ func ToObject(it Item) (*Object, error) {
|
|||
// NOTE(marius): this is an ugly way of dealing with the interface conversion error: types from different scopes
|
||||
typ := reflect.TypeOf(new(Object))
|
||||
if reflect.TypeOf(it).ConvertibleTo(typ) {
|
||||
if reflect.ValueOf(it).IsNil() {
|
||||
return nil, nil
|
||||
}
|
||||
if i, ok := reflect.ValueOf(it).Convert(typ).Interface().(*Object); ok {
|
||||
return i, nil
|
||||
}
|
||||
|
|
Reference in a new issue