102 lines
2.0 KiB
C
102 lines
2.0 KiB
C
#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;
|
||
} |