#include #include "unity/unity.h" #include "stack.h" void setUp(void) {} void tearDown(void) {} static StackNode *stack = NULL; // Für gemeinsame Benutzung in Tests void test_push_and_top_should_return_last_integer(void) { int *v1 = malloc(sizeof(int)); int *v2 = malloc(sizeof(int)); int *v3 = malloc(sizeof(int)); *v1 = 12; *v2 = 34; *v3 = 56; // Push Werte auf Stack stack = push(stack, v1); TEST_ASSERT_NOT_NULL(stack); TEST_ASSERT_EQUAL_INT(12, *(int *)top(stack)); stack = push(stack, v2); TEST_ASSERT_EQUAL_INT(34, *(int *)top(stack)); stack = push(stack, v3); TEST_ASSERT_EQUAL_INT(56, *(int *)top(stack)); // Ressourcen werden in anderem Test wieder entfernt! } void test_pop_should_remove_and_free_integers(void) { // Gibt die gleichen Werte wie im vorherigen Push-Test frei int *val; val = top(stack); TEST_ASSERT_EQUAL_INT(56, *val); free(val); stack = pop(stack); val = top(stack); TEST_ASSERT_EQUAL_INT(34, *val); free(val); stack = pop(stack); val = top(stack); TEST_ASSERT_EQUAL_INT(12, *val); free(val); stack = pop(stack); TEST_ASSERT_NULL(stack); } void test_stack_empty_behavior(void) { // Nach allen pops/clear-Operationen sollte Stack NULL sein TEST_ASSERT_NULL(top(stack)); StackNode *tmp = pop(stack); TEST_ASSERT_NULL(tmp); stack = clearStack(stack); // Sollte NULL bleiben TEST_ASSERT_NULL(stack); } int main(void) { UNITY_BEGIN(); RUN_TEST(test_push_and_top_should_return_last_integer); RUN_TEST(test_pop_should_remove_and_free_integers); RUN_TEST(test_stack_empty_behavior); return UNITY_END(); }