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.

84 lines
3.2 KiB

  1. #ifdef TEST
  2. #include "unity.h"
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <stdbool.h>
  6. #include "Springer.h"
  7. #include "Schachbrett.h"
  8. #include "Spieler.h"
  9. void test_istzugerlaubt_Springer_LegalMove(void) {
  10. char **Brett = Schachbrett_erstellen();
  11. // Viele Test um legale Züge zu prüfen
  12. TEST_ASSERT_TRUE(istzugerlaubt_Springer(Brett, 1, 0, 0, 2, PLAYER_WHITE));
  13. TEST_ASSERT_TRUE(istzugerlaubt_Springer(Brett, 1, 0, 2, 2, PLAYER_WHITE));
  14. TEST_ASSERT_TRUE(istzugerlaubt_Springer(Brett, 4, 3, 3, 5, PLAYER_WHITE));
  15. TEST_ASSERT_TRUE(istzugerlaubt_Springer(Brett, 4, 3, 2, 2, PLAYER_WHITE));
  16. TEST_ASSERT_TRUE(istzugerlaubt_Springer(Brett, 4, 3, 6, 2, PLAYER_BLACK));
  17. TEST_ASSERT_TRUE(istzugerlaubt_Springer(Brett, 6, 7, 5, 5, PLAYER_BLACK));
  18. TEST_ASSERT_TRUE(istzugerlaubt_Springer(Brett, 6, 7, 7, 5, PLAYER_BLACK));
  19. TEST_ASSERT_TRUE(istzugerlaubt_Springer(Brett, 4, 3, 5, 5, PLAYER_BLACK));
  20. Schachbrettspeicher_freigeben(Brett);
  21. }
  22. void test_istzugerlaubt_Springer_IllegalMove(void) {
  23. char **Brett = Schachbrett_erstellen();
  24. // Landet auf eigener Figur
  25. TEST_ASSERT_FALSE(istzugerlaubt_Springer(Brett, 6, 7, 4, 6, PLAYER_BLACK));
  26. TEST_ASSERT_FALSE(istzugerlaubt_Springer(Brett, 1, 7, 3, 6, PLAYER_BLACK));
  27. TEST_ASSERT_FALSE(istzugerlaubt_Springer(Brett, 6, 0, 4, 1, PLAYER_WHITE));
  28. TEST_ASSERT_FALSE(istzugerlaubt_Springer(Brett, 1, 0, 3, 1, PLAYER_WHITE));
  29. // versucht sich geradeaus zu bewegen
  30. TEST_ASSERT_FALSE(istzugerlaubt_Springer(Brett, 1, 0, 1, 3, PLAYER_WHITE));
  31. // Versucht Diagonal zu bewegen
  32. TEST_ASSERT_FALSE(istzugerlaubt_Springer(Brett, 7, 0, 6, 1, PLAYER_WHITE));
  33. // Vom Brett springen
  34. TEST_ASSERT_FALSE(istzugerlaubt_Springer(Brett, 7, 0, 8, 2, PLAYER_WHITE));
  35. Schachbrettspeicher_freigeben(Brett);
  36. }
  37. void test_bewegeSpringer(void) {
  38. char **Brett = Schachbrett_erstellen();
  39. bool Ergebnis;
  40. // Scenario 1: Legaler Zug, weißer Springer von b1 zu c3
  41. Ergebnis = bewegeSpringer(Brett, 1, 0, 2, 2, PLAYER_WHITE);
  42. TEST_ASSERT_TRUE(Ergebnis);
  43. TEST_ASSERT_EQUAL_CHAR('N', Brett[2][2]);
  44. TEST_ASSERT_EQUAL_CHAR(' ', Brett[0][1]);
  45. Schachbrettspeicher_freigeben(Brett);
  46. Brett = Schachbrett_erstellen();
  47. // Scenario 2: Illegaler Zug , vom Brett
  48. Ergebnis = bewegeSpringer(Brett, 7, 6, 8, 8, PLAYER_WHITE);
  49. TEST_ASSERT_FALSE(Ergebnis);
  50. // Scenario 3: Legaler Zug, schwarzer Springer von g8 zu f6
  51. Ergebnis = bewegeSpringer(Brett, 6, 7, 5, 5, PLAYER_BLACK);
  52. TEST_ASSERT_TRUE(Ergebnis);
  53. TEST_ASSERT_EQUAL_CHAR('n', Brett[5][5]);
  54. TEST_ASSERT_EQUAL_CHAR(' ', Brett[7][6]);
  55. Schachbrettspeicher_freigeben(Brett);
  56. Brett = Schachbrett_erstellen();
  57. // Scenario 4: Illegaler Zug, schwarzer Springer bewegt sich auf andere schwarze Figur
  58. Brett[5][5] = 'n'; // ein anderer Springer als Hindernis
  59. Ergebnis = bewegeSpringer(Brett, 6, 7, 5, 5, PLAYER_BLACK);
  60. TEST_ASSERT_FALSE(Ergebnis);
  61. // Scenario 5: Legaler Zug zum einnehmen feindlicher Figur
  62. Brett[5][5] = 'P'; // Weißer Bauer auf F6
  63. Ergebnis = bewegeSpringer(Brett, 6, 7, 5, 5, PLAYER_BLACK);
  64. TEST_ASSERT_TRUE(Ergebnis);
  65. TEST_ASSERT_EQUAL_CHAR('n', Brett[5][5]);
  66. Schachbrettspeicher_freigeben(Brett);
  67. }
  68. #endif // TEST