This commit is contained in:
Kevin Bannach 2025-12-03 16:35:34 +01:00
parent 6ccb495beb
commit 87c19b6b25
7 changed files with 96 additions and 18 deletions

View File

@ -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).

1
bintree_tests.c Normal file
View File

@ -0,0 +1 @@

View File

@ -1,5 +1 @@
player_name;18989
test;9905
player_name;4983
highscores.txt;4979
player1;3999

View File

@ -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

View File

@ -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<len - 1; i++)
{
}
unsigned int duplicate = rand()%(len-1);
unsigned int duplicateIdx = rand()%(len-1);
unsigned int duplicate = rand()%(len);
unsigned int duplicateIdx = rand()%(len);
numbers[duplicate] = numbers[duplicateIdx];
return numbers;
}

View File

@ -8,5 +8,5 @@ unsigned int *createNumbers(unsigned int len);
// 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);
int compareFct(const void *a, const void *b);
#endif

58
test_numbers.c Normal file
View File

@ -0,0 +1,58 @@
#include "numbers.h"
#include <stdio.h>
#include <stdlib.h>
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;
}