Ejemplo n.º 1
0
void test_is_square_being_attacked_by_king(void)
{
    // black king attacks c5
    // white king attacks f2
    char *test_fen = "8/p3p1P1/2p5/pkP5/8/1p1pP1P1/pP1P1pK1/8 w - - 0 1";

    struct position *pos = allocate_board();
    consume_fen_notation(test_fen, pos);

    //print_board(pos);
    assert_true(TEST_is_king_attacking_square(pos, c5, BLACK));
    assert_true(TEST_is_king_attacking_square(pos, f2, WHITE));
	free_board(pos);

    // black king attacks h6
    // white king attacks b7
    test_fen = "8/1p2pp1k/1KP4P/3PP3/4p3/2pp2P1/P2p2P1/8 w - - 0 1";

    pos = allocate_board();
    consume_fen_notation(test_fen, pos);

    //print_board(pos);
    assert_true(TEST_is_king_attacking_square(pos, h6, BLACK));
    assert_true(TEST_is_king_attacking_square(pos, b7, WHITE));
	free_board(pos);
    // black king attacks g2
    // white king attacks h7
    test_fen = "8/p5Pp/PP5K/p4p2/P4ppP/3p4/3p2Pk/8 w - - 0 1";

    pos = allocate_board();
    consume_fen_notation(test_fen, pos);

    //print_board(pos);
    assert_true(TEST_is_king_attacking_square(pos, g2, BLACK));
    assert_true(TEST_is_king_attacking_square(pos, h7, WHITE));

	free_board(pos);
    // black king attacks g7
    // white king attacks c7
    test_fen = "3K2k1/2p3P1/Pp5p/P3P2P/P7/4p1p1/P1p1P3/8 w - - 0 1";

    pos = allocate_board();
    consume_fen_notation(test_fen, pos);

    //print_board(pos);
    assert_true(TEST_is_king_attacking_square(pos, g7, BLACK));
    assert_true(TEST_is_king_attacking_square(pos, c7, WHITE));

	free_board(pos);
}
Ejemplo n.º 2
0
void test_mate_in_two()
{
	struct position *pos = allocate_board();
	consume_fen_notation(MATE_IN_TWO, pos);

    struct search_info si;

    memset(&si, 0, sizeof(struct search_info));

    si.depth = 4;
    search_positions(pos, &si, 64000000);

    // *** exclude the score ***
    mv_bitmap h7h8 = get_move(MOVE(h7, h8, NO_PIECE, NO_PIECE, 0));
    mv_bitmap g7h8 = get_move(MOVE(g7, h8, W_ROOK, NO_PIECE, MFLAG_CAPTURE));
    mv_bitmap h1h8 = get_move(MOVE(h1, h8, B_BISHOP, NO_PIECE, MFLAG_CAPTURE));

    mv_bitmap pv_line_h7h8 = get_move(get_pvline(pos, 0));
    mv_bitmap pv_line_g7h8 = get_move(get_pvline(pos, 1));
    mv_bitmap pv_line_h1h8 = get_move(get_pvline(pos, 2));

    //printf("PV g7h8 ->%s\n", print_move(pv_line_g7h8));
    //printf("PV h1h8 ->%s\n", print_move(pv_line_h1h8));

    assert_true(h7h8 == pv_line_h7h8);
    assert_true(g7h8 == pv_line_g7h8);
    assert_true(h1h8 == pv_line_h1h8);

}
Ejemplo n.º 3
0
int init(int n, int k, int p, int x1, int y1, int x2, int y2) {
    if(p == 1 && !player_1.init) {
        if(!check_init(n, k, x1, y1, x2, y2))
            return INIT_ERROR;
        if(!board.init)
            allocate_board(n, x1, y1, x2, y2);
        player_1.init = true;
        player_1.turn_limit = k;
    } else if(p == 2 && !player_2.init) {
        if(!check_init(n, k, x1, y1, x2, y2))
            return INIT_ERROR;
        if(!board.init)
            allocate_board(n, x1, y1, x2, y2);
        player_2.init = true;
        player_2.turn_limit = k;
    } else
        return INIT_ERROR;
    return OK;
}
Ejemplo n.º 4
0
void test_is_square_being_attacked_by_pawn(void)
{
    // black pawn attacks c4
    // black pawn attacks d4
    // black pawn attacks e4
    // black pawn attacks g4
    // black pawn attacks h4
    // white pawn attacks e5
    // white pawn attacks d5
    // white pawn attacks g5
    char *test_fen_1 =
        "r2qkb1r/p1pb1p2/2n2n2/1p1pp1pp/2BPP1QP/BPN2N2/P1P2PP1/R3K2R b KQkq - 1 9";

    struct position *pos = allocate_board();
    consume_fen_notation(test_fen_1, pos);

    //print_board(pos);
    assert_true(TEST_is_pawn_attacking_square(pos, c4, BLACK));
    assert_true(TEST_is_pawn_attacking_square(pos, d4, BLACK));
    assert_true(TEST_is_pawn_attacking_square(pos, e4, BLACK));
    assert_true(TEST_is_pawn_attacking_square(pos, g4, BLACK));
    assert_true(TEST_is_pawn_attacking_square(pos, h4, BLACK));
    assert_true(TEST_is_pawn_attacking_square(pos, e5, WHITE));
    assert_true(TEST_is_pawn_attacking_square(pos, d5, WHITE));
    assert_true(TEST_is_pawn_attacking_square(pos, g5, WHITE));
	free_board(pos);

    test_fen_1 =
        "1nr3n1/ppqNkp2/1R3p2/bQ4PK/1PpRp1PP/P2bBPqp/4P1r1/1B1Q1N2 w - - 0 1";
    pos = allocate_board();
    consume_fen_notation(test_fen_1, pos);

	//print_board(pos);
    assert_true(TEST_is_pawn_attacking_square(pos, b6, BLACK));
    assert_true(TEST_is_pawn_attacking_square(pos, f3, BLACK));
    assert_true(TEST_is_pawn_attacking_square(pos, a5, WHITE));
    assert_true(TEST_is_pawn_attacking_square(pos, d3, WHITE));
    assert_true(TEST_is_pawn_attacking_square(pos, f6, WHITE));
    assert_true(TEST_is_pawn_attacking_square(pos, d3, WHITE));
    assert_true(TEST_is_pawn_attacking_square(pos, e4, WHITE));
	free_board(pos);
}
Ejemplo n.º 5
0
void debug_move(void)
{
    char *test_fen =
        "2Q3qb/pN3P1p/P4qr1/1KP1BnP1/1p2pPNp/2rkP3/pP3npP/4QbRB w - - 0 1";

    struct position *pos = allocate_board();
    consume_fen_notation(test_fen, pos);

    //print_board(pos);

    assert_true(is_sq_attacked(pos, e6, WHITE) == true);
    assert_true(is_sq_attacked(pos, g7, WHITE) == false);

	free_board(pos);

}
Ejemplo n.º 6
0
void test_is_square_being_attacked_by_knight(void)
{
    // knight attacks e5
    char *test_fen =
        "rnbqkbnr/pppp1ppp/8/4p3/8/5N2/PPPPPPPP/RNBQKB1R w KQkq e6 0 2";

    struct position *pos = allocate_board();
    consume_fen_notation(test_fen, pos);

    //print_board(pos);
    assert_true(TEST_is_knight_attacking_square(pos, e5, WHITE));

    // - white Knight attacks d5
    // - black knight attacks d4
    // - white knight attacks e5
    // - white knight attacks g5
    // - black knight attacks e4
    // - black knight attacks g4
    free_board(pos);
    test_fen =
        "r2qkb1r/pppb1p1p/2n2n2/3pp1p1/3PP1Q1/BPN2N2/P1P2PPP/R3KB1R b KQkq - 4 7";

    pos = allocate_board();
    consume_fen_notation(test_fen, pos);

    //print_board(pos);
    assert_true(TEST_is_knight_attacking_square(pos, d5, WHITE));
    assert_true(TEST_is_knight_attacking_square(pos, d4, BLACK));
    assert_true(TEST_is_knight_attacking_square(pos, e5, WHITE));
    assert_true(TEST_is_knight_attacking_square(pos, g5, WHITE));
    assert_true(TEST_is_knight_attacking_square(pos, e4, BLACK));
    assert_true(TEST_is_knight_attacking_square(pos, g4, BLACK));

    // do some negative tests
    assert_false(TEST_is_knight_attacking_square(pos, a3, WHITE));
    assert_false(TEST_is_knight_attacking_square(pos, h4, BLACK));
    assert_false(TEST_is_knight_attacking_square(pos, g7, BLACK));
    assert_false(TEST_is_knight_attacking_square(pos, b2, BLACK));
    assert_false(TEST_is_knight_attacking_square(pos, a1, BLACK));
    assert_false(TEST_is_knight_attacking_square(pos, c2, BLACK));

	free_board(pos);

    // - white Knight attacks c6
    // - white knight attacks d6

    test_fen = "8/NPK2NPP/P1pppP2/3P4/k5p1/2p5/6n1/8 w - - 0 1";

    pos = allocate_board();
    consume_fen_notation(test_fen, pos);

    //print_board(pos);
    assert_true(TEST_is_knight_attacking_square(pos, c6, WHITE));
    assert_true(TEST_is_knight_attacking_square(pos, d6, WHITE));
	free_board(pos);

    // WN attacks f6, g7, f4
    // BN attacks f7, b5, e4
    test_fen =
        "B1kn3Q/R1p2Rpq/2p1pqN1/1PK2p1N/1p2PpP1/1Pn1Pr1b/1pr2PP1/4BQ2 w - - 0 1";

    pos = allocate_board();
    consume_fen_notation(test_fen, pos);

    //print_board(pos);
    assert_true(TEST_is_knight_attacking_square(pos, f6, WHITE));
    assert_true(TEST_is_knight_attacking_square(pos, g7, WHITE));
    assert_true(TEST_is_knight_attacking_square(pos, f4, WHITE));

    assert_true(TEST_is_knight_attacking_square(pos, f7, BLACK));
    assert_true(TEST_is_knight_attacking_square(pos, b5, BLACK));
    assert_true(TEST_is_knight_attacking_square(pos, e4, BLACK));
	free_board(pos);
}
Ejemplo n.º 7
0
void test_is_square_under_attack(void)
{
    char *test_fen =
        "2Q3qb/pN3P1p/P4qr1/1KP1BnP1/1p2pPNp/2rkP3/pP3npP/4QbRB w - - 0 1";

    struct position *pos = allocate_board();
    consume_fen_notation(test_fen, pos);

    //print_board(pos);

    assert_true(is_sq_attacked(pos, a1, WHITE) == true);
    assert_true(is_sq_attacked(pos, a1, BLACK) == false);
    assert_true(is_sq_attacked(pos, a2, WHITE) == false);
    assert_true(is_sq_attacked(pos, a2, BLACK) == false);
    assert_true(is_sq_attacked(pos, a3, WHITE) == true);
    assert_true(is_sq_attacked(pos, a3, BLACK) == true);
    assert_true(is_sq_attacked(pos, a4, WHITE) == true);
    assert_true(is_sq_attacked(pos, a4, BLACK) == false);
    assert_true(is_sq_attacked(pos, a5, WHITE) == true);
    assert_true(is_sq_attacked(pos, a5, BLACK) == false);
    assert_true(is_sq_attacked(pos, a6, WHITE) == true);
    assert_true(is_sq_attacked(pos, a6, BLACK) == true);
    assert_true(is_sq_attacked(pos, a7, WHITE) == false);
    assert_true(is_sq_attacked(pos, a7, BLACK) == false);
    assert_true(is_sq_attacked(pos, a8, WHITE) == true);
    assert_true(is_sq_attacked(pos, a8, BLACK) == false);

    assert_true(is_sq_attacked(pos, b1, WHITE) == true);
    assert_true(is_sq_attacked(pos, b1, BLACK) == true);
    assert_true(is_sq_attacked(pos, b2, WHITE) == false);
    assert_true(is_sq_attacked(pos, b2, BLACK) == false);
    assert_true(is_sq_attacked(pos, b3, WHITE) == false);
    assert_true(is_sq_attacked(pos, b3, BLACK) == true);
    assert_true(is_sq_attacked(pos, b4, WHITE) == true);
    assert_true(is_sq_attacked(pos, b4, BLACK) == false);
    assert_true(is_sq_attacked(pos, b5, WHITE) == false);
    assert_true(is_sq_attacked(pos, b5, BLACK) == false);
    assert_true(is_sq_attacked(pos, b6, WHITE) == true);
    assert_true(is_sq_attacked(pos, b6, BLACK) == true);
    assert_true(is_sq_attacked(pos, b7, WHITE) == true);
    assert_true(is_sq_attacked(pos, b7, BLACK) == false);
    assert_true(is_sq_attacked(pos, b8, WHITE) == true);
    assert_true(is_sq_attacked(pos, b8, BLACK) == false);

    assert_true(is_sq_attacked(pos, c1, WHITE) == true);
    assert_true(is_sq_attacked(pos, c1, BLACK) == true);
    assert_true(is_sq_attacked(pos, c2, WHITE) == false);
    assert_true(is_sq_attacked(pos, c2, BLACK) == true);
    assert_true(is_sq_attacked(pos, c3, WHITE) == true);
    assert_true(is_sq_attacked(pos, c3, BLACK) == true);
    assert_true(is_sq_attacked(pos, c4, WHITE) == true);
    assert_true(is_sq_attacked(pos, c4, BLACK) == true);
    assert_true(is_sq_attacked(pos, c5, WHITE) == true);
    assert_true(is_sq_attacked(pos, c5, BLACK) == true);
    assert_true(is_sq_attacked(pos, c6, WHITE) == true);
    assert_true(is_sq_attacked(pos, c6, BLACK) == true);
    assert_true(is_sq_attacked(pos, c7, WHITE) == true);
    assert_true(is_sq_attacked(pos, c7, BLACK) == false);
    assert_true(is_sq_attacked(pos, c8, WHITE) == false);
    assert_true(is_sq_attacked(pos, c8, BLACK) == true);

    assert_true(is_sq_attacked(pos, d1, WHITE) == true);
    assert_true(is_sq_attacked(pos, d1, BLACK) == true);
    assert_true(is_sq_attacked(pos, d2, WHITE) == true);
    assert_true(is_sq_attacked(pos, d2, BLACK) == true);
    assert_true(is_sq_attacked(pos, d3, WHITE) == false);
    assert_true(is_sq_attacked(pos, d3, BLACK) == true);
    assert_true(is_sq_attacked(pos, d4, WHITE) == true);
    assert_true(is_sq_attacked(pos, d4, BLACK) == true);
    assert_true(is_sq_attacked(pos, d5, WHITE) == false);
    assert_true(is_sq_attacked(pos, d5, BLACK) == false);
    assert_true(is_sq_attacked(pos, d6, WHITE) == true);
    assert_true(is_sq_attacked(pos, d6, BLACK) == true);
    assert_true(is_sq_attacked(pos, d7, WHITE) == true);
    assert_true(is_sq_attacked(pos, d7, BLACK) == false);
    assert_true(is_sq_attacked(pos, d8, WHITE) == true);
    assert_true(is_sq_attacked(pos, d8, BLACK) == true);

    assert_true(is_sq_attacked(pos, e1, WHITE) == false);
    assert_true(is_sq_attacked(pos, e1, BLACK) == false);
    assert_true(is_sq_attacked(pos, e2, WHITE) == true);
    assert_true(is_sq_attacked(pos, e2, BLACK) == true);
    assert_true(is_sq_attacked(pos, e3, WHITE) == true);
    assert_true(is_sq_attacked(pos, e3, BLACK) == true);
    assert_true(is_sq_attacked(pos, e4, WHITE) == false);
    assert_true(is_sq_attacked(pos, e4, BLACK) == true);
    assert_true(is_sq_attacked(pos, e5, WHITE) == true);
    assert_true(is_sq_attacked(pos, e5, BLACK) == true);
    assert_true(is_sq_attacked(pos, e6, WHITE) == true);
    assert_true(is_sq_attacked(pos, e6, BLACK) == true);
    assert_true(is_sq_attacked(pos, e7, WHITE) == false);
    assert_true(is_sq_attacked(pos, e7, BLACK) == true);
    assert_true(is_sq_attacked(pos, e8, WHITE) == true);
    assert_true(is_sq_attacked(pos, e8, BLACK) == true);

    assert_true(is_sq_attacked(pos, f1, WHITE) == true);
    assert_true(is_sq_attacked(pos, f1, BLACK) == true);
    assert_true(is_sq_attacked(pos, f2, WHITE) == true);
    assert_true(is_sq_attacked(pos, f2, BLACK) == false);
    assert_true(is_sq_attacked(pos, f3, WHITE) == false);
    assert_true(is_sq_attacked(pos, f3, BLACK) == true);
    assert_true(is_sq_attacked(pos, f4, WHITE) == true);
    assert_true(is_sq_attacked(pos, f4, BLACK) == false);
    assert_true(is_sq_attacked(pos, f5, WHITE) == true);
    assert_true(is_sq_attacked(pos, f5, BLACK) == true);
    assert_true(is_sq_attacked(pos, f6, WHITE) == true);
    assert_true(is_sq_attacked(pos, f6, BLACK) == true);
    assert_true(is_sq_attacked(pos, f7, WHITE) == false);
    assert_true(is_sq_attacked(pos, f7, BLACK) == true);
    assert_true(is_sq_attacked(pos, f8, WHITE) == true);
    assert_true(is_sq_attacked(pos, f8, BLACK) == true);

    assert_true(is_sq_attacked(pos, g1, WHITE) == false);
    assert_true(is_sq_attacked(pos, g1, BLACK) == false);
    assert_true(is_sq_attacked(pos, g2, WHITE) == true);
    assert_true(is_sq_attacked(pos, g2, BLACK) == true);
    assert_true(is_sq_attacked(pos, g3, WHITE) == true);
    assert_true(is_sq_attacked(pos, g3, BLACK) == true);
    assert_true(is_sq_attacked(pos, g4, WHITE) == false);
    assert_true(is_sq_attacked(pos, g4, BLACK) == true);
    assert_true(is_sq_attacked(pos, g5, WHITE) == true);
    assert_true(is_sq_attacked(pos, g5, BLACK) == true);
    assert_true(is_sq_attacked(pos, g6, WHITE) == false);
    assert_true(is_sq_attacked(pos, g6, BLACK) == true);
    assert_true(is_sq_attacked(pos, g7, WHITE) == false);
    assert_true(is_sq_attacked(pos, g7, BLACK) == true);
    assert_true(is_sq_attacked(pos, g8, WHITE) == true);
    assert_true(is_sq_attacked(pos, g8, BLACK) == true);

    assert_true(is_sq_attacked(pos, h1, WHITE) == true);
    assert_true(is_sq_attacked(pos, h1, BLACK) == true);
    assert_true(is_sq_attacked(pos, h2, WHITE) == true);
    assert_true(is_sq_attacked(pos, h2, BLACK) == false);
    assert_true(is_sq_attacked(pos, h3, WHITE) == false);
    assert_true(is_sq_attacked(pos, h3, BLACK) == true);
    assert_true(is_sq_attacked(pos, h4, WHITE) == false);
    assert_true(is_sq_attacked(pos, h4, BLACK) == true);
    assert_true(is_sq_attacked(pos, h5, WHITE) == false);
    assert_true(is_sq_attacked(pos, h5, BLACK) == false);
    assert_true(is_sq_attacked(pos, h6, WHITE) == true);
    assert_true(is_sq_attacked(pos, h6, BLACK) == true);
    assert_true(is_sq_attacked(pos, h7, WHITE) == false);
    assert_true(is_sq_attacked(pos, h7, BLACK) == true);
    assert_true(is_sq_attacked(pos, h8, WHITE) == false);
    assert_true(is_sq_attacked(pos, h8, BLACK) == true);

	free_board(pos);
///////////////////////////////////
    test_fen = "8/1pppp2k/6p1/5p2/8/3B4/8/4K3 w - - 0 1";

    pos = allocate_board();
    consume_fen_notation(test_fen, pos);

    assert_false(is_sq_attacked(pos, h7, WHITE));
	free_board(pos);
///////////////////////////////////////
    test_fen =
        "rnbq1bnr/ppppp1pp/6k1/5p2/4P3/3B4/PPPP2PP/RNBQK1NR w KQ - 0 1";

    pos = allocate_board();
    consume_fen_notation(test_fen, pos);

    //print_board(pos);
    assert_false(is_sq_attacked(pos, g6, WHITE));

	free_board(pos);

///////////////////////////////////////////////
    test_fen =
        "r3k2r/p1ppqpb1/bn2pnp1/3PN2Q/1p2P3/2N4p/PPPBBPPP/R3K2R w KQkq - 0 1";

//8    r  -  -  -  k  -  -  r
//7    p  -  p  p  q  p  b  -
//6    b  n  -  -  p  n  p  -
//5    -  -  -  P  N  -  -  Q
//4    -  p  -  -  P  -  -  -
//3    -  -  N  -  -  -  -  p
//2    P  P  P  B  B  P  P  P
//1    R  -  -  -  K  -  -  R

    //a  b  c  d  e  f  g  h

    pos = allocate_board();
    consume_fen_notation(test_fen, pos);

    //print_board(pos);
    assert_false(is_sq_attacked(pos, e8, WHITE));
    assert_false(is_sq_attacked(pos, a1, WHITE));

    assert_true(is_sq_attacked(pos, h8, WHITE));
    assert_true(is_sq_attacked(pos, g6, WHITE));

	free_board(pos);
}