Doblespiel/test_numbers.c
2025-12-15 18:34:28 +01:00

83 lines
2.3 KiB
C

#include <stdio.h>
#include <stdlib.h>
#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;
}