Edit: I implemented a Perft that has showed the non-correctnes of the move generator. It helped a lot finding some relatively easy to find bugs, but at last some results are still wrong. Here are the results: and here are the correct results:
How can I find out if my perft function is correct?
By comparing Perft results developers can find out if those functions work correctly or not. If they are incorrect developers can narrow quickly by comparing branches, then call Perft for wrong branches with lower depth, repeat until finding direct positions which give the wrong result.
What are the results of perft in chess?
This page contains detailed perft results for several positions that are useful for debugging, beginning with the start position. Captures, checkmates, and other information have been included along with the node counts ( leaf nodes, excluding internal or interior nodes) or movepath enumerations.
Is there a way to increase the speed of perft?
Perft can receive another speed boost by hashing node counts, with a small chance for inaccurate results. Sometimes this is used as a sanity check to make sure the hash table and keys are working correctly. The Divide command is often implemented as a variation of Perft, listing all moves and for each move, the perft of the decremented depth.
What makes an odd position in a perft test?
When finding positions to use in a perft test you need to come up with “odd” position – ones which don’t occur too often and ones which are special cases. Normally this means positions which contain the special chess moves i.e. castling, en-passant, promotions and capture promotions.
What makes a good perft position in chess?
Normally this means positions which contain the special chess moves i.e. castling, en-passant, promotions and capture promotions. In particular I’ve found the best positions for perft are those which involve getting into, or out of, check using these special moves. Also position with lots of revealed checks, pinned pieces are good.