-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsyncmap_test.go
115 lines (91 loc) · 2.3 KB
/
syncmap_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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
package genmap_test
import (
"github.com/iofic/genmap"
"testing"
)
func TestSyncMap(t *testing.T) {
const (
_ int = iota
val1
val2
)
m := genmap.NewSyncMap()
ik := genmap.NewKey[int, string]("int key")
genmap.StoreSync[int, string](m, ik, val1)
v, ok := genmap.LoadSync[int, string](m, ik)
if v != val1 || !ok {
t.Errorf("Load() = %v %t, want %v %t", v, ok, val1, true)
}
genmap.StoreSync[int, string](m, ik, val2)
v, ok = genmap.LoadSync[int, string](m, ik)
if v != val2 || !ok {
t.Errorf("Load() = %v %t, want %v %t", v, ok, val2, true)
}
genmap.DeleteSync[int, string](m, ik)
v, ok = genmap.LoadSync[int, string](m, ik)
if v != 0 || ok {
t.Errorf("Load() = %v %t, want %v %t", v, ok, 0, false)
}
}
func TestLoadAndDelete(t *testing.T) {
const (
_ int = iota
val1
)
m := genmap.NewSyncMap()
ik := genmap.NewKey[int, string]("int key")
genmap.StoreSync[int, string](m, ik, val1)
got, loaded := genmap.LoadAndDelete(m, ik)
if got != val1 || !loaded {
t.Errorf("LoadAndDelete() = %v %t, want %v %t", got, loaded, val1, true)
}
got1, ok := genmap.LoadSync(m, ik)
if got1 != 0 || ok {
t.Errorf("LoadSync = %v %t, want %v %t", got1, ok, 0, false)
}
}
func TestLoadOrStore(t *testing.T) {
const (
_ int = iota
val1
val2
)
m := genmap.NewSyncMap()
ik := genmap.NewKey[int, string]("int key")
got, loaded := genmap.LoadOrStore(m, ik, val1)
if got != val1 || loaded {
t.Errorf("LoadOrStore = %v %t, want %v %t", got, loaded, val1, false)
}
got1, loaded1 := genmap.LoadOrStore(m, ik, val2)
if got1 != val1 || !loaded1 {
t.Errorf("LoadOrStore = %v %t, want %v %t", got1, loaded1, val1, true)
}
}
func FuzzSyncMap(f *testing.F) {
keys := []struct {
key string
key1 string
value int
value1 int
}{
{
key: "a",
key1: "b",
value: 1,
value1: 2,
},
}
m := genmap.NewSyncMap()
for _, k := range keys {
f.Add(k.key, k.key1, k.value, k.value1)
}
f.Fuzz(func(t *testing.T, key, key1 string, value, value1 int) {
ik := genmap.NewStringKey[int](key)
ik1 := genmap.NewStringKey[int](key1)
genmap.StoreSync[int, string](m, ik, value)
_, _ = genmap.LoadSync[int, string](m, ik)
_, _ = genmap.LoadOrStore[int, string](m, ik1, value1)
_, _ = genmap.LoadAndDelete[int, string](m, ik)
genmap.DeleteSync[int, string](m, ik1)
})
}