From 1ead9595ceac451f05ba934b5171764bf4a73357 Mon Sep 17 00:00:00 2001 From: Hofmann Jonas Date: Mon, 8 Dec 2025 08:03:16 +0100 Subject: [PATCH] wrote test_addToTreeExpandsTreeCorrectly() --- bintreeTests.c | 69 ++++++++++++++++++++++++++++++++++++++++++----- bintreeTests.exe | Bin 55961 -> 0 bytes 2 files changed, 63 insertions(+), 6 deletions(-) delete mode 100644 bintreeTests.exe diff --git a/bintreeTests.c b/bintreeTests.c index 380f633..2c2ba87 100644 --- a/bintreeTests.c +++ b/bintreeTests.c @@ -5,19 +5,72 @@ #define MAX_TEST_NAME_LEN 10 -typedef struct +static int compareIntEntries(const void *arg1, const void *arg2) { - char name[MAX_TEST_NAME_LEN]; - int score; -} HighscoreEntry; + const int *entry1 = (const int *)arg1; + const int *entry2 = (const int *)arg2; + + int result = *entry2 - *entry1; + + + return result; +} // test if addToTree expands tree correctly // by going down the path where the given pice of data is expected // and checking if the pice of data is found there -void test_addToTreeExpandsTreeCorrectlyNoDoubles(void) +void test_addToTreeExpandsTreeCorrectly(void) { - + TreeNode *testRoot = NULL; + int *testIsDouble = 0; + int score1 = 12; + int score2 = 6; + int score3 = 18; + int score4 = 3; + int score5 = 9; + int score6 = 15; + int score7 = 21; + + + testRoot = addToTree(testRoot, &score1, sizeof(int), compareIntEntries, NULL); + testRoot = addToTree(testRoot, &score2, sizeof(int), compareIntEntries, NULL); + testRoot = addToTree(testRoot, &score3, sizeof(int), compareIntEntries, NULL); + testRoot = addToTree(testRoot, &score4, sizeof(int), compareIntEntries, NULL); + testRoot = addToTree(testRoot, &score5, sizeof(int), compareIntEntries, NULL); + testRoot = addToTree(testRoot, &score6, sizeof(int), compareIntEntries, NULL); + testRoot = addToTree(testRoot, &score7, sizeof(int), compareIntEntries, NULL); + + // Checking the Tree without Doubles + TEST_ASSERT_NOT_NULL(testRoot); + TEST_ASSERT_EQUAL_UINT16(score1, testRoot); + TEST_ASSERT_NOT_NULL(testRoot->left); + TEST_ASSERT_EQUAL_UINT16(score2, testRoot->left); + TEST_ASSERT_NOT_NULL(testRoot->right); + TEST_ASSERT_EQUAL_UINT16(score3, testRoot->right); + TEST_ASSERT_NOT_NULL(testRoot->left->left); + TEST_ASSERT_EQUAL_UINT16(score4, testRoot->left->left); + TEST_ASSERT_NOT_NULL(testRoot->left->right); + TEST_ASSERT_EQUAL_UINT16(score5, testRoot->left->right); + TEST_ASSERT_NOT_NULL(testRoot->right->left); + TEST_ASSERT_EQUAL_UINT16(score6, testRoot->right->left); + TEST_ASSERT_NOT_NULL(testRoot->right->right); + TEST_ASSERT_EQUAL_UINT16(score7, testRoot->right->right); + + // Adding Double + testRoot = addToTree(testRoot, &score4, sizeof(int), compareIntEntries, NULL); + + TEST_ASSERT_NOT_NULL(testRoot->left->left->left); + TEST_ASSERT_EQUAL_UINT16(score4, testRoot->left->left->left); + + // Trying to add Double while Doubles not Permitted + testRoot = addToTree(testRoot, &score7, sizeof(int), compareIntEntries, testIsDouble); + + TEST_ASSERT_NULL(testRoot->right->right->left); + TEST_ASSERT_EQUAL_UINT16(1, testIsDouble); + + + clearTree(testRoot); } @@ -27,6 +80,10 @@ void test_addToTreeExpandsTreeCorrectlyNoDoubles(void) // test if clear Tree frees all node.name and node memory AND sets them to zero // aditionally tests if the memoryspaces have been cleared +void test_clearTreeworksLikeExpected(void) +{ + +} // tests if treeSize returns correct amount of nodes in Tree diff --git a/bintreeTests.exe b/bintreeTests.exe deleted file mode 100644 index 921fb7cc794aa14f1c885af43edeba8b57a882d6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 55961 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