2025-12-09 14:41:22 +01:00

102 lines
2.0 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include "stack.h"
/*
* Einfache Unit-Tests für den Stack:
* - push/pop: LIFO-Verhalten
* - top: richtiges Element
* - Verhalten bei leerem Stack
*/
static void test_push_pop_lifo(void)
{
printf("test_push_pop_lifo...\n");
StackNode *stack = NULL;
int a = 1;
int b = 2;
int c = 3;
stack = push(stack, &a);
stack = push(stack, &b);
stack = push(stack, &c);
// LIFO: zuerst c
assert(top(stack) == &c);
stack = pop(stack);
// dann b
assert(top(stack) == &b);
stack = pop(stack);
// dann a
assert(top(stack) == &a);
stack = pop(stack);
// jetzt leer
assert(stack == NULL);
assert(top(stack) == NULL);
printf("...OK\n");
}
static void test_empty_stack_operations(void)
{
printf("test_empty_stack_operations...\n");
StackNode *stack = NULL;
// pop auf leerem Stack sollte einfach NULL liefern
stack = pop(stack);
assert(stack == NULL);
// top auf leerem Stack sollte NULL liefern
assert(top(stack) == NULL);
// clearStack auf leerem Stack darf nicht crashen
clearStack(stack);
printf("...OK\n");
}
static void test_clearStack(void)
{
printf("test_clearStack...\n");
StackNode *stack = NULL;
int values[10];
int i;
// Wir legen 10 Elemente auf den Stack
for (i = 0; i < 10; ++i)
{
values[i] = i;
stack = push(stack, &values[i]);
}
// Stack leeren clearStack muss alle StackNodes freigeben
clearStack(stack);
stack = NULL; // Pointer selbst auf NULL setzen
// Auf leerem Stack dürfen die Operationen nicht crashen
assert(top(stack) == NULL);
stack = pop(stack);
assert(stack == NULL);
printf("...OK\n");
}
int main(void)
{
printf("Running stack unit tests...\n\n");
test_push_pop_lifo();
test_empty_stack_operations();
test_clearStack();
printf("\nAll stack tests passed.\n");
return 0;
}