package bytesutil

import (
	"strings"
	"sync/atomic"
	"testing"
)

func BenchmarkFastStringMatcher(b *testing.B) {
	for _, s := range []string{"", "foo", "foo-bar-baz", "http_requests_total"} {
		b.Run(s, func(b *testing.B) {
			benchmarkFastStringMatcher(b, s)
		})
	}
}

func benchmarkFastStringMatcher(b *testing.B, s string) {
	fsm := NewFastStringMatcher(func(s string) bool {
		return strings.HasPrefix(s, "foo")
	})
	b.ReportAllocs()
	b.SetBytes(1)
	b.RunParallel(func(pb *testing.PB) {
		n := uint64(0)
		for pb.Next() {
			v := fsm.Match(s)
			if v {
				n++
			}
		}
		atomic.AddUint64(&GlobalSink, n)
	})
}