I think I have found a bug in
string_algos.c. It’s in
StringScanner_scan, line 124:
scan->hlen -= found_at - scan->nlen;
If you print out
scan->hlen after each search in
string_algos_tests.c, you get weird numbers that just happen to not break the test cases.
The problem is that
scan->hlen is already the remaining length in the current iteration, so we can’t just subtract the found index (that relates to the whole haystack) and the length of the needle (in which case it’d have to be
scan->hlen -= found_at + scan->nlen, too).
I’ve changed it to
scan->hlen = blength(scan->in) - found_at - scan->nlen;
and the tests keep running and the intermediate states of
scan->hlen are now correct.