var _ … func usage() { … } func main() { … } type Bisect … type Result … var searchFatal … // Search runs a bisect search according to the configuration in b. // It reports whether any failing change sets were found. func (b *Bisect) Search() bool { … } // Fatalf prints a message to standard error and then panics, // causing Search to return false. func (b *Bisect) Fatalf(format string, args ...any) { … } // Logf prints a message to standard error. func (b *Bisect) Logf(format string, args ...any) { … } func skipHexDigits(idY, idN []uint64) int { … } // search searches for a single locally minimal change set. // // Invariant: r describes the result of r.Suffix + b.Add, which failed. // (There's an implicit -b.Skip everywhere here. b.Skip does not change.) // We want to extend r.Suffix to preserve the failure, working toward // a suffix that identifies a single change. func (b *Bisect) search(r *Result) []string { … } // Run runs a set of trials selecting changes with the given suffix, // plus the ones in b.Add and not the ones in b.Skip. // The returned result's MatchIDs, MatchText, and MatchFull // only list the changes that match suffix. // When b.Count > 1, Run runs b.Count trials and requires // that they all succeed or they all fail. If not, it calls b.Fatalf. func (b *Bisect) Run(suffix string) *Result { … } // run runs a single trial for Run. func (b *Bisect) run(suffix string) *Result { … } // replace returns x with literal text PATTERN and RANDOM replaced by pattern and random. func replace(x, pattern, random string) string { … } // commonSuffix returns the longest common binary suffix shared by all uint64s in list. // If list is empty, commonSuffix returns an empty string. func commonSuffix(list []uint64) string { … }