87 lines
2.0 KiB
C
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();
|
|
} |