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 }