1414/// # Examples
1515///
1616/// ```
17- /// use rust_algorithms ::bit_manipulation::swap_odd_even_bits;
17+ /// use the_algorithms_rust ::bit_manipulation::swap_odd_even_bits;
1818///
1919/// assert_eq!(swap_odd_even_bits(0), 0);
2020/// assert_eq!(swap_odd_even_bits(1), 2);
2828pub fn swap_odd_even_bits ( num : u32 ) -> u32 {
2929 // Get all even bits - 0xAAAAAAAA is a 32-bit number with all even bits set to 1
3030 let even_bits = num & 0xAAAAAAAA ;
31-
31+
3232 // Get all odd bits - 0x55555555 is a 32-bit number with all odd bits set to 1
3333 let odd_bits = num & 0x55555555 ;
34-
34+
3535 // Right shift even bits and left shift odd bits and swap them
3636 ( even_bits >> 1 ) | ( odd_bits << 1 )
3737}
3838
39- /// Formats binary representation of two numbers for display.
40- ///
41- /// # Arguments
42- ///
43- /// * `before` - The original number
44- /// * `after` - The transformed number
45- ///
46- /// # Returns
47- ///
48- /// A formatted string showing both numbers in binary
49- fn show_bits ( before : u32 , after : u32 ) -> String {
50- format ! ( "{:>5}: {:08b}\n {:>5}: {:08b}" , before, before, after, after)
51- }
52-
5339#[ cfg( test) ]
5440mod tests {
5541 use super :: * ;
@@ -64,39 +50,23 @@ mod tests {
6450 assert_eq ! ( swap_odd_even_bits( 5 ) , 10 ) ;
6551 assert_eq ! ( swap_odd_even_bits( 6 ) , 9 ) ;
6652 assert_eq ! ( swap_odd_even_bits( 23 ) , 43 ) ;
53+ assert_eq ! ( swap_odd_even_bits( 24 ) , 36 ) ;
6754 }
6855
6956 #[ test]
70- fn test_show_bits ( ) {
71- assert_eq ! (
72- show_bits( 0 , swap_odd_even_bits( 0 ) ) ,
73- " 0: 00000000\n 0: 00000000"
74- ) ;
75- assert_eq ! (
76- show_bits( 1 , swap_odd_even_bits( 1 ) ) ,
77- " 1: 00000001\n 2: 00000010"
78- ) ;
79- assert_eq ! (
80- show_bits( 23 , swap_odd_even_bits( 23 ) ) ,
81- " 23: 00010111\n 43: 00101011"
82- ) ;
83- }
57+ fn test_edge_cases ( ) {
58+ // All bits set
59+ assert_eq ! ( swap_odd_even_bits( 0xFFFFFFFF ) , 0xFFFFFFFF ) ;
8460
85- #[ test]
86- fn test_display_output ( ) {
87- let test_cases = vec ! [ 0 , 1 , 2 , 3 , 4 , 23 , 24 ] ;
88-
89- for i in test_cases {
90- let result = show_bits ( i, swap_odd_even_bits ( i) ) ;
91- println ! ( "{}\n " , result) ;
92- }
61+ // Alternating patterns
62+ assert_eq ! ( swap_odd_even_bits( 0xAAAAAAAA ) , 0x55555555 ) ;
63+ assert_eq ! ( swap_odd_even_bits( 0x55555555 ) , 0xAAAAAAAA ) ;
9364 }
94- }
9565
96- fn main ( ) {
97- println ! ( "Swapping odd and even bits: \n " ) ;
98-
99- for i in [ 0 , 1 , 2 , 3 , 4 , 23 , 24 ] {
100- println ! ( "{} \n " , show_bits ( i , swap_odd_even_bits( i ) ) ) ;
66+ # [ test ]
67+ fn test_power_of_two ( ) {
68+ assert_eq ! ( swap_odd_even_bits ( 16 ) , 32 ) ;
69+ assert_eq ! ( swap_odd_even_bits ( 32 ) , 16 ) ;
70+ assert_eq ! ( swap_odd_even_bits( 64 ) , 128 ) ;
10171 }
10272}
0 commit comments