From da3bd18637962666b2e978eb4781cc397955bdc9 Mon Sep 17 00:00:00 2001 From: Thomas Rauh Desktop Date: Sat, 22 Nov 2025 19:08:57 +0100 Subject: [PATCH] bintree add-function + Test --- Start_Windows/bintree.c | 40 ++++++++++++++++- Start_Windows/bintree.o | Bin 0 -> 1503 bytes Start_Windows/bintreeTests.c | 72 ++++++++++++++++++++++++++++++ Start_Windows/makefile | 4 ++ Start_Windows/runBintreeTests.exe | Bin 0 -> 78827 bytes 5 files changed, 115 insertions(+), 1 deletion(-) create mode 100644 Start_Windows/bintree.o create mode 100644 Start_Windows/bintreeTests.c create mode 100644 Start_Windows/runBintreeTests.exe diff --git a/Start_Windows/bintree.c b/Start_Windows/bintree.c index 5cf82a9..c2493c9 100644 --- a/Start_Windows/bintree.c +++ b/Start_Windows/bintree.c @@ -12,7 +12,45 @@ // if isDuplicate is NULL, otherwise ignores duplicates and sets isDuplicate to 1 (or to 0 if a new entry is added). TreeNode *addToTree(TreeNode *root, const void *data, size_t dataSize, CompareFctType compareFct, int *isDuplicate) { + if (!data){ + return NULL; + } + if (!root){ + TreeNode *new = malloc(sizeof(TreeNode)); + if (!new){ + return NULL; + } + new->data = malloc(dataSize); + if (!new->data){ + free(new); + return NULL; + } + + memcpy(new->data, data, dataSize); + new->left = new->right = NULL; + + if (isDuplicate){ + *isDuplicate = 0; + } + return new; + } + + int cmp = compareFct(data, root->data); + + if (cmp < 0) { + root->left = addToTree(root->left, data, dataSize, compareFct, isDuplicate); + } else if (cmp > 0) { + root->right = addToTree(root->right, data, dataSize, compareFct, isDuplicate); + } else { + if (isDuplicate == NULL) { + root->left = addToTree(root->left, data, dataSize, compareFct, NULL); + } else { + *isDuplicate = 1; + } + } + + return root; } // Iterates over the tree given by root. Follows the usage of strtok. If tree is NULL, the next entry of the last tree given is returned in ordering direction. @@ -20,7 +58,7 @@ TreeNode *addToTree(TreeNode *root, const void *data, size_t dataSize, CompareFc // push the top node and push all its left nodes. void *nextTreeData(TreeNode *root) { - + } // Releases all memory resources (including data copies). diff --git a/Start_Windows/bintree.o b/Start_Windows/bintree.o new file mode 100644 index 0000000000000000000000000000000000000000..4a63186e9037c24d082446a9b6eb7be933d7ef79 GIT binary patch literal 1503 zcmZ`(L2DC16n@*?>Qa<0s3k%Vdk7Mt*``{H)XUm7c7y~1ws;WHG}&q-ZDO*KG}0o3 z3d3Id6ZGV%_j+rsP!A$K_zMKVQV%(LD2?yUY&M&cKA4&Bz4y&~GjDcZ{{00YiD&>L z0%>5mPTdt)PKOGBhNG@Z9jRbK=DC&6y4et~AG9H}Yb{l){d{5DJL1)Q14fbXb0EwD zupwbve=0g!<0*po;+!;pTOEUn$czJDK8yEw@8Vp6O5;#;`qN#+ig4tR%J#%eoLD+I-87h zH*I$}8OIOA*=l#Xsqhs3?byLw)THC4`JR8%*WJDPv40^f3th-y&9C;;eeqcMP+RB0 ztt~}Y2la}kD)``vHZVx&>`H03DYC!rAg1qz)_ojT5!3nu$0*|Y+1Y6`R=+#-Y-%!I zE>#Qlc-46suQ+cKW9Ce)P;||uH8WjUoqrrBHD5K$mC`FG=iW3YZdA~hWvQ_0RvgF5Nuxgx`>O&b3}CJL$#pbRtp!IAZs1InmKF;8sL*hz z-qI58KonF}=pCp6T?uy|Y7#0D&q%oQ(2w7j6Y4sYK~< +#include +#include +#include +#include "unity.h" +#include "bintree.h" + +int compareInt(const void *arg1, const void *arg2) { + int a = *(const int *)arg1; + int b = *(const int *)arg2; + return a - b; +} +int compareString(const void *arg1, const void *arg2) { + const char *str1 = (const char *)arg1; + const char *str2 = (const char *)arg2; + return strcmp(str1, str2); +} + + + + +static void testAddToTreeNewRoot(){ + TreeNode *root=NULL; + int a = 1; + root = addToTree(root,&a, sizeof(int),compareInt,0); + + TEST_ASSERT_EQUAL_INT(a,*(int*)(root->data)); +} + +static void testAddToTreeToExistingRoot(){ + TreeNode *root=NULL; + int a = 1; + int b = 3; + int c = 4; + int d = 2; + root = addToTree(root,&a, sizeof(int),compareInt,0); + root = addToTree(root,&b, sizeof(int),compareInt,0); + root = addToTree(root,&c, sizeof(int),compareInt,0); + root = addToTree(root,&d, sizeof(int),compareInt,0); + + TEST_ASSERT_EQUAL_INT(a,*(int*)(root->data)); + TEST_ASSERT_EQUAL_INT(b,*(int*)(root->right->data)); + TEST_ASSERT_EQUAL_INT(c,*(int*)(root->right->right->data)); + TEST_ASSERT_EQUAL_INT(d,*(int*)(root->right->left->data)); +} +static void testAddToTreeNoData(){ + TreeNode *root=NULL; + root = addToTree(root,NULL, sizeof(int),compareInt,0); + + TEST_ASSERT_NULL(root); +} + + +void setUp(void){ + +} +void tearDown(void){ + +} + + + +int main(){ + UNITY_BEGIN(); + printf("\n============================\nBintree tests\n============================\n"); + + RUN_TEST(testAddToTreeNewRoot); + RUN_TEST(testAddToTreeToExistingRoot); + RUN_TEST(testAddToTreeNoData); + + return UNITY_END(); +} \ No newline at end of file diff --git a/Start_Windows/makefile b/Start_Windows/makefile index b3d0844..0965468 100644 --- a/Start_Windows/makefile +++ b/Start_Windows/makefile @@ -29,6 +29,10 @@ unitTests: stackTests: stack.o stackTests.c $(unityfolder)/unity.c $(CC) $(CFLAGS) -I$(unityfolder) -o runStackTests stackTests.c stack.o $(unityfolder)/unity.c +bintreeTests: stack.o bintree.o bintreeTests.c $(unityfolder)/unity.c + $(CC) $(CFLAGS) -I$(unityfolder) -o runBintreeTests bintreeTests.c stack.o bintree.o $(unityfolder)/unity.c + + # -------------------------- # Clean # -------------------------- diff --git a/Start_Windows/runBintreeTests.exe b/Start_Windows/runBintreeTests.exe new file mode 100644 index 0000000000000000000000000000000000000000..bda5ff1a46a0bc746aade17d82939d5b93da48bf GIT binary patch literal 78827 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