|
package lookup_test |
|
|
|
import "testing" |
|
|
|
var globalMap = map[string]bool{ |
|
"GET": true, |
|
"HEAD": true, |
|
"POST": true, |
|
"PUT": true, |
|
"DELETE": true, |
|
"CONNECT": true, |
|
"OPTIONS": true, |
|
"TRACE": true, |
|
"PATCH": true, |
|
} |
|
|
|
func noop() { |
|
a := 1 |
|
_ = a + 1 |
|
} |
|
|
|
func doSwitchLookup(value string) { |
|
switch value { |
|
case "GET": |
|
noop() |
|
case "HEAD": |
|
noop() |
|
case "POST": |
|
noop() |
|
case "PUT": |
|
noop() |
|
case "DELETE": |
|
noop() |
|
case "CONNECT": |
|
noop() |
|
case "OPTIONS": |
|
noop() |
|
case "TRACE": |
|
noop() |
|
case "PATCH": |
|
noop() |
|
default: |
|
noop() |
|
} |
|
} |
|
|
|
func doIfElseLookup(value string) { |
|
if value == "GET" { |
|
noop() |
|
} else if value == "HEAD" { |
|
noop() |
|
} else if value == "POST" { |
|
noop() |
|
} else if value == "PUT" { |
|
noop() |
|
} else if value == "DELETE" { |
|
noop() |
|
} else if value == "CONNECT" { |
|
noop() |
|
} else if value == "OPTIONS" { |
|
noop() |
|
} else if value == "TRACE" { |
|
noop() |
|
} else if value == "PATCH" { |
|
noop() |
|
} else { |
|
noop() |
|
} |
|
} |
|
|
|
func doMapLookup(value string) { |
|
_ = globalMap[value] |
|
noop() |
|
} |
|
|
|
func BenchmarkLookUp(b *testing.B) { |
|
b.Run("ValueExists@Head", func(b *testing.B) { |
|
value := "GET" |
|
|
|
b.Run("Switch", func(b *testing.B) { |
|
for i := 0; i < b.N; i++ { |
|
doSwitchLookup(value) |
|
} |
|
}) |
|
|
|
b.Run("IfElse", func(b *testing.B) { |
|
for i := 0; i < b.N; i++ { |
|
doIfElseLookup(value) |
|
} |
|
}) |
|
|
|
b.Run("Map", func(b *testing.B) { |
|
for i := 0; i < b.N; i++ { |
|
doMapLookup(value) |
|
} |
|
}) |
|
}) |
|
|
|
b.Run("ValueExists@End", func(b *testing.B) { |
|
value := "PATCH" |
|
|
|
b.Run("Switch", func(b *testing.B) { |
|
for i := 0; i < b.N; i++ { |
|
doSwitchLookup(value) |
|
} |
|
}) |
|
|
|
b.Run("IfElse", func(b *testing.B) { |
|
for i := 0; i < b.N; i++ { |
|
doIfElseLookup(value) |
|
} |
|
}) |
|
|
|
b.Run("Map", func(b *testing.B) { |
|
for i := 0; i < b.N; i++ { |
|
doMapLookup(value) |
|
} |
|
}) |
|
}) |
|
|
|
b.Run("ValueDoesntExist", func(b *testing.B) { |
|
value := "LOOKATME" |
|
|
|
b.Run("Switch", func(b *testing.B) { |
|
for i := 0; i < b.N; i++ { |
|
doSwitchLookup(value) |
|
} |
|
}) |
|
|
|
b.Run("IfElse", func(b *testing.B) { |
|
for i := 0; i < b.N; i++ { |
|
doIfElseLookup(value) |
|
} |
|
}) |
|
|
|
b.Run("Map", func(b *testing.B) { |
|
for i := 0; i < b.N; i++ { |
|
doMapLookup(value) |
|
} |
|
}) |
|
}) |
|
} |