VictoriaMetrics/lib/bytesutil/fast_string_matcher_test.go

51 lines
1.3 KiB
Go

package bytesutil
import (
"strings"
"sync/atomic"
"testing"
)
func TestFastStringMatcher(t *testing.T) {
fsm := NewFastStringMatcher(func(s string) bool {
return strings.HasPrefix(s, "foo")
})
f := func(s string, resultExpected bool) {
t.Helper()
for i := 0; i < 10; i++ {
result := fsm.Match(s)
if result != resultExpected {
t.Fatalf("unexpected result for Match(%q) at iteration %d; got %v; want %v", s, i, result, resultExpected)
}
}
}
f("", false)
f("foo", true)
f("a_b-C", false)
f("foobar", true)
}
func TestNeedCleanup(t *testing.T) {
f := func(lastCleanupTime, currentTime uint64, resultExpected bool) {
t.Helper()
var lct atomic.Uint64
lct.Store(lastCleanupTime)
result := needCleanup(&lct, currentTime)
if result != resultExpected {
t.Fatalf("unexpected result for needCleanup(%d, %d); got %v; want %v", lastCleanupTime, currentTime, result, resultExpected)
}
if result {
if n := lct.Load(); n != currentTime {
t.Fatalf("unexpected value for lct; got %d; want currentTime=%d", n, currentTime)
}
} else {
if n := lct.Load(); n != lastCleanupTime {
t.Fatalf("unexpected value for lct; got %d; want lastCleanupTime=%d", n, lastCleanupTime)
}
}
}
f(0, 0, false)
f(0, 61, false)
f(0, 62, true)
f(10, 100, true)
}