generated from freudenreichan/info2Praktikum-DobleSpiel
68 lines
1.8 KiB
C
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;
|
|
} |