diff options
Diffstat (limited to 'xdelta3/go')
-rw-r--r-- | xdelta3/go/src/regtest.go | 34 | ||||
-rw-r--r-- | xdelta3/go/src/xdelta/rstream.go | 20 | ||||
-rw-r--r-- | xdelta3/go/src/xdelta/test.go | 9 |
3 files changed, 37 insertions, 26 deletions
diff --git a/xdelta3/go/src/regtest.go b/xdelta3/go/src/regtest.go index d31e905..52547e1 100644 --- a/xdelta3/go/src/regtest.go +++ b/xdelta3/go/src/regtest.go | |||
@@ -1,16 +1,20 @@ | |||
1 | package main | 1 | package main |
2 | 2 | ||
3 | import ( | 3 | import ( |
4 | "bufio" | ||
4 | "bytes" | 5 | "bytes" |
5 | "fmt" | 6 | "fmt" |
6 | "io" | 7 | "io" |
7 | "io/ioutil" | 8 | "io/ioutil" |
9 | "os" | ||
10 | |||
8 | "xdelta" | 11 | "xdelta" |
9 | ) | 12 | ) |
10 | 13 | ||
11 | const ( | 14 | const ( |
12 | blocksize = 1<<20 | 15 | blocksize = 1<<16 |
13 | prog = "/Users/jmacd/src/xdelta/xdelta3/xdelta3" | 16 | winsize = 1<<26 |
17 | prog = "/Users/jmacd/src/xdelta/xdelta3/build/m64/64size-64off/xdelta3" | ||
14 | seed = 1422253499919909358 | 18 | seed = 1422253499919909358 |
15 | ) | 19 | ) |
16 | 20 | ||
@@ -26,10 +30,14 @@ func drain(f io.ReadCloser) <-chan []byte { | |||
26 | return c | 30 | return c |
27 | } | 31 | } |
28 | 32 | ||
29 | func empty(f io.ReadCloser) { | 33 | func empty(f io.ReadCloser, desc string) { |
30 | go func() { | 34 | go func() { |
31 | if _, err := ioutil.ReadAll(f); err != nil { | 35 | s := bufio.NewScanner(f) |
32 | panic(err) | 36 | for s.Scan() { |
37 | os.Stderr.Write([]byte(fmt.Sprint(desc, ": ", s.Text(), "\n"))) | ||
38 | } | ||
39 | if err := s.Err(); err != nil { | ||
40 | fmt.Println("error reading input:", err) | ||
33 | } | 41 | } |
34 | }() | 42 | }() |
35 | } | 43 | } |
@@ -52,7 +60,7 @@ func smokeTest(r *xdelta.Runner, p *xdelta.Program) { | |||
52 | panic(err) | 60 | panic(err) |
53 | } | 61 | } |
54 | encodeout := drain(run.Stdout) | 62 | encodeout := drain(run.Stdout) |
55 | empty(run.Stderr) | 63 | empty(run.Stderr, "encode") |
56 | 64 | ||
57 | write(run.Stdin, []byte(target)) | 65 | write(run.Stdin, []byte(target)) |
58 | write(run.Srcin, []byte(source)) | 66 | write(run.Srcin, []byte(source)) |
@@ -67,7 +75,7 @@ func smokeTest(r *xdelta.Runner, p *xdelta.Program) { | |||
67 | } | 75 | } |
68 | 76 | ||
69 | decodeout := drain(run.Stdout) | 77 | decodeout := drain(run.Stdout) |
70 | empty(run.Stderr) | 78 | empty(run.Stderr, "decode") |
71 | 79 | ||
72 | write(run.Stdin, <-encodeout) | 80 | write(run.Stdin, <-encodeout) |
73 | write(run.Srcin, []byte(source)) | 81 | write(run.Srcin, []byte(source)) |
@@ -121,12 +129,12 @@ func compareStreams(r1 io.ReadCloser, r2 io.ReadCloser, length int64) { | |||
121 | } | 129 | } |
122 | } | 130 | } |
123 | 131 | ||
124 | func offsetTest(r *xdelta.Runner, p *xdelta.Program, offset, length int64) { | 132 | func offsetTest(r *xdelta.Runner, p *xdelta.Program, offset, bufsize, length int64) { |
125 | enc, err := r.Exec(p, true, []string{"-e"}) | 133 | enc, err := r.Exec(p, true, []string{"-e", "-1", "-n", fmt.Sprint("-B", bufsize), "-vv", fmt.Sprint("-W", winsize)}) |
126 | if err != nil { | 134 | if err != nil { |
127 | panic(err) | 135 | panic(err) |
128 | } | 136 | } |
129 | dec, err := r.Exec(p, true, []string{"-d"}) | 137 | dec, err := r.Exec(p, true, []string{"-d", fmt.Sprint("-B", bufsize), "-vv", fmt.Sprint("-W", winsize)}) |
130 | if err != nil { | 138 | if err != nil { |
131 | panic(err) | 139 | panic(err) |
132 | } | 140 | } |
@@ -136,8 +144,8 @@ func offsetTest(r *xdelta.Runner, p *xdelta.Program, offset, length int64) { | |||
136 | go copyStreams(enc.Stdout, dec.Stdin) | 144 | go copyStreams(enc.Stdout, dec.Stdin) |
137 | go compareStreams(dec.Stdout, read, length) | 145 | go compareStreams(dec.Stdout, read, length) |
138 | 146 | ||
139 | empty(enc.Stderr) // Use these? | 147 | empty(enc.Stderr, "encode") |
140 | empty(dec.Stderr) | 148 | empty(dec.Stderr, "decode") |
141 | 149 | ||
142 | // TODO: seems possible to use one WriteRstreams call to generate | 150 | // TODO: seems possible to use one WriteRstreams call to generate |
143 | // the source and target for both encoder and decoder. Why not? | 151 | // the source and target for both encoder and decoder. Why not? |
@@ -163,5 +171,5 @@ func main() { | |||
163 | 171 | ||
164 | smokeTest(r, prog) | 172 | smokeTest(r, prog) |
165 | 173 | ||
166 | offsetTest(r, prog, 0, 1024 << 20) | 174 | offsetTest(r, prog, 1 << 31, 1 << 32, 1 << 33) |
167 | } | 175 | } |
diff --git a/xdelta3/go/src/xdelta/rstream.go b/xdelta3/go/src/xdelta/rstream.go index 1666934..1d56031 100644 --- a/xdelta3/go/src/xdelta/rstream.go +++ b/xdelta3/go/src/xdelta/rstream.go | |||
@@ -16,20 +16,21 @@ func WriteRstreams(seed, offset, len int64, | |||
16 | go writeOne(seed, offset, len, second) | 16 | go writeOne(seed, offset, len, second) |
17 | } | 17 | } |
18 | 18 | ||
19 | func writeOne(seed, offset, len int64, stream io.WriteCloser) { | 19 | func writeOne(seed, offset, len int64, stream io.WriteCloser) error { |
20 | if offset != 0 { | 20 | if offset != 0 { |
21 | // Fill with other random data until the offset | 21 | // Fill with other random data until the offset |
22 | writeRand(rand.New(rand.NewSource(^seed)), | 22 | if err := writeRand(rand.New(rand.NewSource(^seed)), offset, stream); err != nil { |
23 | offset, stream) | 23 | return err |
24 | } | ||
24 | } | 25 | } |
25 | writeRand(rand.New(rand.NewSource(seed)), | 26 | if err := writeRand(rand.New(rand.NewSource(seed)), |
26 | len - offset, stream) | 27 | len - offset, stream); err != nil { |
27 | if err := stream.Close(); err != nil { | 28 | return err |
28 | panic(err) | ||
29 | } | 29 | } |
30 | return stream.Close() | ||
30 | } | 31 | } |
31 | 32 | ||
32 | func writeRand(r *rand.Rand, len int64, s io.Writer) { | 33 | func writeRand(r *rand.Rand, len int64, s io.Writer) error { |
33 | blk := make([]byte, blocksize) | 34 | blk := make([]byte, blocksize) |
34 | for len > 0 { | 35 | for len > 0 { |
35 | fillRand(r, blk) | 36 | fillRand(r, blk) |
@@ -38,10 +39,11 @@ func writeRand(r *rand.Rand, len int64, s io.Writer) { | |||
38 | c = int(len) | 39 | c = int(len) |
39 | } | 40 | } |
40 | if _, err := s.Write(blk[0:c]); err != nil { | 41 | if _, err := s.Write(blk[0:c]); err != nil { |
41 | panic(err) | 42 | return err |
42 | } | 43 | } |
43 | len -= int64(c) | 44 | len -= int64(c) |
44 | } | 45 | } |
46 | return nil | ||
45 | } | 47 | } |
46 | 48 | ||
47 | func fillRand(r *rand.Rand, blk []byte) { | 49 | func fillRand(r *rand.Rand, blk []byte) { |
diff --git a/xdelta3/go/src/xdelta/test.go b/xdelta3/go/src/xdelta/test.go index 292f133..3143dfa 100644 --- a/xdelta3/go/src/xdelta/test.go +++ b/xdelta3/go/src/xdelta/test.go | |||
@@ -83,15 +83,16 @@ func (r *Runner) Exec(p *Program, srcfifo bool, flags []string) (*Run, error) { | |||
83 | return run, nil | 83 | return run, nil |
84 | } | 84 | } |
85 | 85 | ||
86 | func writeFifo(srcfile string, read io.Reader) { | 86 | func writeFifo(srcfile string, read io.Reader) error { |
87 | fifo, err := os.OpenFile(srcfile, os.O_WRONLY, 0600) | 87 | fifo, err := os.OpenFile(srcfile, os.O_WRONLY, 0600) |
88 | if err != nil { | 88 | if err != nil { |
89 | panic(err) | 89 | return err |
90 | } | 90 | } |
91 | if _, err := io.Copy(fifo, read); err != nil { | 91 | if _, err := io.Copy(fifo, read); err != nil { |
92 | panic(err) | 92 | return err |
93 | } | 93 | } |
94 | if err := fifo.Close(); err != nil { | 94 | if err := fifo.Close(); err != nil { |
95 | panic(err) | 95 | return err |
96 | } | 96 | } |
97 | return nil | ||
97 | } | 98 | } |