// // Created by Johannes on 15.12.2025. // #include #include #include #include "numbers.h" //Framework static int tests_run = 0; static int tests_failed = 0; #define RUNTEST(test) do { \ tests_run++; \ printf("Running %-30s ... ", #test); \ if (test()) { \ printf("OK\n"); \ } else { \ printf("FAIL\n"); \ tests_failed++; \ } \ } while (0) #define ASSERT_TRUE(expr) do { \ if (!(expr)) return false; \ } while (0) void setUp(void) { } void tearDown(void) { } static bool array_contains(const unsigned int *arr, unsigned int len, unsigned int value) { for (unsigned int i = 0; i < len; i++) if (arr[i] == value) return true; return false; } // Test: createNumbers gibt gültigen Pointer zurück bool test_createNumbers_not_null(void) { unsigned int len = 10; unsigned int *nums = createNumbers(len); ASSERT_TRUE(nums != NULL); free(nums); return true; } // Test: alle Zahlen liegen im erlaubten Bereich bool test_createNumbers_range(void) { unsigned int len = 20; unsigned int *nums = createNumbers(len); ASSERT_TRUE(nums != NULL); for (unsigned int i = 0; i < len; i++) { ASSERT_TRUE(nums[i] >= 1); ASSERT_TRUE(nums[i] <= 2 * len); } free(nums); return true; } // Test: es existiert genau ein Duplikat bool test_getDuplicate_finds_duplicate(void) { unsigned int len = 15; unsigned int *nums = createNumbers(len); ASSERT_TRUE(nums != NULL); unsigned int dup = getDuplicate(nums, len); ASSERT_TRUE(dup != 0); ASSERT_TRUE(array_contains(nums, len, dup)); free(nums); return true; } // Test: getDuplicate gibt 0 bei Fehlerfall zurück bool test_getDuplicate_no_duplicate(void) { unsigned int nums[] = {1, 2, 3, 4, 5}; unsigned int len = 5; unsigned int dup = getDuplicate(nums, len); ASSERT_TRUE(dup == 0); return true; } int main(void) { RUNTEST(test_createNumbers_not_null); RUNTEST(test_createNumbers_range); RUNTEST(test_getDuplicate_finds_duplicate); RUNTEST(test_getDuplicate_no_duplicate); printf("\nTests run: %d\n", tests_run); printf("Tests failed: %d\n", tests_failed); return tests_failed ? EXIT_FAILURE : EXIT_SUCCESS; }