DobleSpiel/test_stack.c
2025-12-03 13:25:27 +01:00

68 lines
1.8 KiB
C

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