chess-eco.pos chess-eco.fen
TESTS = chess-test
-DATABASE = test/largedb
-START =
-FINISH =
+DATABASE = $(shell test -r test/largedb.sg3 && echo test/largedb || echo test/historic.pgn)
+START = $(shell test -r test/largedb.sg3 && perl -e 'print int(rand(4000000)), "\n";' || echo 1)
+COUNT = 100000
-chess-test: Makefile
- echo "$(EMACS) -batch -L $(srcdir) -l chess-test.el -f chess-test '$(DATABASE)' $(START) $(FINISH)" > $@
+chess-test:
+ echo "$(EMACS) -batch -L $(srcdir) -l chess-test.el -f chess-test '$(DATABASE)' $(START) $(COUNT); rm -f $(top_builddir)/chess-test" > $@
chmod u+x $@
TAGS: $(dist_lisp_LISP)
(require 'chess-database)
(require 'chess-game)
-(defun chess-test (&optional file start finish)
+(defun chess-test (&optional file start count)
(unless file
(setq file (nth 0 command-line-args-left)))
(unless start
- (setq start (string-to-number (nth 1 command-line-args-left))))
- (unless finish
- (setq finish (string-to-number (nth 2 command-line-args-left))))
+ (setq start (ignore-errors
+ (string-to-number (nth 1 command-line-args-left)))))
+ (unless count
+ (setq count (ignore-errors
+ (string-to-number (nth 2 command-line-args-left)))))
(message "Opening chess database '%s'" file)
(let ((database (chess-database-open file)))
(if database
(progn
- (message "Running chess unit tests...")
+ (message "Running validation suite...")
(condition-case err
- (let* ((count (chess-database-count database))
+ (let* ((db-count (chess-database-count database))
(ply-count 0)
(index (if start
(max start 1)
1))
- (last-index (if finish
- (min count finish)
- count))
- (begin (current-time)))
+ (last-index (if count
+ (min db-count (+ index count))
+ db-count))
+ (begin (current-time))
+ (read-count 0))
(message "Testing legality of games in range [%d, %d):"
index last-index)
(while (< index last-index)
;; want to verify the final position and such.
(let ((game (chess-database-read database index)))
(when game
- (setq ply-count
+ (setq read-count (1+ read-count)
+ 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
+ (message "Read %d games (now at game %d): %d total plies (%.2f ply/sec)"
+ read-count 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"))
+ (message "Read %d games (up to game %d): %d plies (%.2f ply/sec, %.2f seconds)"
+ read-count index ply-count
+ (/ (float ply-count)
+ (float
+ (time-to-seconds
+ (subtract-time (current-time)
+ begin))))
+ (time-to-seconds (subtract-time (current-time)
+ begin)))
+ (message "Running validation suite...done"))
(t
(error "Failed to open chess database '%s'" file)))
(chess-database-close database)))))