-
Notifications
You must be signed in to change notification settings - Fork 0
/
rollsum_test.go
57 lines (49 loc) · 981 Bytes
/
rollsum_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
package rollsum
import (
"io"
"os"
"testing"
)
func TestRollsum(t *testing.T) {
blockLen := 16
for blockLen <= 8192 {
rollsumFile(t, blockLen, "./testdata/tanx.js")
blockLen <<= 1
}
}
func rollsumFile(t *testing.T, blen int, fn string) {
var (
rs1 Rollsum
rs2 Rollsum
pos = blen
buf1 = make([]byte, blen)
buf2 = make([]byte, blen)
)
f, err := os.Open(fn)
if err != nil {
t.Fatal(err)
}
_, err = io.ReadFull(f, buf1)
if err != nil {
t.Logf("file %s lenght less than %d, ignored.\n", fn, blen)
return
}
rs1.Init()
rs1.Update(buf1)
for {
pos++
copy(buf2, buf1[1:blen])
_, err = io.ReadFull(f, buf2[blen-1:blen])
rs2.Init()
rs2.Update(buf2)
rs1.Rotate(buf1[0], buf2[blen-1])
if rs1.s1 != rs2.s1 || rs1.s2 != rs2.s2 {
t.Fatalf("pos: %d rs1.s1:%d rs1.s2: %d rs2.s1: %d rs2.s2: %d out: %d in: %d\n",
pos, rs1.s1, rs1.s2, rs2.s1, rs2.s2, buf1[0], buf2[blen-1])
}
copy(buf1, buf2)
if err != nil {
break
}
}
}