diff --git a/I2_Dobble/makefile b/I2_Dobble/makefile index 1f15f75..f2acc1f 100644 --- a/I2_Dobble/makefile +++ b/I2_Dobble/makefile @@ -1,5 +1,6 @@ CC = gcc -FLAGS = -g -Wall -lm +CFLAGS = -g -Wall +LDFLAGS = -lm ifeq ($(OS),Windows_NT) include makefile_windows.variables @@ -27,7 +28,7 @@ doble_initial: program_obj_files = stack.o bintree.o numbers.o timer.o highscore.o doble : main.o $(program_obj_files) - $(CC) $(FLAGS) $^ -o doble + $(CC) $(FLAGS) $(LDFLAGS) $^ -o doble $(program_obj_filesobj_files): %.o: %.c $(CC) -c $(FLAGS) $^ -o $@ @@ -35,15 +36,21 @@ $(program_obj_filesobj_files): %.o: %.c # -------------------------- # Unit Tests # -------------------------- -unitTests: - echo "needs to be implemented" +unitTests: numbersTest + ./runNumbersTest + +numbersTest: numbers.o bintree.o numbersTest.o $($(unityfolder)/unity.c) + $(CC) $(FLAGS) $(LDFLAGS) $^ -o $@ + +%.o: %.c + $(CC) -c $(FLAGS) $< -o $@ # -------------------------- # Clean # -------------------------- clean: ifeq ($(OS),Windows_NT) - del /f *.o doble + del /f *.o doble runNumbersTest else - rm -f *.o doble + rm -f *.o doble runNumbersTest endif \ No newline at end of file diff --git a/I2_Dobble/numbersTest.c b/I2_Dobble/numbersTest.c new file mode 100644 index 0000000..4bca72d --- /dev/null +++ b/I2_Dobble/numbersTest.c @@ -0,0 +1,89 @@ +#include "numbers.h" +#include "unity.h" +#include "unity_internals.h" + +void test_createNumbers_no_null(void) +{ + unsigned int *arr = createNumbers(10); + TEST_ASSERT_NOT_NULL(arr); + free(arr); +} + +void test_createNumbers_has_exactly_one_duplicate(void) +{ + unsigned int len = 100; + unsigned int *arr = createNumbers(len); + TEST_ASSERT_NOT_NULL(arr); + + unsigned int dup = getDuplicate(arr, len); + TEST_ASSERT_NOT_EQUAL(0, dup); + + int count = 0; + for (unsigned int i = 0; i < len; i++) + { + if (arr[i] == dup) + count++; + } + + TEST_ASSERT_EQUAL(2, count); + + free(arr); +} + +void test_createNumbers_has_correct_value_range(void) +{ + unsigned int len = 10; + unsigned int *arr = createNumbers(len); + TEST_ASSERT_NOT_NULL(arr); + + // Check all numbers are within valid range (1 to 2*len) + for (unsigned int i = 0; i < len; i++) + { + TEST_ASSERT_TRUE(arr[i] >= 1); + TEST_ASSERT_TRUE(arr[i] <= 2 * len); + } + + free(arr); +} + +void test_getDuplicate_returns_correct_value(void) +{ + unsigned int arr[6] = {4, 1, 7, 7, 3, 2}; + unsigned int d = getDuplicate(arr, 6); + TEST_ASSERT_EQUAL_UINT(7, d); +} + +void test_complete_function_of_numbers(void) +{ + unsigned int len = 50; + unsigned int *arr = createNumbers(len); + TEST_ASSERT_NOT_NULL(arr); + + unsigned int d1 = getDuplicate(arr, len); + TEST_ASSERT_NOT_EQUAL(0, d1); + + int count = 0; + + for (unsigned int i = 0; i < len; i++) + { + if (arr[i] == d1) + count++; + } + + TEST_ASSERT_EQUAL(2, count); + + free(arr); +} + +int main(void) +{ + UNITY_BEGIN(); + + RUN_TEST(test_createNumbers_no_null); + RUN_TEST(test_createNumbers_has_exactly_one_duplicate); + RUN_TEST(test_createNumbers_has_correct_value_range); + RUN_TEST(test_getDuplicate_returns_correct_value); + RUN_TEST(test_complete_function_of_numbers); + + return UNITY_END(); +} \ No newline at end of file