Doblespiel/test_stack.c
2025-12-15 18:07:32 +01:00

64 lines
1.7 KiB
C

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