From 94517bf236695a078bd1b936c1832ad069f10c45 Mon Sep 17 00:00:00 2001 From: Simon May Date: Tue, 18 Nov 2025 15:32:49 +0100 Subject: [PATCH 1/4] gitignore --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..496d9ac --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +doble_initial.exe +highscores.txt -- 2.47.2 From a027c070d2b8bcfb7fc136dc6bf3175593c689cc Mon Sep 17 00:00:00 2001 From: Simon May Date: Tue, 18 Nov 2025 17:13:44 +0100 Subject: [PATCH 2/4] =?UTF-8?q?funktionen=20erg=C3=A4nzt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 2 ++ makefile | 4 ++-- stack.c | 66 ++++++++++++++++++++++++++++++++++++++++++++++++---- stack.h | 4 ++++ test_stack.c | 28 ++++++++++++++++++++++ unittest.h | 10 ++++++++ 6 files changed, 108 insertions(+), 6 deletions(-) create mode 100644 test_stack.c create mode 100644 unittest.h diff --git a/.gitignore b/.gitignore index 496d9ac..e813ee4 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,4 @@ doble_initial.exe highscores.txt +runStackTest.exe +stack.o diff --git a/makefile b/makefile index 1f15f75..5076d63 100644 --- a/makefile +++ b/makefile @@ -35,8 +35,8 @@ $(program_obj_filesobj_files): %.o: %.c # -------------------------- # Unit Tests # -------------------------- -unitTests: - echo "needs to be implemented" +unitTests: stack.o test_stack.c $(unityfolder)/unity.c + $(CC) $(FLAGS) -I$(unityfolder) -o runStackTest test_stack.c stack.o $(unityfolder)/unity.c # -------------------------- # Clean diff --git a/stack.c b/stack.c index e3a90d4..d7844ee 100644 --- a/stack.c +++ b/stack.c @@ -1,33 +1,91 @@ #include #include "stack.h" -//TODO: grundlegende Stackfunktionen implementieren: +// TODO: grundlegende Stackfunktionen implementieren: /* * `push`: legt ein Element oben auf den Stack, - * `pop`: entfernt das oberste Element, - * `top`: liefert das oberste Element zurück, - * `clearStack`: gibt den gesamten Speicher frei. */ + * `pop`: entfernt das oberste Element, + * `top`: liefert das oberste Element zurück, + * `clearStack`: gibt den gesamten Speicher frei. */ // Pushes data as pointer onto the stack. StackNode *push(StackNode *stack, void *data) { + StackNode *tempNode, *newNode; + newNode = malloc(sizeof(StackNode)); + newNode->value = 3; + newNode->next = NULL; + + if (stack == NULL) + { + stack = newNode; + return stack; + } + + tempNode = stack; + while (tempNode->next != NULL) + { + tempNode = tempNode->next; + } + tempNode->next = newNode; + + return stack; } // 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) { + StackNode *tempNode; + if (stack == NULL) + { + return stack; + } + + tempNode = stack; + while (tempNode->next->next != NULL) + { + tempNode = tempNode->next; + } + free(tempNode->next); + tempNode->next = NULL; + + return stack; } // Returns the data of the top element. void *top(StackNode *stack) { + StackNode *tempNode; + if (stack == NULL) + { + return NULL; + } + + tempNode = stack; + while (tempNode->next != NULL) + { + tempNode = tempNode->next; + } + + return &tempNode->value; } // Clears stack and releases all memory. void clearStack(StackNode *stack) { + StackNode *tempNode; + if (stack == NULL) + { + return; + } + + tempNode = stack; + while (tempNode != NULL) + { + tempNode = pop(tempNode); + } } \ No newline at end of file diff --git a/stack.h b/stack.h index f7d542d..7019034 100644 --- a/stack.h +++ b/stack.h @@ -8,6 +8,10 @@ The latest element is taken from the stack. */ #include //TODO: passenden Datentyp als struct anlegen +typedef struct Node { + int value; + struct Node* next; +} StackNode; // Pushes data as pointer onto the stack. StackNode *push(StackNode *stack, void *data); diff --git a/test_stack.c b/test_stack.c new file mode 100644 index 0000000..f793e43 --- /dev/null +++ b/test_stack.c @@ -0,0 +1,28 @@ +#include +#include +#include "stack.h" +#include "unity.h" + +void test_pop(void) +{ + TEST_ASSERT_NULL(pop(NULL)); +} + +void setUp(void) { + // Falls notwendig, kann hier Vorbereitungsarbeit gemacht werden +} + +void tearDown(void) { + // Hier kann Bereinigungsarbeit nach jedem Test durchgeführt werden +} + +int main() +{ + UNITY_BEGIN(); + + printf("============================\nStack tests\n============================\n"); + + RUN_TEST(test_pop); + + return UNITY_END(); +} \ No newline at end of file diff --git a/unittest.h b/unittest.h new file mode 100644 index 0000000..fc327ca --- /dev/null +++ b/unittest.h @@ -0,0 +1,10 @@ +#ifndef UNITTTESTS_H +#define UNITTTESTS_H + +#include + +typedef int (*UnitTestType)(void); + +#define RUN_UNIT_TEST(fct) printf("%80s: %d\n", #fct, fct()) + +#endif -- 2.47.2 From 82c72eaf8106b6140130fa93e8c544cd6ec92172 Mon Sep 17 00:00:00 2001 From: Simon Date: Mon, 24 Nov 2025 16:05:31 +0100 Subject: [PATCH 3/4] first tests --- stack.c | 3 ++- test_stack.c | 23 +++++++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/stack.c b/stack.c index d7844ee..d28f240 100644 --- a/stack.c +++ b/stack.c @@ -13,7 +13,8 @@ StackNode *push(StackNode *stack, void *data) StackNode *tempNode, *newNode; newNode = malloc(sizeof(StackNode)); - newNode->value = 3; + newNode->value = (intptr_t) data; + //newNode->value = 3; newNode->next = NULL; if (stack == NULL) diff --git a/test_stack.c b/test_stack.c index f793e43..ff47eb7 100644 --- a/test_stack.c +++ b/test_stack.c @@ -3,11 +3,31 @@ #include "stack.h" #include "unity.h" +void test_push(void) +{ + + int value = 3; + TEST_ASSERT_NOT_NULL(push(NULL, &value)); + TEST_ASSERT_EQUAL_INT(value, (intptr_t) push(NULL, &value)->value); +} + void test_pop(void) { TEST_ASSERT_NULL(pop(NULL)); } +void test_top(void) +{ + + TEST_ASSERT_NULL(top(NULL)); +} + +void test_clear(void) +{ + + // TEST_ASSERT_NULL(clearStack(NULL)); +} + void setUp(void) { // Falls notwendig, kann hier Vorbereitungsarbeit gemacht werden } @@ -22,7 +42,10 @@ int main() printf("============================\nStack tests\n============================\n"); + RUN_TEST(test_push); RUN_TEST(test_pop); + RUN_TEST(test_top); + RUN_TEST(test_clear); return UNITY_END(); } \ No newline at end of file -- 2.47.2 From 4cfe6d9c50c0a009fd023e3f3e5e80b5a764c397 Mon Sep 17 00:00:00 2001 From: Simon Date: Mon, 24 Nov 2025 17:53:43 +0100 Subject: [PATCH 4/4] added test_push and fixed stack cast --- stack.c | 3 +-- test_stack.c | 22 +++++++++++++++++++--- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/stack.c b/stack.c index d28f240..2315722 100644 --- a/stack.c +++ b/stack.c @@ -13,8 +13,7 @@ StackNode *push(StackNode *stack, void *data) StackNode *tempNode, *newNode; newNode = malloc(sizeof(StackNode)); - newNode->value = (intptr_t) data; - //newNode->value = 3; + newNode->value = *(int *)data; newNode->next = NULL; if (stack == NULL) diff --git a/test_stack.c b/test_stack.c index ff47eb7..c9b71cf 100644 --- a/test_stack.c +++ b/test_stack.c @@ -5,15 +5,31 @@ void test_push(void) { + StackNode *testNode; + int data = 1; - int value = 3; - TEST_ASSERT_NOT_NULL(push(NULL, &value)); - TEST_ASSERT_EQUAL_INT(value, (intptr_t) push(NULL, &value)->value); + // Test für leeren Stack + testNode = push(NULL, &data); + TEST_ASSERT_NOT_NULL(&testNode); + TEST_ASSERT_NULL(testNode->next); + TEST_ASSERT_EQUAL_INT(1, testNode->value); + + data = 2; + + // Test für nicht leeren Stack + testNode = push(testNode, &data); + TEST_ASSERT_NOT_NULL(&testNode); + TEST_ASSERT_NOT_NULL(testNode->next); + TEST_ASSERT_NULL(testNode->next->next); + TEST_ASSERT_EQUAL_INT(1, testNode->value); + TEST_ASSERT_EQUAL_INT(2, testNode->next->value); } void test_pop(void) { + TEST_ASSERT_NULL(pop(NULL)); + } void test_top(void) -- 2.47.2