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.
122 lines
4.4 KiB
122 lines
4.4 KiB
#ifdef TEST
|
|
#include "unity.h"
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <stdbool.h>
|
|
#include "Spieler.h"
|
|
#include "Schachbrett.h"
|
|
#include "Koenig.h"
|
|
#include "Spielstatus.h"
|
|
|
|
|
|
void test_istzugerlaubt_Koenig_LegalMoves(void) {
|
|
char **Brett = Schachbrett_erstellen();
|
|
Player player = PLAYER_WHITE;
|
|
//Vorbereitung für Test
|
|
Brett[1][4] = ' ';
|
|
Brett[2][4] = 'p';
|
|
|
|
// Test bewegung
|
|
TEST_ASSERT_TRUE(istzugerlaubt_Koenig(Brett, 4, 0, 4, 1, player)); // e1 zu e2
|
|
TEST_ASSERT_TRUE(istzugerlaubt_Koenig(Brett, 4, 1, 4, 2, player)); // e2 zu e3 (Einnehmen von Figur)
|
|
|
|
Schachbrettspeicher_freigeben(Brett);
|
|
Brett = Schachbrett_erstellen();
|
|
player = PLAYER_BLACK;
|
|
//Vorbereitung für Test
|
|
Brett[6][4] = ' ';
|
|
Brett[5][4] = 'P';
|
|
|
|
// Test bewegung
|
|
TEST_ASSERT_TRUE(istzugerlaubt_Koenig(Brett, 4, 7, 4, 6, player)); // e8 zu e7
|
|
TEST_ASSERT_TRUE(istzugerlaubt_Koenig(Brett, 4, 6, 4, 5, player)); // e7 zu e6 (Einnehmen von Figur)
|
|
|
|
Schachbrettspeicher_freigeben(Brett);
|
|
}
|
|
|
|
void test_istzugerlaubt_Koenig_IllegalMoves(void) {
|
|
char **Brett = Schachbrett_erstellen();
|
|
Player player = PLAYER_WHITE;
|
|
|
|
// Illegaler zug: König versucht sich 2 Felder zu bewegen
|
|
TEST_ASSERT_FALSE(istzugerlaubt_Koenig(Brett, 4, 0, 4, 2, player));
|
|
|
|
// Illegaler zug: König versucht sich auf besetztes Feld zu bewegen
|
|
TEST_ASSERT_FALSE(istzugerlaubt_Koenig(Brett, 4, 0, 3, 1, player));
|
|
|
|
Schachbrettspeicher_freigeben(Brett);
|
|
}
|
|
void test_Koenigbewegung_ValidMove(void) {
|
|
char** Brett = Schachbrett_erstellen();
|
|
Spielstatus status;
|
|
initalisiereSpielstatus(&status);
|
|
Brett[4][4] = 'K';
|
|
Player player = PLAYER_WHITE;
|
|
bewegeKoenig(Brett, 4, 4, 5, 4, player,&status); // Bewege König von e5 zu e6
|
|
TEST_ASSERT_EQUAL('K', Brett[4][5]); // Schauen ob der König an der neuen stelle ist
|
|
TEST_ASSERT_EQUAL(' ', Brett[4][4]); // Schauen ob die alte stelle leer ist
|
|
TEST_ASSERT_TRUE(status.BewegteSichWeißerKoenig);//Schauen ob sich passend der spielstatus ändert
|
|
|
|
Schachbrettspeicher_freigeben(Brett);
|
|
}
|
|
|
|
void test_Koenigbewegung_InvalidMove(void) {
|
|
char** Brett = Schachbrett_erstellen();
|
|
Spielstatus status;
|
|
initalisiereSpielstatus(&status);
|
|
Brett[4][4] = 'K';
|
|
Player player = PLAYER_WHITE;
|
|
|
|
bewegeKoenig(Brett, 4, 4, 6, 6, player,&status); // Versucht illegalen Zug zu machen
|
|
|
|
TEST_ASSERT_EQUAL('K', Brett[4][4]); // Schauen ob der König an der alten stelle ist
|
|
TEST_ASSERT_EQUAL(' ', Brett[4][6]); // Schauen ob die Zielstelle leer ist
|
|
TEST_ASSERT_FALSE(status.BewegteSichWeißerKoenig);//Schauen ob sich der spielstatus passend verhält
|
|
Schachbrettspeicher_freigeben(Brett);
|
|
}
|
|
void test_Rochieren(void) {
|
|
char** testBrett = Schachbrett_erstellen();
|
|
Spielstatus status = {0};
|
|
Player player = PLAYER_WHITE;
|
|
testBrett[0][5] = ' ';
|
|
testBrett[0][6] = ' ';
|
|
|
|
rochiere(testBrett, player, true, &status); // Assuming 'true' indicates kingside castling
|
|
|
|
// Assertions to verify castling was performed correctly
|
|
TEST_ASSERT_EQUAL(' ', testBrett[0][4]); // King's original position is empty
|
|
TEST_ASSERT_EQUAL(' ', testBrett[0][7]); // Rook's original position is empty
|
|
TEST_ASSERT_EQUAL('K', testBrett[0][6]); // King is moved to the correct position
|
|
TEST_ASSERT_EQUAL('R', testBrett[0][5]); // Rook is moved next to the king
|
|
|
|
TEST_ASSERT_TRUE(status.BewegteSichWeißerKoenig);
|
|
TEST_ASSERT_TRUE(status.WeißerTurmKoenigSeiteBewegt);
|
|
|
|
// Clean up
|
|
Schachbrettspeicher_freigeben(testBrett);
|
|
}
|
|
void test_KoenigKannEntkommen(void) {
|
|
char** testBrett = Schachbrett_erstellen();
|
|
testBrett[4][4] = 'k';
|
|
print_Schachfeld(testBrett);
|
|
|
|
TEST_ASSERT_TRUE(KannKoenigEntkommen(testBrett, 4, 4, PLAYER_BLACK));
|
|
TEST_ASSERT_FALSE(KannKoenigEntkommen(testBrett, 4, 7, PLAYER_BLACK));
|
|
}
|
|
void test_KingInCheckmate(void) {
|
|
char** testBrett = Schachbrett_erstellen();
|
|
testBrett[4][4] = 'K';
|
|
|
|
TEST_ASSERT_FALSE(istSchachmatt(testBrett, 4, 4 ,PLAYER_WHITE));
|
|
testBrett[4][0] = 'q';
|
|
testBrett[5][0] = 'q';
|
|
TEST_ASSERT_FALSE(istSchachmatt(testBrett, 4, 4 ,PLAYER_WHITE));
|
|
testBrett[3][0] = 'q';
|
|
testBrett[3][7] = 'q';
|
|
testBrett[4][7] = 'q';
|
|
testBrett[5][7] = 'q';
|
|
testBrett[7][4] = ' ';
|
|
print_Schachfeld(testBrett);
|
|
TEST_ASSERT_TRUE(istSchachmatt(testBrett, 4, 4 ,PLAYER_WHITE));
|
|
}
|
|
#endif // TEST
|