Compare commits

..

19 Commits

Author SHA1 Message Date
b7fa24f2e9 sucessfull testing 2025-12-13 16:48:04 +01:00
b69cfb0640 changed numbers.c so that it works with new nextTreeData() function 2025-12-13 16:35:36 +01:00
686fe8d844 fixed bug in nextTreeData() 2025-12-13 16:21:24 +01:00
c37ce6327c tested entire program 2025-12-13 15:26:51 +01:00
111b9c5532 removed wrong isduplicate assignment 2025-12-13 15:23:28 +01:00
8e76b27760 made tests 2025-12-13 15:17:38 +01:00
a575259cac removed not needed comments 2025-12-13 15:09:35 +01:00
Florian Wetzel
d391d60597 Anpassungen in numbers.c und in den entsprechenden Tests 2025-12-12 21:37:00 +01:00
07796c1390 changed addToTreeRec so it now sets inDuplicate to 0 if needed 2025-12-12 06:50:50 +01:00
Florian Wetzel
25da0d20df Troubleshooting wegen gefailter Tests. Aenderungen in bintree.c bei Duplikatsüberprüfung 2025-12-11 15:37:48 +01:00
6586a25fdb created all tests 2025-12-11 08:09:45 +01:00
6e233b6695 created all tests 2025-12-11 08:09:39 +01:00
a01aa986e6 corrected treeSizeRec cause previously end of non void function could be reached 2025-12-11 08:07:23 +01:00
Florian Wetzel
aae75ade4b Ergänzung makefile um test_numbers 2025-12-10 14:28:12 +01:00
Florian Wetzel
5d976c50c1 test_numbers.c vervollständigt 2025-12-10 14:19:37 +01:00
92fa60f9dc Merge branch 'branchjonas' 2025-12-10 12:26:54 +01:00
748fd0d087 corrected unwanted add 2025-12-09 11:15:01 +01:00
Florian Wetzel
a6c5060060 test_numbers.c Grundgerüst 2025-12-09 10:24:54 +01:00
Florian Wetzel
2689130b55 numbers.c bearbeitet 2025-12-09 09:57:13 +01:00
17 changed files with 263 additions and 12 deletions

BIN
.DS_Store vendored Normal file

Binary file not shown.

18
.vscode/c_cpp_properties.json vendored Normal file
View File

@ -0,0 +1,18 @@
{
"configurations": [
{
"name": "macos-clang-arm64",
"includePath": [
"${workspaceFolder}/**"
],
"compilerPath": "/usr/bin/clang",
"cStandard": "${default}",
"cppStandard": "${default}",
"intelliSenseMode": "macos-clang-arm64",
"compilerArgs": [
""
]
}
],
"version": 4
}

13
.vscode/launch.json vendored Normal file
View File

@ -0,0 +1,13 @@
{
"version": "0.2.0",
"configurations": [
{
"name": "C/C++ Runner: Debug Session",
"type": "lldb",
"request": "launch",
"args": [],
"cwd": "/Users/florianwetzel/I2_Praktikum/DobleSpiel",
"program": "/Users/florianwetzel/I2_Praktikum/DobleSpiel/build/Debug/outDebug"
}
]
}

59
.vscode/settings.json vendored Normal file
View File

