bitmask-enum 1.0.0

A bitmask enum attribute macro
Documentation
#[cfg(test)]
mod tests {
    use bitmask_enum::bitmask;

    #[bitmask]
    enum Bitmask {
        Flag0,
        Flag1,
        Flag2,
        Flag3,
        Flag4,
        Flag5,
        Flag6,
        Flag7,
        Flag8,
        Flag9,
    }

    #[test]
    fn test() {
        let mut bm = Bitmask::none();
        assert_eq!(bm, 0usize);

        bm |= Bitmask::Flag5;
        assert_eq!(bm, Bitmask::Flag5);

        bm |= Bitmask::Flag1 | Bitmask::Flag9;
        assert_eq!(bm, 0b1000100010);

        bm &= !Bitmask::Flag1 & !Bitmask::Flag5;
        assert_eq!(bm, 0b1000000000);

        bm |= !Bitmask::Flag9;
        assert_eq!(bm.is_all(), true);
    }

    #[test]
    fn test_all() {
        let all = Bitmask::all();
        assert_eq!(all.is_all(), true);
        assert_eq!(all, std::usize::MAX);
    }

    #[test]
    fn test_none() {
        let none = Bitmask::none();
        assert_eq!(none.is_none(), true);
        assert_eq!(none, std::usize::MIN);
    }

    #[test]
    fn test_contains() {
        let bm = Bitmask::Flag4;
        assert_eq!(bm.contains(Bitmask::Flag4), true);
        assert_eq!(bm.contains(Bitmask::Flag4 | Bitmask::Flag1), true);
        assert_eq!(bm.contains(Bitmask::Flag1), false);
    }

    #[test]
    fn test_contains_all() {
        let bm = Bitmask::Flag4 | Bitmask::Flag6;
        assert_eq!(bm.contains_all(Bitmask::Flag4), true);
        assert_eq!(bm.contains_all(Bitmask::Flag4 | Bitmask::Flag6), true);
        assert_eq!(bm.contains_all(Bitmask::Flag1), false);
        assert_eq!(bm.contains_all(Bitmask::Flag4 | Bitmask::Flag1), false);
    }
}