bit_utils.rs
1 #[inline] 2 pub fn get_bit(byte: u8, bit_index: usize) -> bool { 3 let bit_mask = 0x1; 4 let shifted_bit = byte >> bit_index; 5 (shifted_bit & bit_mask) == 1 6 } 7 8 /* 9 #[inline] 10 fn get_bit_range(byte: u8, from: usize, to: usize) -> Vec<bool> { 11 12 } 13 */ 14 15 #[inline] 16 pub fn set_bit(byte: u8, bit_index: usize, value: bool) -> u8 { 17 if value { 18 (1 << bit_index) | byte 19 } else { 20 !(1 << bit_index) | byte 21 } 22 } 23 24 #[inline] 25 pub fn toggle_bit(byte: u8, bit_index: usize) -> u8 { 26 (1 << bit_index) ^ byte 27 } 28 29 #[cfg(test)] 30 mod tests { 31 use super::*; 32 33 #[test] 34 fn get_bit_test() { 35 let b1 = 128; 36 assert!(get_bit(b1, 7)); 37 38 let b2 = 136; 39 assert!(get_bit(b2, 3)); 40 } 41 42 #[test] 43 fn set_bit_test() { 44 let b1 = 128; 45 assert_eq!(136, set_bit(b1, 3, true)); 46 47 let b2 = 8; 48 assert_eq!(136, set_bit(b2, 7, true)); 49 } 50 51 #[test] 52 fn toggle_bit_test() { 53 let b1 = 128; 54 assert_eq!(136, toggle_bit(b1, 3)); 55 } 56 }