Numbers Test erfolgreich ebstanden

This commit is contained in:
silvana884 2025-12-11 09:15:03 +01:00
parent dcc90edfa3
commit 37f38cbc7d
6 changed files with 108 additions and 41 deletions

View File

@ -1,66 +1,66 @@
CC = gcc
FLAGS = -g -Wall -lm
FLAGS = -g -Wall -I$(unityfolder)
ifeq ($(OS),Windows_NT)
include makefile_windows.variables
include makefile_windows.variables
else
UNAME = $(shell uname)
ifeq ($(UNAME),Linux)
include makefile_linux.variables
else
include makefile_mac.variables
endif
UNAME = $(shell uname)
ifeq ($(UNAME),Linux)
include makefile_linux.variables
else
include makefile_mac.variables
endif
endif
raylibfolder = ./raylib
unityfolder = ./unity
# --------------------------
# Initiales Programm bauen (zum ausprobieren)
# Initiales Programm
# --------------------------
doble_initial:
$(CC) -o doble_initial $(BINARIES)/libdoble_complete.a
# --------------------------
# Selbst implementiertes Programm bauen
# Objektdateien
# --------------------------
program_obj_files = stack.o bintree.o numbers.o timer.o highscore.o
doble : main.o $(program_obj_files)
$(CC) $(FLAGS) $^ -o doble
# Generische Regel für alle .o-Dateien
%.o: %.c
$(CC) $(FLAGS) -c $< -o $@
$(program_obj_filesobj_files): %.o: %.c
$(CC) -c $(FLAGS) $^ -o $@
# --------------------------
# Hauptprogramm
# --------------------------
doble: main.o $(program_obj_files)
$(CC) $(FLAGS) $^ -o doble
# --------------------------
# Unit Tests
# --------------------------
unity_src = $(unityfolder)/unity.c
unitTests:
@echo "needs to be implemented"
unitTests: numbersTest stackTest bintreeTest
# ./runNumbersTest
# ./runStackTest
./runBintreeTest
# Bintree Tests
binTreeTests: stack.o bintree.o binTreeTests.c $(unityfolder)/unity.c
$(CC) $(FLAGS) -o runbintreeTests binTreeTests.c bintree.o stack.o $(unityfolder)/unity.c
numbersTest: numbers.o bintree.o stack.o numbersTest.c $(unity_src)
$(CC) $(CFLAGS) $(LDFLAGS) -I$(unityfolder) $^ -o runNumbersTest
stackTest: stack.o stackTest.c $(unity_src)
$(CC) $(CFLAGS) $(LDFLAGS) -I$(unityfolder) $^ -o runStackTests
binTreeTest: bintree.o binTreeTest.c $(unity_src) stack.o
$(CC) $(CFLAGS) $(LDFLAGS) -I$(unityfolder) $^ -o runBinTreeTest
%.o: %.c
$(CC) -c $(CFLAGS) $< -o $@
# Numbers Tests
test_numbers: numbers_no_tree.o bintree.o stack.o test_numbers.c $(unityfolder)/unity.c
$(CC) $(FLAGS) -o run_numbersTests test_numbers.c numbers_no_tree.o bintree.o stack.o $(unityfolder)/unity.c
# Stack Tests
test_stack: stack.o test_stack.c $(unityfolder)/unity.c
$(CC) $(FLAGS) -o runstackTests test_stack.c stack.o $(unityfolder)/unity.c
# --------------------------
# Clean
# --------------------------
clean:
ifeq ($(OS),Windows_NT)
del /f *.o doble
del /f *.o doble runstackTests run_numbersTests runbintreeTests
else
rm -f *.o doble
endif
rm -f *.o doble runstackTests run_numbersTests runbintreeTests
endif

BIN
numbers_no_tree.o Normal file

Binary file not shown.

BIN
run_numbersTests.exe Normal file

Binary file not shown.

19
stack.c
View File

@ -10,7 +10,11 @@
// Pushes data as pointer onto the stack.
StackNode *push(StackNode *stack, void *data)
{
if(stack && data){
if (!data)
{
return stack; //Nichts pushen
}
//if(stack && data){
StackNode *t = (StackNode *)malloc(sizeof(StackNode));
if(!t)
{
@ -19,7 +23,7 @@ StackNode *push(StackNode *stack, void *data)
t->next = stack;
t->data = data;
return t; //Gibt den ersten StackNode des Stacks zurueck
}
//}
return NULL;
}
@ -27,12 +31,11 @@ StackNode *push(StackNode *stack, void *data)
// freed by caller.)
StackNode *pop(StackNode *stack)
{
if(stack)
if(stack == NULL)
{
StackNode *t = stack->next; //Naechstes Element im Stack wird erstes Element
free(stack);
return t;
return NULL;
}
return stack->next;
}
// Returns the data of the top element.
@ -50,8 +53,8 @@ void clearStack(StackNode *stack)
{
while(stack)
{
StackNode *tmp = stack;
stack = stack->next;
StackNode *tmp = stack; //merkt sich den momentanen obersten Knoten
stack = stack->next; //setzt den obersten Knoten auf den Zweiten im Stack
free(tmp->data);
free(tmp);
}

BIN
stack.o

Binary file not shown.

64
stack_test.c Normal file
View File

@ -0,0 +1,64 @@
#include <stdlib.h>
#include <stdio.h>
#include "stack.h"
//Testfunkionen zu push, pull, top & clearStack schreiben
void test(char *name, int condition) {
if (condition) {
printf("[OK] %s\n", name);
} else {
printf("[FAIL] %s\n", name);
}
}
int main() {
StackNode *stack = NULL;
// Werte dynamisch anlegen
int *val1 = malloc(sizeof(int));
*val1 = 5;
stack = push(stack, val1);
test("push(5) legt 5 oben auf den Stack", *(int*)stack->data == 5);
int *val2 = malloc(sizeof(int));
*val2 = 6;
stack = push(stack, val2);
test("push(6) legt 6 oben auf den Stack", *(int*)stack->data == 6);
int *val3 = malloc(sizeof(int));
*val3 = 24;
stack = push(stack, val3);
test("push(24) legt 24 oben auf den Stack", *(int*)stack->data == 24);
// Test top()
int t = *(int*)top(stack);
test("top() liefert 24", t == 24);
// Test pop()
StackNode *tmp;
tmp = stack;
stack = pop(stack);
free(tmp->data); // Daten freigeben
free(tmp); // Knoten freigeben
test("pop() entfernt 24, 6 ist jetzt oben", *(int*)stack->data == 6);
tmp = stack;
stack = pop(stack);
free(tmp->data);
free(tmp);
test("pop() entfernt 6, 5 ist jetzt oben", *(int*)stack->data == 5);
tmp = stack;
stack = pop(stack);
free(tmp->data);
free(tmp);
test("pop() entfernt 5, Stack ist jetzt leer", stack == NULL);
// Am Ende Stack leeren (falls noch Elemente übrig)
clearStack(stack);
return 0;
}