pkg.re/essentialkaos/ek.10@v12.41.0+incompatible/strutil/strutil_test.go (about) 1 package strutil 2 3 // ////////////////////////////////////////////////////////////////////////////////// // 4 // // 5 // Copyright (c) 2022 ESSENTIAL KAOS // 6 // Apache License, Version 2.0 <https://www.apache.org/licenses/LICENSE-2.0> // 7 // // 8 // ////////////////////////////////////////////////////////////////////////////////// // 9 10 import ( 11 "testing" 12 13 . "pkg.re/essentialkaos/check.v1" 14 ) 15 16 // ////////////////////////////////////////////////////////////////////////////////// // 17 18 func Test(t *testing.T) { TestingT(t) } 19 20 type StrUtilSuite struct{} 21 22 // ////////////////////////////////////////////////////////////////////////////////// // 23 24 var _ = Suite(&StrUtilSuite{}) 25 26 // ////////////////////////////////////////////////////////////////////////////////// // 27 28 func (s *StrUtilSuite) TestQ(c *C) { 29 c.Assert(Q(), Equals, "") 30 c.Assert(Q("a"), Equals, "a") 31 c.Assert(Q("", "", "1"), Equals, "1") 32 } 33 34 func (s *StrUtilSuite) TestConcat(c *C) { 35 s1 := "abcdef" 36 s2 := "123456" 37 s3 := "ABCDEF" 38 s4 := "!@#$%^" 39 40 c.Assert(Concat(s1, s2, s3, s4), Equals, s1+s2+s3+s4) 41 } 42 43 func (s *StrUtilSuite) TestSubstr(c *C) { 44 c.Assert(Substr("", 1, 2), Equals, "") 45 c.Assert(Substr("test1234TEST", 30, 32), Equals, "") 46 c.Assert(Substr("test1234TEST", 0, 8), Equals, "test1234") 47 c.Assert(Substr("test1234TEST", 0, 999), Equals, "test1234TEST") 48 c.Assert(Substr("test1234TEST", 4, 4), Equals, "1234") 49 c.Assert(Substr("test1234TEST", 8, 16), Equals, "TEST") 50 c.Assert(Substr("test1234TEST", -1, 4), Equals, "test") 51 c.Assert(Substr("简单的消息", -1, 2), Equals, "简单") 52 c.Assert(Substr("Пример", -1, 2), Equals, "Пр") 53 c.Assert(Substr("test1234TEST", 12, 16), Equals, "") 54 c.Assert(Substr("test1234TEST", 11, 16), Equals, "T") 55 } 56 57 func (s *StrUtilSuite) TestSubstring(c *C) { 58 c.Assert(Substring("", 1, 2), Equals, "") 59 c.Assert(Substring("test1234TEST", 30, 32), Equals, "") 60 c.Assert(Substring("test1234TEST", 0, 999), Equals, "test1234TEST") 61 c.Assert(Substring("test1234TEST", 4, 8), Equals, "1234") 62 c.Assert(Substring("test1234TEST", 4, 4), Equals, "") 63 c.Assert(Substring("test1234TEST", 8, 100), Equals, "TEST") 64 c.Assert(Substring("test1234TEST", 6, -10), Equals, "test12") 65 c.Assert(Substring("简单的消息", -1, 2), Equals, "简单") 66 c.Assert(Substring("Пример", -1, 2), Equals, "Пр") 67 c.Assert(Substring("test1234TEST", 12, 99), Equals, "") 68 c.Assert(Substring("test1234TEST", 11, 99), Equals, "T") 69 } 70 71 func (s *StrUtilSuite) TestExtract(c *C) { 72 c.Assert(Extract("", 1, 10), Equals, "") 73 c.Assert(Extract("test1234TEST", -10, 4), Equals, "test") 74 c.Assert(Extract("test1234TEST", 8, 100), Equals, "TEST") 75 c.Assert(Extract("test1234TEST", 4, 8), Equals, "1234") 76 } 77 78 func (s *StrUtilSuite) TestEllipsis(c *C) { 79 c.Assert(Ellipsis("Test1234", 8), Equals, "Test1234") 80 c.Assert(Ellipsis("Test1234test", 8), Equals, "Test1...") 81 } 82 83 func (s *StrUtilSuite) TestHead(c *C) { 84 c.Assert(Head("", 1), Equals, "") 85 c.Assert(Head("ABCD1234", 0), Equals, "") 86 c.Assert(Head("ABCD1234", -10), Equals, "") 87 c.Assert(Head("ABCD1234", 1), Equals, "A") 88 c.Assert(Head("ABCD1234", 4), Equals, "ABCD") 89 c.Assert(Head("ABCD1234", 100), Equals, "ABCD1234") 90 } 91 92 func (s *StrUtilSuite) TestTail(c *C) { 93 c.Assert(Tail("", 1), Equals, "") 94 c.Assert(Tail("ABCD1234", 0), Equals, "") 95 c.Assert(Tail("ABCD1234", -10), Equals, "") 96 c.Assert(Tail("ABCD1234", 1), Equals, "4") 97 c.Assert(Tail("ABCD1234", 4), Equals, "1234") 98 c.Assert(Tail("ABCD1234", 100), Equals, "ABCD1234") 99 } 100 101 func (s *StrUtilSuite) TestExclude(c *C) { 102 c.Assert(Exclude("ABCD1234abcd1234ABCD", ""), Equals, "ABCD1234abcd1234ABCD") 103 c.Assert(Exclude("", "1234"), Equals, "") 104 c.Assert(Exclude("ABCD1234abcd1234ABCD", "5678"), Equals, "ABCD1234abcd1234ABCD") 105 c.Assert(Exclude("ABCD1234abcd1234ABCD", "1234"), Equals, "ABCDabcdABCD") 106 } 107 108 func (s *StrUtilSuite) TestSize(c *C) { 109 c.Assert(PrefixSize("", ' '), Equals, 0) 110 c.Assert(PrefixSize("abcd", ' '), Equals, 0) 111 c.Assert(PrefixSize(" abcd", ' '), Equals, 4) 112 c.Assert(PrefixSize(" ", ' '), Equals, 4) 113 114 c.Assert(SuffixSize("", ' '), Equals, 0) 115 c.Assert(SuffixSize("abcd", ' '), Equals, 0) 116 c.Assert(SuffixSize("abcd ", ' '), Equals, 4) 117 c.Assert(SuffixSize(" ", ' '), Equals, 4) 118 } 119 120 func (s *StrUtilSuite) TestReplaceAll(c *C) { 121 c.Assert(ReplaceAll("ABCDABCD12341234", "AB12", "?"), Equals, "??CD??CD??34??34") 122 c.Assert(ReplaceAll("", "AB12", "?"), Equals, "") 123 } 124 125 func (s *StrUtilSuite) TestFields(c *C) { 126 c.Assert(Fields(""), IsNil) 127 c.Assert(Fields(""), HasLen, 0) 128 c.Assert(Fields("1 2 3 4 5"), DeepEquals, []string{"1", "2", "3", "4", "5"}) 129 c.Assert(Fields(`abc 123 'k:"42"'`), DeepEquals, []string{"abc", "123", `k:"42"`}) 130 c.Assert(Fields("1,2,3,4,5"), DeepEquals, []string{"1", "2", "3", "4", "5"}) 131 c.Assert(Fields("1;2;3;4;5"), DeepEquals, []string{"1", "2", "3", "4", "5"}) 132 c.Assert(Fields("1, 2, 3, 4, 5"), DeepEquals, []string{"1", "2", "3", "4", "5"}) 133 c.Assert(Fields("\"1 2\" 3 \"4 5\""), DeepEquals, []string{"1 2", "3", "4 5"}) 134 c.Assert(Fields("'1 2' 3 '4 5'"), DeepEquals, []string{"1 2", "3", "4 5"}) 135 c.Assert(Fields("‘1 2’ 3 ‘4 5’"), DeepEquals, []string{"1 2", "3", "4 5"}) 136 c.Assert(Fields("“1 2” 3 “4 5”"), DeepEquals, []string{"1 2", "3", "4 5"}) 137 c.Assert(Fields("„1 2“ 3 «4 5»"), DeepEquals, []string{"1 2", "3", "4 5"}) 138 c.Assert(Fields("«1 '2'» 3 «4 “5”»"), DeepEquals, []string{"1 '2'", "3", "4 “5”"}) 139 c.Assert(Fields("Bob Alice, 'Mary Key', \"John 'Dow'\""), DeepEquals, []string{"Bob", "Alice", "Mary Key", "John 'Dow'"}) 140 } 141 142 func (s *StrUtilSuite) TestReadField(c *C) { 143 c.Assert(ReadField("abc 1234 DEF", -1, true), Equals, "") 144 c.Assert(ReadField("abc 1234 DEF", 0, true), Equals, "abc") 145 c.Assert(ReadField("abc 1234 DEF", 1, true), Equals, "1234") 146 c.Assert(ReadField("abc 1234 DEF", 2, true), Equals, "DEF") 147 c.Assert(ReadField("abc 1234 DEF", 3, true), Equals, "") 148 149 c.Assert(ReadField("abc|||||1234||DEF", 1, true, "|"), Equals, "1234") 150 c.Assert(ReadField("abc+1234|DEF", 1, true, "|", "+"), Equals, "1234") 151 c.Assert(ReadField("abc::1234:::DEF:", 5, false, ":"), Equals, "DEF") 152 } 153 154 func (s *StrUtilSuite) TestCopy(c *C) { 155 c.Assert(Copy(""), Equals, "") 156 c.Assert(Copy("ABCD1234"), Equals, "ABCD1234") 157 } 158 159 func (s *StrUtilSuite) TestLen(c *C) { 160 c.Assert(Len("ABCDABCD12341234"), Equals, 16) 161 c.Assert(Len(""), Equals, 0) 162 c.Assert(Len("✶✈12AB例例子예"), Equals, 10) 163 } 164 165 func (s *StrUtilSuite) TestBefore(c *C) { 166 c.Assert(Before("", "@"), Equals, "") 167 c.Assert(Before("test::1234", "@"), Equals, "test::1234") 168 c.Assert(Before("test::1234", "::"), Equals, "test") 169 } 170 171 func (s *StrUtilSuite) TestAfter(c *C) { 172 c.Assert(After("", "@"), Equals, "") 173 c.Assert(After("test::1234", "@"), Equals, "test::1234") 174 c.Assert(After("test::1234", "::"), Equals, "1234") 175 } 176 177 func (s *StrUtilSuite) TestHasPrefixAny(c *C) { 178 c.Assert(HasPrefixAny("#abcd", "#", "@"), Equals, true) 179 c.Assert(HasPrefixAny("#abcd", "$", "@"), Equals, false) 180 } 181 182 func (s *StrUtilSuite) TestHasSuffixAny(c *C) { 183 c.Assert(HasSuffixAny("abcd#", "#", "@"), Equals, true) 184 c.Assert(HasSuffixAny("abcd#", "$", "@"), Equals, false) 185 } 186 187 func (s *StrUtilSuite) BenchmarkSubstr(c *C) { 188 for i := 0; i < c.N; i++ { 189 Substr("test1234TEST", 4, 8) 190 } 191 } 192 193 func (s *StrUtilSuite) BenchmarkEllipsis(c *C) { 194 for i := 0; i < c.N; i++ { 195 Ellipsis("Test1234test", 8) 196 } 197 } 198 199 func (s *StrUtilSuite) BenchmarkHead(c *C) { 200 for i := 0; i < c.N; i++ { 201 Head("ABCD1234ABCD1234", 4) 202 } 203 } 204 205 func (s *StrUtilSuite) BenchmarkTail(c *C) { 206 for i := 0; i < c.N; i++ { 207 Tail("ABCD1234ABCD1234", 4) 208 } 209 } 210 211 func (s *StrUtilSuite) BenchmarkExclude(c *C) { 212 for i := 0; i < c.N; i++ { 213 Exclude("ABCD1234abcd1234ABCD", "1234") 214 } 215 } 216 217 func (s *StrUtilSuite) BenchmarkExtract(c *C) { 218 for i := 0; i < c.N; i++ { 219 Extract("test1234TEST", 4, 8) 220 } 221 } 222 223 func (s *StrUtilSuite) BenchmarkSize(c *C) { 224 for i := 0; i < c.N; i++ { 225 PrefixSize(" abcd", ' ') 226 } 227 } 228 229 func (s *StrUtilSuite) BenchmarkFields(c *C) { 230 for i := 0; i < c.N; i++ { 231 Fields("\"1 2\" 3 \"4 5\"") 232 } 233 } 234 235 func (s *StrUtilSuite) BenchmarkReadField(c *C) { 236 for i := 0; i < c.N; i++ { 237 ReadField("abc 1234 DEF", 2, false) 238 } 239 } 240 241 func (s *StrUtilSuite) BenchmarkLen(c *C) { 242 for i := 0; i < c.N; i++ { 243 Len("✶✈12AB例例子예") 244 } 245 } 246 247 func (s *StrUtilSuite) BenchmarkReplaceAll(c *C) { 248 for i := 0; i < c.N; i++ { 249 ReplaceAll("ABCDABCD12341234", "AB12", "?") 250 } 251 }