#include #include #include #include "stack.h" void test_stack_operations() { printf("Teste Stack Operationen...\n"); // Initialisierung: Der Stack ist einfach ein Pointer auf StackNode, der mit NULL startet StackNode *s = NULL; // isEmpty Test: entspricht einfach s == NULL assert(s == NULL); int a = 10; int b = 20; // PUSH: Gibt den neuen Kopf des Stacks zurück s = push(s, &a); assert(s != NULL); assert(*(int*)top(s) == 10); // Prüfen, ob 10 oben liegt s = push(s, &b); assert(*(int*)top(s) == 20); // Prüfen, ob 20 oben liegt // POP: Gibt den neuen Kopf zurück (das oberste Element wird entfernt) // Achtung: pop() liefert bei dieser Implementierung NICHT die Daten zurück, // sondern nur den neuen Stack-Pointer. Wenn man die Daten will, muss man vorher top() nutzen. // Prüfen vor dem Pop assert(*(int*)top(s) == 20); s = pop(s); // 20 wird vom Stack genommen (Node wird freed) // Jetzt sollte 10 oben liegen assert(*(int*)top(s) == 10); s = pop(s); // 10 wird vom Stack genommen // Stack sollte wieder leer sein assert(s == NULL); printf("Stack Operationen erfolgreich.\n"); } void test_clear_stack() { printf("Teste Clear Stack...\n"); StackNode *s = NULL; int data = 42; for(int i = 0; i < 5; i++) { s = push(s, &data); } clearStack(s); // Hinweis: clearStack gibt den Speicher frei, kann aber den lokalen Pointer 's' // hier in der Funktion nicht auf NULL setzen (da C "Call by Value" nutzt). // Wir setzen ihn manuell auf NULL oder benutzen ihn einfach nicht weiter. s = NULL; printf("Clear Stack ausgeführt.\n"); } int main() { test_stack_operations(); test_clear_stack(); return 0; }