DobleSpiel/test_numbers.c
2025-12-10 14:19:37 +01:00

87 lines
2.0 KiB
C

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include "numbers.h"
#include "unity/unity.h"
void setUp(void) {
// gehört zu unit-Grundaufbau
}
void tearDown(void) {
// gehört zu unit-Grundaufbau
}
// prüft, ob ein Array nur EIN Duplikat enthält
static int countDuplicates(const unsigned int *arr, unsigned int len) {
int count = 0;
for (unsigned int i = 0; i < len; i++) {
for (unsigned int j = i + 1; j < len; j++) {
if (arr[i] == arr[j]) {
count++;
}
}
}
return count;
}
// Prüfen, ob createNumbers ein korrektes Array liefert
static void test_createNumbers_basic(void)
{
unsigned int len = 100;
unsigned int *arr = createNumbers(len);
TEST_ASSERT_NOT_NULL(arr); // prüft ob Speicher korrekt
// Prüfen: Länge stimmt
// Prüfen: Array enthält GENAU EIN Duplikat
int dupCount = countDuplicates(arr, len);
TEST_ASSERT_EQUAL_INT(1, dupCount);
free(arr);
}
// TEST 2: Prüfen, ob getDuplicate die richtige doppelte Zahl erkennt
static void test_getDuplicate_correctValue(void)
{
unsigned int len = 200;
unsigned int *arr = createNumbers(len);
TEST_ASSERT_NOT_NULL(arr);
unsigned int duplicate = getDuplicate(arr, len);
// Manuelle Kontrolle: Der gefundene Wert muss tatsächlich doppelt vorkommen
int occurrences = 0;
for (unsigned int i = 0; i < len; i++) {
if (arr[i] == duplicate) {
occurrences++;
}
}
TEST_ASSERT_EQUAL_INT(2, occurrences);
free(arr);
}
// TEST 3: getDuplicate gibt 0 aus bei Fehlern
static void test_getDuplicate_errors(void)
{
TEST_ASSERT_EQUAL_UINT(0, getDuplicate(NULL, 10));
TEST_ASSERT_EQUAL_UINT(0, getDuplicate((unsigned int*)1, 1)); // len < 2
}
// Testbereich
int main(void)
{
UNITY_BEGIN();
RUN_TEST(test_createNumbers_basic);
RUN_TEST(test_getDuplicate_correctValue);
RUN_TEST(test_getDuplicate_errors);
return UNITY_END();
}