github.com/jxskiss/gopkg/v2@v2.14.9-0.20240514120614-899f3e7952b4/utils/strutil/strutil_test.go (about) 1 package strutil 2 3 import ( 4 "strings" 5 "testing" 6 ) 7 8 func TestHasPrefixFold(t *testing.T) { 9 tests := []struct { 10 s, prefix string 11 result bool 12 }{ 13 {"camli", "CAML", true}, 14 {"CAMLI", "caml", true}, 15 {"cam", "Cam", true}, 16 {"camli", "car", false}, 17 {"caml", "camli", false}, 18 {"Hello, 世界 dasdsa", "HeLlO, 世界", true}, 19 {"Hello, 世界", "HeLlO, 世界-", false}, 20 21 {"kelvin", "\u212A" + "elvin", true}, // "\u212A" is the Kelvin temperature sign 22 {"Kelvin", "\u212A" + "elvin", true}, 23 {"kelvin", "\u212A" + "el", true}, 24 {"Kelvin", "\u212A" + "el", true}, 25 {"\u212A" + "elvin", "Kelvin", true}, 26 {"\u212A" + "elvin", "kelvin", true}, 27 {"\u212A" + "elvin", "Kel", true}, 28 {"\u212A" + "elvin", "kel", true}, 29 } 30 for _, tt := range tests { 31 r := HasPrefixFold(tt.s, tt.prefix) 32 if r != tt.result { 33 t.Errorf("HasPrefixFold(%q, %q) returned %v", tt.s, tt.prefix, r) 34 } 35 } 36 } 37 38 func TestHasSuffixFold(t *testing.T) { 39 tests := []struct { 40 s, suffix string 41 result bool 42 }{ 43 {"camli", "AMLI", true}, 44 {"CAMLI", "amli", true}, 45 {"mli", "MLI", true}, 46 {"camli", "ali", false}, 47 {"amli", "camli", false}, 48 {"asas Hello, 世界", "HeLlO, 世界", true}, 49 {"Hello, 世界", "HeLlO, 世界-", false}, 50 {"KkkkKKkelvin", "\u212A" + "elvin", true}, // "\u212A" is the Kelvin temperature sign 51 52 {"kelvin", "\u212A" + "elvin", true}, // "\u212A" is the Kelvin temperature sign 53 {"Kelvin", "\u212A" + "elvin", true}, 54 {"\u212A" + "elvin", "Kelvin", true}, 55 {"\u212A" + "elvin", "kelvin", true}, 56 {"\u212A" + "elvin", "vin", true}, 57 {"\u212A" + "elvin", "viN", true}, 58 } 59 for _, tt := range tests { 60 r := HasSuffixFold(tt.s, tt.suffix) 61 if r != tt.result { 62 t.Errorf("HasSuffixFold(%q, %q) returned %v", tt.s, tt.suffix, r) 63 } 64 } 65 } 66 67 func TestContainsFold(t *testing.T) { 68 // TODO: more tests, more languages. 69 tests := []struct { 70 s, substr string 71 result bool 72 }{ 73 {"camli", "CAML", true}, 74 {"CAMLI", "caml", true}, 75 {"cam", "Cam", true}, 76 {"мир", "ми", true}, 77 {"МИP", "ми", true}, 78 {"КАМЛИЙСТОР", "камлийс", true}, 79 {"КаМлИйСтОр", "КаМлИйС", true}, 80 {"camli", "car", false}, 81 {"caml", "camli", false}, 82 83 {"camli", "AMLI", true}, 84 {"CAMLI", "amli", true}, 85 {"mli", "MLI", true}, 86 {"мир", "ир", true}, 87 {"МИP", "ми", true}, 88 {"КАМЛИЙСТОР", "лийстор", true}, 89 {"КаМлИйСтОр", "лИйСтОр", true}, 90 {"мир", "р", true}, 91 {"camli", "ali", false}, 92 {"amli", "camli", false}, 93 94 {"МИP", "и", true}, 95 {"мир", "и", true}, 96 {"КАМЛИЙСТОР", "лийс", true}, 97 {"КаМлИйСтОр", "лИйС", true}, 98 99 {"árvíztűrő tükörfúrógép", "árvíztŰrŐ", true}, 100 {"I love ☕", "i love ☕", true}, 101 102 {"k", "\u212A", true}, // "\u212A" is the Kelvin temperature sign 103 {"\u212A" + "elvin", "k", true}, 104 {"kelvin", "\u212A" + "elvin", true}, 105 {"Kelvin", "\u212A" + "elvin", true}, 106 {"\u212A" + "elvin", "Kelvin", true}, 107 {"\u212A" + "elvin", "kelvin", true}, 108 {"273.15 kelvin", "\u212A" + "elvin", true}, 109 {"273.15 Kelvin", "\u212A" + "elvin", true}, 110 {"273.15 \u212A" + "elvin", "Kelvin", true}, 111 {"273.15 \u212A" + "elvin", "kelvin", true}, 112 } 113 for _, tt := range tests { 114 r := ContainsFold(tt.s, tt.substr) 115 if r != tt.result { 116 t.Errorf("ContainsFold(%q, %q) returned %v", tt.s, tt.substr, r) 117 } 118 } 119 } 120 121 func TestReverse(t *testing.T) { 122 tests := []struct { 123 s, result string 124 }{ 125 {"ABCD", "DCBA"}, 126 {"ABCDE", "EDCBA"}, 127 {"Hello, 世界", "界世 ,olleH"}, 128 } 129 for _, tt := range tests { 130 r := Reverse(tt.s) 131 if r != tt.result { 132 t.Errorf("Reverse(%q) returned %v", tt.s, r) 133 } 134 } 135 } 136 137 func BenchmarkHasSuffixFoldToLower(tb *testing.B) { 138 a, b := "camlik", "AMLI\u212A" 139 for i := 0; i < tb.N; i++ { 140 if !strings.HasSuffix(strings.ToLower(a), strings.ToLower(b)) { 141 tb.Fatalf("%q should have the same suffix as %q", a, b) 142 } 143 } 144 } 145 func BenchmarkHasSuffixFold(tb *testing.B) { 146 a, b := "camlik", "AMLI\u212A" 147 for i := 0; i < tb.N; i++ { 148 if !HasSuffixFold(a, b) { 149 tb.Fatalf("%q should have the same suffix as %q", a, b) 150 } 151 } 152 } 153 154 func BenchmarkHasPrefixFoldToLower(tb *testing.B) { 155 a, b := "kamlistore", "\u212AAMLI" 156 for i := 0; i < tb.N; i++ { 157 if !strings.HasPrefix(strings.ToLower(a), strings.ToLower(b)) { 158 tb.Fatalf("%q should have the same suffix as %q", a, b) 159 } 160 } 161 } 162 func BenchmarkHasPrefixFold(tb *testing.B) { 163 a, b := "kamlistore", "\u212AAMLI" 164 for i := 0; i < tb.N; i++ { 165 if !HasPrefixFold(a, b) { 166 tb.Fatalf("%q should have the same suffix as %q", a, b) 167 } 168 } 169 }