github.com/peggyl/go@v0.0.0-20151008231540-ae315999c2d5/src/compress/flate/copy_test.go (about)

     1  // Copyright 2012 The Go Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  package flate
     6  
     7  import (
     8  	"testing"
     9  )
    10  
    11  func TestForwardCopy(t *testing.T) {
    12  	testCases := []struct {
    13  		dst0, dst1 int
    14  		src0, src1 int
    15  		want       string
    16  	}{
    17  		{0, 9, 0, 9, "012345678"},
    18  		{0, 5, 4, 9, "45678"},
    19  		{4, 9, 0, 5, "01230"},
    20  		{1, 6, 3, 8, "34567"},
    21  		{3, 8, 1, 6, "12121"},
    22  		{0, 9, 3, 6, "345"},
    23  		{3, 6, 0, 9, "012"},
    24  		{1, 6, 0, 9, "00000"},
    25  		{0, 4, 7, 8, "7"},
    26  		{0, 1, 6, 8, "6"},
    27  		{4, 4, 6, 9, ""},
    28  		{2, 8, 6, 6, ""},
    29  		{0, 0, 0, 0, ""},
    30  	}
    31  	for _, tc := range testCases {
    32  		b := []byte("0123456789")
    33  		n := tc.dst1 - tc.dst0
    34  		if tc.src1-tc.src0 < n {
    35  			n = tc.src1 - tc.src0
    36  		}
    37  		forwardCopy(b, tc.dst0, tc.src0, n)
    38  		got := string(b[tc.dst0 : tc.dst0+n])
    39  		if got != tc.want {
    40  			t.Errorf("dst=b[%d:%d], src=b[%d:%d]: got %q, want %q",
    41  				tc.dst0, tc.dst1, tc.src0, tc.src1, got, tc.want)
    42  		}
    43  		// Check that the bytes outside of dst[:n] were not modified.
    44  		for i, x := range b {
    45  			if i >= tc.dst0 && i < tc.dst0+n {
    46  				continue
    47  			}
    48  			if int(x) != '0'+i {
    49  				t.Errorf("dst=b[%d:%d], src=b[%d:%d]: copy overrun at b[%d]: got '%c', want '%c'",
    50  					tc.dst0, tc.dst1, tc.src0, tc.src1, i, x, '0'+i)
    51  			}
    52  		}
    53  	}
    54  }