home *** CD-ROM | disk | FTP | other *** search
/ Dream 57 / Amiga_Dream_57.iso / Amiga / Jeux / Reflexion / Crafty-15.19.lha / crafty-15.19 / src / bench.c < prev    next >
C/C++ Source or Header  |  1998-09-13  |  4KB  |  149 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 2/6/98 */
  8. /*
  9. ********************************************************************************
  10. *                                                                              *
  11. *   Bench() runs a simple six-position benchmark to gauge crafty's             *
  12. *   performance.  The test positons are hard-coded, and the benchmark is       *
  13. *   calculated much like it would with an external "test" file.  The test      *
  14. *   is a mix of opening, middlegame, and endgame positions, with both tactical *
  15. *   and positional aspects.  (For those interested, the positions chosen are   *
  16. *   Bratko-Kopec 2, 4, 8, 12, 22 and 23.)  This test is a speed measure only;  *
  17. *   the actual solutions to the positions are ignored.  Each position is run   *
  18. *   for one minute, with the entire test taking six minutes.                   *
  19. *                                                                              *
  20. ********************************************************************************
  21. */
  22.  
  23. void Bench(void) {
  24.   double nodes=0.0;
  25.   int old_do, old_st;
  26.   TREE *tree=local[0];
  27.  
  28.   test_mode=1;
  29.   old_st=search_time_limit;  /* save old time limit and display settings */
  30.   old_do=display_options;
  31.   search_time_limit=6000;
  32.   display_options=1;         /* turn off display while running benchmark */
  33.  
  34.   if (book_file) {
  35.     fclose(book_file);
  36.     fclose(books_file);
  37.     book_file=0;
  38.     books_file=0;
  39.   }
  40.  
  41.   Print(4095, "Running benchmark -- this will take approximately six minutes.\n");
  42.  
  43.   printf(".");
  44.   fflush(stdout);
  45.   strcpy(args[0],"3r1k2/4npp1/1ppr3p/p6P/P2PPPP1/1NR5/5K2/2R5");
  46.   strcpy(args[1],"w");
  47.   SetBoard(2,args,0);
  48.  
  49.   InitializeHashTables();
  50.   last_pv.path_iteration_depth=0;
  51.   largest_positional_score=100;
  52.   thinking=1;
  53.   tree->position[1]=tree->position[0];
  54.   (void) Iterate(wtm,think,0);
  55.   thinking=0;
  56.   nodes+=tree->nodes_searched;
  57.   printf(".");
  58.   fflush(stdout);
  59.  
  60.   strcpy(args[0],"rnbqkb1r/p3pppp/1p6/2ppP3/3N4/2P5/PPP1QPPP/R1B1KB1R");
  61.   strcpy(args[1],"w");
  62.   strcpy(args[2],"KQkq");
  63.   SetBoard(3,args,0);
  64.  
  65.   InitializeHashTables();
  66.   last_pv.path_iteration_depth=0;
  67.   largest_positional_score=100;
  68.   thinking=1;
  69.   tree->position[1]=tree->position[0];
  70.   (void) Iterate(wtm,think,0);
  71.   thinking=0;
  72.   nodes+=tree->nodes_searched;
  73.   printf(".");
  74.   fflush(stdout);
  75.   
  76.   strcpy(args[0],"4b3/p3kp2/6p1/3pP2p/2pP1P2/4K1P1/P3N2P/8");
  77.   strcpy(args[1],"w");
  78.   SetBoard(2,args,0);
  79.   
  80.   InitializeHashTables();
  81.   last_pv.path_iteration_depth=0;
  82.   largest_positional_score=100;
  83.   thinking=1;
  84.   tree->position[1]=tree->position[0];
  85.   (void) Iterate(wtm,think,0);
  86.   thinking=0;
  87.   nodes+=tree->nodes_searched;
  88.   printf(".");
  89.   fflush(stdout);
  90.   
  91.   strcpy(args[0],"r3r1k1/ppqb1ppp/8/4p1NQ/8/2P5/PP3PPP/R3R1K1");
  92.   strcpy(args[1],"b");
  93.   SetBoard(2,args,0);
  94.   
  95.   InitializeHashTables();
  96.   last_pv.path_iteration_depth=0;
  97.   largest_positional_score=100;
  98.   thinking=1;
  99.   tree->position[1]=tree->position[0];
  100.   (void) Iterate(wtm,think,0);
  101.   thinking=0;
  102.   nodes+=tree->nodes_searched;
  103.   printf(".");
  104.   fflush(stdout);
  105.  
  106.   strcpy(args[0],"2r2rk1/1bqnbpp1/1p1ppn1p/pP6/N1P1P3/P2B1N1P/1B2QPP1/R2R2K1");
  107.   strcpy(args[1],"b");
  108.   SetBoard(2,args,0);
  109.   
  110.   InitializeHashTables();
  111.   last_pv.path_iteration_depth=0;
  112.   largest_positional_score=100;
  113.   thinking=1;
  114.   tree->position[1]=tree->position[0];
  115.   (void) Iterate(wtm,think,0);
  116.   thinking=0;
  117.   nodes+=tree->nodes_searched;
  118.   printf(".");
  119.   fflush(stdout);
  120.   
  121.   strcpy(args[0],"r1bqk2r/pp2bppp/2p5/3pP3/P2Q1P2/2N1B3/1PP3PP/R4RK1");
  122.   strcpy(args[1],"b");
  123.   strcpy(args[2],"kq");
  124.   SetBoard(3,args,0);
  125.   
  126.   InitializeHashTables();
  127.   last_pv.path_iteration_depth=0;
  128.   largest_positional_score=100;
  129.   thinking=1;
  130.   tree->position[1]=tree->position[0];
  131.   (void) Iterate(wtm,think,0);
  132.   thinking=0;
  133.   nodes+=tree->nodes_searched;
  134.   
  135.   printf("\n");
  136.   Print(4095,"Total nodes: %d\n", (int)nodes);
  137.   Print(4095,"Nodes per second: %d\n",
  138.         (int) ((float) nodes/(float) (search_time_limit * 6 / 100)));
  139.   Print(4095,"NPS relative to Pentium Pro/200: %.2f\n",
  140.         (nodes / (search_time_limit * 6 / 100) / 85000));
  141.   input_stream=stdin;
  142.   early_exit=99;
  143.   test_mode=0;
  144.   
  145.   display_options=old_do;    /* reset old values and restart game */
  146.   search_time_limit=old_st;
  147.   NewGame(0);
  148. }
  149.