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 }