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  }