DobleSpiel/test_stack.c

67 lines
1.7 KiB
C

#include <stdlib.h>
#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();
}