mcostalba wrote:hyatt wrote:
It just removes one more cause of uncertainty. And without books, you don't have to worry about hidden book learning, which has happened in the past. Nor do you have to figure out how to disable normal book learning, which some progs do not allow anyway.
I have just fixed a very nasty bug that I had introduced some weeks ago.
The bug is impossible to spot with node counting fingerprints and it would be impossible to spot also using positions to benchmark or to test on real games.
The bug was due to an erroneous zeroing of game ply when start thinking. It messed up with rule50 so that the net effect was that draw by 50 detection was not working properly. I have incidentaly found this probably because I use books so that at each new move the GUI sends (uci protocol) all the move list from starting position up to current one. Perhaps using fixed position you lose the info on rule50 for previous moves and this bug could remain hidden or is more difficult to spot.
The bottom line, the experience I took away from this bug hunting session, is that as more you diverge from a "normal" chess game more you are prone to subtle and nasty bugs that have more possibility to remain untriggered, but they fire during normal games (as done in the public rating lists).
How would that fail to be caught with my form of testing. I play _entire_ games, I just start at the same position for each pair of games in a 30K game match. Next 30K games will all start at the same starting positions again. But repetitions, 50 move draws and all that happen normally and I have actually found bugs in the 50 move code myself. One was the infamous if both sides make 50 moves, with no pawn moves or no captures, the game can be declared a draw by the side on move. UNLESS the side on move is checkmated. Then the game is over and the other side wins. Most miss that mate on ply 100 is a win. I modified the code to do this correctly, and broke it for a bit. Showed up like a sore thumb on cluster testing, however.
I don't see how one would consider these to be "not normal chess games." With a book, you don't start thinking until some random point where you drop out of book. I do exactly the same here, I just choose those random points myself rather than letting book authors do so.
The only place I would agree with you on this is that you do avoid testing your book code. And I do very rarely run "book on" tests. I have an unusual mode in Crafty, used in tournaments, where when it is in book, when it is time to ponder, it first looks at the opponent's possible moves and eliminates any that are in book since we have a reply for those. From the remaining moves we do a search to find the best, and then use that to ponder. The idea came from Murray Campbell many years ago and is based on the idea that if your opponent runs out of book, he may well not make a book move, because the book could miss a threat or have a bug. Since he is out of book, you can sit and do nothing, or you can make a stab on the best non-book reply and then ponder that so at least you are doing something. And even though you might ponder the wrong move, you do load the hash table with useful information that will help on a ponder miss. I have another mode that for lines that are not played very often. Crafty will do a search on the set of known book moves to do something more than just randomly choosing between a group of moves that are rarely played. And for either of those, I run normal book-on tests. But excluding testing the book code, I don't see what would be missed.