diff options
| author | John Wiegley <johnw@newartisans.com> | 2008-09-01 00:23:05 -0400 |
|---|---|---|
| committer | John Wiegley <johnw@newartisans.com> | 2008-09-01 00:23:05 -0400 |
| commit | 43bbaca3f58764063f2a83f92d747cf45ae182a0 (patch) | |
| tree | 0234833057704bdff6e7c1637ff0a35d426cdd94 | |
| parent | 04f8330abc2da6303ee55088eff8a9f27b643d0d (diff) | |
Wrote a testing function for emacs-chess, which computes the legality of plies
for a database of known legal games.
| -rw-r--r-- | chess-test.el | 46 |
1 files changed, 45 insertions, 1 deletions
diff --git a/chess-test.el b/chess-test.el index 2afd7cd..1e59566 100644 --- a/chess-test.el +++ b/chess-test.el @@ -1,3 +1,47 @@ ;; Soon: Put Emacs Chess through an enormous battery of tests. -(defun chess-test () t) +(eval-when-compile + (require 'cl)) + +(require 'chess-database) +(require 'chess-game) + +(defun chess-test (&optional file) + (unless file + (setq file (car command-line-args-left))) + (message "Opening chess database '%s'" file) + (let ((database (chess-database-open file))) + (if database + (progn + (message "Running chess unit tests...") + (condition-case err + (let ((count (chess-database-count database)) + (ply-count 0) + (index 1) + (begin (current-time))) + (while (< index count) + ;; Reading in the game will cause it to be converted from PGN + ;; (this is true currently) to a chess-game, during which time + ;; every move will be tested for legality. + ;; + ;; jww (2008-08-31): We should add some extra checks here, if we + ;; want to verify the final position and such. + (let ((game (chess-database-read database index))) + (when game + (setq ply-count + (+ ply-count (length (chess-game-plies game)))) + (if (= 0 (mod index 1000)) + (message "Read %d games: %d total plies (%.2f ply/sec)" + index ply-count + (/ (float ply-count) + (float + (time-to-seconds + (subtract-time (current-time) + begin)))))))) + (setq index (1+ index))) + (message "Running chess unit tests...done")) + (t + (error "Failed to open chess database '%s'" file))) + (chess-database-close database))))) + +;;; chess-test.el ends here |
