15
15
* @author [Swastika Gupta](https://github.com/Swastyy)
16
16
*/
17
17
18
- #include < algorithm> // / for std::is_equal, std::swap
19
- #include < cassert> // / for assert
20
- #include < iostream> // / for IO operations
21
- #include < vector> // / for std::vector
18
+ #include < cassert> // / for assert
19
+ #include < iostream> // / for std::cout
20
+ #include < vector> // / for std::vector
22
21
23
22
/* *
24
23
* @namespace math
@@ -39,10 +38,17 @@ namespace n_bonacci {
39
38
* @returns the n-bonacci sequence as vector array
40
39
*/
41
40
std::vector<uint64_t > N_bonacci (const uint64_t &n, const uint64_t &m) {
42
- std::vector<uint64_t > a (m, 0 ); // we create an empty array of size m
41
+ std::vector<uint64_t > a (
42
+ m, 0 ); // we create an array of size m filled with zeros
43
+ if (m < n || n == 0 ) {
44
+ return a;
45
+ }
43
46
44
47
a[n - 1 ] = 1 ; // / we initialise the (n-1)th term as 1 which is the sum of
45
48
// / preceding N zeros
49
+ if (n == m) {
50
+ return a;
51
+ }
46
52
a[n] = 1 ; // / similarily the sum of preceding N zeros and the (N+1)th 1 is
47
53
// / also 1
48
54
for (uint64_t i = n + 1 ; i < m; i++) {
@@ -61,55 +67,33 @@ std::vector<uint64_t> N_bonacci(const uint64_t &n, const uint64_t &m) {
61
67
* @returns void
62
68
*/
63
69
static void test () {
64
- // n = 1 m = 1 return [1, 1]
65
- std::cout << " 1st test" ;
66
- std::vector<uint64_t > arr1 = math::n_bonacci::N_bonacci (
67
- 1 , 1 ); // first input is the param n and second one is the param m for
68
- // N-bonacci func
69
- std::vector<uint64_t > output_array1 = {
70
- 1 , 1 }; // It is the expected output series of length m
71
- assert (std::equal (std::begin (arr1), std::end (arr1),
72
- std::begin (output_array1)));
73
- std::cout << " passed" << std::endl;
74
-
75
- // n = 5 m = 15 return [0, 0, 0, 0, 1, 1, 2, 4, 8, 16, 31, 61, 120, 236,
76
- // 464]
77
- std::cout << " 2nd test" ;
78
- std::vector<uint64_t > arr2 = math::n_bonacci::N_bonacci (
79
- 5 , 15 ); // first input is the param n and second one is the param m for
80
- // N-bonacci func
81
- std::vector<uint64_t > output_array2 = {
82
- 0 , 0 , 0 , 0 , 1 , 1 , 2 , 4 ,
83
- 8 , 16 , 31 , 61 , 120 , 236 , 464 }; // It is the expected output series of
84
- // length m
85
- assert (std::equal (std::begin (arr2), std::end (arr2),
86
- std::begin (output_array2)));
87
- std::cout << " passed" << std::endl;
88
-
89
- // n = 6 m = 17 return [0, 0, 0, 0, 0, 1, 1, 2, 4, 8, 16, 32, 63, 125, 248,
90
- // 492, 976]
91
- std::cout << " 3rd test" ;
92
- std::vector<uint64_t > arr3 = math::n_bonacci::N_bonacci (
93
- 6 , 17 ); // first input is the param n and second one is the param m for
94
- // N-bonacci func
95
- std::vector<uint64_t > output_array3 = {
96
- 0 , 0 , 0 , 0 , 0 , 1 , 1 , 2 , 4 ,
97
- 8 , 16 , 32 , 63 , 125 , 248 , 492 , 976 }; // It is the expected output series
98
- // of length m
99
- assert (std::equal (std::begin (arr3), std::end (arr3),
100
- std::begin (output_array3)));
101
- std::cout << " passed" << std::endl;
70
+ struct TestCase {
71
+ const uint64_t n;
72
+ const uint64_t m;
73
+ const std::vector<uint64_t > expected;
74
+ TestCase (const uint64_t in_n, const uint64_t in_m,
75
+ std::initializer_list<uint64_t > data)
76
+ : n(in_n), m(in_m), expected(data) {
77
+ assert (data.size () == m);
78
+ }
79
+ };
80
+ const std::vector<TestCase> test_cases = {
81
+ TestCase (0 , 0 , {}),
82
+ TestCase (0 , 1 , {0 }),
83
+ TestCase (0 , 2 , {0 , 0 }),
84
+ TestCase (1 , 0 , {}),
85
+ TestCase (1 , 1 , {1 }),
86
+ TestCase (1 , 2 , {1 , 1 }),
87
+ TestCase (1 , 3 , {1 , 1 , 1 }),
88
+ TestCase (5 , 15 , {0 , 0 , 0 , 0 , 1 , 1 , 2 , 4 , 8 , 16 , 31 , 61 , 120 , 236 , 464 }),
89
+ TestCase (
90
+ 6 , 17 ,
91
+ {0 , 0 , 0 , 0 , 0 , 1 , 1 , 2 , 4 , 8 , 16 , 32 , 63 , 125 , 248 , 492 , 976 }),
92
+ TestCase (56 , 15 , {0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 })};
102
93
103
- // n = 56 m = 15 return [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
104
- std::cout << " 4th test" ;
105
- std::vector<uint64_t > arr4 = math::n_bonacci::N_bonacci (
106
- 56 , 15 ); // first input is the param n and second one is the param m
107
- // for N-bonacci func
108
- std::vector<uint64_t > output_array4 = {
109
- 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
110
- 0 , 0 , 0 , 0 , 0 , 0 , 0 }; // It is the expected output series of length m
111
- assert (std::equal (std::begin (arr4), std::end (arr4),
112
- std::begin (output_array4)));
94
+ for (const auto &tc : test_cases) {
95
+ assert (math::n_bonacci::N_bonacci (tc.n , tc.m ) == tc.expected );
96
+ }
113
97
std::cout << " passed" << std::endl;
114
98
}
115
99
0 commit comments