github.com/sohaha/zlsgo@v1.7.13-0.20240501141223-10dd1a906f76/zstring/match_test.go (about)

     1  package zstring
     2  
     3  import (
     4  	"strings"
     5  	"testing"
     6  
     7  	"github.com/sohaha/zlsgo"
     8  )
     9  
    10  var (
    11  	z = "hello 中华小当家"
    12  	s = "hello pickup"
    13  	h = "hello kiki"
    14  	u = "/api/hello/kiki/k999"
    15  )
    16  
    17  func TestMatch(T *testing.T) {
    18  	t := zlsgo.NewTest(T)
    19  
    20  	t.EqualExit(true, Match(s, s))
    21  	t.EqualExit(false, Match(s, h))
    22  
    23  	t.EqualExit(true, Match(s, "hello p*"))
    24  	t.EqualExit(false, Match(s, "hello k*"))
    25  
    26  	t.EqualExit(true, Match(s, "hello p?ckup"))
    27  	t.EqualExit(true, Match(s, "he?lo?p?ck*p"))
    28  	t.EqualExit(false, Match(s, "hello ?iki"))
    29  
    30  	t.EqualExit(true, Match(s, "hello*?ckup"))
    31  	t.EqualExit(false, Match(s, "hello*?iki"))
    32  
    33  	t.EqualExit(true, Match(s, "*"))
    34  	t.EqualExit(true, Match(z, "*"))
    35  
    36  	t.EqualExit(true, Match(z, "*当家"))
    37  	t.EqualExit(false, Match(z, "h?o*当家"))
    38  	t.EqualExit(false, Match(z, "h*{大}当家"))
    39  	t.EqualExit(false, Match(z, "h*大当家"))
    40  	t.EqualExit(true, Match(z, "h*{小}当家"))
    41  	t.EqualExit(true, Match(z, "h*小当家"))
    42  	t.EqualExit(true, Match(z, "h*{小,大}当家"))
    43  	t.EqualExit(false, Match(z, "h*{中,大}当家"))
    44  	t.EqualExit(true, Match(z, "h*{小当家,大当家}"))
    45  	t.EqualExit(false, Match(z, "h*{不当家,大当家}"))
    46  	t.EqualExit(true, Match(z, "hell{o 中华小当,大当}家"))
    47  	t.EqualExit(true, Match(z, "h{ll,ello} 中华小当家"))
    48  	t.EqualExit(false, Match(z, "h{ll,ell} 中华小当家"))
    49  
    50  	t.EqualExit(true, Match("超级马里{奥", "超级马里{奥"))
    51  	t.EqualExit(false, Match("超级马里奥{", "超级马里{奥"))
    52  	t.EqualExit(true, Match("超级马里奥{}", "超级马里奥{}"))
    53  	t.EqualExit(true, Match("超级马里奥{1,2.3}!", "超级马里奥{1,2.3}!"))
    54  
    55  	t.EqualExit(true, Match(u, "/api/hello/kiki/k999"))
    56  	t.EqualExit(false, Match("/api/hi2/kiki/k999", "/api/{hello,hi}/kiki/k999"))
    57  	t.EqualExit(true, Match("/api/hi/kiki/k999", "/api/{hello,hi}/kiki/k999"))
    58  	t.EqualExit(true, Match(u, "/api/{hello,hi}/kiki/k999"))
    59  	t.EqualExit(true, Match(u, "/api/*/kiki/*"))
    60  	t.EqualExit(false, Match("/api/kiki/k999", "/api/*/kiki/*"))
    61  	t.EqualExit(false, Match("/api/kiki/", "/api/*/kiki/*"))
    62  	t.EqualExit(true, Match(u, "/api/*"))
    63  	t.EqualExit(true, Match(u, "/api/**"))
    64  	t.EqualExit(true, Match(u, "/api/*/*/k999"))
    65  	t.EqualExit(true, Match(u, "/api/*/k999"))
    66  	t.EqualExit(true, Match(u, "/api*k999"))
    67  	t.EqualExit(true, Match(u, "/a*9"))
    68  	t.EqualExit(false, Match(u, "a*9"))
    69  	t.EqualExit(false, Match(u, "/a*8"))
    70  	t.EqualExit(true, Match(u, "/api/hello/kiki/{k999,k1}"))
    71  }
    72  
    73  func TestIsPattern(T *testing.T) {
    74  	t := zlsgo.NewTest(T)
    75  	t.Equal(true, IsPattern("hello ?ickup"))
    76  	t.Equal(true, IsPattern("hello*"))
    77  	t.Equal(false, IsPattern("hello pickup"))
    78  }
    79  
    80  func BenchmarkMatch1(b *testing.B) {
    81  	for i := 0; i < b.N; i++ {
    82  		Match(z, "hello *")
    83  	}
    84  }
    85  
    86  func BenchmarkMatch2(b *testing.B) {
    87  	for i := 0; i < b.N; i++ {
    88  		RegexMatch(`hello`, z)
    89  	}
    90  }
    91  
    92  func BenchmarkMatch3(b *testing.B) {
    93  	for i := 0; i < b.N; i++ {
    94  		strings.Contains(z, "hello ")
    95  	}
    96  }