109 lines
2.3 KiB
C
109 lines
2.3 KiB
C
|
#include <assert.h>
|
||
|
|
||
|
#include "basic_testing.h"
|
||
|
|
||
|
#include "../chess_paths.h"
|
||
|
|
||
|
struct chessboard {
|
||
|
unsigned int C;
|
||
|
unsigned int R;
|
||
|
};
|
||
|
|
||
|
int value_at(const struct chessboard * c, unsigned int column, unsigned int row) {
|
||
|
row = c->R - row - 1;
|
||
|
column += row;
|
||
|
column *= column + 1;
|
||
|
return column/2 + row;
|
||
|
}
|
||
|
|
||
|
unsigned int columns(const struct chessboard * c) {
|
||
|
return c->C;
|
||
|
}
|
||
|
|
||
|
unsigned int rows(const struct chessboard * c) {
|
||
|
return c->R;
|
||
|
};
|
||
|
|
||
|
TEST(dec_pawn) {
|
||
|
struct chessboard c = {.C = 10, .R = 10 };
|
||
|
struct piece_position p;
|
||
|
p.piece = PAWN;
|
||
|
p.column = 5;
|
||
|
p.row = 2;
|
||
|
assert_uint_eq(decreasing_path_len(&c, &p), 7);
|
||
|
assert_uint_eq(p.column, 5);
|
||
|
assert_uint_eq(p.row, 9);
|
||
|
TEST_PASSED;
|
||
|
}
|
||
|
|
||
|
TEST(dec_king) {
|
||
|
struct chessboard c = {.C = 10, .R = 10 };
|
||
|
struct piece_position p;
|
||
|
p.piece = KING;
|
||
|
p.column = 5;
|
||
|
p.row = 2;
|
||
|
assert_uint_eq(decreasing_path_len(&c, &p), 7);
|
||
|
assert_uint_eq(p.column, 0);
|
||
|
assert_uint_eq(p.row, 9);
|
||
|
TEST_PASSED;
|
||
|
}
|
||
|
|
||
|
TEST(dec_queen) {
|
||
|
struct chessboard c = {.C = 10, .R = 10 };
|
||
|
struct piece_position p;
|
||
|
p.piece = QUEEN;
|
||
|
p.column = 5;
|
||
|
p.row = 2;
|
||
|
assert_uint_eq(decreasing_path_len(&c, &p), 2);
|
||
|
assert_uint_eq(p.column, 0);
|
||
|
assert_uint_eq(p.row, 9);
|
||
|
TEST_PASSED;
|
||
|
}
|
||
|
|
||
|
TEST(dec_knight) {
|
||
|
struct chessboard c = {.C = 10, .R = 10 };
|
||
|
struct piece_position p;
|
||
|
p.piece = KNIGHT;
|
||
|
p.column = 5;
|
||
|
p.row = 2;
|
||
|
assert_uint_eq(decreasing_path_len(&c, &p), 4);
|
||
|
assert_uint_eq(p.column, 0);
|
||
|
assert_uint_eq(p.row, 9);
|
||
|
TEST_PASSED;
|
||
|
}
|
||
|
|
||
|
TEST(dec_bishop) {
|
||
|
struct chessboard c = {.C = 10, .R = 10 };
|
||
|
struct piece_position p;
|
||
|
p.piece = BISHOP;
|
||
|
p.column = 5;
|
||
|
p.row = 2;
|
||
|
assert_uint_eq(decreasing_path_len(&c, &p), 2);
|
||
|
assert_uint_eq(p.column, 2);
|
||
|
assert_uint_eq(p.row, 9);
|
||
|
TEST_PASSED;
|
||
|
}
|
||
|
|
||
|
TEST(dec_rook) {
|
||
|
struct chessboard c = {.C = 10, .R = 10 };
|
||
|
struct piece_position p;
|
||
|
p.piece = ROOK;
|
||
|
p.column = 5;
|
||
|
p.row = 2;
|
||
|
assert_uint_eq(decreasing_path_len(&c, &p), 2);
|
||
|
assert_uint_eq(p.column, 0);
|
||
|
assert_uint_eq(p.row, 9);
|
||
|
TEST_PASSED;
|
||
|
}
|
||
|
|
||
|
int main() {
|
||
|
RUN_TEST(dec_pawn);
|
||
|
RUN_TEST(dec_king);
|
||
|
RUN_TEST(dec_queen);
|
||
|
RUN_TEST(dec_knight);
|
||
|
RUN_TEST(dec_bishop);
|
||
|
RUN_TEST(dec_rook);
|
||
|
PRINT_TEST_RESULTS;
|
||
|
assert(ALL_TESTS_PASSED);
|
||
|
}
|