📄 test.c
字号:
/* GNU Chess 5.0 - test.c - testing code Copyright (c) 1999-2002 Free Software Foundation, Inc. GNU Chess is based on the two research programs Cobalt by Chua Kong-Sian and Gazebo by Stuart Cracraft. GNU Chess is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. GNU Chess is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNU Chess; see the file COPYING. If not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. Contact Info: bug-gnu-chess@gnu.org cracraft@ai.mit.edu, cracraft@stanfordalumni.org, cracraft@earthlink.net*/#include <stdio.h>#include <sys/time.h>#include "common.h"void TestMoveGenSpeed (void)/************************************************************************** * * This routine benchmarks the speed of the bitmap move generation. * The test case is BK.epd, the 24 positions from the Brat-Kopec test * suite. * **************************************************************************/{ unsigned long i; struct timeval t1, t2; double et; short side, xside; GenCnt = 0; et = 0;/* while (ReadEPDFile ("../test/wac.epd", 0)) {*/ gettimeofday (&t1, NULL); side = board.side; xside = 1^side; for (i = 0; i < 2000000; i++) { TreePtr[2] = TreePtr[1]; GenMoves (1); } gettimeofday (&t2, NULL); et += (t2.tv_sec - t1.tv_sec) + (t2.tv_usec - t1.tv_usec) / 1e6; printf ("Time = %f\n", et);/* }*/ printf ("No. of moves generated = %lu\n", GenCnt); printf ("Time taken = %f secs\n", et); if (et > 0) printf ("Rate = %f moves/sec.\n", GenCnt / et);}void TestNonCaptureGenSpeed (void)/************************************************************************** * * This routine benchmarks the speed of the bitmap move generation * for non capturing moves. * The test case is BK.epd, the 24 positions from the Brat-Kopec test * suite. * **************************************************************************/{ unsigned long i; struct timeval t1, t2; double et; GenCnt = 0; et = 0; while (ReadEPDFile ("../test/wac.epd", 0)) { gettimeofday (&t1, NULL); for (i = 0; i < 100000; i++) { TreePtr[2] = TreePtr[1]; GenNonCaptures (1); } gettimeofday (&t2, NULL); et += (t2.tv_sec - t1.tv_sec) + (t2.tv_usec - t1.tv_usec) / 1e6; printf ("Time = %f\n", et); } printf ("No. of moves generated = %lu\n", GenCnt); printf ("Time taken = %f\n", et); if (et > 0) printf ("Rate = %f\n", GenCnt / et); }void TestCaptureGenSpeed (void)/************************************************************************** * * This routine benchmarks the speed of the bitmap move generation * for captures. * The test case is BK.epd, the 24 positions from the Brat-Kopec test * suite. * **************************************************************************/{ unsigned long i; struct timeval t1, t2; double et; GenCnt = 0; et = 0; while (ReadEPDFile ("../test/wac.epd", 0)) { gettimeofday (&t1, NULL); for (i = 0; i < 200000; i++) { TreePtr[2] = TreePtr[1]; GenCaptures (1); } gettimeofday (&t2, NULL); et += (t2.tv_sec - t1.tv_sec) + (t2.tv_usec - t1.tv_usec) / 1e6; printf ("Time = %f\n", et); } printf ("No. of moves generated = %lu\n", GenCnt); printf ("Time taken = %f\n", et); if (et > 0) printf ("Rate = %f\n", GenCnt / et); }void TestMoveList (void)/**************************************************************************** * * This routine reads in a *.epd file (EPD notation) and prints the legal * moves for that position. * ****************************************************************************/{ while (ReadEPDFile ("TEST/GMG1.epd", 0)) { ShowBoard (); GenCnt = 0; TreePtr[2] = TreePtr[1]; GenMoves (1); FilterIllegalMoves (1); ShowMoveList (1); printf ("No. of moves generated = %lu\n\n", GenCnt); }}void TestNonCaptureList (void)/**************************************************************************** * * This routine reads in a *.epd file (EPD notation) and prints the * non-capturing moves for that position. * ****************************************************************************/{ while (ReadEPDFile ("TEST/GMG1.epd", 0)) { ShowBoard (); GenCnt = 0; TreePtr[2] = TreePtr[1]; GenNonCaptures (1); FilterIllegalMoves (1); ShowMoveList (1); printf ("No. of moves generated = %lu\n\n", GenCnt); }}void TestCaptureList (void)/**************************************************************************** * * This routine reads in a *.epd file (EPD notation) and prints the capture * moves for that position. * ****************************************************************************/{ while (ReadEPDFile ("TEST/GMG1.epd", 0)) { ShowBoard (); GenCnt = 0; TreePtr[2] = TreePtr[1]; GenCaptures (1); FilterIllegalMoves (1); ShowMoveList (1); printf ("No. of moves generated = %lu\n\n", GenCnt); }}#define NEVALS 30000void TestEvalSpeed (void)/*************************************************************************** * * This routine reads in the BK.epd and test the speed of the * evaluation routines. * ***************************************************************************/{ unsigned long i; struct timeval t1, t2; double et; et = 0; EvalCnt = 0; while (ReadEPDFile ("../test/wac.epd", 0)) { gettimeofday (&t1, NULL); for (i = 0; i < NEVALS; i++) { (void) Evaluate (-INFINITY, INFINITY); } gettimeofday (&t2, NULL); et += (t2.tv_sec - t1.tv_sec) + (t2.tv_usec - t1.tv_usec)/1e6; printf ("Time = %f\n", et); } printf ("No. of positions evaluated = %lu\n", EvalCnt); printf ("Time taken = %f\n", et); if (et > 0) printf ("Rate = %f\n", EvalCnt / et); }void TestEval (void)/************************************************************************** * * To test the evaluation routines, read from the BK.epd test file. * Print out the score. This can be improved by being more verbose * and printing out salient features of the board, e.g. King safety, * double bishops, rook on seventh rank, weak pawns, doubled pawns, * bad bishops, passwd pawns, etc etc. * ***************************************************************************/{ int score; SET (flags, TESTT); while (ReadEPDFile ("../test/wac.epd", 0)) { ShowBoard (); score = Evaluate (-INFINITY, INFINITY); printf (board.side == white ? "W : " : "B : "); printf ("score = %d\n\n", score); } CLEAR (flags, TESTT);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -