master
go 53 lines 1.32 KB
Raw
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 }