#include #include #include "unity/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(); }