summary refs log tree commit diff stats
path: root/c/sum-of-multiples/test/test_sum_of_multiples.c
blob: 00493e773adae0987d215e639df1c99b2d5b3673 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
#include "vendor/unity.h"
#include "../src/sum_of_multiples.h"

#define NUM_OF_ELEMENTS(a)    (sizeof(a) / sizeof(a[0]))

void setUp(void)
{
}

void tearDown(void)
{
}

static void test_no_multiples_within_limit(void)
{
   const unsigned int multiples[] = { 3, 5 };
   TEST_ASSERT_EQUAL(0, sum(multiples, NUM_OF_ELEMENTS(multiples), 1));
}

static void test_one_factor_has_multiples_within_limit(void)
{
   const unsigned int multiples[] = { 3, 5 };
   TEST_ASSERT_EQUAL(3, sum(multiples, NUM_OF_ELEMENTS(multiples), 4));
}

static void test_more_than_one_multiple_withiin_limit(void)
{
   const unsigned int multiples[] = { 3 };
   TEST_ASSERT_EQUAL(9, sum(multiples, NUM_OF_ELEMENTS(multiples), 7));
}

static void test_more_than_one_factor_with_multiples_within_limit(void)
{
   const unsigned int multiples[] = { 3, 5 };
   TEST_ASSERT_EQUAL(23, sum(multiples, NUM_OF_ELEMENTS(multiples), 10));
}

static void test_each_multiple_is_only_counted_once(void)
{
   const unsigned int multiples[] = { 3, 5 };
   TEST_ASSERT_EQUAL(2318, sum(multiples, NUM_OF_ELEMENTS(multiples), 100));
}

static void test_a_much_larger_limit(void)
{
   const unsigned int multiples[] = { 3, 5 };
   TEST_ASSERT_EQUAL(233168, sum(multiples, NUM_OF_ELEMENTS(multiples), 1000));
}

static void test_three_factors(void)
{
   const unsigned int multiples[] = { 7, 13, 17 };
   TEST_ASSERT_EQUAL(51, sum(multiples, NUM_OF_ELEMENTS(multiples), 20));
}

static void test_factors_not_relatively_prime(void)
{
   const unsigned int multiples[] = { 4, 6 };
   TEST_ASSERT_EQUAL(30, sum(multiples, NUM_OF_ELEMENTS(multiples), 15));
}

static void test_some_pairs_of_factors_relatively_prime_and_some_not(void)
{
   const unsigned int multiples[] = { 5, 6, 8 };
   TEST_ASSERT_EQUAL(4419, sum(multiples, NUM_OF_ELEMENTS(multiples), 150));
}

static void test_one_factor_is_a_multiple_of_another(void)
{
   const unsigned int multiples[] = { 5, 25 };
   TEST_ASSERT_EQUAL(275, sum(multiples, NUM_OF_ELEMENTS(multiples), 51));
}

static void test_much_larger_factors(void)
{
   const unsigned int multiples[] = { 43, 47 };
   TEST_ASSERT_EQUAL(2203160,
                     sum(multiples, NUM_OF_ELEMENTS(multiples), 10000));
}

static void test_all_numbers_are_multiples_of_1(void)
{
   const unsigned int multiples[] = { 1 };
   TEST_ASSERT_EQUAL(4950, sum(multiples, NUM_OF_ELEMENTS(multiples), 100));
}

static void test_no_factors_means_an_empty_sum(void)
{
   const unsigned int multiples[] = { 0 };
   TEST_ASSERT_EQUAL(0, sum(multiples, NUM_OF_ELEMENTS(multiples), 1000));
}

static void test_the_only_multiple_of_zero_is_zero(void)
{
   const unsigned int multiples[] = { 0 };
   TEST_ASSERT_EQUAL(0, sum(multiples, NUM_OF_ELEMENTS(multiples), 1));
}

static void
test_the_factor_0_does_not_affect_the_sum_of_multiples_of_other_factors(void)
{
   const unsigned int multiples[] = { 3, 0 };
   TEST_ASSERT_EQUAL(3, sum(multiples, NUM_OF_ELEMENTS(multiples), 4));
}

static void
 test_solutions_using_include_exclude_must_extend_to_cardinality_greater_than_3
    (void) {
   const unsigned int multiples[] = { 2, 3, 5, 7, 11 };
   TEST_ASSERT_EQUAL(39614537,
                     sum(multiples, NUM_OF_ELEMENTS(multiples), 10000));
}

int main(void)
{
   UnityBegin("test/test_sum_of_multiples.c");

   RUN_TEST(test_no_multiples_within_limit);
   RUN_TEST(test_one_factor_has_multiples_within_limit);
   RUN_TEST(test_more_than_one_multiple_withiin_limit);
   RUN_TEST(test_more_than_one_factor_with_multiples_within_limit);
   RUN_TEST(test_each_multiple_is_only_counted_once);
   RUN_TEST(test_a_much_larger_limit);
   RUN_TEST(test_three_factors);
   RUN_TEST(test_factors_not_relatively_prime);
   RUN_TEST(test_some_pairs_of_factors_relatively_prime_and_some_not);
   RUN_TEST(test_one_factor_is_a_multiple_of_another);
   RUN_TEST(test_much_larger_factors);
   RUN_TEST(test_all_numbers_are_multiples_of_1);
   RUN_TEST(test_no_factors_means_an_empty_sum);
   RUN_TEST(test_the_only_multiple_of_zero_is_zero);
   RUN_TEST
       (test_the_factor_0_does_not_affect_the_sum_of_multiples_of_other_factors);
   RUN_TEST
       (test_solutions_using_include_exclude_must_extend_to_cardinality_greater_than_3);

   return UnityEnd();
}