embedded-nano-mesh 2.1.11

Lightweight mesh communication protocol for embedded devices
Documentation
use core::ops::{BitAnd, BitXorAssign};

#[inline]
pub fn is_flag_set(bit_field: u8, bit_mask: u8) -> bool {
    bit_field.bitand(bit_mask) == bit_mask
}

#[inline]
pub fn toggle_flag(bit_field: &mut u8, bit_mask: u8) {
    bit_field.bitxor_assign(bit_mask)
}

#[inline]
pub fn set_flag(bit_field: &mut u8, bit_mask: u8, new_state: bool) {
    if is_flag_set(*bit_field, bit_mask) == new_state {
        return;
    }
    toggle_flag(bit_field, bit_mask);
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn test_if_flag_set_true() {
        let bit_field: u8 = 0b00000001;
        assert!(is_flag_set(bit_field, 0b00000001));
    }
    #[test]
    fn test_if_flag_set_false() {
        let bit_field: u8 = 0b00000000;
        assert!(!is_flag_set(bit_field, 0b00000001));
    }
    #[test]
    fn flag_toggle_to_true() {
        let mut bit_field: u8 = 0b00000000;
        toggle_flag(&mut bit_field, 0b00000001);
        assert!(is_flag_set(bit_field, 0b00000001));
    }
    #[test]
    fn flag_toggle_to_false() {
        let mut bit_field: u8 = 0b00000001;
        toggle_flag(&mut bit_field, 0b00000001);
        assert!(!is_flag_set(bit_field, 0b00000001));
    }
    #[test]
    fn set_flag_from_false_to_true() {
        let mut bit_field: u8 = 0b00000000;
        set_flag(&mut bit_field, 0b00000001, true);
        assert!(is_flag_set(bit_field, 0b00000001));
    }
    #[test]
    fn set_flag_from_true_to_false() {
        let mut bit_field: u8 = 0b00000001;
        set_flag(&mut bit_field, 0b00000001, false);
        assert!(!is_flag_set(bit_field, 0b00000001));
    }
    #[test]
    fn set_flag_from_true_to_true() {
        let mut bit_field: u8 = 0b00000001;
        set_flag(&mut bit_field, 0b00000001, true);
        assert!(is_flag_set(bit_field, 0b00000001));
    }
    #[test]
    fn set_flag_from_false_to_false() {
        let mut bit_field: u8 = 0b00000000;
        set_flag(&mut bit_field, 0b00000001, false);
        assert!(!is_flag_set(bit_field, 0b00000001));
    }
    #[test]
    fn set_second_flag() {
        let mut bit_field: u8 = 0b00000000;
        set_flag(&mut bit_field, 0b00000001, true);
        assert!(is_flag_set(bit_field, 0b00000001));
        set_flag(&mut bit_field, 0b00000010, true);
        assert!(is_flag_set(bit_field, 0b00000010));
    }
}