1515#include < vector> // / for vector data structure
1616
1717/* *
18+ * @namespace bit_manipulation
19+ * @brief Bit manipulation algorithms
20+ */
21+ namespace bit_manipulation {
22+ /* *
23+ * @namespace gray_code
1824 * @brief Generate n-bit Gray code
25+ */
26+ namespace gray_code {
27+ /* *
28+ * @brief The main function to generate n-bit Gray code
1929 *
2030 * @param n Number of bits
2131 * @return A vector that stores the n-bit Gray code
2232 */
23-
2433std::vector<std::bitset<32 >> gray_code_generation (int n) {
2534 std::vector<std::bitset<32 >> gray_code = {}; // Initialise empty vector
26-
35+
2736 // No Gray codes for non-positive values of n
2837 if (n <= 0 ) {
2938 return gray_code;
@@ -37,15 +46,18 @@ std::vector<std::bitset<32>> gray_code_generation(int n) {
3746 }
3847
3948 return gray_code;
40- }
49+ }
50+ } // namespace gray_code
51+ } // namespace bit_manipulation
4152
4253/* *
4354 * @brief Self-test implementation
4455 *
4556 * @returns void
4657 */
47-
4858static void test () {
59+ std::vector<std::bitset<32 >> gray_code_negative_1 = {};
60+
4961 std::vector<std::bitset<32 >> gray_code_0 = {};
5062
5163 std::vector<std::bitset<32 >> gray_code_1 = {
@@ -79,12 +91,16 @@ static void test() {
7991 std::bitset<32 >(18 ), std::bitset<32 >(19 ), std::bitset<32 >(17 ), std::bitset<32 >(16 )
8092 };
8193
82- assert (gray_code_generation (0 ) == gray_code_0);
83- assert (gray_code_generation (1 ) == gray_code_1);
84- assert (gray_code_generation (2 ) == gray_code_2);
85- assert (gray_code_generation (3 ) == gray_code_3);
86- assert (gray_code_generation (4 ) == gray_code_4);
87- assert (gray_code_generation (5 ) == gray_code_5);
94+ // invalid values for n
95+ assert (bit_manipulation::gray_code::gray_code_generation (-1 ) == gray_code_negative_1);
96+ assert (bit_manipulation::gray_code::gray_code_generation (0 ) == gray_code_0);
97+
98+ // valid values for n
99+ assert (bit_manipulation::gray_code::gray_code_generation (1 ) == gray_code_1);
100+ assert (bit_manipulation::gray_code::gray_code_generation (2 ) == gray_code_2);
101+ assert (bit_manipulation::gray_code::gray_code_generation (3 ) == gray_code_3);
102+ assert (bit_manipulation::gray_code::gray_code_generation (4 ) == gray_code_4);
103+ assert (bit_manipulation::gray_code::gray_code_generation (5 ) == gray_code_5);
88104}
89105
90106/* *
0 commit comments