home *** CD-ROM | disk | FTP | other *** search
/ Dream 57 / Amiga_Dream_57.iso / Amiga / Jeux / Reflexion / Crafty-15.19.lha / crafty-15.19 / src / evtest.c < prev    next >
C/C++ Source or Header  |  1998-09-13  |  3KB  |  84 lines

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include "chess.h"
  5. #include "data.h"
  6.  
  7. /* last modified 04/30/97 */
  8. /*
  9. ********************************************************************************
  10. *                                                                              *
  11. *   EVTest() is used to test the program against a suite of test positions to  *
  12. *   measure its performance on a particular machine, or to evaluate its skill  *
  13. *   after modifying it in some way.                                            *
  14. *                                                                              *
  15. *   the test is initiated by using the "evtest <filename>" command to read in  *
  16. *   the suite of problems from file <filename>.  the format of this file is    *
  17. *   as follows:                                                                *
  18. *                                                                              *
  19. *   setboard <forsythe-string>:  this sets the board position using the usual  *
  20. *   forsythe notation (see module SetBoard() in setc for a full explanation    *
  21. *   planation of the syntax).                                                  *
  22. *                                                                              *
  23. *   after reading this position, the program then calls Evaluate() to produce  *
  24. *   a positional evaluation, along with any debug output from Evaluate(), and  *
  25. *   then goes on to the next position.                                         *
  26. *                                                                              *
  27. ********************************************************************************
  28. */
  29. void EVTest(char *filename)
  30. {
  31.   FILE *test_input;
  32.   int i, len;
  33.   char *eof;
  34.   TREE *tree=local[0];
  35. /*
  36.  ----------------------------------------------------------
  37. |                                                          |
  38. |   read in the position and then the solutions.  after    |
  39. |   executing a search to find the best move (according    |
  40. |   to the program, anyway) compare it against the list    |
  41. |   of solutions and count it right or wrong.              |
  42. |                                                          |
  43.  ----------------------------------------------------------
  44. */
  45.   if (!(test_input=fopen(filename,"r"))) {
  46.     printf("file %s does not exist.\n",filename);
  47.     return;
  48.   }
  49.   test_mode=1;
  50.   while (1) {
  51.     eof=fgets(buffer,512,test_input);
  52.     if (eof) {
  53.       char *delim;
  54.       delim=strchr(buffer,'\n');
  55.       if (delim) *delim=0;
  56.       delim=strchr(buffer,'\r');
  57.       if (delim) *delim=' ';
  58.     }
  59.     else break;
  60.     nargs=ReadParse(buffer,args," ;");
  61.     if (!strcmp(args[0],"end")) break;
  62.     else if (!strcmp(args[0],"title")) {
  63.       Print(4095,"======================================================================\n");
  64.       Print(4095,"! ");
  65.       len=0;
  66.       for (i=1;i<nargs;i++) {
  67.         Print(4095,"%s ",args[i]);
  68.         len+=strlen(args[i])+1;
  69.         if (len > 65) break;
  70.       }
  71.       for (i=len;i<67;i++) printf(" ");
  72.       Print(4095,"!\n");
  73.       Print(4095,"======================================================================\n");
  74.     }
  75.     else if (!strcmp(args[0],"setboard")) {
  76.       SetBoard(nargs-1,args+1,0);
  77.       DisplayChessBoard(stdout,tree->pos);
  78.       Print(4095,"Evaluation=%d\n",Evaluate(tree,0,wtm,-999999,999999));
  79.     }
  80.   }
  81.   input_stream=stdin;
  82.   test_mode=0;
  83. }
  84.