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) }