2019-02-02 16:18:25 +08:00
|
|
|
// Copyright 2018 gf Author(https://github.com/gogf/gf). All Rights Reserved.
|
2018-12-10 20:24:20 +08:00
|
|
|
//
|
|
|
|
// This Source Code Form is subject to the terms of the MIT License.
|
|
|
|
// If a copy of the MIT was not distributed with this file,
|
2019-02-02 16:18:25 +08:00
|
|
|
// You can obtain one at https://github.com/gogf/gf.
|
2018-12-10 20:24:20 +08:00
|
|
|
|
|
|
|
// go test *.go
|
|
|
|
|
|
|
|
package garray_test
|
|
|
|
|
|
|
|
import (
|
2019-06-11 18:11:17 +08:00
|
|
|
"github.com/gogf/gf/g/container/garray"
|
|
|
|
"github.com/gogf/gf/g/test/gtest"
|
|
|
|
"github.com/gogf/gf/g/util/gconv"
|
|
|
|
"strings"
|
|
|
|
"testing"
|
2018-12-10 20:24:20 +08:00
|
|
|
)
|
|
|
|
|
2018-12-20 21:55:05 +08:00
|
|
|
func Test_IntArray_Unique(t *testing.T) {
|
2019-06-30 13:03:22 +08:00
|
|
|
gtest.Case(t, func() {
|
|
|
|
expect := []int{1, 2, 3, 4, 5, 6}
|
|
|
|
array := garray.NewIntArray()
|
|
|
|
array.Append(1, 1, 2, 3, 3, 4, 4, 5, 5, 6, 6)
|
|
|
|
array.Unique()
|
|
|
|
gtest.Assert(array.Slice(), expect)
|
|
|
|
})
|
2018-12-20 21:55:05 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
func Test_SortedIntArray1(t *testing.T) {
|
2019-06-30 13:03:22 +08:00
|
|
|
gtest.Case(t, func() {
|
|
|
|
expect := []int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
|
|
|
|
array := garray.NewSortedIntArray()
|
|
|
|
for i := 10; i > -1; i-- {
|
|
|
|
array.Add(i)
|
|
|
|
}
|
|
|
|
gtest.Assert(array.Slice(), expect)
|
|
|
|
gtest.Assert(array.Add().Slice(), expect)
|
|
|
|
gtest.Assert(array.Add(-1).Slice(), []int{-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10})
|
|
|
|
})
|
2018-12-20 21:55:05 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
func Test_SortedIntArray2(t *testing.T) {
|
2019-06-30 13:03:22 +08:00
|
|
|
gtest.Case(t, func() {
|
|
|
|
expect := []int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
|
|
|
|
array := garray.NewSortedIntArray()
|
|
|
|
array2 := garray.NewSortedIntArray(true)
|
|
|
|
for i := 0; i <= 10; i++ {
|
|
|
|
array.Add(i)
|
|
|
|
array2.Add(i)
|
|
|
|
}
|
|
|
|
gtest.Assert(array.Slice(), expect)
|
|
|
|
gtest.Assert(array2.Slice(), expect)
|
|
|
|
})
|
2018-12-20 21:55:05 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
func Test_SortedStringArray1(t *testing.T) {
|
2019-06-30 13:03:22 +08:00
|
|
|
gtest.Case(t, func() {
|
|
|
|
expect := []string{"0", "1", "10", "2", "3", "4", "5", "6", "7", "8", "9"}
|
|
|
|
array := garray.NewSortedStringArray()
|
|
|
|
for i := 10; i > -1; i-- {
|
|
|
|
array.Add(gconv.String(i))
|
|
|
|
}
|
|
|
|
gtest.Assert(array.Slice(), expect)
|
|
|
|
gtest.Assert(array.Add().Slice(), expect)
|
|
|
|
})
|
2018-12-10 20:24:20 +08:00
|
|
|
}
|
2018-12-20 21:55:05 +08:00
|
|
|
|
|
|
|
func Test_SortedStringArray2(t *testing.T) {
|
2019-06-30 13:03:22 +08:00
|
|
|
gtest.Case(t, func() {
|
|
|
|
expect := []string{"0", "1", "10", "2", "3", "4", "5", "6", "7", "8", "9"}
|
|
|
|
array := garray.NewSortedStringArray()
|
|
|
|
array2 := garray.NewSortedStringArray(true)
|
|
|
|
for i := 0; i <= 10; i++ {
|
|
|
|
array.Add(gconv.String(i))
|
|
|
|
array2.Add(gconv.String(i))
|
|
|
|
}
|
|
|
|
gtest.Assert(array.Slice(), expect)
|
|
|
|
gtest.Assert(array2.Slice(), expect)
|
|
|
|
})
|
2018-12-20 21:55:05 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
func Test_SortedArray1(t *testing.T) {
|
2019-06-30 13:03:22 +08:00
|
|
|
gtest.Case(t, func() {
|
|
|
|
expect := []string{"0", "1", "10", "2", "3", "4", "5", "6", "7", "8", "9"}
|
|
|
|
array := garray.NewSortedArray(func(v1, v2 interface{}) int {
|
|
|
|
return strings.Compare(gconv.String(v1), gconv.String(v2))
|
|
|
|
})
|
|
|
|
for i := 10; i > -1; i-- {
|
|
|
|
array.Add(gconv.String(i))
|
|
|
|
}
|
|
|
|
gtest.Assert(array.Slice(), expect)
|
2019-06-11 18:11:17 +08:00
|
|
|
})
|
2018-12-20 21:55:05 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
func Test_SortedArray2(t *testing.T) {
|
2019-06-30 13:03:22 +08:00
|
|
|
gtest.Case(t, func() {
|
|
|
|
expect := []string{"0", "1", "10", "2", "3", "4", "5", "6", "7", "8", "9"}
|
|
|
|
array := garray.NewSortedArray(func(v1, v2 interface{}) int {
|
|
|
|
return strings.Compare(gconv.String(v1), gconv.String(v2))
|
|
|
|
})
|
|
|
|
array2 := garray.NewSortedArray(func(v1, v2 interface{}) int {
|
|
|
|
return strings.Compare(gconv.String(v1), gconv.String(v2))
|
|
|
|
}, true)
|
|
|
|
for i := 0; i <= 10; i++ {
|
|
|
|
array.Add(gconv.String(i))
|
|
|
|
array2.Add(gconv.String(i))
|
|
|
|
}
|
|
|
|
gtest.Assert(array.Slice(), expect)
|
|
|
|
gtest.Assert(array.Add(), expect)
|
|
|
|
gtest.Assert(array2.Slice(), expect)
|
2019-06-11 18:11:17 +08:00
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestNewFromCopy(t *testing.T) {
|
|
|
|
gtest.Case(t, func() {
|
|
|
|
a1 := []interface{}{"100", "200", "300", "400", "500", "600"}
|
|
|
|
array1 := garray.NewFromCopy(a1)
|
|
|
|
gtest.AssertIN(array1.PopRands(2), a1)
|
|
|
|
gtest.Assert(len(array1.PopRands(1)), 1)
|
|
|
|
gtest.Assert(len(array1.PopRands(9)), 3)
|
|
|
|
})
|
|
|
|
}
|