diff --git a/test_stack.c b/test_stack.c index d9e1e50..fd57253 100644 --- a/test_stack.c +++ b/test_stack.c @@ -1,15 +1,15 @@ -#include -#include -#include +#include +#include // für malloc und free +#include // für assert() - Programm stoppt bei Fehlern #include "stack.h" // Hilfsfunktion: beendet Programm bei malloc-Fehler int *make_int(int value) { - int *p = malloc(sizeof(int)); - assert(p != NULL); - *p = value; - return p; + int *p = malloc(sizeof(int)); //Reserviert Speicherplatz für eine Zahl und gibt dessen Adresse zurück + assert(p != NULL); // Programm stoppt wenn Speicher zu knapp + *p = value; // Speichert Wert in neuen Speicherplatz + return p; // Gibt Zeiger zurück } // Test: Push und Top. @@ -17,20 +17,20 @@ void test_push_and_top() { printf("Running test_push_and_top...\n"); - StackNode *stack = NULL; + StackNode *stack = NULL; // Stack beginnt leer - int *a = make_int(10); + int *a = make_int(10); // zwei Zeiger int *b = make_int(20); - stack = push(stack, a); - stack = push(stack, b); + stack = push(stack, a); // Erst 10 auf Stack gelegt + stack = push(stack, b); // Dann 20 (oben) - int *topValue = (int *)top(stack); - assert(topValue != NULL); - assert(*topValue == 20); + int *topValue = (int *)top(stack); // Datentyp in int umgewandelt + assert(topValue != NULL); // Stack darf nicht leer sein + assert(*topValue == 20); // Kopf muss 20 sein - clearStack(stack); - free(a); + clearStack(stack); // Entfernt alle Knoten + free(a); // Löscht die Daten free(b); printf(" test_push_and_top passed\n"); @@ -41,35 +41,35 @@ void test_push_pop_sequence() { printf("Running test_push_pop_sequence...\n"); - StackNode *stack = NULL; + StackNode *stack = NULL; // Stack muss leer sein - int *a = make_int(1); + int *a = make_int(1); // Definieren der Testwerte int *b = make_int(2); int *c = make_int(3); - stack = push(stack, a); + stack = push(stack, a); // Werte auf den Stack legen (C oben) stack = push(stack, b); stack = push(stack, c); // Pop 3 - int *v = (int *)top(stack); + int *v = (int *)top(stack); //Top muss 3 sein assert(*v == 3); - stack = pop(stack); + stack = pop(stack); // 3 entfernen // Pop 2 - v = (int *)top(stack); + v = (int *)top(stack); //analog zur 3 assert(*v == 2); stack = pop(stack); // Pop 1 - v = (int *)top(stack); + v = (int *)top(stack); assert(*v == 1); stack = pop(stack); // Stack sollte leer sein assert(stack == NULL); - free(a); + free(a); // Freigeben des Speichers free(b); free(c); @@ -81,16 +81,16 @@ void test_clearStack() { printf("Running test_clearStack...\n"); - StackNode *stack = NULL; + StackNode *stack = NULL; // Stack muss leer sein - for (int i = 0; i < 5; i++) + for (int i = 0; i < 5; i++) // 5 Elemente auf dem Stack (O bis 4) stack = push(stack, make_int(i)); - clearStack(stack); + clearStack(stack); //Knoten freigeben // danach ist Stack nur als "gelöscht" markiert, // aber Pointer ist nicht automatisch NULL → das prüft man so: - stack = NULL; + stack = NULL; //Stackzeiger manuell auf NULL setzen printf(" test_clearStack passed\n"); } @@ -99,7 +99,7 @@ int main() { printf("=== Running Stack Unit Tests ===\n"); - test_push_and_top(); + test_push_and_top(); // Ausführen aller Tests test_push_pop_sequence(); test_clearStack();