-
Notifications
You must be signed in to change notification settings - Fork 4
/
maplookup_test.go
81 lines (72 loc) · 1.51 KB
/
maplookup_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
package main
import (
"fmt"
"testing"
)
// The following constants control the ratio of successful lookups where
// values exist, to lookups where the value does not exist.
const (
successLookups = 1
failureLookups = 1
)
func makeInnerMap(prefix string) map[string]interface{} {
m := make(map[string]interface{})
m[prefix+"1"] = 1
m[prefix+"2"] = 2
m[prefix+"3"] = 3
return m
}
func buildMap() MapOfMap {
m := make(MapOfMap)
m["1"] = makeInnerMap("1")
m["2"] = makeInnerMap("2")
m["3"] = makeInnerMap("3")
return m
}
func doTest(b *testing.B, f func(k1, k2 string) interface{}) {
tests := []struct {
k1 string
k2 string
val interface{}
}{
{"1", "11", 1},
{"1", "13", 3},
{"2", "21", 1},
{"2", "22", 2},
{"3", "32", 2},
{"3", "33", 3},
}
for _, tt := range tests {
for i := 0; i < successLookups; i++ {
if got := f(tt.k1, tt.k2); got != tt.val {
b.Errorf("Lookup[%v, %v] got %v, want %v", tt.k1, tt.k2, got, tt.val)
}
}
for i := 0; i < failureLookups; i++ {
if f(tt.k1+fmt.Sprint(i), tt.k2) != nil {
b.Errorf("Lookup[%v, %v] got something other than nil", tt.k1, tt.k2)
}
}
}
}
func BenchmarkGetWithOkCheck(b *testing.B) {
m := buildMap()
b.ResetTimer()
for i := 0; i < b.N; i++ {
doTest(b, m.GetWithOkCheck)
}
}
func BenchmarkGetWithCheck(b *testing.B) {
m := buildMap()
b.ResetTimer()
for i := 0; i < b.N; i++ {
doTest(b, m.GetWithCheck)
}
}
func BenchmarkGet(b *testing.B) {
m := buildMap()
b.ResetTimer()
for i := 0; i < b.N; i++ {
doTest(b, m.Get)
}
}