/ src / bit_utils.rs
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  }