| // 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") |
| 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]) |
| 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) |
| } |
| } |
| } |
| } |