Fertig
This commit is contained in:
parent
87c19b6b25
commit
f8cf3685a5
@ -12,7 +12,7 @@ static StackNode *stack = NULL;
|
|||||||
|
|
||||||
TreeNode* createNode(const void *data, size_t dataSize) {
|
TreeNode* createNode(const void *data, size_t dataSize) {
|
||||||
TreeNode* newNode = (TreeNode*)malloc(sizeof(TreeNode));
|
TreeNode* newNode = (TreeNode*)malloc(sizeof(TreeNode));
|
||||||
if (newNode == NULL) {
|
if (!newNode) {
|
||||||
// Fehlerbehandlung: Speicher konnte nicht alloziiert werden
|
// Fehlerbehandlung: Speicher konnte nicht alloziiert werden
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
@ -82,7 +82,7 @@ void *nextTreeData(TreeNode *root)
|
|||||||
if (stack == NULL) {
|
if (stack == NULL) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
TreeNode *node = (TreeNode*) top(stack);
|
const TreeNode *node = top(stack);
|
||||||
stack = pop(stack);
|
stack = pop(stack);
|
||||||
|
|
||||||
TreeNode *right = node->right;
|
TreeNode *right = node->right;
|
||||||
|
|||||||
163
bintree_tests.c
163
bintree_tests.c
@ -1 +1,164 @@
|
|||||||
|
#include "bintree.h"
|
||||||
|
#include "numbers.h"
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
|
||||||
|
void createTreeTest()
|
||||||
|
{
|
||||||
|
TreeNode* root = NULL;
|
||||||
|
int data1 = 1;
|
||||||
|
int data2 = 2;
|
||||||
|
int data3 = 3;
|
||||||
|
int data4 = 4;
|
||||||
|
int data5 = 5;
|
||||||
|
int dataDup = 4;
|
||||||
|
int isDuplicate = 0;
|
||||||
|
int passedTests = 0;
|
||||||
|
|
||||||
|
root = addToTree(root,&data3, sizeof(int),compareFct,&isDuplicate);
|
||||||
|
if(*(int*) root->data == data3 && isDuplicate == 0)
|
||||||
|
{ passedTests++;
|
||||||
|
printf("PASS1\n");}
|
||||||
|
|
||||||
|
root = addToTree(root,&data4, sizeof(int),compareFct,&isDuplicate);
|
||||||
|
root = addToTree(root,&data5, sizeof(int),compareFct,&isDuplicate);
|
||||||
|
root = addToTree(root,&data2, sizeof(int),compareFct,&isDuplicate);
|
||||||
|
root = addToTree(root,&data1, sizeof(int),compareFct,&isDuplicate);
|
||||||
|
if(*(int*) root->data == data3 && *(int*) root->left->left->data == data1 && *(int*)root->left->data == data2 && *(int*)root->right->right->data == data5 && *(int*)root->right->data == data4 && isDuplicate == 0)
|
||||||
|
{passedTests++;
|
||||||
|
printf("PASS2\n");
|
||||||
|
}
|
||||||
|
root = addToTree(root,&dataDup, sizeof(int),compareFct,&isDuplicate);
|
||||||
|
if(isDuplicate == 1)
|
||||||
|
{passedTests++;
|
||||||
|
printf("PASS3\n");}
|
||||||
|
|
||||||
|
if(passedTests == 3)
|
||||||
|
printf("PASS");
|
||||||
|
else
|
||||||
|
printf("FAIL");
|
||||||
|
printf("passedTests: %d\n", passedTests);
|
||||||
|
printf(" CreateBinTreeTest\n");
|
||||||
|
clearTree(root);
|
||||||
|
}
|
||||||
|
void binTreeSizeTest()
|
||||||
|
{
|
||||||
|
TreeNode* root = NULL;
|
||||||
|
int data1 = 1;
|
||||||
|
int data2 = 2;
|
||||||
|
int data3 = 3;
|
||||||
|
int data4 = 4;
|
||||||
|
int data5 = 5;
|
||||||
|
int isDuplicate = 0;
|
||||||
|
|
||||||
|
|
||||||
|
root = addToTree(root,&data3, sizeof(int),compareFct,&isDuplicate);
|
||||||
|
root = addToTree(root,&data4, sizeof(int),compareFct,&isDuplicate);
|
||||||
|
root = addToTree(root,&data5, sizeof(int),compareFct,&isDuplicate);
|
||||||
|
root = addToTree(root,&data2, sizeof(int),compareFct,&isDuplicate);
|
||||||
|
root = addToTree(root,&data1, sizeof(int),compareFct,&isDuplicate);
|
||||||
|
if(treeSize(root) == 5)
|
||||||
|
printf("PASS");
|
||||||
|
else
|
||||||
|
printf("FAIL");
|
||||||
|
printf(" CreateBinTreeSizeTest\n");
|
||||||
|
clearTree(root);
|
||||||
|
}
|
||||||
|
|
||||||
|
void nextTreeDataTest()
|
||||||
|
{
|
||||||
|
printf("Starte nextTreeDataTest \n");
|
||||||
|
TreeNode* root = NULL;
|
||||||
|
int data1 = 1;
|
||||||
|
int data2 = 2;
|
||||||
|
int data3 = 3;
|
||||||
|
int data4 = 4;
|
||||||
|
int isDuplicate = 0;
|
||||||
|
int data5 = 5;
|
||||||
|
|
||||||
|
// Baum aufbauen
|
||||||
|
root = addToTree(root, &data3, sizeof(int), compareFct, &isDuplicate);
|
||||||
|
root = addToTree(root, &data4, sizeof(int), compareFct, &isDuplicate);
|
||||||
|
root = addToTree(root, &data5, sizeof(int), compareFct, &isDuplicate);
|
||||||
|
root = addToTree(root, &data2, sizeof(int), compareFct, &isDuplicate);
|
||||||
|
root = addToTree(root, &data1, sizeof(int), compareFct, &isDuplicate);
|
||||||
|
|
||||||
|
void* receivedData;
|
||||||
|
int expectedValue;
|
||||||
|
int testPassed = 1; // Flag, um den Gesamtstatus zu verfolgen
|
||||||
|
|
||||||
|
// Test 1: Erster Aufruf mit root
|
||||||
|
expectedValue = 1;
|
||||||
|
receivedData = nextTreeData(root);
|
||||||
|
if (receivedData != NULL && *(int*)receivedData == expectedValue) {
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
testPassed = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Test 2: Zweiter Wert
|
||||||
|
expectedValue = 2;
|
||||||
|
receivedData = nextTreeData(NULL);
|
||||||
|
if (receivedData != NULL && *(int*)receivedData == expectedValue) {
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
testPassed = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Test 3: Dritter Wert
|
||||||
|
expectedValue = 3;
|
||||||
|
receivedData = nextTreeData(NULL);
|
||||||
|
if (receivedData != NULL && *(int*)receivedData == expectedValue) {
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
testPassed = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Test 4: Vierter Wert
|
||||||
|
expectedValue = 4;
|
||||||
|
receivedData = nextTreeData(NULL);
|
||||||
|
if (receivedData != NULL && *(int*)receivedData == expectedValue) {
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
testPassed = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Test 5: Fünfter Wert
|
||||||
|
expectedValue = 5;
|
||||||
|
receivedData = nextTreeData(NULL);
|
||||||
|
if (receivedData != NULL && *(int*)receivedData == expectedValue) {
|
||||||
|
|
||||||
|
} else {
|
||||||
|
testPassed = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Test 6: Kein weiterer Wert erwartet
|
||||||
|
receivedData = nextTreeData(NULL);
|
||||||
|
if (receivedData == NULL) {
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
testPassed = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (testPassed) {
|
||||||
|
printf("PASS");
|
||||||
|
} else {
|
||||||
|
printf("FAIL");
|
||||||
|
}
|
||||||
|
clearTree(root);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
nextTreeDataTest();
|
||||||
|
createTreeTest();
|
||||||
|
binTreeSizeTest();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|||||||
BIN
highscore.o
Normal file
BIN
highscore.o
Normal file
Binary file not shown.
@ -1 +1,10 @@
|
|||||||
|
test;11955
|
||||||
|
test;9982
|
||||||
|
test;9978
|
||||||
|
test;9975
|
||||||
|
test;9974
|
||||||
|
test;9967
|
||||||
|
test;9962
|
||||||
|
test;9960
|
||||||
|
test;9949
|
||||||
|
test;9902
|
||||||
|
|||||||
6
makefile
6
makefile
@ -39,12 +39,14 @@ stackTests: stack.o test_stack.c $(unity_strc)
|
|||||||
$(CC) $(CFLAGS) $(LDFLAGS) -I$(unityfolder) $^ -o runStackTests
|
$(CC) $(CFLAGS) $(LDFLAGS) -I$(unityfolder) $^ -o runStackTests
|
||||||
numbersTests: numbers.o bintree.o stack.o test_numbers.c $(unity_strc)
|
numbersTests: numbers.o bintree.o stack.o test_numbers.c $(unity_strc)
|
||||||
$(CC) $(CFLAGS) $(LDFLAGS) -I$(unityfolder) $^ -o runNumbersTests
|
$(CC) $(CFLAGS) $(LDFLAGS) -I$(unityfolder) $^ -o runNumbersTests
|
||||||
|
binTreeTests: numbers.o bintree.o bintree_tests.c $(unity_strc) stack.o
|
||||||
|
$(CC) $(CFLAGS) $(LDFLAGS) -I$(unityfolder) $^ -o runBinTreeTests
|
||||||
# --------------------------
|
# --------------------------
|
||||||
# Clean
|
# Clean
|
||||||
# --------------------------
|
# --------------------------
|
||||||
clean:
|
clean:
|
||||||
ifeq ($(OS),Windows_NT)
|
ifeq ($(OS),Windows_NT)
|
||||||
del /f *.o doble doble_initial runStackTests runNumbersTests
|
del /f *.o doble doble_initial runStackTests runNumbersTests runBinTreeTests
|
||||||
else
|
else
|
||||||
rm -f *.o doble doble_initial runStackTests runNumbersTests
|
rm -f *.o doble doble_initial runStackTests runNumbersTests runBinTreeTests
|
||||||
endif
|
endif
|
||||||
16
numbers.c
16
numbers.c
@ -25,6 +25,8 @@ unsigned int *createNumbers(unsigned int len)
|
|||||||
TreeNode *root = NULL;
|
TreeNode *root = NULL;
|
||||||
srand(time(NULL));
|
srand(time(NULL));
|
||||||
unsigned int *numbers = malloc(sizeof(unsigned int)*len);
|
unsigned int *numbers = malloc(sizeof(unsigned int)*len);
|
||||||
|
unsigned int duplicate = 0;
|
||||||
|
unsigned int duplicateIdx = 0;
|
||||||
int counter = 0;
|
int counter = 0;
|
||||||
while (treeSize(root) < len) {
|
while (treeSize(root) < len) {
|
||||||
unsigned int num = rand()%(2*len)+1;
|
unsigned int num = rand()%(2*len)+1;
|
||||||
@ -35,9 +37,17 @@ unsigned int *createNumbers(unsigned int len)
|
|||||||
counter++;
|
counter++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
unsigned int duplicate = rand()%(len);
|
|
||||||
unsigned int duplicateIdx = rand()%(len);
|
srand(time(NULL));
|
||||||
numbers[duplicate] = numbers[duplicateIdx];
|
duplicate = rand()%(len);
|
||||||
|
duplicateIdx = rand()%(len);
|
||||||
|
|
||||||
|
while (duplicateIdx == duplicate || duplicateIdx == duplicate+1 || duplicateIdx == duplicate-1) {
|
||||||
|
srand(time(NULL));
|
||||||
|
duplicateIdx = rand()%(len);
|
||||||
|
}
|
||||||
|
numbers[duplicateIdx] = numbers[duplicate];
|
||||||
|
clearTree(root);
|
||||||
return numbers;
|
return numbers;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
BIN
runBinTreeTests.exe
Normal file
BIN
runBinTreeTests.exe
Normal file
Binary file not shown.
BIN
runNumbersTests.exe
Normal file
BIN
runNumbersTests.exe
Normal file
Binary file not shown.
6
stack.c
6
stack.c
@ -13,10 +13,10 @@ StackNode *push(StackNode *stack, void *data)
|
|||||||
|
|
||||||
|
|
||||||
// 1. Einen neuen StackNode erstellen
|
// 1. Einen neuen StackNode erstellen
|
||||||
StackNode *newNode = (StackNode *)malloc(sizeof(StackNode));
|
StackNode* newNode = malloc(sizeof(StackNode));
|
||||||
|
|
||||||
// Überprüfen, ob die Speicherreservierung erfolgreich war
|
// Überprüfen, ob die Speicherreservierung erfolgreich war
|
||||||
if (newNode == NULL)
|
if (!newNode)
|
||||||
{
|
{
|
||||||
// Wenn malloc fehlschlägt, geben wir NULL zurück, um einen Fehler anzuzeigen.
|
// Wenn malloc fehlschlägt, geben wir NULL zurück, um einen Fehler anzuzeigen.
|
||||||
return NULL;
|
return NULL;
|
||||||
@ -68,7 +68,7 @@ StackNode *pop(StackNode *stack)
|
|||||||
// Returns the data of the top element.
|
// Returns the data of the top element.
|
||||||
void *top(StackNode *stack)
|
void *top(StackNode *stack)
|
||||||
{
|
{
|
||||||
if (stack == NULL)
|
if (!stack)
|
||||||
{
|
{
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user