bit_fiddler 2.1.1

Macros for common bit operations with multiple convenient patterns
Documentation
use bit_fiddler::is_set;

#[test]
fn is_set_single_bit() {
    let bitmap: u8 = 0b_1000_0000;

    let res = is_set!(bitmap, u8, 7);
    assert_eq!(res, true);

    let res = is_set!(bitmap, u8, 6);
    assert_eq!(res, false);
}

#[test]
fn is_set_single_bit_rev() {
    let bitmap: u8 = 0b_1000_0000;

    let res = is_set!(bitmap, u8, rev 0);
    assert_eq!(res, true);

    let res = is_set!(bitmap, u8, rev 3);
    assert_eq!(res, false);
}

#[test]
fn is_set_multiple_bits() {
    let bitmap: u8 = 0b_0011_1000;

    let res = is_set!(bitmap, u8, [3, 4, 5]);
    assert_eq!(res, true);

    let res = is_set!(0b_0101_0101, u8, [1, 5]);
    assert_eq!(res, false);
}

#[test]
fn is_set_multiple_bits_rev() {
    let res = is_set!(0b_0101_0101, u8, rev [1, 5]);
    assert_eq!(res, true);

    let res = is_set!(0b_0101_0101, u8, rev [0, 7]);
    assert_eq!(res, false);
}

#[test]
fn is_set_range() {
    let bitmap: u8 = 0b_1111_1111;

    let res = is_set!(bitmap, u8, [0..8]);
    assert_eq!(res, true);

    let res = is_set!(0b_0110_1100, u8, [2..4]);
    assert_eq!(res, true);

    let res = is_set!(0b_1111_1000, u8, [3..]);
    assert_eq!(res, true);

    let res = is_set!(0b_1111_1000, u8, [2..]);
    assert_eq!(res, false);

    let res = is_set!(0b_0110_1111, u8, [..4]);
    assert_eq!(res, true);

    let res = is_set!(0b_0110_1111, u8, [..5]);
    assert_eq!(res, false);

    let res = is_set!((!0), u8, [..]);
    assert_eq!(res, true);

    let res = is_set!(0b_0111_1111, u8, [..]);
    assert_eq!(res, false);
}

#[test]
fn is_set_range_rev() {
    let bitmap: u8 = 0b_1111_1111;

    let res = is_set!(bitmap, u8, rev[0..8]);
    assert_eq!(res, true);

    let res = is_set!(0b_0110_1100, u8, rev[2..4]);
    assert_eq!(res, false);

    let res = is_set!(0b_0001_1111, u8, rev [3..]);
    assert_eq!(res, true);

    let res = is_set!(0b_0001_1111, u8, rev [2..]);
    assert_eq!(res, false);

    let res = is_set!(0b_1111_0110, u8, rev [..4]);
    assert_eq!(res, true);

    let res = is_set!(0b_1111_0110, u8, rev [..5]);
    assert_eq!(res, false);

    let res = is_set!((!0), u8, rev [..]);
    assert_eq!(res, true);

    let res = is_set!(0b_0111_1111, u8, rev [..]);
    assert_eq!(res, false);
}

#[test]
fn is_set_counted_range() {
    let bitmap: u8 = 0b_1111_1111;

    let res = is_set!(bitmap, u8, [start = 0, count = 8]);
    assert_eq!(res, true);

    let res = is_set!(0b_0110_1100, u8, [start = 2, count = 2]);
    assert_eq!(res, true);
}

#[test]
fn is_set_counted_range_rev() {
    let bitmap: u8 = 0b_1111_1111;

    let res = is_set!(bitmap, u8, rev [start = 0, count = 8]);
    assert_eq!(res, true);

    let res = is_set!(0b_0110_1100, u8, rev [start = 1, count = 5]);
    assert_eq!(res, false);
}