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.

242 lines
6.6 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_SchachDurchBauer(void) {
  26. char** Brett = ErstelleTestBrett();
  27. //Weißer König wird von schwarzen Bauer angegriffen
  28. Brett[4][4] = 'K';
  29. Brett[5][5] = 'p';
  30. TEST_ASSERT_TRUE(istKoenigImSchach(Brett, PLAYER_WHITE));
  31. freeTestBrett(Brett);
  32. Brett = ErstelleTestBrett();
  33. // Schwarzer König wird von weißen Bauer angegriffen
  34. Brett[3][3] = 'k';
  35. Brett[2][2] = 'P';
  36. TEST_ASSERT_TRUE(istKoenigImSchach(Brett, PLAYER_BLACK));
  37. freeTestBrett(Brett);
  38. Brett = ErstelleTestBrett();
  39. // Schwarzer König wird von weißen Bauer angegriffen(andere seite)
  40. Brett[3][3] = 'k';
  41. Brett[2][4] = 'P';
  42. TEST_ASSERT_TRUE(istKoenigImSchach(Brett, PLAYER_BLACK));
  43. freeTestBrett(Brett);
  44. Brett = ErstelleTestBrett();
  45. // Weißer König nicht in Gefahr
  46. Brett[4][4] = 'K';
  47. Brett[3][4] = 'P';
  48. TEST_ASSERT_FALSE(istKoenigImSchach(Brett, PLAYER_WHITE));
  49. freeTestBrett(Brett);
  50. Brett = ErstelleTestBrett();
  51. // Schwarzer König nicht in Gefahr
  52. Brett[3][3] = 'k';
  53. Brett[1][3] = 'P';
  54. TEST_ASSERT_FALSE(istKoenigImSchach(Brett, PLAYER_BLACK));
  55. freeTestBrett(Brett);
  56. }
  57. void test_SchachDurchTurm(void) {
  58. char** Brett = ErstelleTestBrett();
  59. // Weißer König wird von schwarzen Turm bedroht (Horizontal)
  60. Brett[4][4] = 'K';
  61. Brett[4][7] = 'r';
  62. TEST_ASSERT_TRUE(istKoenigImSchach(Brett, PLAYER_WHITE));
  63. freeTestBrett(Brett);
  64. Brett = ErstelleTestBrett();
  65. // Weißer König wird von schwarzen Turm bedroht (Vertikal)
  66. Brett[4][4] = 'K';
  67. Brett[0][4] = 'r';
  68. TEST_ASSERT_TRUE(istKoenigImSchach(Brett, PLAYER_WHITE));
  69. freeTestBrett(Brett);
  70. Brett = ErstelleTestBrett();
  71. // Schwarzer König wird von weißen Turm bedroht (Horizontal)
  72. Brett[3][3] = 'k';
  73. Brett[3][0] = 'R';
  74. TEST_ASSERT_TRUE(istKoenigImSchach(Brett, PLAYER_BLACK));
  75. freeTestBrett(Brett);
  76. Brett = ErstelleTestBrett();
  77. // Schwarzer König wird nicht bedroht weil er von einer Figur beschützt wird
  78. Brett[3][3] = 'k';
  79. Brett[3][1] = 'R';
  80. Brett[3][2] = 'p';
  81. TEST_ASSERT_FALSE(istKoenigImSchach(Brett, PLAYER_BLACK));
  82. freeTestBrett(Brett);
  83. Brett = ErstelleTestBrett();
  84. // Weißer König nicht in gefahr
  85. Brett[4][4] = 'K';
  86. Brett[5][5] = 'r';
  87. TEST_ASSERT_FALSE(istKoenigImSchach(Brett, PLAYER_WHITE));
  88. freeTestBrett(Brett);
  89. }
  90. void test_SchachDurchSpringer(void) {
  91. char** Brett = ErstelleTestBrett();
  92. // Weißer König bedroht durch schwarzen Springer
  93. Brett[4][4] = 'K';
  94. Brett[3][6] = 'n';
  95. TEST_ASSERT_TRUE(istKoenigImSchach(Brett, PLAYER_WHITE));
  96. freeTestBrett(Brett);
  97. Brett = ErstelleTestBrett();
  98. // Schwarzer König bedroht durch weißen Springer
  99. Brett[3][3] = 'k';
  100. Brett[5][4] = 'N';
  101. TEST_ASSERT_TRUE(istKoenigImSchach(Brett, PLAYER_BLACK));
  102. freeTestBrett(Brett);
  103. Brett = ErstelleTestBrett();
  104. // Weißer könig nicht bedroht
  105. Brett[4][4] = 'K';
  106. Brett[7][7] = 'n';
  107. TEST_ASSERT_FALSE(istKoenigImSchach(Brett, PLAYER_WHITE));
  108. freeTestBrett(Brett);
  109. Brett = ErstelleTestBrett();
  110. // Schwarzer könig durch mehrere Springer bedroht
  111. Brett[0][0] = 'k';
  112. Brett[1][2] = 'N';
  113. Brett[2][1] = 'N';
  114. TEST_ASSERT_TRUE(istKoenigImSchach(Brett, PLAYER_BLACK));
  115. freeTestBrett(Brett);
  116. Brett = ErstelleTestBrett();
  117. // Schwarzer König wird trotz Mauer angegriffen
  118. Brett[0][0] = 'k';
  119. Brett[0][1] = 'p';
  120. Brett[1][0] = 'p';
  121. Brett[1][1] = 'p';
  122. Brett[1][2] = 'N';
  123. TEST_ASSERT_TRUE(istKoenigImSchach(Brett, PLAYER_BLACK));
  124. freeTestBrett(Brett);
  125. }
  126. void test_SchachDurchLaeufer(void) {
  127. char** Brett = ErstelleTestBrett();
  128. // Weißer König wird von schwarzen Läufer bedroht
  129. Brett[4][4] = 'K';
  130. Brett[2][2] = 'b';
  131. TEST_ASSERT_TRUE(istKoenigImSchach(Brett, PLAYER_WHITE));
  132. freeTestBrett(Brett);
  133. Brett = ErstelleTestBrett();
  134. // Schwarzer König wird von weißen Läufer bedroht
  135. Brett[3][3] = 'k';
  136. Brett[6][0] = 'B';
  137. TEST_ASSERT_TRUE(istKoenigImSchach(Brett, PLAYER_BLACK));
  138. freeTestBrett(Brett);
  139. Brett = ErstelleTestBrett();
  140. // Weißer König wird nicht bedroht
  141. Brett[4][4] = 'K';
  142. Brett[6][7] = 'b';
  143. TEST_ASSERT_FALSE(istKoenigImSchach(Brett, PLAYER_WHITE));
  144. freeTestBrett(Brett);
  145. Brett = ErstelleTestBrett();
  146. // Schwarzer König wird von mehreren Läufer bedroht
  147. Brett[4][4] = 'k';
  148. Brett[6][6] = 'B';
  149. Brett[0][0] = 'B';
  150. TEST_ASSERT_TRUE(istKoenigImSchach(Brett, PLAYER_BLACK));
  151. freeTestBrett(Brett);
  152. Brett = ErstelleTestBrett();
  153. // Schwarzer könig nicht in gefahr weil Läufer blockiert wird
  154. Brett[0][0] = 'k';
  155. Brett[2][2] = 'P';
  156. Brett[4][4] = 'B';
  157. TEST_ASSERT_FALSE(istKoenigImSchach(Brett, PLAYER_BLACK));
  158. freeTestBrett(Brett);
  159. }
  160. void test_SchachDurchDame(void) {
  161. char** Brett = ErstelleTestBrett();
  162. // Weißer könig wird von schwarzer Dame bedroht (Horizontal)
  163. Brett[4][4] = 'K';
  164. Brett[4][7] = 'q';
  165. TEST_ASSERT_TRUE(istKoenigImSchach(Brett, PLAYER_WHITE));
  166. freeTestBrett(Brett);
  167. Brett = ErstelleTestBrett();
  168. // Schwarzer könig wird von weißer Dame bedroht (Vertikal)
  169. Brett[3][3] = 'k';
  170. Brett[0][3] = 'Q';
  171. TEST_ASSERT_TRUE(istKoenigImSchach(Brett, PLAYER_BLACK));
  172. freeTestBrett(Brett);
  173. Brett = ErstelleTestBrett();
  174. // Weißer könig wird nicht von schwarzer Dame bedroht aufgrund blockierender Figur
  175. Brett[4][4] = 'K';
  176. Brett[4][2] = 'p';
  177. Brett[4][0] = 'q';
  178. TEST_ASSERT_FALSE(istKoenigImSchach(Brett, PLAYER_WHITE));
  179. freeTestBrett(Brett);
  180. Brett = ErstelleTestBrett();
  181. // Schwarzer könig wird von weißer Dame bedroht (Diagonal)
  182. Brett[0][0] = 'k';
  183. Brett[7][7] = 'Q';
  184. TEST_ASSERT_TRUE(istKoenigImSchach(Brett, PLAYER_BLACK));
  185. freeTestBrett(Brett);
  186. Brett = ErstelleTestBrett();
  187. // Schwarzer könig wird nicht von weißer Dame bedroht aufgrund blockierender Figur
  188. Brett[7][7] = 'k';
  189. Brett[5][5] = 'P';
  190. Brett[3][3] = 'Q';
  191. TEST_ASSERT_FALSE(istKoenigImSchach(Brett, PLAYER_BLACK));
  192. freeTestBrett(Brett);
  193. }
  194. #endif // TEST