github.com/PandaGoAdmin/utils@v0.0.0-20211208134815-d5461603a00f/array_test.go (about)

     1  package kgo
     2  
     3  import (
     4  	"github.com/stretchr/testify/assert"
     5  	"testing"
     6  )
     7  
     8  func TestArray_ArrayKeys(t *testing.T) {
     9  	defer func() {
    10  		r := recover()
    11  		assert.Contains(t, r, "[ArrayKeys]`arr type must be")
    12  	}()
    13  
    14  	var res []interface{}
    15  
    16  	res = KArr.ArrayKeys(naturalArr)
    17  	assert.Equal(t, len(naturalArr), len(res))
    18  
    19  	res = KArr.ArrayKeys(colorMp)
    20  	assert.Equal(t, len(colorMp), len(res))
    21  
    22  	res = KArr.ArrayKeys(personS1)
    23  	assert.NotEmpty(t, res)
    24  
    25  	KArr.ArrayKeys(strHello)
    26  }
    27  
    28  func BenchmarkArray_ArrayKeys(b *testing.B) {
    29  	b.ResetTimer()
    30  	for i := 0; i < b.N; i++ {
    31  		KArr.ArrayKeys(naturalArr)
    32  	}
    33  }
    34  
    35  func TestArray_ArrayValues(t *testing.T) {
    36  	defer func() {
    37  		r := recover()
    38  		assert.Contains(t, r, "[arrayValues]`arr type must be")
    39  	}()
    40  
    41  	var res []interface{}
    42  
    43  	res = KArr.ArrayValues(slItf, false)
    44  	assert.Equal(t, len(slItf), len(res))
    45  
    46  	//将排除nil
    47  	res = KArr.ArrayValues(slItf, true)
    48  	assert.Greater(t, len(slItf), len(res))
    49  
    50  	//将排除0
    51  	res = KArr.ArrayValues(int64Slc, true)
    52  	assert.Greater(t, len(int64Slc), len(res))
    53  
    54  	//将排除0.0
    55  	res = KArr.ArrayValues(flo32Slc, true)
    56  	assert.Greater(t, len(flo32Slc), len(res))
    57  
    58  	//将排除false
    59  	res = KArr.ArrayValues(booSlc, true)
    60  	assert.Greater(t, len(booSlc), len(res))
    61  
    62  	//将排除""
    63  	res = KArr.ArrayValues(colorMp, true)
    64  	assert.Greater(t, len(colorMp), len(res))
    65  
    66  	//结构体
    67  	res = KArr.ArrayValues(personS1, false)
    68  	assert.NotEmpty(t, res)
    69  
    70  	KArr.ArrayValues(strHello, false)
    71  }
    72  
    73  func BenchmarkArray_ArrayValues_Arr(b *testing.B) {
    74  	b.ResetTimer()
    75  	for i := 0; i < b.N; i++ {
    76  		KArr.ArrayValues(slItf, false)
    77  	}
    78  }
    79  
    80  func BenchmarkArray_ArrayValues_Map(b *testing.B) {
    81  	b.ResetTimer()
    82  	for i := 0; i < b.N; i++ {
    83  		KArr.ArrayValues(colorMp, false)
    84  	}
    85  }
    86  
    87  func BenchmarkArray_ArrayValues_Struct(b *testing.B) {
    88  	b.ResetTimer()
    89  	for i := 0; i < b.N; i++ {
    90  		KArr.ArrayValues(personS1, false)
    91  	}
    92  }
    93  
    94  func TestArray_ArrayChunk(t *testing.T) {
    95  	size := 3
    96  	res := KArr.ArrayChunk(ssSingle, size)
    97  	assert.Equal(t, 4, len(res))
    98  
    99  	item := res[0]
   100  	assert.Equal(t, size, len(item))
   101  
   102  	KArr.ArrayChunk([]int{}, 1)
   103  }
   104  
   105  func TestArray_ArrayChunk_PanicSize(t *testing.T) {
   106  	defer func() {
   107  		r := recover()
   108  		assert.Contains(t, r, "[ArrayChunk]`size cannot be")
   109  	}()
   110  	KArr.ArrayChunk(ssSingle, 0)
   111  }
   112  
   113  func TestArray_ArrayChunk_PanicType(t *testing.T) {
   114  	defer func() {
   115  		r := recover()
   116  		assert.Contains(t, r, "[ArrayChunk]`arr type must be")
   117  	}()
   118  
   119  	KArr.ArrayChunk(strHello, 2)
   120  }
   121  
   122  func BenchmarkArray_ArrayChunk(b *testing.B) {
   123  	b.ResetTimer()
   124  	for i := 0; i < b.N; i++ {
   125  		KArr.ArrayChunk(ssSingle, 3)
   126  	}
   127  }
   128  
   129  func TestArray_ArrayColumn_Struct(t *testing.T) {
   130  	defer func() {
   131  		r := recover()
   132  		assert.Contains(t, r, "[ArrayColumn]`arr type must be")
   133  	}()
   134  
   135  	var res []interface{}
   136  
   137  	res = KArr.ArrayColumn(crowd, "Name")
   138  	assert.NotEmpty(t, res)
   139  
   140  	res = KArr.ArrayColumn(*orgS1, "Age")
   141  	assert.NotEmpty(t, res)
   142  
   143  	res = KArr.ArrayColumn(*orgS1, "age")
   144  	assert.Empty(t, res)
   145  
   146  	// type err
   147  	KArr.ArrayColumn(orgS1, "Age")
   148  }
   149  
   150  func TestArray_ArrayColumn_Map(t *testing.T) {
   151  	var arr map[string]interface{}
   152  	var res []interface{}
   153  
   154  	_ = KStr.JsonDecode([]byte(personsMapJson), &arr)
   155  
   156  	res = KArr.ArrayColumn(arr, "Name")
   157  	assert.Empty(t, res)
   158  
   159  	res = KArr.ArrayColumn(arr, "name")
   160  	assert.NotEmpty(t, res)
   161  
   162  	//新元素类型错误
   163  	arr["person5"] = strHello
   164  	res2 := KArr.ArrayColumn(arr, "name")
   165  	assert.Equal(t, len(res), len(res2))
   166  }
   167  
   168  func BenchmarkArray_ArrayColumn(b *testing.B) {
   169  	b.ResetTimer()
   170  	for i := 0; i < b.N; i++ {
   171  		_ = KArr.ArrayColumn(crowd, "Name")
   172  	}
   173  }
   174  
   175  func TestArray_SlicePush_SlicePop(t *testing.T) {
   176  	var ss []interface{}
   177  	var item interface{}
   178  
   179  	item = KArr.SlicePop(&ss)
   180  	assert.Empty(t, item)
   181  
   182  	lenght := KArr.SlicePush(&ss, slItf...)
   183  	assert.Greater(t, lenght, 1)
   184  
   185  	item = KArr.SlicePop(&ss)
   186  	assert.NotEmpty(t, item)
   187  }
   188  
   189  func BenchmarkArray_SlicePush(b *testing.B) {
   190  	var ss []interface{}
   191  	b.ResetTimer()
   192  	for i := 0; i < b.N; i++ {
   193  		ss = nil
   194  		KArr.SlicePush(&ss, slItf...)
   195  	}
   196  }
   197  
   198  func BenchmarkArray_SlicePop(b *testing.B) {
   199  	var ss [][]interface{}
   200  	var sub []interface{}
   201  	for j := 0; j < 10000000; j++ {
   202  		sub = nil
   203  		copy(sub, slItf)
   204  		ss = append(ss, sub)
   205  	}
   206  
   207  	b.ResetTimer()
   208  	for _, item := range ss {
   209  		for i := 0; i < len(item); i++ {
   210  			KArr.SlicePop(&item)
   211  		}
   212  	}
   213  }
   214  
   215  func TestArray_SliceUnshift_SliceShift(t *testing.T) {
   216  	var ss []interface{}
   217  	var item interface{}
   218  
   219  	item = KArr.SliceShift(&ss)
   220  	assert.Empty(t, item)
   221  
   222  	lenght := KArr.SliceUnshift(&ss, slItf...)
   223  	assert.Greater(t, lenght, 1)
   224  
   225  	item = KArr.SliceShift(&ss)
   226  	assert.NotEmpty(t, item)
   227  }
   228  
   229  func BenchmarkArray_SliceUnshift(b *testing.B) {
   230  	var ss []interface{}
   231  	b.ResetTimer()
   232  	for i := 0; i < b.N; i++ {
   233  		ss = nil
   234  		KArr.SliceUnshift(&ss, slItf...)
   235  	}
   236  }
   237  
   238  func BenchmarkArray_SliceShift(b *testing.B) {
   239  	var ss [][]interface{}
   240  	var sub []interface{}
   241  	for j := 0; j < 10000000; j++ {
   242  		sub = nil
   243  		copy(sub, slItf)
   244  		ss = append(ss, sub)
   245  	}
   246  
   247  	b.ResetTimer()
   248  	for _, item := range ss {
   249  		for i := 0; i < len(item); i++ {
   250  			KArr.SliceShift(&item)
   251  		}
   252  	}
   253  }
   254  
   255  func TestArray_ArrayKeyExists(t *testing.T) {
   256  	defer func() {
   257  		r := recover()
   258  		assert.Contains(t, r, "[ArrayKeyExists]`arr type must be")
   259  	}()
   260  
   261  	chk1 := KArr.ArrayKeyExists(len(naturalArr)-1, naturalArr)
   262  	assert.True(t, chk1)
   263  
   264  	chk2 := KArr.ArrayKeyExists(len(slItf)-1, slItf)
   265  	assert.True(t, chk2)
   266  
   267  	chk3 := KArr.ArrayKeyExists("Name", personS1)
   268  	chk4 := KArr.ArrayKeyExists("name", personS1)
   269  	assert.True(t, chk3)
   270  	assert.False(t, chk4)
   271  
   272  	var persons map[string]interface{}
   273  	_ = KStr.JsonDecode([]byte(personsMapJson), &persons)
   274  	chk5 := KArr.ArrayKeyExists("person1", persons)
   275  	chk6 := KArr.ArrayKeyExists("Age", persons)
   276  	assert.True(t, chk5)
   277  	assert.False(t, chk6)
   278  
   279  	var key interface{}
   280  	chk7 := KArr.ArrayKeyExists(key, persons)
   281  	assert.False(t, chk7)
   282  
   283  	KArr.ArrayKeyExists(1, nil)
   284  }
   285  
   286  func BenchmarkArray_ArrayKeyExists_Slice(b *testing.B) {
   287  	b.ResetTimer()
   288  	for i := 0; i < b.N; i++ {
   289  		KArr.ArrayKeyExists(1, naturalArr)
   290  	}
   291  }
   292  
   293  func BenchmarkArray_ArrayKeyExists_Struct(b *testing.B) {
   294  	b.ResetTimer()
   295  	for i := 0; i < b.N; i++ {
   296  		KArr.ArrayKeyExists("Name", personS1)
   297  	}
   298  }
   299  
   300  func BenchmarkArray_ArrayKeyExists_Map(b *testing.B) {
   301  	var persons map[string]interface{}
   302  	_ = KStr.JsonDecode([]byte(personsMapJson), &persons)
   303  	b.ResetTimer()
   304  	for i := 0; i < b.N; i++ {
   305  		KArr.ArrayKeyExists("person1", persons)
   306  	}
   307  }
   308  
   309  func TestArray_ArrayReverse(t *testing.T) {
   310  	defer func() {
   311  		r := recover()
   312  		assert.Contains(t, r, "[ArrayReverse]`arr type must be")
   313  	}()
   314  
   315  	res1 := KArr.ArrayReverse(naturalArr)
   316  	itm1 := KArr.SlicePop(&res1)
   317  	assert.Equal(t, 0, itm1)
   318  
   319  	res2 := KArr.ArrayReverse(ssSingle)
   320  	itm2 := KArr.SlicePop(&res2)
   321  	assert.Equal(t, "a", itm2)
   322  
   323  	KArr.ArrayReverse(strHello)
   324  }
   325  
   326  func BenchmarkArray_ArrayReverse(b *testing.B) {
   327  	b.ResetTimer()
   328  	for i := 0; i < b.N; i++ {
   329  		KArr.ArrayReverse(naturalArr)
   330  	}
   331  }
   332  
   333  func TestArray_Implode(t *testing.T) {
   334  	defer func() {
   335  		r := recover()
   336  		assert.Contains(t, r, "[Implode]`arr type must be")
   337  	}()
   338  
   339  	//数组
   340  	res1 := KArr.Implode(",", naturalArr)
   341  	assert.Contains(t, res1, "0,1,2,3,4,5,6,7,8,9,10")
   342  
   343  	//切片
   344  	res2 := KArr.Implode(",", ssSingle)
   345  	assert.Contains(t, res2, "a,b,c,d,e,f,g,h,i,j,k")
   346  
   347  	//结构体
   348  	res3 := KArr.Implode(",", personS1)
   349  	assert.NotEmpty(t, res3)
   350  
   351  	//map
   352  	res4 := KArr.Implode(",", strMp1)
   353  	assert.NotEmpty(t, res4)
   354  
   355  	//空字典
   356  	res5 := KArr.Implode(",", strMpEmp)
   357  	assert.Empty(t, res5)
   358  	//空数组
   359  	res6 := KArr.Implode(",", strSlEmp)
   360  	assert.Empty(t, res6)
   361  	//空结构体
   362  	res7 := KArr.Implode(",", KFile)
   363  	assert.Empty(t, res7)
   364  
   365  	KArr.Implode(",", strHello)
   366  }
   367  
   368  func BenchmarkArray_Implode(b *testing.B) {
   369  	b.ResetTimer()
   370  	for i := 0; i < b.N; i++ {
   371  		KArr.Implode(",", naturalArr)
   372  	}
   373  }
   374  
   375  func TestArray_JoinStrings(t *testing.T) {
   376  	res := KArr.JoinStrings(",", ssSingle)
   377  	assert.Contains(t, res, "a,b,c,d,e,f,g,h,i,j,k")
   378  
   379  	res = KArr.JoinStrings(",", strSlEmp)
   380  	assert.Empty(t, res)
   381  }
   382  
   383  func BenchmarkArray_JoinStrings(b *testing.B) {
   384  	b.ResetTimer()
   385  	for i := 0; i < b.N; i++ {
   386  		KArr.JoinStrings(",", ssSingle)
   387  	}
   388  }
   389  
   390  func TestArray_JoinInts(t *testing.T) {
   391  	ints := naturalArr[:]
   392  	res := KArr.JoinInts(",", ints)
   393  	assert.Contains(t, res, "0,1,2,3,4,5,6,7,8,9,10")
   394  
   395  	res = KArr.JoinInts(",", intSlEmp)
   396  	assert.Empty(t, res)
   397  }
   398  
   399  func BenchmarkArray_JoinInts(b *testing.B) {
   400  	b.ResetTimer()
   401  	ints := naturalArr[:]
   402  	for i := 0; i < b.N; i++ {
   403  		KArr.JoinInts(",", ints)
   404  	}
   405  }
   406  
   407  func TestArray_UniqueInts(t *testing.T) {
   408  	sl := naturalArr[:]
   409  	sl = append(sl, 1, 2, 3, 4, 5, 6)
   410  	res := KArr.UniqueInts(sl)
   411  	assert.Equal(t, len(naturalArr), len(res))
   412  }
   413  
   414  func BenchmarkArray_UniqueInts(b *testing.B) {
   415  	b.ResetTimer()
   416  	for i := 0; i < b.N; i++ {
   417  		KArr.UniqueInts(intSlc)
   418  	}
   419  }
   420  
   421  func TestArray_Unique64Ints(t *testing.T) {
   422  	res := KArr.Unique64Ints(int64Slc)
   423  	assert.Less(t, len(res), len(int64Slc))
   424  }
   425  
   426  func BenchmarkArray_Unique64Ints(b *testing.B) {
   427  	b.ResetTimer()
   428  	for i := 0; i < b.N; i++ {
   429  		KArr.Unique64Ints(int64Slc)
   430  	}
   431  }
   432  
   433  func TestArray_UniqueStrings(t *testing.T) {
   434  	sl := ssSingle[:]
   435  	sl = append(sl, "a", "b", "c", "d", "e")
   436  	res := KArr.UniqueStrings(sl)
   437  	assert.Equal(t, len(ssSingle), len(res))
   438  }
   439  
   440  func BenchmarkArray_UniqueStrings(b *testing.B) {
   441  	b.ResetTimer()
   442  	sl := ssSingle[:]
   443  	sl = append(sl, "a", "b", "c", "d", "e")
   444  	for i := 0; i < b.N; i++ {
   445  		KArr.UniqueStrings(sl)
   446  	}
   447  }
   448  
   449  func TestArray_ArrayDiff(t *testing.T) {
   450  	defer func() {
   451  		r := recover()
   452  		assert.Contains(t, r, "[ArrayDiff]`arr1,arr2 type must be")
   453  	}()
   454  
   455  	var res, res2 map[interface{}]interface{}
   456  
   457  	//数组-切片
   458  	res = KArr.ArrayDiff(strSl1, strSl2, COMPARE_ONLY_VALUE)
   459  	assert.NotEmpty(t, res)
   460  
   461  	res = KArr.ArrayDiff(strSl1, strSl2, COMPARE_ONLY_KEY)
   462  	assert.NotEmpty(t, res)
   463  
   464  	res2 = KArr.ArrayDiff(strSl1, strSl2, COMPARE_BOTH_KEYVALUE)
   465  	assert.Greater(t, len(res2), len(res))
   466  
   467  	res = KArr.ArrayDiff(strSlEmp, strSl1, COMPARE_ONLY_VALUE)
   468  	assert.Empty(t, res)
   469  
   470  	//数组-字典
   471  	res = KArr.ArrayDiff(strSl1, strMp1, COMPARE_ONLY_VALUE)
   472  	assert.NotEmpty(t, res)
   473  
   474  	res = KArr.ArrayDiff(strSl1, strMp1, COMPARE_ONLY_KEY)
   475  	assert.NotEmpty(t, res)
   476  
   477  	res2 = KArr.ArrayDiff(strSl1, strMp1, COMPARE_BOTH_KEYVALUE)
   478  	assert.Greater(t, len(res2), len(res))
   479  
   480  	res = KArr.ArrayDiff(strSlEmp, strMp1, COMPARE_ONLY_VALUE)
   481  	assert.Empty(t, res)
   482  
   483  	//字典-数组
   484  	res = KArr.ArrayDiff(strMp1, strSl1, COMPARE_ONLY_VALUE)
   485  	assert.NotEmpty(t, res)
   486  
   487  	res = KArr.ArrayDiff(strMp1, strSl1, COMPARE_ONLY_KEY)
   488  	assert.NotEmpty(t, res)
   489  
   490  	res2 = KArr.ArrayDiff(strMp1, strSl1, COMPARE_BOTH_KEYVALUE)
   491  	assert.Greater(t, len(res2), len(res))
   492  
   493  	res = KArr.ArrayDiff(strMpEmp, strSl1, COMPARE_ONLY_VALUE)
   494  	assert.Empty(t, res)
   495  
   496  	//字典-字典
   497  	res = KArr.ArrayDiff(strMp1, strMp2, COMPARE_ONLY_VALUE)
   498  	assert.NotEmpty(t, res)
   499  
   500  	res = KArr.ArrayDiff(strMp1, strMp2, COMPARE_ONLY_KEY)
   501  	assert.NotEmpty(t, res)
   502  
   503  	res2 = KArr.ArrayDiff(strMp1, strMp2, COMPARE_BOTH_KEYVALUE)
   504  	assert.NotEmpty(t, res2)
   505  
   506  	KArr.ArrayDiff(strHello, 1234, COMPARE_ONLY_VALUE)
   507  }
   508  
   509  func BenchmarkArray_ArrayDiff_A1A(b *testing.B) {
   510  	b.ResetTimer()
   511  	for i := 0; i < b.N; i++ {
   512  		KArr.ArrayDiff(strSl1, strSl2, COMPARE_ONLY_VALUE)
   513  	}
   514  }
   515  
   516  func BenchmarkArray_ArrayDiff_A1M(b *testing.B) {
   517  	b.ResetTimer()
   518  	for i := 0; i < b.N; i++ {
   519  		KArr.ArrayDiff(strSl1, strMp1, COMPARE_ONLY_VALUE)
   520  	}
   521  }
   522  
   523  func BenchmarkArray_ArrayDiff_M1A(b *testing.B) {
   524  	b.ResetTimer()
   525  	for i := 0; i < b.N; i++ {
   526  		KArr.ArrayDiff(strMp1, strSl1, COMPARE_ONLY_VALUE)
   527  	}
   528  }
   529  
   530  func BenchmarkArray_ArrayDiff_M1M(b *testing.B) {
   531  	b.ResetTimer()
   532  	for i := 0; i < b.N; i++ {
   533  		KArr.ArrayDiff(strMp1, strMp2, COMPARE_ONLY_VALUE)
   534  	}
   535  }
   536  
   537  func TestArray_ArrayIntersect(t *testing.T) {
   538  	defer func() {
   539  		r := recover()
   540  		assert.Contains(t, r, "[ArrayIntersect]`arr1,arr2 type must be")
   541  	}()
   542  
   543  	var res, res2 map[interface{}]interface{}
   544  
   545  	//数组-切片
   546  	res = KArr.ArrayIntersect(strSl1, strSl2, COMPARE_ONLY_VALUE)
   547  	assert.NotEmpty(t, res)
   548  
   549  	res = KArr.ArrayIntersect(strSl1, strSl2, COMPARE_ONLY_KEY)
   550  	assert.NotEmpty(t, res)
   551  
   552  	res2 = KArr.ArrayIntersect(strSl1, strSl2, COMPARE_BOTH_KEYVALUE)
   553  	assert.Less(t, len(res2), len(res))
   554  
   555  	res = KArr.ArrayIntersect(strSlEmp, strSl1, COMPARE_ONLY_VALUE)
   556  	assert.Empty(t, res)
   557  
   558  	//数组-字典
   559  	res = KArr.ArrayIntersect(strSl1, strMp1, COMPARE_ONLY_VALUE)
   560  	assert.NotEmpty(t, res)
   561  
   562  	res = KArr.ArrayIntersect(strSl1, strMp1, COMPARE_ONLY_KEY)
   563  	assert.NotEmpty(t, res)
   564  
   565  	res2 = KArr.ArrayIntersect(strSl1, strMp1, COMPARE_BOTH_KEYVALUE)
   566  	assert.Less(t, len(res2), len(res))
   567  
   568  	res = KArr.ArrayIntersect(strSlEmp, strMp1, COMPARE_ONLY_VALUE)
   569  	assert.Empty(t, res)
   570  
   571  	//字典-数组
   572  	res = KArr.ArrayIntersect(strMp1, strSl1, COMPARE_ONLY_VALUE)
   573  	assert.NotEmpty(t, res)
   574  
   575  	res = KArr.ArrayIntersect(strMp1, strSl1, COMPARE_ONLY_KEY)
   576  	assert.NotEmpty(t, res)
   577  
   578  	res2 = KArr.ArrayIntersect(strMp1, strSl1, COMPARE_BOTH_KEYVALUE)
   579  	assert.Less(t, len(res2), len(res))
   580  
   581  	res = KArr.ArrayIntersect(strMpEmp, strSl1, COMPARE_ONLY_VALUE)
   582  	assert.Empty(t, res)
   583  
   584  	//字典-字典
   585  	res = KArr.ArrayIntersect(strMp1, strMp2, COMPARE_ONLY_VALUE)
   586  	assert.NotEmpty(t, res)
   587  
   588  	res = KArr.ArrayIntersect(strMp1, strMp2, COMPARE_ONLY_KEY)
   589  	assert.NotEmpty(t, res)
   590  
   591  	res2 = KArr.ArrayIntersect(strMp1, strMp2, COMPARE_BOTH_KEYVALUE)
   592  	assert.NotEmpty(t, res2)
   593  
   594  	KArr.ArrayIntersect(strHello, 1234, COMPARE_ONLY_VALUE)
   595  }
   596  
   597  func BenchmarkArray_ArrayIntersect_A1A(b *testing.B) {
   598  	b.ResetTimer()
   599  	for i := 0; i < b.N; i++ {
   600  		KArr.ArrayIntersect(strSl1, strSl2, COMPARE_ONLY_VALUE)
   601  	}
   602  }
   603  
   604  func BenchmarkArray_ArrayIntersect_A1M(b *testing.B) {
   605  	b.ResetTimer()
   606  	for i := 0; i < b.N; i++ {
   607  		KArr.ArrayIntersect(strSl1, strMp1, COMPARE_ONLY_VALUE)
   608  	}
   609  }
   610  
   611  func BenchmarkArray_ArrayIntersect_M1A(b *testing.B) {
   612  	b.ResetTimer()
   613  	for i := 0; i < b.N; i++ {
   614  		KArr.ArrayIntersect(strMp1, strSl1, COMPARE_ONLY_VALUE)
   615  	}
   616  }
   617  
   618  func BenchmarkArray_ArrayIntersect_M1M(b *testing.B) {
   619  	b.ResetTimer()
   620  	for i := 0; i < b.N; i++ {
   621  		KArr.ArrayIntersect(strMp1, strMp2, COMPARE_ONLY_VALUE)
   622  	}
   623  }
   624  
   625  func TestArray_ArrayUnique(t *testing.T) {
   626  	defer func() {
   627  		r := recover()
   628  		assert.Contains(t, r, "[ArrayUnique]`arr type must be")
   629  	}()
   630  
   631  	var res map[interface{}]interface{}
   632  
   633  	//数组切片
   634  	res = KArr.ArrayUnique(intSlc)
   635  	assert.Less(t, len(res), len(intSlc))
   636  
   637  	//字典
   638  	res = KArr.ArrayUnique(colorMp)
   639  	assert.Less(t, len(res), len(colorMp))
   640  
   641  	KArr.ArrayUnique(strHello)
   642  }
   643  
   644  func BenchmarkArray_ArrayUnique_Arr(b *testing.B) {
   645  	b.ResetTimer()
   646  	for i := 0; i < b.N; i++ {
   647  		KArr.ArrayUnique(intSlc)
   648  	}
   649  }
   650  
   651  func BenchmarkArray_ArrayUnique_Map(b *testing.B) {
   652  	b.ResetTimer()
   653  	for i := 0; i < b.N; i++ {
   654  		KArr.ArrayUnique(colorMp)
   655  	}
   656  }
   657  
   658  func TestArray_ArraySearchItem(t *testing.T) {
   659  	defer func() {
   660  		r := recover()
   661  		assert.Contains(t, r, "[ArraySearchItem]`arr type must be")
   662  	}()
   663  
   664  	var res interface{}
   665  
   666  	//子元素为字典
   667  	cond1 := map[string]interface{}{"age": 21, "naction": "cn"}
   668  	res = KArr.ArraySearchItem(personMps, cond1)
   669  	assert.NotEmpty(t, res)
   670  
   671  	//子元素为结构体
   672  	cond2 := map[string]interface{}{"Gender": false}
   673  	res = KArr.ArraySearchItem(perStuMps, cond2)
   674  
   675  	//空条件
   676  	cond3 := map[string]interface{}{}
   677  	res = KArr.ArraySearchItem(perStuMps, cond3)
   678  	assert.Empty(t, res)
   679  
   680  	KArr.ArraySearchItem(strHello, map[string]interface{}{"a": 1})
   681  }
   682  
   683  func BenchmarkArray_ArraySearchItem_Arr(b *testing.B) {
   684  	b.ResetTimer()
   685  	cond := map[string]interface{}{"age": 21, "naction": "cn"}
   686  	for i := 0; i < b.N; i++ {
   687  		KArr.ArraySearchItem(personMps, cond)
   688  	}
   689  }
   690  
   691  func BenchmarkArray_ArraySearchItem_Map(b *testing.B) {
   692  	b.ResetTimer()
   693  	cond := map[string]interface{}{"Gender": false}
   694  	for i := 0; i < b.N; i++ {
   695  		KArr.ArraySearchItem(perStuMps, cond)
   696  	}
   697  }
   698  
   699  func TestArray_ArraySearchMutil(t *testing.T) {
   700  	defer func() {
   701  		r := recover()
   702  		assert.Contains(t, r, "[ArraySearchMutil]`arr type must be")
   703  	}()
   704  
   705  	var res []interface{}
   706  
   707  	//子元素为字典
   708  	cond1 := map[string]interface{}{"age": 21, "naction": "cn"}
   709  	res = KArr.ArraySearchMutil(personMps, cond1)
   710  	assert.NotEmpty(t, res)
   711  
   712  	//子元素为结构体
   713  	cond2 := map[string]interface{}{"Gender": false}
   714  	res = KArr.ArraySearchMutil(perStuMps, cond2)
   715  
   716  	KArr.ArraySearchMutil(strHello, map[string]interface{}{"a": 1})
   717  }
   718  
   719  func BenchmarkArray_ArraySearchMutil_Arr(b *testing.B) {
   720  	b.ResetTimer()
   721  	cond := map[string]interface{}{"age": 21, "naction": "cn"}
   722  	for i := 0; i < b.N; i++ {
   723  		KArr.ArraySearchMutil(personMps, cond)
   724  	}
   725  }
   726  
   727  func BenchmarkArray_ArraySearchMutil_Map(b *testing.B) {
   728  	b.ResetTimer()
   729  	cond := map[string]interface{}{"Gender": false}
   730  	for i := 0; i < b.N; i++ {
   731  		KArr.ArraySearchMutil(perStuMps, cond)
   732  	}
   733  }
   734  
   735  func TestArray_ArrayShuffle(t *testing.T) {
   736  	defer func() {
   737  		r := recover()
   738  		assert.Contains(t, r, "[ArrayShuffle]`arr type must be")
   739  	}()
   740  
   741  	var res []interface{}
   742  	res = KArr.ArrayShuffle(naturalArr)
   743  	assert.NotEqual(t, toStr(res), toStr(naturalArr))
   744  
   745  	res = KArr.ArrayShuffle(ssSingle)
   746  	assert.NotEqual(t, toStr(res), toStr(ssSingle))
   747  
   748  	KArr.ArrayShuffle(strHello)
   749  }
   750  
   751  func BenchmarkArray_ArrayShuffle(b *testing.B) {
   752  	b.ResetTimer()
   753  	for i := 0; i < b.N; i++ {
   754  		KArr.ArrayShuffle(naturalArr)
   755  	}
   756  }
   757  
   758  func TestArray_IsEqualArray(t *testing.T) {
   759  	defer func() {
   760  		r := recover()
   761  		assert.Contains(t, r, "[IsEqualArray]`arr1,arr2 type must be")
   762  	}()
   763  
   764  	var res bool
   765  
   766  	ss1 := ssSingle[:]
   767  	ss2 := KArr.ArrayShuffle(ssSingle)
   768  
   769  	res = KArr.IsEqualArray(ssSingle, ss1)
   770  	assert.True(t, res)
   771  
   772  	res = KArr.IsEqualArray(ssSingle, ss2)
   773  	assert.True(t, res)
   774  
   775  	res = KArr.IsEqualArray(naturalArr, ssSingle)
   776  	assert.False(t, res)
   777  
   778  	res = KArr.IsEqualArray(strSlEmp, ssSingle)
   779  	assert.False(t, res)
   780  
   781  	KArr.IsEqualArray(strHello, ssSingle)
   782  }
   783  
   784  func BenchmarkArray_IsEqualArray(b *testing.B) {
   785  	b.ResetTimer()
   786  	for i := 0; i < b.N; i++ {
   787  		KArr.IsEqualArray(naturalArr, ssSingle)
   788  	}
   789  }
   790  
   791  func TestArray_IsEqualMap(t *testing.T) {
   792  	defer func() {
   793  		r := recover()
   794  		assert.Contains(t, r, "[IsEqualMap]`arr1,arr2 type must be")
   795  	}()
   796  
   797  	var res bool
   798  
   799  	mp1, _ := struct2Map(orgS1, "")
   800  	mp2, _ := struct2Map(orgS1, "")
   801  	res = KArr.IsEqualMap(mp1, mp2)
   802  	assert.True(t, res)
   803  
   804  	res = KArr.IsEqualMap(personMp1, personMp2)
   805  	assert.False(t, res)
   806  
   807  	res = KArr.IsEqualMap(strMpEmp, personMp2)
   808  	assert.False(t, res)
   809  
   810  	KArr.IsEqualMap(personMp1, strHello)
   811  }
   812  
   813  func BenchmarkArray_IsEqualMap(b *testing.B) {
   814  	b.ResetTimer()
   815  	for i := 0; i < b.N; i++ {
   816  		KArr.IsEqualMap(personMp1, personMp2)
   817  	}
   818  }
   819  
   820  func TestArray_Length(t *testing.T) {
   821  	var res int
   822  	res = KArr.Length(naturalArr)
   823  	assert.Equal(t, res, len(naturalArr))
   824  
   825  	//非数组或切片
   826  	res = KArr.Length(strHello)
   827  	assert.Equal(t, -1, res)
   828  }
   829  
   830  func BenchmarkArray_Length(b *testing.B) {
   831  	b.ResetTimer()
   832  	for i := 0; i < b.N; i++ {
   833  		KArr.Length(naturalArr)
   834  	}
   835  }
   836  
   837  func TestArray_IsArray(t *testing.T) {
   838  	var res bool
   839  
   840  	res = KArr.IsArray(naturalArr)
   841  	assert.True(t, res)
   842  
   843  	res = KArr.IsArray(intSlc)
   844  	assert.False(t, res)
   845  
   846  	res = KArr.IsArray(strHello)
   847  	assert.False(t, res)
   848  }
   849  
   850  func BenchmarkArray_IsArray(b *testing.B) {
   851  	b.ResetTimer()
   852  	for i := 0; i < b.N; i++ {
   853  		KArr.IsArray(naturalArr)
   854  	}
   855  }
   856  
   857  func TestArray_IsSlice(t *testing.T) {
   858  	var res bool
   859  
   860  	res = KArr.IsSlice(intSlc)
   861  	assert.True(t, res)
   862  
   863  	res = KArr.IsSlice(naturalArr)
   864  	assert.False(t, res)
   865  
   866  	res = KArr.IsSlice(strHello)
   867  	assert.False(t, res)
   868  }
   869  
   870  func BenchmarkArray_IsSlice(b *testing.B) {
   871  	b.ResetTimer()
   872  	for i := 0; i < b.N; i++ {
   873  		KArr.IsSlice(intSlc)
   874  	}
   875  }
   876  
   877  func TestArray_IsArrayOrSlice(t *testing.T) {
   878  	var res bool
   879  
   880  	res = KArr.IsArrayOrSlice(intSlc)
   881  	assert.True(t, res)
   882  
   883  	res = KArr.IsArrayOrSlice(naturalArr)
   884  	assert.True(t, res)
   885  
   886  	res = KArr.IsArrayOrSlice(strHello)
   887  	assert.False(t, res)
   888  }
   889  
   890  func BenchmarkArray_IsArrayOrSlice(b *testing.B) {
   891  	b.ResetTimer()
   892  	for i := 0; i < b.N; i++ {
   893  		KArr.IsArrayOrSlice(intSlc)
   894  	}
   895  }
   896  
   897  func TestArray_IsMap(t *testing.T) {
   898  	var res bool
   899  
   900  	res = KArr.IsMap(colorMp)
   901  	assert.True(t, res)
   902  
   903  	res = KArr.IsMap(strMpEmp)
   904  	assert.True(t, res)
   905  
   906  	res = KArr.IsMap(naturalArr)
   907  	assert.False(t, res)
   908  }
   909  
   910  func BenchmarkArray_IsMap(b *testing.B) {
   911  	b.ResetTimer()
   912  	for i := 0; i < b.N; i++ {
   913  		KArr.IsMap(colorMp)
   914  	}
   915  }
   916  
   917  func TestArray_IsStruct(t *testing.T) {
   918  	var res bool
   919  
   920  	res = KArr.IsStruct(personS1)
   921  	assert.True(t, res)
   922  
   923  	res = KArr.IsStruct(naturalArr)
   924  	assert.False(t, res)
   925  }
   926  
   927  func BenchmarkArray_IsStruct(b *testing.B) {
   928  	b.ResetTimer()
   929  	for i := 0; i < b.N; i++ {
   930  		KArr.IsStruct(personS1)
   931  	}
   932  }
   933  
   934  func TestArray_DeleteSliceItems(t *testing.T) {
   935  	defer func() {
   936  		r := recover()
   937  		assert.Contains(t, r, "[DeleteSliceItems]`val type must be")
   938  	}()
   939  
   940  	var res []interface{}
   941  	var del int
   942  
   943  	res, del = KArr.DeleteSliceItems(naturalArr, 3, 5, 8)
   944  	assert.Greater(t, len(naturalArr), len(res))
   945  
   946  	res, del = KArr.DeleteSliceItems(int64Slc, 2, 4, 9)
   947  	assert.Greater(t, del, 0)
   948  
   949  	res, del = KArr.DeleteSliceItems(strSlEmp, 2, 4, 9)
   950  	assert.Equal(t, del, 0)
   951  
   952  	_, _ = KArr.DeleteSliceItems(strHello, 3, 5, 8)
   953  }
   954  
   955  func BenchmarkArray_DeleteSliceItems(b *testing.B) {
   956  	b.ResetTimer()
   957  	for i := 0; i < b.N; i++ {
   958  		KArr.DeleteSliceItems(naturalArr, 3, 5, 8)
   959  	}
   960  }
   961  
   962  func TestArray_InArray(t *testing.T) {
   963  	defer func() {
   964  		r := recover()
   965  		assert.Contains(t, r, "[InArray]`haystack type must be")
   966  	}()
   967  
   968  	var res bool
   969  
   970  	res = KArr.InArray(9, naturalArr)
   971  	assert.True(t, res)
   972  
   973  	res = KArr.InArray(personMp3, personMps)
   974  	assert.True(t, res)
   975  
   976  	res = KArr.InArray(personMp3, crowd)
   977  	assert.False(t, res)
   978  
   979  	KArr.InArray(9, strHello)
   980  }
   981  
   982  func BenchmarkArray_InArray_Arr(b *testing.B) {
   983  	b.ResetTimer()
   984  	for i := 0; i < b.N; i++ {
   985  		KArr.InArray(9, naturalArr)
   986  	}
   987  }
   988  
   989  func BenchmarkArray_InArray_Map(b *testing.B) {
   990  	b.ResetTimer()
   991  	for i := 0; i < b.N; i++ {
   992  		KArr.InArray(personMp3, personMps)
   993  	}
   994  }
   995  
   996  func TestArray_InIntSlice(t *testing.T) {
   997  	var res bool
   998  
   999  	res = KArr.InIntSlice(9, intSlc)
  1000  	assert.True(t, res)
  1001  
  1002  	res = KArr.InIntSlice(99, intSlc)
  1003  	assert.False(t, res)
  1004  }
  1005  
  1006  func BenchmarkArray_InIntSlice(b *testing.B) {
  1007  	b.ResetTimer()
  1008  	for i := 0; i < b.N; i++ {
  1009  		KArr.InIntSlice(9, intSlc)
  1010  	}
  1011  }
  1012  
  1013  func TestArray_InInt64Slice(t *testing.T) {
  1014  	var res bool
  1015  
  1016  	res = KArr.InInt64Slice(9, int64Slc)
  1017  	assert.True(t, res)
  1018  
  1019  	res = KArr.InInt64Slice(99, int64Slc)
  1020  	assert.False(t, res)
  1021  }
  1022  
  1023  func BenchmarkArray_InInt64Slice(b *testing.B) {
  1024  	b.ResetTimer()
  1025  	for i := 0; i < b.N; i++ {
  1026  		KArr.InInt64Slice(9, int64Slc)
  1027  	}
  1028  }
  1029  
  1030  func TestArray_InStringSlice(t *testing.T) {
  1031  	var res bool
  1032  
  1033  	res = KArr.InStringSlice("c", ssSingle)
  1034  	assert.True(t, res)
  1035  
  1036  	res = KArr.InStringSlice("w", ssSingle)
  1037  	assert.False(t, res)
  1038  }
  1039  
  1040  func BenchmarkArray_InStringSlice(b *testing.B) {
  1041  	b.ResetTimer()
  1042  	for i := 0; i < b.N; i++ {
  1043  		KArr.InStringSlice("c", ssSingle)
  1044  	}
  1045  }
  1046  
  1047  func TestArray_SliceFill(t *testing.T) {
  1048  	var res []interface{}
  1049  
  1050  	res = KArr.SliceFill(strHello, 9)
  1051  	assert.Equal(t, 9, len(res))
  1052  
  1053  	res = KArr.SliceFill(strHello, 0)
  1054  	assert.Empty(t, res)
  1055  }
  1056  
  1057  func BenchmarkArray_SliceFill(b *testing.B) {
  1058  	b.ResetTimer()
  1059  	for i := 0; i < b.N; i++ {
  1060  		KArr.SliceFill(strHello, 9)
  1061  	}
  1062  }
  1063  
  1064  func TestArray_ArrayFlip(t *testing.T) {
  1065  	defer func() {
  1066  		r := recover()
  1067  		assert.Contains(t, r, "[ArrayFlip]`arr type must be")
  1068  	}()
  1069  
  1070  	var res map[interface{}]interface{}
  1071  	var chk bool
  1072  
  1073  	res = KArr.ArrayFlip(naturalArr)
  1074  	chk = KArr.IsEqualArray(naturalArr, KArr.ArrayValues(res, false))
  1075  	assert.True(t, chk)
  1076  
  1077  	res = KArr.ArrayFlip(colorMp)
  1078  	assert.GreaterOrEqual(t, len(colorMp), len(res))
  1079  
  1080  	KArr.ArrayFlip(strHello)
  1081  }
  1082  
  1083  func BenchmarkArray_ArrayFlip_Arr(b *testing.B) {
  1084  	b.ResetTimer()
  1085  	for i := 0; i < b.N; i++ {
  1086  		KArr.ArrayFlip(naturalArr)
  1087  	}
  1088  }
  1089  
  1090  func BenchmarkArray_ArrayFlip_Map(b *testing.B) {
  1091  	b.ResetTimer()
  1092  	for i := 0; i < b.N; i++ {
  1093  		KArr.ArrayFlip(colorMp)
  1094  	}
  1095  }
  1096  
  1097  func TestArray_MergeSlice(t *testing.T) {
  1098  	defer func() {
  1099  		r := recover()
  1100  		assert.Contains(t, r, "[MergeSlice]`ss type must be")
  1101  	}()
  1102  
  1103  	var res, res2 []interface{}
  1104  	res = KArr.MergeSlice(false, naturalArr, flo32Slc, booSlc, strSl1)
  1105  	res2 = KArr.MergeSlice(true, naturalArr, flo32Slc, booSlc, strSl1)
  1106  	assert.Greater(t, len(res), len(res2))
  1107  
  1108  	KArr.MergeSlice(false, naturalArr, strHello, booSlc, strSl1)
  1109  }
  1110  
  1111  func BenchmarkArray_MergeSlice(b *testing.B) {
  1112  	b.ResetTimer()
  1113  	for i := 0; i < b.N; i++ {
  1114  		KArr.MergeSlice(false, naturalArr, intSlc, strSl1)
  1115  	}
  1116  }
  1117  
  1118  func TestArray_MergeMap(t *testing.T) {
  1119  	defer func() {
  1120  		r := recover()
  1121  		assert.Contains(t, r, "[MergeMap]`ss type must be")
  1122  	}()
  1123  
  1124  	var res map[interface{}]interface{}
  1125  	var chk bool
  1126  
  1127  	res = KArr.MergeMap(personMp1, personMp2)
  1128  	chk = KArr.IsEqualMap(personMp2, res)
  1129  	assert.True(t, chk)
  1130  
  1131  	res = KArr.MergeMap(personMp1, colorMp)
  1132  	assert.Greater(t, len(res), len(personMp1))
  1133  
  1134  	KArr.MergeMap(personMp1, strHello)
  1135  }
  1136  
  1137  func BenchmarkArray_MergeMap(b *testing.B) {
  1138  	b.ResetTimer()
  1139  	for i := 0; i < b.N; i++ {
  1140  		KArr.MergeMap(personMp1, personMp2)
  1141  	}
  1142  }
  1143  
  1144  func TestArray_ArrayPad(t *testing.T) {
  1145  	defer func() {
  1146  		r := recover()
  1147  		assert.Contains(t, r, "[ArrayPad]`arr type must be")
  1148  	}()
  1149  
  1150  	var res []interface{}
  1151  	var chk bool
  1152  
  1153  	//原切片为空
  1154  	res = KArr.ArrayPad(strSlEmp, 5, 1)
  1155  	assert.Equal(t, 5, len(res))
  1156  
  1157  	//填充长度<=原切片长度
  1158  	res = KArr.ArrayPad(strSl1, 6, strHello)
  1159  	chk = KArr.IsEqualArray(strSl1, res)
  1160  	assert.True(t, chk)
  1161  
  1162  	//填充长度>原切片长度
  1163  	res = KArr.ArrayPad(strSl1, 9, strHello)
  1164  	assert.Equal(t, 9, len(res))
  1165  
  1166  	//填充方向从左开始
  1167  	res = KArr.ArrayPad(strSl1, -9, strHello)
  1168  	assert.Equal(t, 9, len(res))
  1169  
  1170  	KArr.ArrayPad(strHello, -9, strHello)
  1171  }
  1172  
  1173  func BenchmarkArray_ArrayPad(b *testing.B) {
  1174  	b.ResetTimer()
  1175  	for i := 0; i < b.N; i++ {
  1176  		KArr.ArrayPad(strSl1, 16, strHello)
  1177  	}
  1178  }
  1179  
  1180  func TestArray_ArrayRand(t *testing.T) {
  1181  	var res []interface{}
  1182  
  1183  	//空数组
  1184  	res = KArr.ArrayRand(strSlEmp, 2)
  1185  	assert.Empty(t, res)
  1186  
  1187  	//切片
  1188  	res = KArr.ArrayRand(ssSingle, 3)
  1189  	assert.Equal(t, 3, len(res))
  1190  
  1191  	//字典
  1192  	res = KArr.ArrayRand(strMp1, 3)
  1193  	assert.Equal(t, 3, len(res))
  1194  }
  1195  
  1196  func TestArray_Panic_Arr(t *testing.T) {
  1197  	defer func() {
  1198  		r := recover()
  1199  		assert.Contains(t, r, "[ArrayRand]`arr type must be")
  1200  	}()
  1201  
  1202  	KArr.ArrayRand(strHello, 3)
  1203  }
  1204  
  1205  func TestArray_Panic_Num(t *testing.T) {
  1206  	defer func() {
  1207  		r := recover()
  1208  		assert.Contains(t, r, "[ArrayRand]`num cannot be")
  1209  	}()
  1210  
  1211  	KArr.ArrayRand(strMp1, -3)
  1212  }
  1213  
  1214  func BenchmarkArray_ArrayRand_Arr(b *testing.B) {
  1215  	b.ResetTimer()
  1216  	for i := 0; i < b.N; i++ {
  1217  		KArr.ArrayRand(ssSingle, 3)
  1218  	}
  1219  }
  1220  
  1221  func BenchmarkArray_ArrayRand_Map(b *testing.B) {
  1222  	b.ResetTimer()
  1223  	for i := 0; i < b.N; i++ {
  1224  		KArr.ArrayRand(strMp1, 3)
  1225  	}
  1226  }
  1227  
  1228  func TestArray_CutSlice(t *testing.T) {
  1229  	var res []interface{}
  1230  
  1231  	//取空数组
  1232  	res = KArr.CutSlice(strSlEmp, 0, 1)
  1233  	assert.Empty(t, res)
  1234  
  1235  	//正向
  1236  	res = KArr.CutSlice(naturalArr, 1, 2)
  1237  	assert.Equal(t, 2, len(res))
  1238  
  1239  	//反向
  1240  	res = KArr.CutSlice(naturalArr, -3, 2)
  1241  	assert.Equal(t, 2, len(res))
  1242  
  1243  	//数量超出
  1244  	res = KArr.CutSlice(naturalArr, -3, 6)
  1245  	assert.Equal(t, 3, len(res))
  1246  }
  1247  
  1248  func TestArray_CutSlice_Panic_Arr(t *testing.T) {
  1249  	defer func() {
  1250  		r := recover()
  1251  		assert.Contains(t, r, "[CutSlice]`arr type must be")
  1252  	}()
  1253  	KArr.CutSlice(strHello, 1, 2)
  1254  }
  1255  
  1256  func TestArray_CutSlice_Panic_Size(t *testing.T) {
  1257  	defer func() {
  1258  		r := recover()
  1259  		assert.Contains(t, r, "[CutSlice]`size cannot be")
  1260  	}()
  1261  	KArr.CutSlice(naturalArr, -3, -2)
  1262  }
  1263  
  1264  func BenchmarkArray_CutSlice(b *testing.B) {
  1265  	b.ResetTimer()
  1266  	for i := 0; i < b.N; i++ {
  1267  		KArr.CutSlice(naturalArr, 1, 5)
  1268  	}
  1269  }
  1270  
  1271  func TestArray_NewStrMapItf(t *testing.T) {
  1272  	var res map[string]interface{}
  1273  
  1274  	res = KArr.NewStrMapItf()
  1275  	assert.NotNil(t, res)
  1276  	assert.Empty(t, res)
  1277  }
  1278  
  1279  func BenchmarkArray_NewStrMapItf(b *testing.B) {
  1280  	b.ResetTimer()
  1281  	for i := 0; i < b.N; i++ {
  1282  		KArr.NewStrMapItf()
  1283  	}
  1284  }
  1285  
  1286  func TestArray_NewStrMapStr(t *testing.T) {
  1287  	var res map[string]string
  1288  
  1289  	res = KArr.NewStrMapStr()
  1290  	assert.NotNil(t, res)
  1291  	assert.Empty(t, res)
  1292  }
  1293  
  1294  func BenchmarkArray_NewStrMapStr(b *testing.B) {
  1295  	b.ResetTimer()
  1296  	for i := 0; i < b.N; i++ {
  1297  		KArr.NewStrMapStr()
  1298  	}
  1299  }
  1300