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.

197 lines
6.8 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 "Koenig.h"
  8. #include "Schachbrett.h"
  9. char** ErstelleTestBrett() {
  10. char** Brett = malloc(8 * sizeof(char*));
  11. for (int i = 0; i < 8; i++) {
  12. Brett[i] = malloc(8 * sizeof(char));
  13. for (int j = 0; j < 8; j++) {
  14. Brett[i][j] = ' '; //Erstelle komplett leeres Brett
  15. }
  16. }
  17. return Brett;
  18. }
  19. void freeTestBrett(char** Brett) {
  20. for (int i = 0; i < 8; i++) {
  21. free(Brett[i]);
  22. }
  23. free(Brett);
  24. }
  25. void test_GreiftBauerAn(void) {
  26. char** Brett = ErstelleTestBrett();
  27. // Plaziert weißen Bauer auf d5 (3,4) und testet 'angriff' auf c6 (2,5) und e6 (4,5)
  28. Brett[4][3] = 'P';
  29. Player player = PLAYER_BLACK;
  30. TEST_ASSERT_TRUE(GreiftBauerAn(Brett, 2, 5, player));
  31. TEST_ASSERT_TRUE(GreiftBauerAn(Brett, 4, 5, player));
  32. // Plaziert schwarzen Bauer auf e4 (4,3) und testet 'angriff' auf d3 (3,2) und f3 (5,2)
  33. Brett[3][4] = 'p';
  34. player = PLAYER_WHITE;
  35. TEST_ASSERT_TRUE(GreiftBauerAn(Brett, 3, 2, player));
  36. TEST_ASSERT_TRUE(GreiftBauerAn(Brett, 5, 2, player));
  37. // Test ein Feld ohne Bedrohung
  38. TEST_ASSERT_FALSE(GreiftBauerAn(Brett, 0, 0, player));
  39. freeTestBrett(Brett);
  40. }
  41. void test_GreiftTurmAn(void) {
  42. char** Brett = ErstelleTestBrett();
  43. // Plaziert weißen Turm auf d4 (3,3) und testet für Angriffe
  44. Brett[3][3] = 'R';
  45. Player player = PLAYER_BLACK;
  46. TEST_ASSERT_TRUE(GreiftTurmAn(Brett, 3, 0, player)); // Checkt vertikalen Angriff auf d1
  47. TEST_ASSERT_TRUE(GreiftTurmAn(Brett, 3, 7, player)); // Checkt vertikalen Angriff auf d8
  48. TEST_ASSERT_TRUE(GreiftTurmAn(Brett, 0, 3, player)); // Checkt horizontalen Angriff auf a4
  49. TEST_ASSERT_TRUE(GreiftTurmAn(Brett, 7, 3, player)); // Checkt horizontalen Angriff auf h4
  50. // Plaziert schwarzen Turm auf e5 (4,4) und Tauscht Spieler zu weiß
  51. Brett[3][3] = ' '; // Alten turm wegmachen
  52. Brett[4][4] = 'r';
  53. player = PLAYER_WHITE;
  54. TEST_ASSERT_TRUE(GreiftTurmAn(Brett, 4, 0, player)); // Checkt vertikalen Angriff auf e1
  55. TEST_ASSERT_TRUE(GreiftTurmAn(Brett, 4, 7, player)); // Checkt vertikalen Angriff auf e8
  56. TEST_ASSERT_TRUE(GreiftTurmAn(Brett, 0, 4, player)); // Checkt horizontalen Angriff auf a5
  57. TEST_ASSERT_TRUE(GreiftTurmAn(Brett, 7, 4, player)); // Checkt horizontalen Angriff auf h5
  58. // Checkt sicheres Feld
  59. TEST_ASSERT_FALSE(GreiftTurmAn(Brett, 0, 0, player));
  60. freeTestBrett(Brett);
  61. }
  62. void test_GreiftSpringerAn(void) {
  63. char** Brett = ErstelleTestBrett();
  64. // Plaziert ein schwarzen Springer (3,4) und testet 'Angriff' auf e3 (4,2)
  65. Brett[4][3] = 'n';
  66. Player player = PLAYER_WHITE;
  67. TEST_ASSERT_TRUE(GreiftSpringerAn(Brett, 4, 2, player));
  68. // Plaziert ein weißen Springer (5,2) und testet 'Angriff' auf e5 (4,4)
  69. Brett[2][5] = 'N';
  70. player = PLAYER_BLACK;
  71. TEST_ASSERT_TRUE(GreiftSpringerAn(Brett, 4, 4, player));
  72. // Testet Feld ohne Bedrohung
  73. TEST_ASSERT_FALSE(GreiftSpringerAn(Brett, 0, 0, player));
  74. freeTestBrett(Brett);
  75. }
  76. void test_GreiftLaeuferAn(void) {
  77. char** Brett = ErstelleTestBrett();
  78. // Plaziert einen weißen Läufer auf c4 (2,3) und testet Angriffe
  79. Brett[3][2] = 'B';
  80. Player player = PLAYER_BLACK;
  81. TEST_ASSERT_TRUE(GreiftLaeuferAn(Brett, 0, 1, player)); // Check unten Links
  82. TEST_ASSERT_TRUE(GreiftLaeuferAn(Brett, 5, 0, player)); // Check oben Links
  83. TEST_ASSERT_TRUE(GreiftLaeuferAn(Brett, 4, 5, player)); // Check unten Rechts
  84. TEST_ASSERT_TRUE(GreiftLaeuferAn(Brett, 3, 2, player)); // Check oben Rechts
  85. // Plaziert einen schwarzen Läufer auf e5 (4,4) und testet Angriffe vom anderen spieler
  86. Brett[2][3] = ' ';
  87. Brett[4][4] = 'b';
  88. player = PLAYER_WHITE;
  89. TEST_ASSERT_TRUE(GreiftLaeuferAn(Brett, 2, 2, player)); // Check unten Rechts
  90. TEST_ASSERT_TRUE(GreiftLaeuferAn(Brett, 2, 6, player)); // Check oben Links
  91. TEST_ASSERT_TRUE(GreiftLaeuferAn(Brett, 6, 6, player)); // Check unten Rechts
  92. TEST_ASSERT_TRUE(GreiftLaeuferAn(Brett, 6, 2, player)); // Check oben Rechts
  93. // Check sicheres Feld
  94. TEST_ASSERT_FALSE(GreiftLaeuferAn(Brett, 0, 1, player));
  95. freeTestBrett(Brett);
  96. }
  97. void test_GreiftDameAn(void) {
  98. char** Brett = ErstelleTestBrett();
  99. // Plaziert weiße dame auf d4
  100. Brett[3][3] = 'Q';
  101. Player player = PLAYER_BLACK;
  102. // Test Oben/Seitlich
  103. TEST_ASSERT_TRUE(GreiftDameAn(Brett, 3, 7, player)); // d8
  104. TEST_ASSERT_TRUE(GreiftDameAn(Brett, 0, 3, player)); // a4
  105. // Test Diagonal
  106. TEST_ASSERT_TRUE(GreiftDameAn(Brett, 1, 5, player)); // b6
  107. // Plaziert eigene Figur zum blocken
  108. Brett[4][3] = 'P';
  109. // Test blockiert von eigener Figur
  110. TEST_ASSERT_FALSE(GreiftDameAn(Brett, 3, 7, player)); // d8 blocked
  111. freeTestBrett(Brett);
  112. }
  113. void test_GreiftKoenigAn(void) {
  114. char** Brett = ErstelleTestBrett();
  115. // Plaziert schwarzen König auf e5 (4,4) und einen weißen auf d4 (3,3)
  116. Brett[4][4] = 'k';
  117. Brett[3][3] = 'K';
  118. print_Schachfeld(Brett);
  119. // Test ob der schwarze könig Felder angreifen kann
  120. TEST_ASSERT_TRUE(GreiftKoenigAn(Brett, 3, 4, PLAYER_WHITE)); // d5
  121. TEST_ASSERT_TRUE(GreiftKoenigAn(Brett, 5, 4, PLAYER_WHITE)); // f5
  122. TEST_ASSERT_TRUE(GreiftKoenigAn(Brett, 4, 3, PLAYER_WHITE)); // e4
  123. // Test ob der weiße könig Felder angreifen kann
  124. TEST_ASSERT_TRUE(GreiftKoenigAn(Brett, 2, 3, PLAYER_BLACK)); // c4
  125. TEST_ASSERT_TRUE(GreiftKoenigAn(Brett, 3, 2, PLAYER_BLACK)); // d3
  126. TEST_ASSERT_TRUE(GreiftKoenigAn(Brett, 4, 3, PLAYER_BLACK)); // e4
  127. // Tests für nicht angegriffene Felder
  128. TEST_ASSERT_FALSE(GreiftKoenigAn(Brett, 2, 4, PLAYER_WHITE));
  129. TEST_ASSERT_FALSE(GreiftKoenigAn(Brett, 6, 4, PLAYER_WHITE));
  130. TEST_ASSERT_FALSE(GreiftKoenigAn(Brett, 1, 3, PLAYER_BLACK));
  131. TEST_ASSERT_FALSE(GreiftKoenigAn(Brett, 5, 3, PLAYER_BLACK));
  132. TEST_ASSERT_FALSE(GreiftKoenigAn(Brett, 3, 1, PLAYER_BLACK));
  133. freeTestBrett(Brett);
  134. }
  135. void test_istFeldUnsicher(void) {
  136. char** Brett = ErstelleTestBrett();
  137. Brett[4][4] = 'p';
  138. Player player = PLAYER_WHITE;
  139. print_Schachfeld(Brett);
  140. TEST_ASSERT_TRUE(istFeldUnsicher(Brett, 5, 3, player));
  141. TEST_ASSERT_FALSE(istFeldUnsicher(Brett, 0, 0, player));
  142. Brett[4][4] = ' ';
  143. Brett[0][1] = 'N';
  144. player = PLAYER_BLACK;
  145. TEST_ASSERT_TRUE(istFeldUnsicher(Brett, 2, 2, player));
  146. TEST_ASSERT_FALSE(istFeldUnsicher(Brett, 0, 0, player));
  147. Brett[0][1] = ' ';
  148. Brett[7][0] = 'r';
  149. player = PLAYER_WHITE;
  150. TEST_ASSERT_TRUE(istFeldUnsicher(Brett, 0, 0, player));
  151. TEST_ASSERT_FALSE(istFeldUnsicher(Brett, 4, 4, player));
  152. Brett[7][0] = ' ';
  153. Brett[3][3] = 'Q';
  154. player = PLAYER_BLACK;
  155. TEST_ASSERT_TRUE(istFeldUnsicher(Brett, 7, 7, player));
  156. TEST_ASSERT_TRUE(istFeldUnsicher(Brett, 3, 0, player));
  157. freeTestBrett(Brett);
  158. }
  159. #endif // TEST