#include #include #include "stack.h" // Hilfsfunktion: assert ohne Abbruch void check(int condition, const char *msg) { if (condition) printf("[OK] %s\n", msg); else printf("[FAIL] %s\n", msg); } int main(void) { StackNode *stack = NULL; printf("=== TEST: Stack Grundfunktionen ===\n"); // Test 1: Stack sollte anfangs leer sein check(top(stack) == NULL, "Top auf leerem Stack liefert NULL."); // Test 2: Werte pushen int a = 10, b = 20, c = 30; stack = push(stack, &a); check(top(stack) == &a, "Push 10: Top liefert 10."); stack = push(stack, &b); check(top(stack) == &b, "Push 20: Top liefert 20."); stack = push(stack, &c); check(top(stack) == &c, "Push 30: Top liefert 30."); // Test 3: Pop sollte zuletzt eingefügtes Element entfernen stack = pop(stack); check(top(stack) == &b, "Pop: Top liefert danach 20."); stack = pop(stack); check(top(stack) == &a, "Pop: Top liefert danach 10."); // Test 4: Letztes Element entfernen stack = pop(stack); check(top(stack) == NULL, "Pop: Stack wieder leer."); // Test 5: Pop auf leerem Stack -> kein Crash, Stack bleibt NULL stack = pop(stack); check(stack == NULL, "Pop auf leerem Stack gibt weiterhin NULL."); // Test 6: ClearStack auf leerem Stack clearStack(stack); check(1, "ClearStack auf leerem Stack erfolgreich."); // Test 7: ClearStack mit gefülltem Stack stack = push(stack, &a); stack = push(stack, &b); stack = push(stack, &c); clearStack(stack); stack = NULL; check(1, "ClearStack auf gefülltem Stack erfolgreich."); printf("\nAlle Stack-Tests abgeschlossen.\n"); return 0; }