slice_test.go 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. package slice
  2. import (
  3. "fmt"
  4. "strconv"
  5. "strings"
  6. "testing"
  7. )
  8. func TestRemoveRepeatElement(t *testing.T) {
  9. strSlice := []string{"1", "2", "1", "3", "2", "4", "3"}
  10. intSlice := []int{1, 2, 1, 3, 2, 4, 3}
  11. strSliceRemovedRepeatElement := RemoveRepeatElement(strSlice)
  12. if strSliceRemovedRepeatElement[0] != "1" ||
  13. strSliceRemovedRepeatElement[1] != "2" ||
  14. strSliceRemovedRepeatElement[2] != "3" ||
  15. strSliceRemovedRepeatElement[3] != "4" {
  16. t.Fatal("字符串slice移除元素后不正确")
  17. }
  18. intSliceRemovedRepeatElement := RemoveRepeatElement(intSlice)
  19. if intSliceRemovedRepeatElement[0] != 1 ||
  20. intSliceRemovedRepeatElement[1] != 2 ||
  21. intSliceRemovedRepeatElement[2] != 3 ||
  22. intSliceRemovedRepeatElement[3] != 4 {
  23. t.Fatal("整型slice移除元素后不正确")
  24. }
  25. }
  26. func TestRemoveRepeatElementByKey(t *testing.T) {
  27. type Person struct {
  28. Name string
  29. Age int
  30. }
  31. personSlice := []Person{
  32. {
  33. Name: "test",
  34. Age: 10,
  35. },
  36. {
  37. Name: "test",
  38. Age: 20,
  39. },
  40. {
  41. Name: "test1",
  42. Age: 30,
  43. },
  44. }
  45. personSliceRemovedRepeatElement := RemoveRepeatElementByKey(personSlice, func(element Person) string {
  46. return element.Name
  47. })
  48. if len(personSliceRemovedRepeatElement) != 2 ||
  49. (personSliceRemovedRepeatElement[0].Name != "test" && personSliceRemovedRepeatElement[0].Age != 10) ||
  50. personSliceRemovedRepeatElement[1].Name != "test1" && personSliceRemovedRepeatElement[1].Age != 30 {
  51. t.Fatal("slice移除元素后不正确")
  52. }
  53. }
  54. func TestToMap(t *testing.T) {
  55. testSlice := []string{"1::one", "2::two"}
  56. resultMap, err := ToMap(testSlice, func(v string) (int, string, error) {
  57. parts := strings.Split(v, "::")
  58. key, err := strconv.Atoi(parts[0])
  59. if err != nil {
  60. return 0, "", err
  61. }
  62. return key, parts[1], nil
  63. })
  64. if err != nil {
  65. t.Fatal(err)
  66. }
  67. if resultMap[1] != "one" || resultMap[2] != "two" {
  68. t.Fatal("Map生成错误")
  69. }
  70. }
  71. type Person struct {
  72. Name string
  73. Age int
  74. }
  75. func TestExtractValue(t *testing.T) {
  76. persons := []Person{
  77. {
  78. Name: "test1",
  79. Age: 10,
  80. },
  81. {
  82. Name: "test2",
  83. Age: 20,
  84. },
  85. {
  86. Name: "test3",
  87. Age: 30,
  88. },
  89. }
  90. retPersons := ExtractValue(persons, func(person Person) (Person, bool) {
  91. if person.Age > 10 {
  92. return person, true
  93. }
  94. return Person{}, false
  95. })
  96. fmt.Println(retPersons)
  97. retPersonNames := ExtractValue(persons, func(person Person) (string, bool) {
  98. return person.Name, true
  99. })
  100. fmt.Println(retPersonNames)
  101. }