2012-10-23 06:31:11 +02:00
|
|
|
// Copyright 2012 The Go Authors. All rights reserved.
|
|
|
|
// Use of this source code is governed by a BSD-style
|
|
|
|
// license that can be found in the LICENSE file.
|
|
|
|
|
|
|
|
package flate
|
|
|
|
|
|
|
|
import (
|
|
|
|
"testing"
|
|
|
|
)
|
|
|
|
|
|
|
|
func TestForwardCopy(t *testing.T) {
|
|
|
|
testCases := []struct {
|
|
|
|
dst0, dst1 int
|
|
|
|
src0, src1 int
|
|
|
|
want string
|
|
|
|
}{
|
|
|
|
{0, 9, 0, 9, "012345678"},
|
|
|
|
{0, 5, 4, 9, "45678"},
|
|
|
|
{4, 9, 0, 5, "01230"},
|
|
|
|
{1, 6, 3, 8, "34567"},
|
|
|
|
{3, 8, 1, 6, "12121"},
|
|
|
|
{0, 9, 3, 6, "345"},
|
|
|
|
{3, 6, 0, 9, "012"},
|
|
|
|
{1, 6, 0, 9, "00000"},
|
|
|
|
{0, 4, 7, 8, "7"},
|
|
|
|
{0, 1, 6, 8, "6"},
|
|
|
|
{4, 4, 6, 9, ""},
|
|
|
|
{2, 8, 6, 6, ""},
|
|
|
|
{0, 0, 0, 0, ""},
|
|
|
|
}
|
|
|
|
for _, tc := range testCases {
|
|
|
|
b := []byte("0123456789")
|
2013-11-06 20:49:01 +01:00
|
|
|
n := tc.dst1 - tc.dst0
|
|
|
|
if tc.src1-tc.src0 < n {
|
|
|
|
n = tc.src1 - tc.src0
|
|
|
|
}
|
|
|
|
forwardCopy(b, tc.dst0, tc.src0, n)
|
|
|
|
got := string(b[tc.dst0 : tc.dst0+n])
|
2012-10-23 06:31:11 +02:00
|
|
|
if got != tc.want {
|
|
|
|
t.Errorf("dst=b[%d:%d], src=b[%d:%d]: got %q, want %q",
|
|
|
|
tc.dst0, tc.dst1, tc.src0, tc.src1, got, tc.want)
|
|
|
|
}
|
|
|
|
// Check that the bytes outside of dst[:n] were not modified.
|
|
|
|
for i, x := range b {
|
|
|
|
if i >= tc.dst0 && i < tc.dst0+n {
|
|
|
|
continue
|
|
|
|
}
|
|
|
|
if int(x) != '0'+i {
|
|
|
|
t.Errorf("dst=b[%d:%d], src=b[%d:%d]: copy overrun at b[%d]: got '%c', want '%c'",
|
|
|
|
tc.dst0, tc.dst1, tc.src0, tc.src1, i, x, '0'+i)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|