#include #include "unity.h" #include "stack.h" // Globale Variablen für den Test (optional, aber praktisch hier) StackNode *stack = NULL; int *a; int *b; void setUp(void) { stack = NULL; // Wir reservieren Speicher für jedes Test-Szenario frisch a = malloc(sizeof(int)); b = malloc(sizeof(int)); *a = 10; *b = 20; } void tearDown(void) { // Aufräumen nach jedem Test if (stack != NULL) { clearStack(stack); stack = NULL; } // Falls der Stack die Daten NICHT freest, müssen wir es tun: // Hinweis: Wenn clearStack die Daten freest, darfst du hier a und b nicht free-en! // Ich gehe davon aus, der Stack freest die Daten NICHT. free(a); free(b); } void test_push_and_top(void) { stack = push(stack, a); TEST_ASSERT_NOT_NULL(stack); TEST_ASSERT_EQUAL_INT(10, *(int*)top(stack)); stack = push(stack, b); TEST_ASSERT_EQUAL_INT(20, *(int*)top(stack)); } void test_pop_logic(void) { // Vorbereitung stack = push(stack, a); stack = push(stack, b); // Test Pop 1 stack = pop(stack); TEST_ASSERT_NOT_NULL(stack); TEST_ASSERT_EQUAL_INT(10, *(int*)top(stack)); // Test Pop 2 (Stack sollte leer werden) stack = pop(stack); TEST_ASSERT_NULL(stack); } void test_clearStack(void) { stack = push(stack, a); stack = push(stack, b); clearStack(stack); stack = NULL; // Muss im Code manuell gemacht werden, wenn clearStack void ist TEST_ASSERT_NULL(stack); } int main(void) { UNITY_BEGIN(); RUN_TEST(test_push_and_top); RUN_TEST(test_pop_logic); RUN_TEST(test_clearStack); return UNITY_END(); }