#include #include #include "numbers.h" // Mini-Checkfunktion ohne Abbruch static void check(int cond, const char *msg) { if (cond) printf("[OK] %s\n", msg); else printf("[FAIL] %s\n", msg); } int main(void) { printf("=== TEST: numbers.c ===\n"); unsigned int len = 20; unsigned int *nums = createNumbers(len); check(nums != NULL, "createNumbers() liefert kein NULL."); if (nums == NULL) return 1; // keine weiteren Tests möglich check(1, "Array erfolgreich erzeugt."); // ------------------------------------------------------- // Test 1: Länge korrekt // ------------------------------------------------------- check(1, "Länge kann nicht direkt geprüft werden, aber createNumbers() hat ausgeführt."); // ------------------------------------------------------- // Test 2: Prüfen, ob GENAU EIN Wert doppelt vorkommt // ------------------------------------------------------- unsigned int *count = calloc(2 * len + 1, sizeof(unsigned int)); if (!count) { printf("[FAIL] Konnte Count-Array nicht anlegen.\n"); free(nums); return 1; } for (unsigned int i = 0; i < len; i++) { if (nums[i] > 0 && nums[i] <= 2 * len) count[nums[i]]++; } int duplicatesFound = 0; unsigned int duplicateValue = 0; for (unsigned int i = 1; i <= 2 * len; i++) { if (count[i] == 2) { duplicatesFound++; duplicateValue = i; } else if (count[i] > 2) { duplicatesFound = -999; // Fehler break; } } check(duplicatesFound == 1, "GENAU eine doppelte Zahl vorhanden."); // ------------------------------------------------------- // Test 3: getDuplicate() liefert richtige Zahl // ------------------------------------------------------- unsigned int d = getDuplicate(nums, len); check(d == duplicateValue, "getDuplicate() liefert die korrekte doppelte Zahl."); // ------------------------------------------------------- // Aufräumen // ------------------------------------------------------- free(nums); free(count); printf("\nAlle tests in test_numbers abgeschlossen.\n"); return 0; }