master
go 66 lines 1.11 KB
Raw
1 // SPDX-License-Identifier: GPL-3.0-or-later
2
3 package matcher
4
5 import (
6 "regexp"
7 "testing"
8
9 "github.com/stretchr/testify/assert"
10 )
11
12 func TestRegExpMatch_Match(t *testing.T) {
13 m := regexp.MustCompile("[0-9]+")
14
15 cases := []struct {
16 expected bool
17 line string
18 }{
19 {
20 expected: true,
21 line: "2019",
22 },
23 {
24 expected: true,
25 line: "It's over 9000!",
26 },
27 {
28 expected: false,
29 line: "This will never fail!",
30 },
31 }
32
33 for _, c := range cases {
34 assert.Equal(t, c.expected, m.MatchString(c.line))
35 }
36 }
37
38 func BenchmarkRegExp_MatchString(b *testing.B) {
39 benchmarks := []struct {
40 expr string
41 test string
42 }{
43 {"", ""},
44 {"abc", "abcd"},
45 {"^abc", "abcd"},
46 {"abc$", "abcd"},
47 {"^abc$", "abcd"},
48 {"[a-z]+", "abcd"},
49 }
50 for _, bm := range benchmarks {
51 b.Run(bm.expr+"_raw", func(b *testing.B) {
52 m := regexp.MustCompile(bm.expr)
53 b.ResetTimer()
54 for i := 0; i < b.N; i++ {
55 m.MatchString(bm.test)
56 }
57 })
58 b.Run(bm.expr+"_optimized", func(b *testing.B) {
59 m, _ := NewRegExpMatcher(bm.expr)
60 b.ResetTimer()
61 for i := 0; i < b.N; i++ {
62 m.MatchString(bm.test)
63 }
64 })
65 }
66 }