You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
242 lines
6.6 KiB
242 lines
6.6 KiB
#ifdef TEST
|
|
#include "unity.h"
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <stdbool.h>
|
|
#include "Spieler.h"
|
|
#include "Koenig.h"
|
|
#include "Schachbrett.h"
|
|
|
|
char** ErstelleTestBrett() {
|
|
char** Brett = malloc(8 * sizeof(char*));
|
|
for (int i = 0; i < 8; i++) {
|
|
Brett[i] = malloc(8 * sizeof(char));
|
|
for (int j = 0; j < 8; j++) {
|
|
Brett[i][j] = ' '; //Erstelle komplett leeres Brett
|
|
}
|
|
}
|
|
return Brett;
|
|
}
|
|
|
|
void freeTestBrett(char** Brett) {
|
|
for (int i = 0; i < 8; i++) {
|
|
free(Brett[i]);
|
|
}
|
|
free(Brett);
|
|
}
|
|
void test_SchachDurchBauer(void) {
|
|
char** Brett = ErstelleTestBrett();
|
|
//Weißer König wird von schwarzen Bauer angegriffen
|
|
Brett[4][4] = 'K';
|
|
Brett[5][5] = 'p';
|
|
|
|
TEST_ASSERT_TRUE(istKoenigImSchach(Brett, PLAYER_WHITE));
|
|
|
|
freeTestBrett(Brett);
|
|
Brett = ErstelleTestBrett();
|
|
// Schwarzer König wird von weißen Bauer angegriffen
|
|
Brett[3][3] = 'k';
|
|
Brett[2][2] = 'P';
|
|
TEST_ASSERT_TRUE(istKoenigImSchach(Brett, PLAYER_BLACK));
|
|
|
|
freeTestBrett(Brett);
|
|
Brett = ErstelleTestBrett();
|
|
// Schwarzer König wird von weißen Bauer angegriffen(andere seite)
|
|
Brett[3][3] = 'k';
|
|
Brett[2][4] = 'P';
|
|
TEST_ASSERT_TRUE(istKoenigImSchach(Brett, PLAYER_BLACK));
|
|
|
|
freeTestBrett(Brett);
|
|
Brett = ErstelleTestBrett();
|
|
// Weißer König nicht in Gefahr
|
|
Brett[4][4] = 'K';
|
|
Brett[3][4] = 'P';
|
|
TEST_ASSERT_FALSE(istKoenigImSchach(Brett, PLAYER_WHITE));
|
|
|
|
freeTestBrett(Brett);
|
|
Brett = ErstelleTestBrett();
|
|
// Schwarzer König nicht in Gefahr
|
|
Brett[3][3] = 'k';
|
|
Brett[1][3] = 'P';
|
|
TEST_ASSERT_FALSE(istKoenigImSchach(Brett, PLAYER_BLACK));
|
|
|
|
freeTestBrett(Brett);
|
|
}
|
|
void test_SchachDurchTurm(void) {
|
|
char** Brett = ErstelleTestBrett();
|
|
|
|
// Weißer König wird von schwarzen Turm bedroht (Horizontal)
|
|
Brett[4][4] = 'K';
|
|
Brett[4][7] = 'r';
|
|
TEST_ASSERT_TRUE(istKoenigImSchach(Brett, PLAYER_WHITE));
|
|
|
|
freeTestBrett(Brett);
|
|
Brett = ErstelleTestBrett();
|
|
|
|
// Weißer König wird von schwarzen Turm bedroht (Vertikal)
|
|
Brett[4][4] = 'K';
|
|
Brett[0][4] = 'r';
|
|
TEST_ASSERT_TRUE(istKoenigImSchach(Brett, PLAYER_WHITE));
|
|
|
|
freeTestBrett(Brett);
|
|
Brett = ErstelleTestBrett();
|
|
|
|
// Schwarzer König wird von weißen Turm bedroht (Horizontal)
|
|
Brett[3][3] = 'k';
|
|
Brett[3][0] = 'R';
|
|
TEST_ASSERT_TRUE(istKoenigImSchach(Brett, PLAYER_BLACK));
|
|
|
|
freeTestBrett(Brett);
|
|
Brett = ErstelleTestBrett();
|
|
|
|
// Schwarzer König wird nicht bedroht weil er von einer Figur beschützt wird
|
|
Brett[3][3] = 'k';
|
|
Brett[3][1] = 'R';
|
|
Brett[3][2] = 'p';
|
|
TEST_ASSERT_FALSE(istKoenigImSchach(Brett, PLAYER_BLACK));
|
|
|
|
freeTestBrett(Brett);
|
|
Brett = ErstelleTestBrett();
|
|
|
|
// Weißer König nicht in gefahr
|
|
Brett[4][4] = 'K';
|
|
Brett[5][5] = 'r';
|
|
TEST_ASSERT_FALSE(istKoenigImSchach(Brett, PLAYER_WHITE));
|
|
|
|
freeTestBrett(Brett);
|
|
}
|
|
void test_SchachDurchSpringer(void) {
|
|
char** Brett = ErstelleTestBrett();
|
|
|
|
// Weißer König bedroht durch schwarzen Springer
|
|
Brett[4][4] = 'K';
|
|
Brett[3][6] = 'n';
|
|
TEST_ASSERT_TRUE(istKoenigImSchach(Brett, PLAYER_WHITE));
|
|
|
|
freeTestBrett(Brett);
|
|
Brett = ErstelleTestBrett();
|
|
|
|
// Schwarzer König bedroht durch weißen Springer
|
|
Brett[3][3] = 'k';
|
|
Brett[5][4] = 'N';
|
|
TEST_ASSERT_TRUE(istKoenigImSchach(Brett, PLAYER_BLACK));
|
|
|
|
freeTestBrett(Brett);
|
|
Brett = ErstelleTestBrett();
|
|
|
|
// Weißer könig nicht bedroht
|
|
Brett[4][4] = 'K';
|
|
Brett[7][7] = 'n';
|
|
TEST_ASSERT_FALSE(istKoenigImSchach(Brett, PLAYER_WHITE));
|
|
|
|
freeTestBrett(Brett);
|
|
Brett = ErstelleTestBrett();
|
|
|
|
// Schwarzer könig durch mehrere Springer bedroht
|
|
Brett[0][0] = 'k';
|
|
Brett[1][2] = 'N';
|
|
Brett[2][1] = 'N';
|
|
TEST_ASSERT_TRUE(istKoenigImSchach(Brett, PLAYER_BLACK));
|
|
|
|
freeTestBrett(Brett);
|
|
Brett = ErstelleTestBrett();
|
|
|
|
// Schwarzer König wird trotz Mauer angegriffen
|
|
Brett[0][0] = 'k';
|
|
Brett[0][1] = 'p';
|
|
Brett[1][0] = 'p';
|
|
Brett[1][1] = 'p';
|
|
Brett[1][2] = 'N';
|
|
TEST_ASSERT_TRUE(istKoenigImSchach(Brett, PLAYER_BLACK));
|
|
|
|
freeTestBrett(Brett);
|
|
}
|
|
void test_SchachDurchLaeufer(void) {
|
|
char** Brett = ErstelleTestBrett();
|
|
|
|
// Weißer König wird von schwarzen Läufer bedroht
|
|
Brett[4][4] = 'K';
|
|
Brett[2][2] = 'b';
|
|
TEST_ASSERT_TRUE(istKoenigImSchach(Brett, PLAYER_WHITE));
|
|
|
|
freeTestBrett(Brett);
|
|
Brett = ErstelleTestBrett();
|
|
|
|
// Schwarzer König wird von weißen Läufer bedroht
|
|
Brett[3][3] = 'k';
|
|
Brett[6][0] = 'B';
|
|
TEST_ASSERT_TRUE(istKoenigImSchach(Brett, PLAYER_BLACK));
|
|
|
|
freeTestBrett(Brett);
|
|
Brett = ErstelleTestBrett();
|
|
|
|
// Weißer König wird nicht bedroht
|
|
Brett[4][4] = 'K';
|
|
Brett[6][7] = 'b';
|
|
TEST_ASSERT_FALSE(istKoenigImSchach(Brett, PLAYER_WHITE));
|
|
|
|
freeTestBrett(Brett);
|
|
Brett = ErstelleTestBrett();
|
|
|
|
// Schwarzer König wird von mehreren Läufer bedroht
|
|
Brett[4][4] = 'k';
|
|
Brett[6][6] = 'B';
|
|
Brett[0][0] = 'B';
|
|
TEST_ASSERT_TRUE(istKoenigImSchach(Brett, PLAYER_BLACK));
|
|
|
|
freeTestBrett(Brett);
|
|
Brett = ErstelleTestBrett();
|
|
|
|
// Schwarzer könig nicht in gefahr weil Läufer blockiert wird
|
|
Brett[0][0] = 'k';
|
|
Brett[2][2] = 'P';
|
|
Brett[4][4] = 'B';
|
|
TEST_ASSERT_FALSE(istKoenigImSchach(Brett, PLAYER_BLACK));
|
|
|
|
freeTestBrett(Brett);
|
|
}
|
|
void test_SchachDurchDame(void) {
|
|
char** Brett = ErstelleTestBrett();
|
|
|
|
// Weißer könig wird von schwarzer Dame bedroht (Horizontal)
|
|
Brett[4][4] = 'K';
|
|
Brett[4][7] = 'q';
|
|
TEST_ASSERT_TRUE(istKoenigImSchach(Brett, PLAYER_WHITE));
|
|
|
|
freeTestBrett(Brett);
|
|
Brett = ErstelleTestBrett();
|
|
|
|
// Schwarzer könig wird von weißer Dame bedroht (Vertikal)
|
|
Brett[3][3] = 'k';
|
|
Brett[0][3] = 'Q';
|
|
TEST_ASSERT_TRUE(istKoenigImSchach(Brett, PLAYER_BLACK));
|
|
|
|
freeTestBrett(Brett);
|
|
Brett = ErstelleTestBrett();
|
|
|
|
// Weißer könig wird nicht von schwarzer Dame bedroht aufgrund blockierender Figur
|
|
Brett[4][4] = 'K';
|
|
Brett[4][2] = 'p';
|
|
Brett[4][0] = 'q';
|
|
TEST_ASSERT_FALSE(istKoenigImSchach(Brett, PLAYER_WHITE));
|
|
|
|
freeTestBrett(Brett);
|
|
Brett = ErstelleTestBrett();
|
|
|
|
// Schwarzer könig wird von weißer Dame bedroht (Diagonal)
|
|
Brett[0][0] = 'k';
|
|
Brett[7][7] = 'Q';
|
|
TEST_ASSERT_TRUE(istKoenigImSchach(Brett, PLAYER_BLACK));
|
|
|
|
freeTestBrett(Brett);
|
|
Brett = ErstelleTestBrett();
|
|
|
|
// Schwarzer könig wird nicht von weißer Dame bedroht aufgrund blockierender Figur
|
|
Brett[7][7] = 'k';
|
|
Brett[5][5] = 'P';
|
|
Brett[3][3] = 'Q';
|
|
TEST_ASSERT_FALSE(istKoenigImSchach(Brett, PLAYER_BLACK));
|
|
|
|
freeTestBrett(Brett);
|
|
}
|
|
#endif // TEST
|