#ifdef TEST #include "unity.h" #include #include #include #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)); } #endif // TEST