From eab7887e4d4e1f71b89d4a0574a99b8c37ef4b99 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn?= Date: Tue, 2 Dec 2025 15:10:37 +0100 Subject: [PATCH] =?UTF-8?q?Basictests=20f=C3=BCr=20numbers=20eingf=C3=BCgt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- makefile | 13 ++++-- numbersTests.c | 107 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 116 insertions(+), 4 deletions(-) create mode 100644 numbersTests.c diff --git a/makefile b/makefile index 1f15f75..04f7f7b 100644 --- a/makefile +++ b/makefile @@ -32,18 +32,23 @@ doble : main.o $(program_obj_files) $(program_obj_filesobj_files): %.o: %.c $(CC) -c $(FLAGS) $^ -o $@ +numbers.o: numbers.c + $(CC) -c $(CFLAGS) numbers.c + # -------------------------- # Unit Tests # -------------------------- -unitTests: - echo "needs to be implemented" + + +numbersTests: numbers.o numbersTests.c $(unityfolder)/unity.c + $(CC) $(CFLAGS) -I$(unityfolder) -o runNumbersTests numbersTests.c numbers.o $(unityfolder)/unity.c # -------------------------- # Clean # -------------------------- clean: ifeq ($(OS),Windows_NT) - del /f *.o doble + del /f *.o doble *.exe else - rm -f *.o doble + rm -f *.o doble *runNumbersTests endif \ No newline at end of file diff --git a/numbersTests.c b/numbersTests.c new file mode 100644 index 0000000..913d4a2 --- /dev/null +++ b/numbersTests.c @@ -0,0 +1,107 @@ +#include +#include +#include "numbers.h" +#include "unity.h" + +//Initialisierung +void setUp(void){} +void tearDown(void){} + +// Hilfsfunktion: zählt Vorkommen eines Werts +static unsigned int countOccurrences(unsigned int* arr, unsigned int n, unsigned int value) +{ + unsigned int count = 0; + for (unsigned int i = 0; i < n; i++) + if (arr[i] == value) + count++; + return count; +} + +// --------------------------------------------------------------------------- +// Test 1: createNumbers erzeugt ein Array der richtigen Größe +// --------------------------------------------------------------------------- +void test_createNumbers_returns_valid_array(void) +{ + unsigned int n = 50; + unsigned int* arr = createNumbers(n); + + TEST_ASSERT_NOT_NULL(arr); + + // Ein paar Werte prüfen (dürfen alles sein, nur kein Segfault) + for (unsigned int i = 0; i < n; i++) + TEST_ASSERT_TRUE(arr[i] >= 0); + + free(arr); +} + +// --------------------------------------------------------------------------- +// Test 2: createNumbers erzeugt GENAU EIN Duplikat +// --------------------------------------------------------------------------- +void test_createNumbers_contains_exactly_one_duplicate(void) +{ + unsigned int n = 50; + unsigned int* arr = createNumbers(n); + + TEST_ASSERT_NOT_NULL(arr); + + // zähle wie viele Werte doppelt vorkommen + unsigned int duplicateValue = 0; + unsigned int totalDuplicateAppearances = 0; + + for (unsigned int i = 0; i < n; i++) + { + unsigned int c = countOccurrences(arr, n, arr[i]); + if (c == 2) // genau zweimal → Bestandteil des Duplikats + { + duplicateValue = arr[i]; + totalDuplicateAppearances++; + } + } + + // Wenn genau eine Zahl doppelt vorkommt, + // finden wir sie zweimal → totalDuplicateAppearances == 2 + TEST_ASSERT_EQUAL_UINT(2, totalDuplicateAppearances); + + free(arr); +} +// --------------------------------------------------------------------------- +// Test 3: getDuplicated findet genau die richtige doppelte Zahl +// --------------------------------------------------------------------------- +void test_getDuplicated_finds_correct_duplicate(void) +{ + unsigned int n = 50; + unsigned int* arr = createNumbers(n); + TEST_ASSERT_NOT_NULL(arr); + + // Ermittle das Duplikat manuell + unsigned int expected = 0; + + for (unsigned int i = 0; i < n; i++) + { + if (countOccurrences(arr, n, arr[i]) == 2) + { + expected = arr[i]; + break; + } + } + + unsigned int result = getDuplicate(arr, n); + + TEST_ASSERT_EQUAL_UINT(expected, result); + + free(arr); +} + +// --------------------------------------------------------------------------- +// main() für Unity +// --------------------------------------------------------------------------- +int main(void) +{ + UNITY_BEGIN(); + + RUN_TEST(test_createNumbers_returns_valid_array); + RUN_TEST(test_createNumbers_contains_exactly_one_duplicate); + RUN_TEST(test_getDuplicated_finds_correct_duplicate); + + return UNITY_END(); +} \ No newline at end of file