diff --git a/makefile b/makefile index af9c318..887c59f 100644 --- a/makefile +++ b/makefile @@ -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 \ No newline at end of file + rm -f *.o doble runstackTests run_numbersTests runbintreeTests +endif diff --git a/numbers_no_tree.o b/numbers_no_tree.o new file mode 100644 index 0000000..75d7aa9 Binary files /dev/null and b/numbers_no_tree.o differ diff --git a/run_numbersTests.exe b/run_numbersTests.exe new file mode 100644 index 0000000..6f6328f Binary files /dev/null and b/run_numbersTests.exe differ diff --git a/stack.c b/stack.c index 764a080..7cbb2af 100644 --- a/stack.c +++ b/stack.c @@ -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); } diff --git a/stack.o b/stack.o index 459d2c7..3115f63 100644 Binary files a/stack.o and b/stack.o differ diff --git a/stack_test.c b/stack_test.c new file mode 100644 index 0000000..3b47817 --- /dev/null +++ b/stack_test.c @@ -0,0 +1,64 @@ +#include +#include +#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; +} \ No newline at end of file