package main import ( "encoding/hex" "fmt" "sort" "testing" "time" "gitlab.com/rhogenson/roseh.moe/internal/pwhash" ) func mustHex(t testing.TB, s string) []byte { t.Helper() b, err := hex.DecodeString(s) if err != nil { t.Fatalf("Invalid hex %q: %s", s, err) } return b } var iterations int func BenchmarkHashIter(b *testing.B) { const pw = "atypical evasion foyer roulette throng awning stability exchange humorless vowed" salt := mustHex(b, "4250af599e07cde7") for b.Loop() { pwhash.HashIter(pw, salt, iterations) } } func main() { const targetDuration = 5 * time.Second for iterations = 4096; time.Duration(testing.Benchmark(BenchmarkHashIter).NsPerOp()) < targetDuration; iterations *= 2 { } lo := iterations / 2 hi := iterations fmt.Println(lo + sort.Search(hi-lo, func(i int) bool { iterations = lo + i return time.Duration(testing.Benchmark(BenchmarkHashIter).NsPerOp()) > targetDuration })) }