70 lines
1.1 KiB
Go
70 lines
1.1 KiB
Go
// +build gofuzz
|
|
|
|
package tsz
|
|
|
|
import (
|
|
"encoding/binary"
|
|
"fmt"
|
|
"math"
|
|
|
|
"github.com/dgryski/go-tsz/testdata"
|
|
)
|
|
|
|
func Fuzz(data []byte) int {
|
|
|
|
fuzzUnpack(data)
|
|
|
|
if len(data) < 9 {
|
|
return 0
|
|
}
|
|
|
|
t0 := uint32(1456236677)
|
|
|
|
v := float64(10000)
|
|
|
|
var vals []testdata.Point
|
|
s := New(t0)
|
|
t := t0
|
|
for len(data) >= 10 {
|
|
tdelta := uint32(binary.LittleEndian.Uint16(data))
|
|
if t == t0 {
|
|
tdelta &= (1 << 14) - 1
|
|
}
|
|
t += tdelta
|
|
data = data[2:]
|
|
v += float64(int16(binary.LittleEndian.Uint16(data))) + float64(binary.LittleEndian.Uint16(data[2:]))/float64(math.MaxUint16)
|
|
data = data[8:]
|
|
vals = append(vals, testdata.Point{V: v, T: t})
|
|
s.Push(t, v)
|
|
}
|
|
|
|
it := s.Iter()
|
|
|
|
var i int
|
|
for it.Next() {
|
|
gt, gv := it.Values()
|
|
if gt != vals[i].T || (gv != vals[i].V || math.IsNaN(gv) && math.IsNaN(vals[i].V)) {
|
|
panic(fmt.Sprintf("failure: gt=%v vals[i].T=%v gv=%v vals[i].V=%v", gt, vals[i].T, gv, vals[i].V))
|
|
}
|
|
i++
|
|
}
|
|
|
|
if i != len(vals) {
|
|
panic("extra data")
|
|
}
|
|
|
|
return 1
|
|
}
|
|
|
|
func fuzzUnpack(data []byte) {
|
|
|
|
it, err := NewIterator(data)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
for it.Next() {
|
|
_, _ = it.Values()
|
|
}
|
|
}
|