@ -0,0 +1,59 @@
{
"C_Cpp_Runner.cCompilerPath": "clang",
"C_Cpp_Runner.cppCompilerPath": "clang++",
"C_Cpp_Runner.debuggerPath": "lldb",
"C_Cpp_Runner.cStandard": "",
"C_Cpp_Runner.cppStandard": "",
"C_Cpp_Runner.msvcBatchPath": "",
"C_Cpp_Runner.useMsvc": false,
"C_Cpp_Runner.warnings": [
"-Wall",
"-Wextra",
"-Wpedantic",
"-Wshadow",
"-Wformat=2",
"-Wcast-align",
"-Wconversion",
"-Wsign-conversion",
"-Wnull-dereference"
],
"C_Cpp_Runner.msvcWarnings": [
"/W4",
"/permissive-",
"/w14242",
"/w14287",
"/w14296",
"/w14311",
"/w14826",
"/w44062",
"/w44242",
"/w14905",
"/w14906",
"/w14263",
"/w44265",
"/w14928"
],
"C_Cpp_Runner.enableWarnings": true,
"C_Cpp_Runner.warningsAsError": false,
"C_Cpp_Runner.compilerArgs": [],
"C_Cpp_Runner.linkerArgs": [],
"C_Cpp_Runner.includePaths": [],
"C_Cpp_Runner.includeSearch": [
"*",
"**/*"
],
"C_Cpp_Runner.excludeSearch": [
"**/build",
"**/build/**",
"**/.*",
"**/.*/**",
"**/.vscode",
"**/.vscode/**"
],
"C_Cpp_Runner.useAddressSanitizer": false,
"C_Cpp_Runner.useUndefinedSanitizer": false,
"C_Cpp_Runner.useLeakSanitizer": false,
"C_Cpp_Runner.showCompilationTime": false,
"C_Cpp_Runner.useLinkTimeOptimization": false,
"C_Cpp_Runner.msvcSecureNoWarnings": false
}

View File

