github.com/netdata/go.d.plugin@v0.58.1/pkg/matcher/cache_test.go (about) 1 // SPDX-License-Identifier: GPL-3.0-or-later 2 3 package matcher 4 5 import ( 6 "testing" 7 8 "github.com/stretchr/testify/assert" 9 ) 10 11 func TestWithCache(t *testing.T) { 12 regMatcher, _ := NewRegExpMatcher("[0-9]+") 13 cached := WithCache(regMatcher) 14 15 assert.True(t, cached.MatchString("1")) 16 assert.True(t, cached.MatchString("1")) 17 assert.True(t, cached.Match([]byte("2"))) 18 assert.True(t, cached.Match([]byte("2"))) 19 } 20 21 func TestWithCache_specialCase(t *testing.T) { 22 assert.Equal(t, TRUE(), WithCache(TRUE())) 23 assert.Equal(t, FALSE(), WithCache(FALSE())) 24 } 25 func BenchmarkCachedMatcher_MatchString_cache_hit(b *testing.B) { 26 benchmarks := []struct { 27 name string 28 expr string 29 target string 30 }{ 31 {"stringFullMatcher", "= abc123", "abc123"}, 32 {"stringPrefixMatcher", "~ ^abc123", "abc123456"}, 33 {"stringSuffixMatcher", "~ abc123$", "hello abc123"}, 34 {"stringSuffixMatcher", "~ abc123", "hello abc123 world"}, 35 {"globMatcher", "* abc*def", "abc12345678def"}, 36 {"regexp", "~ [0-9]+", "1234567890"}, 37 } 38 for _, bm := range benchmarks { 39 m := Must(Parse(bm.expr)) 40 b.Run(bm.name+"_raw", func(b *testing.B) { 41 for i := 0; i < b.N; i++ { 42 m.MatchString(bm.target) 43 } 44 }) 45 b.Run(bm.name+"_cache", func(b *testing.B) { 46 cached := WithCache(m) 47 b.ResetTimer() 48 for i := 0; i < b.N; i++ { 49 cached.MatchString(bm.target) 50 } 51 }) 52 } 53 }