I agree with this; a well written chess program can survive an invalid score retrieval and also an invalid move retrieval with proper legality testing.syzygy wrote:More importantly, a chess engine can afford some false hits that go undetected. A perft() program cannot, unless you don't care about the correctness of the calculation. 64 bit keys certainly is insufficient. With 128-bit keys it might be that the probability of a hashing error becomes smaller than the probability of a hardware error. (But one should make sure to use a new set of 128-bit Zobrist keys in a verification run if using the same program.)
But a verification run needs more than just a different set of keys; it should be done on different hardware with a different program written by a different author.
Many years ago, I had written a chess program which had passed all kinds of tests for a couple of years. But one day, the tricky legal move only generation failed -- on a tree grown from a middlegame position out of Win At Chess. There was this one unusual case with a bishop pinning a pawn from behind after an en passant capture which triggered a bug. A humbling incident for sure, and it taught be to be extra cautious.