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  }