diff --git a/stack.c b/stack.c index 5bfb882..2315722 100644 --- a/stack.c +++ b/stack.c @@ -1,91 +1,91 @@ -#include -#include "stack.h" - -// 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. */ - -// 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); - } +#include +#include "stack.h" + +// 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. */ + +// Pushes data as pointer onto the stack. +StackNode *push(StackNode *stack, void *data) +{ + StackNode *tempNode, *newNode; + + newNode = malloc(sizeof(StackNode)); + newNode->value = *(int *)data; + 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/test_stack.c b/test_stack.c index 2acb342..2e59a8f 100644 --- a/test_stack.c +++ b/test_stack.c @@ -3,6 +3,28 @@ #include "stack.h" #include "unity.h" +void test_push(void) +{ + StackNode *testNode; + int data = 1; + + // 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); +} + StackNode* setup(int value, StackNode* next) { StackNode* node = malloc(sizeof(StackNode)); // allocate memory on heap if (node == NULL) { @@ -81,6 +103,7 @@ int main() printf("============================\nStack tests\n============================\n"); + RUN_TEST(test_push); RUN_TEST(test_pop); RUN_TEST(test_top); RUN_TEST(test_clear);