generated from freudenreichan/info2Praktikum-DobleSpiel
94 lines
1.9 KiB
C
94 lines
1.9 KiB
C
#include <stdlib.h>
|
|
#include <time.h>
|
|
|
|
#include "unity.h"
|
|
#include "numbers.h"
|
|
|
|
void setUp(void)
|
|
{
|
|
}
|
|
|
|
void tearDown(void)
|
|
{
|
|
}
|
|
|
|
static unsigned int countOccurrences(const unsigned int *numbers,
|
|
unsigned int len,
|
|
unsigned int value)
|
|
{
|
|
unsigned int count = 0;
|
|
for (unsigned int i = 0; i < len; ++i) {
|
|
if (numbers[i] == value) {
|
|
count++;
|
|
}
|
|
}
|
|
return count;
|
|
}
|
|
|
|
void test_createNumbers_returns_non_null(void)
|
|
{
|
|
unsigned int len = 20;
|
|
unsigned int *numbers = createNumbers(len);
|
|
|
|
TEST_ASSERT_NOT_NULL(numbers);
|
|
|
|
free(numbers);
|
|
}
|
|
|
|
void test_createNumbers_value_range(void)
|
|
{
|
|
unsigned int len = 30;
|
|
unsigned int *numbers = createNumbers(len);
|
|
|
|
TEST_ASSERT_NOT_NULL(numbers);
|
|
|
|
for (unsigned int i = 0; i < len; ++i) {
|
|
TEST_ASSERT_TRUE(numbers[i] >= 1);
|
|
TEST_ASSERT_TRUE(numbers[i] <= 2 * len);
|
|
}
|
|
|
|
free(numbers);
|
|
}
|
|
|
|
void test_getDuplicate_finds_exactly_one_duplicate(void)
|
|
{
|
|
unsigned int len = 25;
|
|
unsigned int *numbers = createNumbers(len);
|
|
|
|
TEST_ASSERT_NOT_NULL(numbers);
|
|
|
|
unsigned int duplicate = getDuplicate(numbers, len);
|
|
TEST_ASSERT_NOT_EQUAL_UINT(0, duplicate);
|
|
|
|
unsigned int occurrences =
|
|
countOccurrences(numbers, len, duplicate);
|
|
|
|
TEST_ASSERT_EQUAL_UINT(2, occurrences);
|
|
|
|
free(numbers);
|
|
}
|
|
|
|
void test_error_cases(void)
|
|
{
|
|
TEST_ASSERT_NULL(createNumbers(0));
|
|
TEST_ASSERT_NULL(createNumbers(1));
|
|
|
|
TEST_ASSERT_EQUAL_UINT(0, getDuplicate(NULL, 10));
|
|
|
|
unsigned int oneElement[1] = { 42 };
|
|
TEST_ASSERT_EQUAL_UINT(0, getDuplicate(oneElement, 1));
|
|
}
|
|
|
|
int main(void)
|
|
{
|
|
srand((unsigned int) time(NULL));
|
|
|
|
UNITY_BEGIN();
|
|
|
|
RUN_TEST(test_createNumbers_returns_non_null);
|
|
RUN_TEST(test_createNumbers_value_range);
|
|
RUN_TEST(test_getDuplicate_finds_exactly_one_duplicate);
|
|
RUN_TEST(test_error_cases);
|
|
|
|
return UNITY_END();
|
|
} |