From f98bc7d45435d0a48a48178ebe439296c554fb4c Mon Sep 17 00:00:00 2001 From: allencloud Date: Fri, 23 Jun 2017 11:41:18 +0800 Subject: [PATCH] fix CopyStrings and ShuffleStrings for slice when slice is nil Signed-off-by: allencloud --- pkg/util/slice/slice.go | 6 ++++++ pkg/util/slice/slice_test.go | 35 ++++++++++++++++++++++++++++------- 2 files changed, 34 insertions(+), 7 deletions(-) diff --git a/pkg/util/slice/slice.go b/pkg/util/slice/slice.go index 1b8f67c0c1..205b597c40 100644 --- a/pkg/util/slice/slice.go +++ b/pkg/util/slice/slice.go @@ -26,6 +26,9 @@ import ( // CopyStrings copies the contents of the specified string slice // into a new slice. func CopyStrings(s []string) []string { + if s == nil { + return nil + } c := make([]string, len(s)) copy(c, s) return c @@ -41,6 +44,9 @@ func SortStrings(s []string) []string { // ShuffleStrings copies strings from the specified slice into a copy in random // order. It returns a new slice. func ShuffleStrings(s []string) []string { + if s == nil { + return nil + } shuffled := make([]string, len(s)) perm := utilrand.Perm(len(s)) for i, j := range perm { diff --git a/pkg/util/slice/slice_test.go b/pkg/util/slice/slice_test.go index 7d74437df1..1c02f42041 100644 --- a/pkg/util/slice/slice_test.go +++ b/pkg/util/slice/slice_test.go @@ -22,15 +22,29 @@ import ( ) func TestCopyStrings(t *testing.T) { - src := []string{"a", "c", "b"} - dest := CopyStrings(src) + var src1 []string + dest1 := CopyStrings(src1) - if !reflect.DeepEqual(src, dest) { - t.Errorf("%v and %v are not equal", src, dest) + if !reflect.DeepEqual(src1, dest1) { + t.Errorf("%v and %v are not equal", src1, dest1) } - src[0] = "A" - if reflect.DeepEqual(src, dest) { + src2 := []string{} + dest2 := CopyStrings(src2) + + if !reflect.DeepEqual(src2, dest2) { + t.Errorf("%v and %v are not equal", src2, dest2) + } + + src3 := []string{"a", "c", "b"} + dest3 := CopyStrings(src3) + + if !reflect.DeepEqual(src3, dest3) { + t.Errorf("%v and %v are not equal", src3, dest3) + } + + src3[0] = "A" + if reflect.DeepEqual(src3, dest3) { t.Errorf("CopyStrings didn't make a copy") } } @@ -50,9 +64,16 @@ func TestSortStrings(t *testing.T) { } func TestShuffleStrings(t *testing.T) { - src := []string{"a", "b", "c", "d", "e", "f"} + var src []string dest := ShuffleStrings(src) + if dest != nil { + t.Errorf("ShuffleStrings for a nil slice got a non-nil slice") + } + + src = []string{"a", "b", "c", "d", "e", "f"} + dest = ShuffleStrings(src) + if len(src) != len(dest) { t.Errorf("Shuffled slice is wrong length, expected %v got %v", len(src), len(dest)) }