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