diff options
author | zedarider <ymherklotz@gmail.com> | 2016-11-10 18:19:22 +0000 |
---|---|---|
committer | zedarider <ymherklotz@gmail.com> | 2016-11-10 18:19:22 +0000 |
commit | 95f75aa7aacf5e0e1ef11e8d200f84de44bd891f (patch) | |
tree | 5ffafeb62866e121453b82e11e402a27a6a30256 /src | |
parent | 375e4b989af8b4ac2c3479ea32f9324f29ce9071 (diff) | |
download | ChessAI-95f75aa7aacf5e0e1ef11e8d200f84de44bd891f.tar.gz ChessAI-95f75aa7aacf5e0e1ef11e8d200f84de44bd891f.zip |
finished the tester
Diffstat (limited to 'src')
-rw-r--r-- | src/chess_board.cpp | 3 | ||||
-rw-r--r-- | src/chess_piece.cpp | 2 | ||||
-rw-r--r-- | src/chess_tester.cpp | 125 | ||||
-rw-r--r-- | src/main.cpp | 19 |
4 files changed, 130 insertions, 19 deletions
diff --git a/src/chess_board.cpp b/src/chess_board.cpp index 4891981..8b449ca 100644 --- a/src/chess_board.cpp +++ b/src/chess_board.cpp @@ -62,6 +62,8 @@ chess_ai::chess_board::chess_board(board_state state) : SIZE(CHESS_BOARD_SIZE) { } } +chess_ai::chess_board::~chess_board() {} + void chess_ai::chess_board::init_board_vector() { for(unsigned i = 0; i < SIZE; ++i) { std::vector<chess_ai::chess_piece> tmp_vec; @@ -158,7 +160,6 @@ chess_ai::move_error chess_ai::chess_board::move_piece iterate_board(it, orig_x, orig_y); iterate_board(new_it, dest_x, dest_y); - switch(it->type) { case pawn: return move_pawn(it, new_it, taken_piece); diff --git a/src/chess_piece.cpp b/src/chess_piece.cpp index e81b9b7..83b664f 100644 --- a/src/chess_piece.cpp +++ b/src/chess_piece.cpp @@ -20,6 +20,8 @@ chess_ai::chess_piece::chess_piece(piece_type type, piece_colour colour, unsigned x, unsigned y) : type(type), colour(colour), x(x), y(y) {} +chess_ai::chess_piece::~chess_piece() {} + void chess_ai::chess_piece::set_type(piece_type type) { this->type = type; } diff --git a/src/chess_tester.cpp b/src/chess_tester.cpp new file mode 100644 index 0000000..60f6ee0 --- /dev/null +++ b/src/chess_tester.cpp @@ -0,0 +1,125 @@ +#include "../include/chess_tester.hpp" + +chess_tester::chess_tester() : ts_begin(false) { + srand(time(NULL)); + + test_id = rand() % 0xffffffff; + test_id_test = test_id; + +} + +void chess_tester::chess_begin_test_suite() { + if(ts_begin) { + fprintf(stderr, "Error: already started test suite\n"); + exit(1); + } + + ts_begin = true; +} + +int chess_tester::chess_begin_test(std::string test_name) { + if(!ts_begin) { + fprintf(stderr, "Error: the test suite hasn't been started yet\n"); + exit(1); + } + + if(!is_in_arr(test_name)) { + fprintf(stderr, "Error: the test name does not exist\n"); + exit(1); + } + + current_test = test_name; + + test_id = rand() % 0xffffffff; + test_id_test = test_id; + + return test_id; +} + +void chess_tester::chess_end_test(int test_id, bool passed) { + if(test_id != test_id_test) { + fprintf(stderr , "Error: the test from before has not been ended\n"); + exit(1); + } + + tested_pieces tmp; + tmp.piece_name = current_test; + + if(passed) { + tmp.num_passed = 1; + tmp.num_failed = 0; + } else { + tmp.num_passed = 0; + tmp.num_failed = 1; + } + + if(test_piece.empty() || !is_in_vec(tmp)) { + test_piece.push_back(tmp); + } else { + for(unsigned i = 0; i < test_piece.size(); ++i) { + if(test_piece[i] == tmp) { + if(passed) { + test_piece[i].num_passed++; + } else { + test_piece[i].num_failed++; + } + } + } + } +} + +void chess_tester::chess_end_test_suite() { + std::sort(test_piece.begin(), test_piece.end()); + + int pieces_passed = 0; + int pieces_partial = 0; + int pieces_fail = 0; + + fprintf(stderr, "+-%10s-+-%5s-+-%6s-+-%8s-+\n", "----------", "-----", + "------", "--------"); + fprintf(stderr, "| %10s | %5s | %6s | %8s |\n", "Piece ", "Total", "Passed", + "Passed %"); + fprintf(stderr, "+-%10s-+-%5s-+-%6s-+-%8s-+\n", "----------", "-----", + "------", "--------"); + for(unsigned i = 0; i < test_piece.size(); ++i) { + fprintf(stderr, "| %10s | %5d | %6d | %7.3f%% |\n", + test_piece[i].piece_name.c_str(), test_piece[i].num_passed + + test_piece[i].num_failed, test_piece[i].num_passed, + 100.0*(double)test_piece[i].num_passed / + (double)(test_piece[i].num_passed + test_piece[i].num_failed)); + + if(test_piece[i].num_passed == 0) { + pieces_fail++; + } else if(test_piece[i].num_failed == 0) { + pieces_passed++; + } else { + pieces_partial++; + } + } + fprintf(stderr, "+-%10s-+-%5s-+-%6s-+-%8s-+\n", "----------", "-----", + "------", "--------"); + + fprintf(stderr, "\nTotal pieces tested: %lu\n", test_piece.size()); + fprintf(stderr, "Passed: %d\n", pieces_passed); + fprintf(stderr, "Partially working: %d\n", pieces_partial); + fprintf(stderr, "Failed: %d\n", pieces_fail); +} + +bool chess_tester::is_in_arr(const std::string& test_piece) const { + for(unsigned i = 0; i < CHESS_TEST_SIZE; ++i) { + if(chess_test_pieces[i] == test_piece) { + return true; + } + } + + return false; +} + +bool chess_tester::is_in_vec(const tested_pieces& piece) const { + for(unsigned i = 0; i < test_piece.size(); ++i) { + if(test_piece[i] == piece) { + return true; + } + } + return false; +} diff --git a/src/main.cpp b/src/main.cpp index 81485f3..def5cf0 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -8,6 +8,7 @@ */ #include "../include/chess_ai.hpp" +#include "../include/chess_tester.hpp" #include <iostream> @@ -17,24 +18,6 @@ using namespace chess_ai; int main(int argc, char** argv) { (void)argc; (void)argv; - - chess_board board(initial); - board.print_board(); - - chess_piece piece(rook, white, 5, 3); - board.set_piece(piece); - - board.print_board(); - - board.remove_piece(5, 3); - - board.print_board(); - - board.move_piece(4, 6, 4, 4); - board.move_piece(4, 1, 4, 3); - board.move_piece(3, 6, 3, 5); - - board.print_board(); return 0; } |