github.com/go-email-validator/go-email-validator@v0.0.0-20230409163946-b8b9e6a0552e/test/performance/pointer_is_nil_test.go (about) 1 package performance 2 3 import ( 4 "github.com/modern-go/reflect2" 5 "reflect" 6 "testing" 7 ) 8 9 func getError() error { 10 return &MyError{} 11 } 12 13 type MyError struct{} 14 15 func (e *MyError) Error() string { 16 return "MyError" 17 } 18 func IsNil(v interface{}) bool { 19 return v == nil || (reflect.ValueOf(v).Kind() == reflect.Ptr && reflect.ValueOf(v).IsNil()) 20 } 21 22 func BenchmarkPointerIsNilReflect(b *testing.B) { 23 err := getError() 24 25 b.ResetTimer() 26 for iteration := 0; iteration < b.N; iteration++ { 27 res := IsNil(err) 28 _ = res 29 } 30 } 31 32 func BenchmarkPointerIsNilReflect2(b *testing.B) { 33 err := getError() 34 35 b.ResetTimer() 36 for iteration := 0; iteration < b.N; iteration++ { 37 res := reflect2.IsNil(err) 38 _ = res 39 } 40 } 41 42 func BenchmarkPointerIsNilDefault(b *testing.B) { 43 err := getError() 44 45 b.ResetTimer() 46 for iteration := 0; iteration < b.N; iteration++ { 47 res := err == (*MyError)(nil) 48 _ = res 49 } 50 }