From 87c19b6b25141e7367417c3e3828ecbcd9265d50 Mon Sep 17 00:00:00 2001 From: Kevin Bannach Date: Wed, 3 Dec 2025 16:35:34 +0100 Subject: [PATCH] Fertig --- bintree.c | 17 +++++++++++++++ bintree_tests.c | 1 + highscores.txt | 6 +---- makefile | 6 +++-- numbers.c | 24 +++++++++++--------- numbers.h | 2 +- test_numbers.c | 58 +++++++++++++++++++++++++++++++++++++++++++++++++ 7 files changed, 96 insertions(+), 18 deletions(-) create mode 100644 bintree_tests.c create mode 100644 test_numbers.c diff --git a/bintree.c b/bintree.c index 86a2598..f8a8321 100644 --- a/bintree.c +++ b/bintree.c @@ -73,7 +73,24 @@ void *nextTreeData(TreeNode *root) if (root != NULL) { clearStack(stack); stack = NULL; + TreeNode *current = root; + while (current != NULL) { + stack = push(stack,current); + current = current->left; + } } + if (stack == NULL) { + return NULL; + } + TreeNode *node = (TreeNode*) top(stack); + stack = pop(stack); + + TreeNode *right = node->right; + while (right != NULL) { + stack = push(stack,right); + right = right->left; + } + return node->data; } // Releases all memory resources (including data copies). diff --git a/bintree_tests.c b/bintree_tests.c new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/bintree_tests.c @@ -0,0 +1 @@ + diff --git a/highscores.txt b/highscores.txt index 3bb0566..8b13789 100644 --- a/highscores.txt +++ b/highscores.txt @@ -1,5 +1 @@ -player_name;18989 -test;9905 -player_name;4983 -highscores.txt;4979 -player1;3999 + diff --git a/makefile b/makefile index db88541..c77b9f5 100644 --- a/makefile +++ b/makefile @@ -37,12 +37,14 @@ $(program_obj_filesobj_files): %.o: %.c # -------------------------- stackTests: stack.o test_stack.c $(unity_strc) $(CC) $(CFLAGS) $(LDFLAGS) -I$(unityfolder) $^ -o runStackTests +numbersTests: numbers.o bintree.o stack.o test_numbers.c $(unity_strc) + $(CC) $(CFLAGS) $(LDFLAGS) -I$(unityfolder) $^ -o runNumbersTests # -------------------------- # Clean # -------------------------- clean: ifeq ($(OS),Windows_NT) - del /f *.o doble doble_initial runStackTests + del /f *.o doble doble_initial runStackTests runNumbersTests else - rm -f *.o doble doble_initial runStackTests + rm -f *.o doble doble_initial runStackTests runNumbersTests endif \ No newline at end of file diff --git a/numbers.c b/numbers.c index 22da7b5..56ac257 100644 --- a/numbers.c +++ b/numbers.c @@ -20,19 +20,23 @@ int compareFct(const void *a, const void *b) // creating random numbers. unsigned int *createNumbers(unsigned int len) { + if (len <= 2) + return NULL; TreeNode *root = NULL; srand(time(NULL)); - while (treeSize(root) < len-1) { - unsigned int zahl = rand()%(2*len)+1; - root = addToTree(root, &zahl,sizeof(zahl), compareFct, 0); + unsigned int *numbers = malloc(sizeof(unsigned int)*len); + int counter = 0; + while (treeSize(root) < len) { + unsigned int num = rand()%(2*len)+1; + int isDuplicate = 0; + root = addToTree(root, &num,sizeof(num), compareFct, &isDuplicate); + if (isDuplicate == 0) { + numbers[counter] = num; + counter++; + } } - unsigned int *numbers = malloc(sizeof(unsigned int)*(len-1)); - for (int i = 0; i +#include +void generateNumbersFail() +{ + unsigned int* result = createNumbers(2); + if(result == NULL) + printf("PASS "); + else + printf("FAIL "); + printf("generateNumbersFailsOnTooSmallLength\n"); +} +void generateNumbersSuccess() + { + unsigned int* result = createNumbers(10); + int duplicates = 0; + qsort(result, 10, sizeof(unsigned int), compareFct); + for(int i = 0; i < 9; i++) + { + if(result[i]==result[i+1]) + { + duplicates++; + } + } + if(duplicates == 1) + printf("PASS "); + else + printf("FAIL "); + printf("generateNumbersSuccessful\n"); + + } +void duplicateErrorTest(){ + unsigned int result = getDuplicate(NULL,10); + if(result == 0) + printf("PASS "); + else + printf("FAIL "); + printf("duplicateReturnsZeroOnErrors\n"); + } +void duplicateNormalTest() +{ + unsigned int numbers[10]={2,3,4,5,6,7,2,9,10}; + unsigned int result = getDuplicate(numbers,10); + if(result == 2) + printf("PASS "); + else + printf("FAIL "); + printf("duplicateReturnsCorrectDuplicate\n"); +} + +int main() + { + generateNumbersFail(); + generateNumbersSuccess(); + duplicateNormalTest(); + duplicateErrorTest(); + return 0; + }