15
15
#include < vector> // / for vector data structure
16
16
17
17
/* *
18
+ * @namespace bit_manipulation
19
+ * @brief Bit manipulation algorithms
20
+ */
21
+ namespace bit_manipulation {
22
+ /* *
23
+ * @namespace gray_code
18
24
* @brief Generate n-bit Gray code
25
+ */
26
+ namespace gray_code {
27
+ /* *
28
+ * @brief The main function to generate n-bit Gray code
19
29
*
20
30
* @param n Number of bits
21
31
* @return A vector that stores the n-bit Gray code
22
32
*/
23
-
24
33
std::vector<std::bitset<32 >> gray_code_generation (int n) {
25
34
std::vector<std::bitset<32 >> gray_code = {}; // Initialise empty vector
26
-
35
+
27
36
// No Gray codes for non-positive values of n
28
37
if (n <= 0 ) {
29
38
return gray_code;
@@ -37,15 +46,18 @@ std::vector<std::bitset<32>> gray_code_generation(int n) {
37
46
}
38
47
39
48
return gray_code;
40
- }
49
+ }
50
+ } // namespace gray_code
51
+ } // namespace bit_manipulation
41
52
42
53
/* *
43
54
* @brief Self-test implementation
44
55
*
45
56
* @returns void
46
57
*/
47
-
48
58
static void test () {
59
+ std::vector<std::bitset<32 >> gray_code_negative_1 = {};
60
+
49
61
std::vector<std::bitset<32 >> gray_code_0 = {};
50
62
51
63
std::vector<std::bitset<32 >> gray_code_1 = {
@@ -79,12 +91,16 @@ static void test() {
79
91
std::bitset<32 >(18 ), std::bitset<32 >(19 ), std::bitset<32 >(17 ), std::bitset<32 >(16 )
80
92
};
81
93
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);
88
104
}
89
105
90
106
/* *
0 commit comments