1pub fn get_bit_at_index(byte: u8, bit_index: u8) -> bool {
2 let mask = 0b10000000 >> bit_index;
3
4 mask & byte != 0
5}
6
7pub fn set_bit_at_index(byte: u8, bit_index: u8, enabled: bool) -> u8 {
8 let mask = 0b10000000 >> bit_index;
9
10 if enabled {
11 mask | byte
12 } else {
13 (mask ^ 0b11111111) & byte
14 }
15}
16
17#[cfg(test)]
18mod tests {
19 use super::*;
20
21 #[test]
22 fn test_set_bit_at_index_enable() {
23 let input = 0b00000000;
24 let actual = set_bit_at_index(input, 3, true);
25
26 assert_eq!(actual, 0b00010000)
27 }
28
29 #[test]
30 fn test_set_bit_at_index_disable() {
31 let byte = 0b11111111;
32
33 let output = set_bit_at_index(byte, 3, false);
34 assert_eq!(output, 0b11101111)
35 }
36
37 #[test]
38 fn test_get_bit_at_index() {
39 let input = 0b00010000;
40 let bit_state = get_bit_at_index(input, 3);
41
42 assert!(bit_state)
43 }
44}