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  }