From 41e01c3af386b0d289d06b835a4c495041dd869a Mon Sep 17 00:00:00 2001 From: "dietrichsi98865@th-nuernberg.de" Date: Tue, 2 Dec 2025 11:28:20 +0100 Subject: [PATCH] stack.c und h geschrieben, unittests geschrieben und bestanden. --- makefile | 10 +++++++-- stack.c | 27 +++++++++++++++++++++---- stack.h | 5 +++++ stacktest.c | 58 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 94 insertions(+), 6 deletions(-) create mode 100644 stacktest.c diff --git a/makefile b/makefile index 1f15f75..674e6ea 100644 --- a/makefile +++ b/makefile @@ -35,8 +35,14 @@ $(program_obj_filesobj_files): %.o: %.c # -------------------------- # Unit Tests # -------------------------- -unitTests: - echo "needs to be implemented" +unitTests: stacktest + + +test_stack: stacktest.o stack.o + $(CC) $(FLAGS) $^ -o stacktest + +test_stack.o: stacktest.c + $(CC) -c $(FLAGS) $< -o $@ # -------------------------- # Clean diff --git a/stack.c b/stack.c index e3a90d4..8c1e163 100644 --- a/stack.c +++ b/stack.c @@ -10,24 +10,43 @@ // Pushes data as pointer onto the stack. StackNode *push(StackNode *stack, void *data) { - + StackNode *newNode = (StackNode *)malloc(sizeof(StackNode)); + if (newNode == NULL) { + return NULL; + } + newNode ->data = data; + newNode ->next = stack; + return newNode; } // Deletes the top element of the stack (latest added element) and releases its memory. (Pointer to data has to be // freed by caller.) StackNode *pop(StackNode *stack) { - + if(stack == NULL) { + return NULL; + } + StackNode *next = stack->next; + free(stack); + return next; } // Returns the data of the top element. void *top(StackNode *stack) { - +if(stack == NULL) { + return NULL; + } + return stack->data; } // Clears stack and releases all memory. void clearStack(StackNode *stack) { - + StackNode *temp; + while(stack != NULL) { + temp = stack; + stack = stack->next; + free(temp); + } } \ No newline at end of file diff --git a/stack.h b/stack.h index f7d542d..a283441 100644 --- a/stack.h +++ b/stack.h @@ -8,7 +8,12 @@ The latest element is taken from the stack. */ #include //TODO: passenden Datentyp als struct anlegen +typedef struct{ +void *data; +struct StackNode *next; + +}StackNode; // Pushes data as pointer onto the stack. StackNode *push(StackNode *stack, void *data); diff --git a/stacktest.c b/stacktest.c new file mode 100644 index 0000000..41125a6 --- /dev/null +++ b/stacktest.c @@ -0,0 +1,58 @@ +#include +#include "stack.h" +#include + + +//Funktion, um nachzuprüfen, ob Test bestanden wurde +void check(char *msg, int expected, int actual){ + printf("%s: ", msg); + printf("Erwartet: %d, Tatsächlich: %d\n", expected, actual); + if(expected == actual){ + printf("Test bestanden\n"); + }else{ + printf("Test nicht bestanden\n"); + } + +} +//Schnappt sich oberstes Element +int getTop(StackNode *stack){ + void *data = top(stack); + return(int)data; + +} + +//Tests der einzelnen Stackfunktionen +int main(){ + StackNode *stack = NULL; + //Test push + + stack = push(stack, (void*)10); + check("Nach Push 10", 10, getTop(stack)); + + stack = push(stack, (void*)20); + check("Nach Push 20", 20, getTop(stack)); + + //pop testen + stack = pop(stack); + check("Nach Pop", 10, getTop(stack)); + + //clearStack testen + clearStack(stack); + stack = NULL; + check("Nach ClearStack", 0, getTop(stack)); + + + + + + + + + + + + + + + return 0; +} \ No newline at end of file