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.

98 lines
3.5 KiB

  1. #ifdef TEST
  2. #include "unity.h"
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <stdbool.h>
  6. #include "Spieler.h"
  7. #include "Schachbrett.h"
  8. #include "Koenig.h"
  9. #include "Spielstatus.h"
  10. void test_istzugerlaubt_Koenig_LegalMoves(void) {
  11. char **Brett = Schachbrett_erstellen();
  12. Player player = PLAYER_WHITE;
  13. //Vorbereitung für Test
  14. Brett[1][4] = ' ';
  15. Brett[2][4] = 'p';
  16. // Test bewegung
  17. TEST_ASSERT_TRUE(istzugerlaubt_Koenig(Brett, 4, 0, 4, 1, player)); // e1 zu e2
  18. TEST_ASSERT_TRUE(istzugerlaubt_Koenig(Brett, 4, 1, 4, 2, player)); // e2 zu e3 (Einnehmen von Figur)
  19. Schachbrettspeicher_freigeben(Brett);
  20. Brett = Schachbrett_erstellen();
  21. player = PLAYER_BLACK;
  22. //Vorbereitung für Test
  23. Brett[6][4] = ' ';
  24. Brett[5][4] = 'P';
  25. // Test bewegung
  26. TEST_ASSERT_TRUE(istzugerlaubt_Koenig(Brett, 4, 7, 4, 6, player)); // e8 zu e7
  27. TEST_ASSERT_TRUE(istzugerlaubt_Koenig(Brett, 4, 6, 4, 5, player)); // e7 zu e6 (Einnehmen von Figur)
  28. Schachbrettspeicher_freigeben(Brett);
  29. }
  30. void test_istzugerlaubt_Koenig_IllegalMoves(void) {
  31. char **Brett = Schachbrett_erstellen();
  32. Player player = PLAYER_WHITE;
  33. // Illegaler zug: König versucht sich 2 Felder zu bewegen
  34. TEST_ASSERT_FALSE(istzugerlaubt_Koenig(Brett, 4, 0, 4, 2, player));
  35. // Illegaler zug: König versucht sich auf besetztes Feld zu bewegen
  36. TEST_ASSERT_FALSE(istzugerlaubt_Koenig(Brett, 4, 0, 3, 1, player));
  37. Schachbrettspeicher_freigeben(Brett);
  38. }
  39. void test_Koenigbewegung_ValidMove(void) {
  40. char** Brett = Schachbrett_erstellen();
  41. Spielstatus status;
  42. initalisiereSpielstatus(&status);
  43. Brett[4][4] = 'K';
  44. Player player = PLAYER_WHITE;
  45. bewegeKoenig(Brett, 4, 4, 5, 4, player,&status); // Bewege König von e5 zu e6
  46. TEST_ASSERT_EQUAL('K', Brett[4][5]); // Schauen ob der König an der neuen stelle ist
  47. TEST_ASSERT_EQUAL(' ', Brett[4][4]); // Schauen ob die alte stelle leer ist
  48. TEST_ASSERT_TRUE(status.BewegteSichWeißerKoenig);//Schauen ob sich passend der spielstatus ändert
  49. Schachbrettspeicher_freigeben(Brett);
  50. }
  51. void test_Koenigbewegung_InvalidMove(void) {
  52. char** Brett = Schachbrett_erstellen();
  53. Spielstatus status;
  54. initalisiereSpielstatus(&status);
  55. Brett[4][4] = 'K';
  56. Player player = PLAYER_WHITE;
  57. bewegeKoenig(Brett, 4, 4, 6, 6, player,&status); // Versucht illegalen Zug zu machen
  58. TEST_ASSERT_EQUAL('K', Brett[4][4]); // Schauen ob der König an der alten stelle ist
  59. TEST_ASSERT_EQUAL(' ', Brett[4][6]); // Schauen ob die Zielstelle leer ist
  60. TEST_ASSERT_FALSE(status.BewegteSichWeißerKoenig);//Schauen ob sich der spielstatus passend verhält
  61. Schachbrettspeicher_freigeben(Brett);
  62. }
  63. void test_Rochieren(void) {
  64. char** testBrett = Schachbrett_erstellen();
  65. Spielstatus status = {0};
  66. Player player = PLAYER_WHITE;
  67. testBrett[0][5] = ' ';
  68. testBrett[0][6] = ' ';
  69. rochiere(testBrett, player, true, &status); // Assuming 'true' indicates kingside castling
  70. // Assertions to verify castling was performed correctly
  71. TEST_ASSERT_EQUAL(' ', testBrett[0][4]); // King's original position is empty
  72. TEST_ASSERT_EQUAL(' ', testBrett[0][7]); // Rook's original position is empty
  73. TEST_ASSERT_EQUAL('K', testBrett[0][6]); // King is moved to the correct position
  74. TEST_ASSERT_EQUAL('R', testBrett[0][5]); // Rook is moved next to the king
  75. TEST_ASSERT_TRUE(status.BewegteSichWeißerKoenig);
  76. TEST_ASSERT_TRUE(status.WeißerTurmKoenigSeiteBewegt);
  77. // Clean up
  78. Schachbrettspeicher_freigeben(testBrett);
  79. }
  80. #endif // TEST