generated from freudenreichan/info2Praktikum-DobleSpiel
113 lines
2.4 KiB
C
113 lines
2.4 KiB
C
//
|
|
// Created by Johannes on 15.12.2025.
|
|
//
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <stdbool.h>
|
|
#include "numbers.h"
|
|
|
|
//Framework
|
|
static int tests_run = 0;
|
|
static int tests_failed = 0;
|
|
|
|
#define RUNTEST(test) do { \
|
|
tests_run++; \
|
|
printf("Running %-30s ... ", #test); \
|
|
if (test()) { \
|
|
printf("OK\n"); \
|
|
} else { \
|
|
printf("FAIL\n"); \
|
|
tests_failed++; \
|
|
} \
|
|
} while (0)
|
|
|
|
#define ASSERT_TRUE(expr) do { \
|
|
if (!(expr)) return false; \
|
|
} while (0)
|
|
|
|
|
|
void setUp(void) {
|
|
}
|
|
|
|
void tearDown(void) {
|
|
}
|
|
|
|
static bool array_contains(const unsigned int *arr, unsigned int len, unsigned int value)
|
|
{
|
|
for (unsigned int i = 0; i < len; i++)
|
|
if (arr[i] == value)
|
|
return true;
|
|
return false;
|
|
}
|
|
|
|
// Test: createNumbers gibt gültigen Pointer zurück
|
|
bool test_createNumbers_not_null(void)
|
|
{
|
|
unsigned int len = 10;
|
|
unsigned int *nums = createNumbers(len);
|
|
|
|
ASSERT_TRUE(nums != NULL);
|
|
|
|
free(nums);
|
|
return true;
|
|
}
|
|
|
|
// Test: alle Zahlen liegen im erlaubten Bereich
|
|
bool test_createNumbers_range(void)
|
|
{
|
|
unsigned int len = 20;
|
|
unsigned int *nums = createNumbers(len);
|
|
|
|
ASSERT_TRUE(nums != NULL);
|
|
|
|
for (unsigned int i = 0; i < len; i++) {
|
|
ASSERT_TRUE(nums[i] >= 1);
|
|
ASSERT_TRUE(nums[i] <= 2 * len);
|
|
}
|
|
|
|
free(nums);
|
|
return true;
|
|
}
|
|
|
|
// Test: es existiert genau ein Duplikat
|
|
bool test_getDuplicate_finds_duplicate(void)
|
|
{
|
|
unsigned int len = 15;
|
|
unsigned int *nums = createNumbers(len);
|
|
|
|
ASSERT_TRUE(nums != NULL);
|
|
|
|
unsigned int dup = getDuplicate(nums, len);
|
|
|
|
ASSERT_TRUE(dup != 0);
|
|
ASSERT_TRUE(array_contains(nums, len, dup));
|
|
|
|
free(nums);
|
|
return true;
|
|
}
|
|
|
|
// Test: getDuplicate gibt 0 bei Fehlerfall zurück
|
|
bool test_getDuplicate_no_duplicate(void)
|
|
{
|
|
unsigned int nums[] = {1, 2, 3, 4, 5};
|
|
unsigned int len = 5;
|
|
|
|
unsigned int dup = getDuplicate(nums, len);
|
|
|
|
ASSERT_TRUE(dup == 0);
|
|
return true;
|
|
}
|
|
|
|
int main(void)
|
|
{
|
|
RUNTEST(test_createNumbers_not_null);
|
|
RUNTEST(test_createNumbers_range);
|
|
RUNTEST(test_getDuplicate_finds_duplicate);
|
|
RUNTEST(test_getDuplicate_no_duplicate);
|
|
|
|
printf("\nTests run: %d\n", tests_run);
|
|
printf("Tests failed: %d\n", tests_failed);
|
|
|
|
return tests_failed ? EXIT_FAILURE : EXIT_SUCCESS;
|
|
}
|