Пример #1
0
Файл: test.c Проект: Glank/chess
int runOpeningLoadTest(){
    initZobrist();
    OpeningBook* book = OpeningBook_load(OPENING_TEST_BINARY);
    OpeningBook_delete(book);
    closeZobrist();
    return 0;
}
Пример #2
0
Файл: test.c Проект: Glank/chess
int runOpeningLookupTest(){
    initZobrist();
    char pgnRecord[] = "1. f4 d5 2. Nf3 *";
    PGNRecord* pgn = PGNRecord_newFromString(pgnRecord);
    if(pgn==NULL){
        printf("PGN Error in lookup test\n");
        return 1;
    }
    MoveIterator* iterator = PGNRecord_getMoveIterator(pgn);
    ChessBoard* board = ChessBoard_new(FEN_START);
    while(MoveIterator_hasNext(iterator))
        ChessBoard_makeMove(board, MoveIterator_getNext(iterator));
    MoveIterator_delete(iterator);

    int minGames = 2;
    OpeningBook* book = OpeningBook_load(OPENING_TEST_BINARY);
    assert(OpeningBook_hasLine(book, board, minGames));
    move_t move = OpeningBook_randNextMove(book, board, minGames);
    char out[10];
    int outLen;
    toAlgebraicNotation(move, board, out, &outLen);
    
    OpeningBook_delete(book);
    PGNRecord_delete(pgn);
    ChessBoard_delete(board);
    closeZobrist();
    return 0;
}
Пример #3
0
Файл: test.c Проект: Glank/chess
int runPGNTest3(){
    initZobrist();
    char fileName[] = "data/master_games.pgn";
    FILE* fp = fopen(fileName, "r");
    int eofFlag = 0;
    PGNRecord* pgn = PGNRecord_newFromFile(fp, &eofFlag);
    int i;
    for(i = 0; !eofFlag && i < 10; i++){
        printf("%d\n", i);
        PGNRecord_delete(pgn);
        pgn = PGNRecord_newFromFile(fp, &eofFlag);
    }
    if(pgn==NULL){
        printf("Error.\n");
        return 1;
    }
    char* out = PGNRecord_toString(pgn);
    printf("%s\n", out);
    free(out);
    MoveIterator* iterator = PGNRecord_getMoveIterator(pgn);
    ChessBoard* board = ChessBoard_new(FEN_START);
    while(MoveIterator_hasNext(iterator))
        ChessBoard_makeMove(board, MoveIterator_getNext(iterator));
    MoveIterator_delete(iterator);
    ChessBoard_print(board);

    PGNRecord_delete(pgn);
    ChessBoard_delete(board);
    closeZobrist();
    fclose(fp);
    return 0;
}
Пример #4
0
Файл: test.c Проект: Glank/chess
int runGenTest(char* start){
    initZobrist();
    ChessBoard* board = ChessBoard_new(start);
    ChessMoveGenerator* gen = ChessMoveGenerator_new(board);
    ChessMoveGenerator_generateMoves(gen, ChessBoard_testForCheck(board), NULL);

    ChessBoard_print(board);
    printf("###############\n");
    char moveOut[10];
    int moveOutSize;
    int i;
    for(i = 0; i < gen->nextCount; i++){
        toAlgebraicNotation(gen->next[i], board, moveOut, &moveOutSize);
        printf("%s\n", moveOut);
        printf("%016llX\n", (long long unsigned int)board->hash);
        ChessBoard_makeMove(board, gen->next[i]);
        ChessBoard_print(board);
        printf("\n");
        ChessBoard_unmakeMove(board);
    }

    ChessBoard_delete(board);
    ChessMoveGenerator_delete(gen);
    closeZobrist();
    return 0;
}
Пример #5
0
Файл: test.c Проект: Glank/chess
int runSearchTest(char* start, int depth){
    initZobrist();
    ChessBoard* board = ChessBoard_new(start);
    TTable* table = TTable_new();
    SearchThread* thread = SearchThread_new(board, table);
    ChessBoard_print(board);
    SearchThread_setTimeout(thread, 5);

    SearchThread_start(thread);
    SearchThread_join(thread);
    move_t line[MAX_LINE_LENGTH];
    int length;
    int eval = SearchThread_getBestLine(thread, line, &length);
    printf("Eval: %d\n", eval);
    printf("Length: %d\n", length);
    int i;
    char moveOut[10];
    int moveOutSize;
    for(i = 0; i < length; i++){
        toAlgebraicNotation(line[i], board, moveOut, &moveOutSize);
        printf("%s\n", moveOut);
        ChessBoard_makeMove(board, line[i]);
        ChessBoard_print(board);
        printf("%016llX\n", (long long unsigned int)board->hash);
    }

    SearchThread_delete(thread);
    TTable_delete(table);
    ChessBoard_delete(board);
    closeZobrist();
    return 0;
}
Пример #6
0
Файл: test.c Проект: Glank/chess
int runPerftTests(){
    initZobrist();
    int i;
    int error = 0;
    for(i = 0; i < 6; i++){
        if(runPerftTest(PERFT_STARTS[i], PERFT3_VALUES[i])){
            error = 1;
            printf("Perft error for starting possition %d\n", i+1);
        }
    }
    closeZobrist();
    return error;
}
Пример #7
0
/* create the skip context tree */
SkipCTS::SkipCTS(history_t &history, int depth, int max_skips, size_t log2_slots) :
    m_history(history),
    m_depth(depth),
    m_skips(max_skips),
    m_log_skip_preds(MaxDepth),
    m_nodes(new SkipNode[size_t(1) << log2_slots]),
    m_mask((size_t(1) << log2_slots)-1)
{
    initZobrist();
    initContexts();
    initAuxInfo();
    initHashDeltas();
    initLogTbl();
}
Пример #8
0
Файл: test.c Проект: Glank/chess
int runAlgebraicNotationTest(){
    initZobrist();
    ChessBoard* board = ChessBoard_new(FEN_START);

    move_t move;
    move = fromAlgebraicNotation("e4", board);
    ChessBoard_makeMove(board, move);
    move = fromAlgebraicNotation("d5", board);
    ChessBoard_makeMove(board, move);
    ChessBoard_print(board);

    ChessBoard_delete(board);
    closeZobrist();
    return 0;
}
Пример #9
0
Файл: test.c Проект: Glank/chess
int runPGNTest2(){
    initZobrist();
    char pgnTest[] = "[tag] \n1. f3{comment}e5 2. g4 Qh4# 0-1";
    PGNRecord* pgn = PGNRecord_newFromString(pgnTest);
    if(pgn==NULL){
        printf("Error.\n");
        return 1;
    }
    char* out = PGNRecord_toString(pgn);
    printf("%s\n", out);
    free(out);
    MoveIterator* iterator = PGNRecord_getMoveIterator(pgn);
    ChessBoard* board = ChessBoard_new(FEN_START);
    while(MoveIterator_hasNext(iterator))
        ChessBoard_makeMove(board, MoveIterator_getNext(iterator));
    MoveIterator_delete(iterator);
    ChessBoard_print(board);

    PGNRecord_delete(pgn);
    ChessBoard_delete(board);
    closeZobrist();
    return 0;
}
Пример #10
0
Файл: test.c Проект: Glank/chess
int runPGNTest(){
    initZobrist();
    ChessBoard* board = ChessBoard_new(FEN_START);
    ChessBoard_makeMove(board, fromAlgebraicNotation("f3", board));
    ChessBoard_makeMove(board, fromAlgebraicNotation("e5", board));
    ChessBoard_makeMove(board, fromAlgebraicNotation("g4", board));
    ChessBoard_makeMove(board, fromAlgebraicNotation("Qh4#", board));
    ChessBoard_print(board);

    PGNRecord* pgn = PGNRecord_newFromBoard(board, 1);
    char* out = PGNRecord_toString(pgn);
    printf("%s", out);
    free(out);

    FILE* fp = fopen("data/test_out.pgn", "w");
    PGNRecord_writeToFile(pgn, fp);
    PGNRecord_writeToFile(pgn, fp);
    fclose(fp);

    PGNRecord_delete(pgn);
    ChessBoard_delete(board);
    closeZobrist();
    return 0;
}
Пример #11
0
Файл: test.c Проект: Glank/chess
int runHeuristicsTests(){
    initZobrist();
    ChessBoard* board = ChessBoard_new(POS_2);
    ChessHEngine* engine = ChessHEngine_new(board);

    ChessBoard_print(board);
    ChessHNode* root = ChessHNode_new(NULL, engine);

    ChessHNode_expand(root, engine);
    ChessBoard_makeMove(board, root->children[47]->move);
    printf("\n");
    ChessBoard_print(board);

    ChessHNode_expand(root->children[47], engine);
    int i;
    int minEval = 10000, minI;
    ChessHNode* child;
    for(i = 0; i < root->children[47]->childrenCount; i++){
        child = root->children[47]->children[i];
        if(child->evaluation < minEval){
            minEval = child->evaluation;
            minI = i;
        }
    }
    ChessBoard_makeMove(board, root->children[47]->children[minI]->move);
    printf("\n");
    ChessBoard_print(board);

    ChessHNode_delete(root);
    ChessHEngine_delete(engine);
    ChessBoard_delete(board);

    closeZobrist();
    
    return 0;
}
Пример #12
0
// Should delete compatibility for performance.
	MSAZobrist(D &d, int abst = 1) :
			d(d), structure(abst) {
		initZobrist(structure);
//		dump_table();
	}
Пример #13
0
Файл: test.c Проект: Glank/chess
int runOpeningGenTest(){
    initZobrist();
    OpeningBook_generate(OPENING_TEST_SOURCE, OPENING_TEST_BINARY, 10);
    closeZobrist();
    return 0;
}