|
|
#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
|