github.com/go-email-validator/go-email-validator@v0.0.0-20230409163946-b8b9e6a0552e/test/performance/type_vs_string_map_bench_test.go (about)

     1  package performance
     2  
     3  import (
     4  	"reflect"
     5  	"testing"
     6  )
     7  
     8  type type1 struct{}
     9  type type2 struct{}
    10  type type3 struct{}
    11  type type4 struct{}
    12  type type5 struct{}
    13  type type6 struct{}
    14  type type7 struct{}
    15  type type8 struct{}
    16  type type9 struct{}
    17  type type10 struct{}
    18  type type11 struct{}
    19  type type12 struct{}
    20  type type13 struct{}
    21  type type14 struct{}
    22  type type15 struct{}
    23  type type16 struct{}
    24  type type17 struct{}
    25  type type18 struct{}
    26  type type19 struct{}
    27  type type20 struct{}
    28  
    29  var typeSlice = []reflect.Type{
    30  	reflect.TypeOf((*type1)(nil)),
    31  	reflect.TypeOf((*type2)(nil)),
    32  	reflect.TypeOf((*type3)(nil)),
    33  	reflect.TypeOf((*type4)(nil)),
    34  	reflect.TypeOf((*type5)(nil)),
    35  	reflect.TypeOf((*type6)(nil)),
    36  	reflect.TypeOf((*type7)(nil)),
    37  	reflect.TypeOf((*type8)(nil)),
    38  	reflect.TypeOf((*type9)(nil)),
    39  	reflect.TypeOf((*type10)(nil)),
    40  	reflect.TypeOf((*type11)(nil)),
    41  	reflect.TypeOf((*type12)(nil)),
    42  	reflect.TypeOf((*type13)(nil)),
    43  	reflect.TypeOf((*type14)(nil)),
    44  	reflect.TypeOf((*type15)(nil)),
    45  	reflect.TypeOf((*type16)(nil)),
    46  	reflect.TypeOf((*type17)(nil)),
    47  	reflect.TypeOf((*type18)(nil)),
    48  	reflect.TypeOf((*type19)(nil)),
    49  	reflect.TypeOf((*type20)(nil)),
    50  }
    51  
    52  func BenchmarkGetType(b *testing.B) {
    53  	var v reflect.Type
    54  	for i := 1; i < 10000000; i++ {
    55  		v = reflect.TypeOf((*type1)(nil))
    56  	}
    57  	_ = v
    58  }
    59  func BenchmarkGetTypeName(b *testing.B) {
    60  	var v string
    61  	for i := 1; i < 10000000; i++ {
    62  		v = reflect.TypeOf((*type1)(nil)).Name()
    63  	}
    64  	_ = v
    65  }
    66  
    67  func BenchmarkTypeMap(b *testing.B) {
    68  	m := getTypeMap()
    69  
    70  	for i := 1; i < 100000; i++ {
    71  		for _, value := range typeSlice {
    72  			m[value] = true
    73  		}
    74  
    75  		var check interface{}
    76  		for _, value := range typeSlice {
    77  			check = m[value]
    78  		}
    79  		_ = check
    80  	}
    81  }
    82  
    83  var typeStringSlice = []string{
    84  	reflect.TypeOf((*type1)(nil)).Elem().Name(),
    85  	reflect.TypeOf((*type2)(nil)).Elem().Name(),
    86  	reflect.TypeOf((*type3)(nil)).Elem().Name(),
    87  	reflect.TypeOf((*type4)(nil)).Elem().Name(),
    88  	reflect.TypeOf((*type5)(nil)).Elem().Name(),
    89  	reflect.TypeOf((*type6)(nil)).Elem().Name(),
    90  	reflect.TypeOf((*type7)(nil)).Elem().Name(),
    91  	reflect.TypeOf((*type8)(nil)).Elem().Name(),
    92  	reflect.TypeOf((*type9)(nil)).Elem().Name(),
    93  	reflect.TypeOf((*type10)(nil)).Elem().Name(),
    94  	reflect.TypeOf((*type11)(nil)).Elem().Name(),
    95  	reflect.TypeOf((*type12)(nil)).Elem().Name(),
    96  	reflect.TypeOf((*type13)(nil)).Elem().Name(),
    97  	reflect.TypeOf((*type14)(nil)).Elem().Name(),
    98  	reflect.TypeOf((*type15)(nil)).Elem().Name(),
    99  	reflect.TypeOf((*type16)(nil)).Elem().Name(),
   100  	reflect.TypeOf((*type17)(nil)).Elem().Name(),
   101  	reflect.TypeOf((*type18)(nil)).Elem().Name(),
   102  	reflect.TypeOf((*type19)(nil)).Elem().Name(),
   103  	reflect.TypeOf((*type20)(nil)).Elem().Name(),
   104  }
   105  
   106  func BenchmarkTypeStringMap(b *testing.B) {
   107  	m := getStringMap()
   108  
   109  	for i := 1; i < 100000; i++ {
   110  		for _, value := range typeStringSlice {
   111  			m[value] = true
   112  		}
   113  
   114  		var check interface{}
   115  		for _, value := range typeStringSlice {
   116  			check = m[value]
   117  		}
   118  		_ = check
   119  	}
   120  }
   121  
   122  var strSlice = []string{
   123  	"1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15",
   124  	"16", "17", "18", "19", "20",
   125  }
   126  
   127  func BenchmarkStringMap(b *testing.B) {
   128  	m := getStringMap()
   129  
   130  	for i := 1; i < 100000; i++ {
   131  		for _, value := range strSlice {
   132  			m[value] = true
   133  		}
   134  
   135  		var check interface{}
   136  		for _, value := range strSlice {
   137  			check = m[value]
   138  		}
   139  		_ = check
   140  	}
   141  }
   142  
   143  var intSlice = []int{
   144  	1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
   145  	16, 17, 18, 19, 20,
   146  }
   147  
   148  func BenchmarkIntMap(b *testing.B) {
   149  	m := getIntMap()
   150  
   151  	for i := 1; i < 100000; i++ {
   152  		for _, value := range intSlice {
   153  			m[value] = true
   154  		}
   155  
   156  		var check interface{}
   157  		for _, value := range intSlice {
   158  			check = m[value]
   159  		}
   160  		_ = check
   161  	}
   162  }
   163  
   164  func getTypeMap() map[reflect.Type]interface{} {
   165  	return make(map[reflect.Type]interface{})
   166  }
   167  
   168  func getStringMap() map[string]interface{} {
   169  	return make(map[string]interface{})
   170  }
   171  
   172  func getIntMap() map[int]interface{} {
   173  	return make(map[int]interface{})
   174  }