-
Notifications
You must be signed in to change notification settings - Fork 0
/
fuzz.go
73 lines (65 loc) · 1.23 KB
/
fuzz.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
package lazyskiplist
import (
"math/rand"
"sync"
"github.com/petermattis/goid"
)
// Fuzz fuzz test
func Fuzz(data []byte) int {
//TurnOnDebug()
debugf("input data")
for _, d := range data {
debugf("%d ,", int(d))
}
debugf("")
var l = New(
func(v1, v2 interface{}) bool { return v1.(int) < v2.(int) },
func(v1, v2 interface{}) bool { return v1.(int) == v2.(int) },
)
var wait sync.WaitGroup
for _, d := range data {
if rand.Int()%2 == 0 {
debugf("[%d] add %d", goid.Get(), int(d))
wait.Add(1)
go func(i int) {
l.Add(i)
wait.Done()
}(int(d))
} else {
debugf("[%d] delete %d", goid.Get(), int(d))
wait.Add(1)
go func(i int) {
l.Remove(i)
wait.Done()
}(int(d))
}
if rand.Int()%7 == 0 {
wait.Add(1)
go func() {
defer wait.Done()
iter := l.Iterator()
v, ok := iter.Next()
if !ok {
return
}
debugf("[%d] [", goid.Get())
defer debugf("[%d] ]", goid.Get())
debugf("[%d] %d", goid.Get(), v.(int))
prev := v
for {
v, ok := iter.Next()
if !ok {
return
}
debugf("[%d] %d", goid.Get(), v.(int))
if prev.(int) >= v.(int) {
panic("not sorted")
}
prev = v
}
}()
}
}
wait.Wait()
return 1
}