// Pruebas de board.c. Agreguen las suyas, con estas como modelo.
#include <assert.h>
#include <stdio.h>

#include "board.h"

// Sesión 1
static void test_new_board_is_hidden_and_has_no_mines(void) {
    Board *board = board_new(2, 3);
    assert(board != NULL);
    assert(board_rows(board) == 2);
    assert(board_cols(board) == 3);
    assert(board_mines(board) == 0);
    assert(board_opened(board) == 0);
    assert(board_cell_char(board, 1, 2) == '#');
    board_free(board);
}

// Sesión 1
static void test_counts_around_a_mine(void) {
    const char *rows[] = {
        "*..",
        "...",
        "..*",
    };
    Board *board = board_from_rows(rows, 3);
    assert(board != NULL);
    assert(board_mines(board) == 2);
    assert(board_mines_around(board, 0, 1) == 1);
    assert(board_mines_around(board, 1, 1) == 2);
    assert(board_mines_around(board, 2, 0) == 0);
    board_free(board);
}

// Sesión 2
static void test_reveal_opens_the_zero_region(void) {
    const char *rows[] = {
        "....",
        "....",
        "...*",
    };
    Board *board = board_from_rows(rows, 3);
    assert(board != NULL);

    board_reveal(board, 0, 0);

    assert(board_cell_char(board, 0, 0) == '.');
    assert(board_cell_char(board, 1, 3) == '1');
    assert(board_cell_char(board, 2, 3) == '#');
    assert(board_opened(board) == 11);
    assert(board_state(board) == GAME_WON);
    board_free(board);
}

int main(void) {
    test_new_board_is_hidden_and_has_no_mines();
    printf("board_new: ok\n");
    test_counts_around_a_mine();
    printf("minas vecinas: ok\n");
    test_reveal_opens_the_zero_region();
    printf("board_reveal: ok\n");
    return 0;
}
