20 using namespace osl::misc;
 
   22 void qsearch(
const char *filename);
 
   24 void usage(
const char *program_name)
 
   26   std::cerr << program_name << 
" [-C] [-P] [-d depth] [-s skip] [-v] csafiles\n";
 
   27   std::cerr << 
"-C comparison w,w/o table\n";
 
   38 void qsearch(
const char *filename);
 
   40 int main(
int argc, 
char **argv)
 
   42   const char *program_name = argv[0];
 
   43   bool error_flag = 
false;
 
   48   while ((c = getopt(argc, argv, 
"C:Pd:s:vh")) != EOF)
 
   54     case 'd':   
depth = atoi(optarg);
 
   62     default:    error_flag = 
true;
 
   68   if (error_flag || (argc < 1))
 
   71   std::cerr << 
"using table record depth " << 
depth << 
"\n";
 
   74     for (
int i=0; i<argc; ++i)
 
   77         qsearch<eval::ProgressEval>(argv[i]);
 
   79         qsearch<PieceEval>(argv[i]);
 
   82   catch (std::exception& e)
 
   84     std::cerr << e.what() << 
"\n";
 
   94 void qsearch(
const char *filename)
 
   98   Record rec=CsaFile(filename).getRecord();
 
   99   NumEffectState state(rec.getInitialState());
 
  100   const vector<osl::Move> 
moves=rec.getMoves();
 
  114       qsearch_t qs(core, table);
 
  115       qsearch_t qsnull(core, nulltable);
 
  116       const Move last_move = (i > 0) ? moves[i-1] : 
Move::PASS(
alt(moves[0].player()));
 
  118         std::cerr << i << 
" " << last_move << 
"\n";
 
  121         const char *logfile = 
"/tmp/q-w-table.log";
 
  123         QuiescenceLog::init(logfile);
 
  126       const int val = qs.search(state.turn(), ev, last_move);
 
  127       total_cycles += clock.
stop();
 
  132           const char *logfile = 
"/tmp/q-wo-table.log";
 
  134           QuiescenceLog::init(logfile);
 
  136         const int valnull = qsnull.search(state.turn(), ev, last_move);
 
  137         if (
verbose || (valnull != val))
 
  139           std::cerr << state << 
"\n";
 
  140           std::cerr << ev.value() << 
" " ;
 
  141           if (! state.inCheck())
 
  142             std::cerr  << ((state.turn() == 
BLACK)
 
  143                            ? qs.template staticValueWithThreat<BLACK>(ev) 
 
  144                            : qs.template staticValueWithThreat<WHITE>(ev)) << 
" ";
 
  145           std::cerr << val << 
" " << valnull << 
"\n";
 
  149       positions += qs.nodeCount();
 
  151     if (i >= moves.size())
 
  153     const Move move = moves[i++];
 
  154     state.makeMove(move);
 
  155     ev.update(state, move);
 
  157   const size_t checkmate_count = checkmate_searcher.
totalNodeCount();
 
  158   std::cerr << total_cycles << 
" / ( " << positions 
 
  159             << 
" + " << checkmate_count << 
" ) = "  
  160             << total_cycles/(double)(positions + checkmate_count) << 
"\n";