diff --git a/test_stack.c b/test_stack.c index 0243351..3b47817 100644 --- a/test_stack.c +++ b/test_stack.c @@ -1,61 +1,64 @@ #include +#include #include "stack.h" //Testfunkionen zu push, pull, top & clearStack schreiben -StackNode *push(StackNode *stack, void *data) -{ - if (!data) - { - return stack; //Nichts pushen - } - //if(stack && data){ - StackNode *t = (StackNode *)malloc(sizeof(StackNode)); - if(!t) - { - return NULL; //Speicherfehler - } - t->next = stack; - t->data = data; - return t; //Gibt den ersten StackNode des Stacks zurueck - //} - return NULL; +void test(char *name, int condition) { + if (condition) { + printf("[OK] %s\n", name); + } else { + printf("[FAIL] %s\n", name); + } } -// Deletes the top element of the stack (latest added element) and releases its memory. (Pointer to data has to be -// freed by caller.) -StackNode *pop(StackNode *stack) -{ - if(stack) - { - StackNode *t = stack->next; //Naechstes Element im Stack wird erstes Element - free(stack); - return t; - } - else - { - return NULL; - } -} +int main() { -// Returns the data of the top element. -void *top(StackNode *stack) -{ - if(stack) - { - return stack->data; - } - return NULL; -} + StackNode *stack = NULL; -// Clears stack and releases all memory. -void clearStack(StackNode *stack) -{ - while(stack) - { - StackNode *tmp = stack; //merkt sich den momentanen obersten Knoten - stack = stack->next; //setzt den obersten Knoten auf den Zweiten im Stack - free(tmp->data); - free(tmp); - } -} + // Werte dynamisch anlegen + int *val1 = malloc(sizeof(int)); + *val1 = 5; + stack = push(stack, val1); + test("push(5) legt 5 oben auf den Stack", *(int*)stack->data == 5); + + int *val2 = malloc(sizeof(int)); + *val2 = 6; + stack = push(stack, val2); + test("push(6) legt 6 oben auf den Stack", *(int*)stack->data == 6); + + int *val3 = malloc(sizeof(int)); + *val3 = 24; + stack = push(stack, val3); + test("push(24) legt 24 oben auf den Stack", *(int*)stack->data == 24); + + // Test top() + int t = *(int*)top(stack); + test("top() liefert 24", t == 24); + + // Test pop() + StackNode *tmp; + + tmp = stack; + stack = pop(stack); + free(tmp->data); // Daten freigeben + free(tmp); // Knoten freigeben + test("pop() entfernt 24, 6 ist jetzt oben", *(int*)stack->data == 6); + + tmp = stack; + stack = pop(stack); + free(tmp->data); + free(tmp); + test("pop() entfernt 6, 5 ist jetzt oben", *(int*)stack->data == 5); + + tmp = stack; + stack = pop(stack); + free(tmp->data); + free(tmp); + test("pop() entfernt 5, Stack ist jetzt leer", stack == NULL); + + // Am Ende Stack leeren (falls noch Elemente übrig) + clearStack(stack); + + return 0; +} \ No newline at end of file