From 6712a331648953a6e7d7fdae43733eed4779ef13 Mon Sep 17 00:00:00 2001 From: john Date: Fri, 10 Jul 2020 22:26:02 +0800 Subject: [PATCH] fix issue 785 in function Unique for packge garray --- container/garray/garray_normal_any.go | 4 +++- container/garray/garray_normal_int.go | 4 +++- container/garray/garray_normal_str.go | 4 +++- .../garray_z_unit_normal_any_array_test.go | 4 ++-- .../garray_z_unit_normal_int_array_test.go | 4 ++-- .../garray_z_unit_normal_str_array_test.go | 2 +- .../garray_z_unit_sorted_any_array_test.go | 22 ++++++++++++------- .../garray_z_unit_sorted_int_array_test.go | 12 +++++++++- .../garray_z_unit_sorted_str_array_test.go | 16 +++++++++++--- 9 files changed, 52 insertions(+), 20 deletions(-) diff --git a/container/garray/garray_normal_any.go b/container/garray/garray_normal_any.go index 08e1697e0..2ec882819 100644 --- a/container/garray/garray_normal_any.go +++ b/container/garray/garray_normal_any.go @@ -494,9 +494,11 @@ func (a *Array) Search(value interface{}) int { func (a *Array) Unique() *Array { a.mu.Lock() for i := 0; i < len(a.array)-1; i++ { - for j := i + 1; j < len(a.array); j++ { + for j := i + 1; j < len(a.array); { if a.array[i] == a.array[j] { a.array = append(a.array[:j], a.array[j+1:]...) + } else { + j++ } } } diff --git a/container/garray/garray_normal_int.go b/container/garray/garray_normal_int.go index 3f850a87f..ef13c8851 100644 --- a/container/garray/garray_normal_int.go +++ b/container/garray/garray_normal_int.go @@ -510,9 +510,11 @@ func (a *IntArray) Search(value int) int { func (a *IntArray) Unique() *IntArray { a.mu.Lock() for i := 0; i < len(a.array)-1; i++ { - for j := i + 1; j < len(a.array); j++ { + for j := i + 1; j < len(a.array); { if a.array[i] == a.array[j] { a.array = append(a.array[:j], a.array[j+1:]...) + } else { + j++ } } } diff --git a/container/garray/garray_normal_str.go b/container/garray/garray_normal_str.go index acf3e784c..4d3f27b8b 100644 --- a/container/garray/garray_normal_str.go +++ b/container/garray/garray_normal_str.go @@ -514,9 +514,11 @@ func (a *StrArray) Search(value string) int { func (a *StrArray) Unique() *StrArray { a.mu.Lock() for i := 0; i < len(a.array)-1; i++ { - for j := i + 1; j < len(a.array); j++ { + for j := i + 1; j < len(a.array); { if a.array[i] == a.array[j] { a.array = append(a.array[:j], a.array[j+1:]...) + } else { + j++ } } } diff --git a/container/garray/garray_z_unit_normal_any_array_test.go b/container/garray/garray_z_unit_normal_any_array_test.go index 6b29f1a2f..19fb8aa8d 100644 --- a/container/garray/garray_z_unit_normal_any_array_test.go +++ b/container/garray/garray_z_unit_normal_any_array_test.go @@ -95,9 +95,9 @@ func TestArray_Sort(t *testing.T) { func TestArray_Unique(t *testing.T) { gtest.C(t, func(t *gtest.T) { - expect := []interface{}{1, 1, 2, 3} + expect := []interface{}{1, 2, 3, 4, 5, 3, 2, 2, 3, 5, 5} array := garray.NewArrayFrom(expect) - t.Assert(array.Unique().Slice(), []interface{}{1, 2, 3}) + t.Assert(array.Unique().Slice(), []interface{}{1, 2, 3, 4, 5}) }) } diff --git a/container/garray/garray_z_unit_normal_int_array_test.go b/container/garray/garray_z_unit_normal_int_array_test.go index 9f8252828..f107ba201 100644 --- a/container/garray/garray_z_unit_normal_int_array_test.go +++ b/container/garray/garray_z_unit_normal_int_array_test.go @@ -87,9 +87,9 @@ func TestIntArray_Sort(t *testing.T) { func TestIntArray_Unique(t *testing.T) { gtest.C(t, func(t *gtest.T) { - expect := []int{1, 1, 2, 3} + expect := []int{1, 2, 3, 4, 5, 3, 2, 2, 3, 5, 5} array := garray.NewIntArrayFrom(expect) - t.Assert(array.Unique().Slice(), []int{1, 2, 3}) + t.Assert(array.Unique().Slice(), []int{1, 2, 3, 4, 5}) }) } diff --git a/container/garray/garray_z_unit_normal_str_array_test.go b/container/garray/garray_z_unit_normal_str_array_test.go index 56e08155a..28777dc28 100644 --- a/container/garray/garray_z_unit_normal_str_array_test.go +++ b/container/garray/garray_z_unit_normal_str_array_test.go @@ -91,7 +91,7 @@ func TestStrArray_Sort(t *testing.T) { func TestStrArray_Unique(t *testing.T) { gtest.C(t, func(t *gtest.T) { - expect := []string{"1", "1", "2", "3"} + expect := []string{"1", "1", "2", "2", "3", "3", "2", "2"} array := garray.NewStrArrayFrom(expect) t.Assert(array.Unique().Slice(), []string{"1", "2", "3"}) }) diff --git a/container/garray/garray_z_unit_sorted_any_array_test.go b/container/garray/garray_z_unit_sorted_any_array_test.go index b95b08d67..3cf4cc185 100644 --- a/container/garray/garray_z_unit_sorted_any_array_test.go +++ b/container/garray/garray_z_unit_sorted_any_array_test.go @@ -526,15 +526,21 @@ func TestSortedArray_CountValues(t *testing.T) { func TestSortedArray_SetUnique(t *testing.T) { gtest.C(t, func(t *gtest.T) { - a1 := []interface{}{"a", "d", "c", "c"} - - func1 := func(v1, v2 interface{}) int { - return strings.Compare(gconv.String(v1), gconv.String(v2)) - } - array1 := garray.NewSortedArrayFrom(a1, func1) + a1 := []interface{}{1, 2, 3, 4, 5, 3, 2, 2, 3, 5, 5} + array1 := garray.NewSortedArrayFrom(a1, gutil.ComparatorInt) array1.SetUnique(true) - t.Assert(array1.Len(), 3) - t.Assert(array1, []interface{}{"a", "c", "d"}) + t.Assert(array1.Len(), 5) + t.Assert(array1, []interface{}{1, 2, 3, 4, 5}) + }) +} + +func TestSortedArray_Unique(t *testing.T) { + gtest.C(t, func(t *gtest.T) { + a1 := []interface{}{1, 2, 3, 4, 5, 3, 2, 2, 3, 5, 5} + array1 := garray.NewSortedArrayFrom(a1, gutil.ComparatorInt) + array1.Unique() + t.Assert(array1.Len(), 5) + t.Assert(array1, []interface{}{1, 2, 3, 4, 5}) }) } diff --git a/container/garray/garray_z_unit_sorted_int_array_test.go b/container/garray/garray_z_unit_sorted_int_array_test.go index 6903f4518..3d7e18490 100644 --- a/container/garray/garray_z_unit_sorted_int_array_test.go +++ b/container/garray/garray_z_unit_sorted_int_array_test.go @@ -436,7 +436,7 @@ func TestSortedIntArray_CountValues(t *testing.T) { func TestSortedIntArray_SetUnique(t *testing.T) { gtest.C(t, func(t *gtest.T) { - a1 := []int{1, 2, 3, 4, 5, 3} + a1 := []int{1, 2, 3, 4, 5, 3, 2, 2, 3, 5, 5} array1 := garray.NewSortedIntArrayFrom(a1) array1.SetUnique(true) t.Assert(array1.Len(), 5) @@ -444,6 +444,16 @@ func TestSortedIntArray_SetUnique(t *testing.T) { }) } +func TestSortedIntArray_Unique(t *testing.T) { + gtest.C(t, func(t *gtest.T) { + a1 := []int{1, 2, 3, 4, 5, 3, 2, 2, 3, 5, 5} + array1 := garray.NewSortedIntArrayFrom(a1) + array1.Unique() + t.Assert(array1.Len(), 5) + t.Assert(array1, []int{1, 2, 3, 4, 5}) + }) +} + func TestSortedIntArray_LockFunc(t *testing.T) { gtest.C(t, func(t *gtest.T) { s1 := []int{1, 2, 3, 4} diff --git a/container/garray/garray_z_unit_sorted_str_array_test.go b/container/garray/garray_z_unit_sorted_str_array_test.go index 3581cbdc5..4dbabc3c0 100644 --- a/container/garray/garray_z_unit_sorted_str_array_test.go +++ b/container/garray/garray_z_unit_sorted_str_array_test.go @@ -454,11 +454,21 @@ func TestSortedStrArray_Chunk(t *testing.T) { func TestSortedStrArray_SetUnique(t *testing.T) { gtest.C(t, func(t *gtest.T) { - a1 := []string{"e", "a", "d", "a", "c"} + a1 := []string{"1", "1", "2", "2", "3", "3", "2", "2"} array1 := garray.NewSortedStrArrayFrom(a1) array2 := array1.SetUnique(true) - t.Assert(array2.Len(), 4) - t.Assert(array2, []string{"a", "c", "d", "e"}) + t.Assert(array2.Len(), 3) + t.Assert(array2, []string{"1", "2", "3"}) + }) +} + +func TestSortedStrArray_Unique(t *testing.T) { + gtest.C(t, func(t *gtest.T) { + a1 := []string{"1", "1", "2", "2", "3", "3", "2", "2"} + array1 := garray.NewSortedStrArrayFrom(a1) + array1.Unique() + t.Assert(array1.Len(), 3) + t.Assert(array1, []string{"1", "2", "3"}) }) }