@ -51,7 +51,7 @@ TreeNode *addToTree(TreeNode *root, const void *data, size_t dataSize, CompareFc
TreeNode *addToTreeRec(TreeNode *currentNode, TreeNode *newNode, CompareFctType compareFct, int *isDuplicate, const int root)
{
if ((currentNode == NULL))
if (currentNode == NULL)
{
if ((isDuplicate == NULL) || root)
{
@ -68,15 +68,15 @@ TreeNode *addToTreeRec(TreeNode *currentNode, TreeNode *newNode, CompareFctType
return currentNode;
}
}
else if ((compareFct(currentNode->data, newNode->data) < 0))
else if (compareFct(currentNode->data, newNode->data) < 0)
{
currentNode->left = addToTreeRec(currentNode->left, newNode, compareFct, isDuplicate, 0);
}
else if ((compareFct(currentNode->data, newNode->data) > 0))
else if (compareFct(currentNode->data, newNode->data) > 0)
{
currentNode->right = addToTreeRec(currentNode->right, newNode, compareFct, isDuplicate, 0);
}
else if ((compareFct(currentNode->data, newNode->data) == 0))
else if (compareFct(currentNode->data, newNode->data) == 0)
{
if (isDuplicate == NULL)
{
@ -88,10 +88,7 @@ TreeNode *addToTreeRec(TreeNode *currentNode, TreeNode *newNode, CompareFctType
}
}
if (isDuplicate != NULL)
{
*isDuplicate = 0;
}
return currentNode;
}
@ -110,13 +107,13 @@ void *nextTreeData(TreeNode *root)
{
// Add tree to stack so that bigest entry is ontop
stackRoot = nextTreeDataRec(root, stackRoot);
pointerToReturn = stackRoot;
pointerToReturn = top(stackRoot);
}
else
{
// return current top entry and then pop that top entry
pointerToReturn = top(stackRoot);
stackRoot = pop(stackRoot);
pointerToReturn = top(stackRoot);
}

BIN
bintree.o

Binary file not shown.

BIN
doble.exe Normal file

Binary file not shown.

BIN
highscore.o Normal file

Binary file not shown.

BIN
main.o Normal file

Binary file not shown.

View File

@ -49,6 +49,11 @@ stack: stack.c
test_stack: stack.o test_stack.c $(unityfolder)/unity.c
$(CC) $(FLAGS) -o runstackTests test_stack.c stack.o $(unityfolder)/unity.c
test_numbers: numbers.o bintree.o stack.o test_numbers.c $(unityfolder)/unity.c
$(CC) $(FLAGS) -o run_numbersTests test_numbers.c numbers.o bintree.o stack.o $(unityfolder)/unity.c
# --------------------------
# Clean
# --------------------------

View File

@ -14,13 +14,109 @@
// Returns len random numbers between 1 and 2x len in random order which are all different, except for two entries.
// Returns NULL on errors. Use your implementation of the binary search tree to check for possible duplicates while
// creating random numbers.
static int compareUInt(const void *a, const void *b)
{
unsigned int A = *(unsigned int*)a;
unsigned int B = *(unsigned int*)b;
if (A < B) return -1;
if (A > B) return 1;
return 0;
}
static int existsInTree(TreeNode *root, unsigned int value)
{
if (!root) return 0;
unsigned int *data;
// Traversierung initialisieren
data = nextTreeData(root);
do
{
if (*data == value)
return 1;
} while ((data = nextTreeData(NULL)) != NULL);
return 0;
}
unsigned int *createNumbers(unsigned int len)
{
if (len < 2) return NULL;
srand((unsigned int)time(NULL));
unsigned int *numbers = malloc(sizeof(unsigned int) * len);
if (!numbers) return NULL;
TreeNode *root = NULL;
unsigned int value;
// Array mit eindeutigen Zufallszahlen füllen
for (unsigned int i = 0; i < len; i++)
{
do
{
value = (rand() % (2 * len)) + 1;
}
while (existsInTree(root, value));
// Baum wie highscore benutzen (immer NULL)
root = addToTree(
root,
&value,
sizeof(unsigned int),
compareUInt,
NULL
);
numbers[i] = value;
}
// genau eine Zufallszahl duplizieren
unsigned int idx1 = rand() % len;
unsigned int idx2;
do
{
idx2 = rand() % len;
}
while (idx2 == idx1);
numbers[idx2] = numbers[idx1];
clearTree(root);
return numbers;
}
// Returns only the only number in numbers which is present twice. Returns zero on errors.
unsigned int getDuplicate(const unsigned int numbers[], unsigned int len)
{
if (!numbers || len < 2) return 0;
unsigned int *copy = malloc(len * sizeof(unsigned int));
if (!copy) return 0;
// Array kopieren
memcpy(copy, numbers, len * sizeof(unsigned int));
// Sortieren
qsort(copy, len, sizeof(unsigned int), compareUInt);
// Doppelte Zahl finden
unsigned int duplicate = 0;
for (unsigned int i = 0; i < len - 1; i++)
{
if (copy[i] == copy[i + 1])
{
duplicate = copy[i];
break;
}
}
free(copy);
return duplicate;
}

BIN
numbers.o

Binary file not shown.

BIN
run_numbersTests.exe Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

63
test_numbers.c Normal file
View File

@ -0,0 +1,63 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include "numbers.h"
#include "unity/unity.h"
void setUp(void) {
// gehört zu unit-Grundaufbau
}
void tearDown(void) {
// gehört zu unit-Grundaufbau
}
// Testet, ob createNumbers ein gültiges Array erzeugt
// und genau ein Duplikat enthalten ist
void test_createNumbers_basic(void)
{
unsigned int len = 10;
unsigned int *numbers = createNumbers(len);
// Array muss existieren
TEST_ASSERT_NOT_NULL(numbers);
// Es muss genau EIN Duplikat geben
unsigned int duplicate = getDuplicate(numbers, len);
TEST_ASSERT_NOT_EQUAL(0, duplicate);
free(numbers);
}
/// Testet, ob getDuplicate die korrekte doppelte Zahl erkennt
void test_getDuplicate_correctValue(void)
{
unsigned int numbers[] = {1, 3, 5, 7, 3};
unsigned int len = 5;
unsigned int dup = getDuplicate(numbers, len);
TEST_ASSERT_EQUAL(3, dup);
}
// Testet Fehlerfälle von getDuplicate
static void test_getDuplicate_errors(void)
{
TEST_ASSERT_EQUAL_UINT(0, getDuplicate(NULL, 10));
TEST_ASSERT_EQUAL_UINT(0, getDuplicate((unsigned int*)1, 1)); // len < 2
}
// Testbereich
int main(void)
{
UNITY_BEGIN();
RUN_TEST(test_createNumbers_basic);
RUN_TEST(test_getDuplicate_correctValue);
RUN_TEST(test_getDuplicate_errors);
return UNITY_END();
}

BIN
timer.o Normal file

Binary file not shown.