diff --git a/I2_Dobble/bintreeTest.c b/I2_Dobble/bintreeTest.c index 6642f9f..588060b 100644 --- a/I2_Dobble/bintreeTest.c +++ b/I2_Dobble/bintreeTest.c @@ -1,13 +1,119 @@ -#include "bintree.h" #include "unity.h" -#include "unity_internals.h" +#include "bintree.h" +#include + +static int compare(const void *a, const void *b) +{ + return (*(int *)a > *(int *)b) - (*(int *)a < *(int *)b); +} void setUp(void) { } void tearDown(void) { } -int main() +void test_addToTree_single_element(void) +{ + TreeNode *root = NULL; + int value = 10; + int dup = -1; + + root = addToTree(root, &value, sizeof(int), compare, &dup); + + TEST_ASSERT_NOT_NULL(root); + TEST_ASSERT_EQUAL_INT(10, *(int*)root->data); + TEST_ASSERT_EQUAL_INT(0, dup); // neuer Eintrag + + clearTree(root); +} + +void test_addToTree_multiple_elements_and_size(void) +{ + TreeNode *root = NULL; + int values[] = {5, 3, 7, 1, 4}; + int dup = -1; + + for (int i = 0; i < 5; i++) + root = addToTree(root, &values[i], sizeof(int), compare, &dup); + + TEST_ASSERT_EQUAL_UINT(5, treeSize(root)); + + clearTree(root); +} + +void test_addToTree_duplicate_detection(void) +{ + TreeNode *root = NULL; + int val = 42; + int dup; + + root = addToTree(root, &val, sizeof(int), compare, &dup); + TEST_ASSERT_EQUAL(0, dup); + + addToTree(root, &val, sizeof(int), compare, &dup); + TEST_ASSERT_EQUAL(1, dup); + + clearTree(root); +} + +void test_treeSize_empty_tree_detection(void) +{ + TEST_ASSERT_EQUAL_UINT(0, treeSize(NULL)); +} + +void test_nextTreeData_returns_inorder(void) +{ + TreeNode *root = NULL; + int values[] = {5, 3, 7, 2, 4, 6, 8}; + + // Einfügen + for (int i = 0; i < 7; i++) + root = addToTree(root, &values[i], sizeof(int), compare, NULL); + + /* Erwartete Reihenfolge (inorder): 2,3,4,5,6,7,8 */ + int expected[] = {2,3,4,5,6,7,8}; + + int idx = 0; + void *p = nextTreeData(root); // Iterator starten + + while (p != NULL) + { + TEST_ASSERT_EQUAL_INT(expected[idx], *(int*)p); + idx++; + p = nextTreeData(NULL); // Fortsetzen mit NULL + } + + TEST_ASSERT_EQUAL(7, idx); //alle Einträge geprüft + + clearTree(root); +} + +void test_treeSize_returns_correct_size() +{ + TreeNode *root = NULL; + int values[] = {8, 3, 10, 1, 6, 14}; + + // ersten Baum aufbauen + for (int i = 0; i < 6; i++) + root = addToTree(root, &values[i], sizeof(int), compare, NULL); + + TEST_ASSERT_EQUAL_UINT(6, treeSize(root)); + + // Baum löschen + clearTree(root); + root = NULL; + + TEST_ASSERT_EQUAL_UINT(0, treeSize(root)); +} + +int main(void) { UNITY_BEGIN(); + RUN_TEST(test_addToTree_single_element); + RUN_TEST(test_addToTree_multiple_elements_and_size); + RUN_TEST(test_addToTree_duplicate_detection); + RUN_TEST(test_treeSize_empty_tree_detection); + RUN_TEST(test_nextTreeData_returns_inorder); + RUN_TEST(test_treeSize_returns_correct_size); + return UNITY_END(); -} \ No newline at end of file +}