generated from freudenreichan/info2Praktikum-DobleSpiel
83 lines
2.3 KiB
C
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;
|
|
} |