#[cfg(test)]
mod tests
{
use hexga_bitflags::*;
#[allow(unused_imports)]
use serde::{Deserialize, Serialize};
#[bit_index]
#[repr(u8)]
pub enum Color
{
Red,
Green,
Blue = 5,
Yellow, RedAndBlue = Color::Red | Self::Blue,
Purple, GreenAndYellowAndPurple = (Color::Yellow | Self::Purple) | Self::Green,
}
#[test]
fn increment_variant()
{
assert_eq!(Color::Red as u8, 0);
assert_eq!(Color::Red.index(), 0);
assert_eq!(Color::Red.bits(), 0b1);
assert_eq!(Color::Red.flags().bits(), 0b1);
assert_eq!(Color::Green as u8, 1);
assert_eq!(Color::Green.index(), 1);
assert_eq!(Color::Green.bits(), 0b10);
assert_eq!(Color::Green.flags().bits(), 0b10);
assert_eq!(ColorFlags::ZERO.with_red(true), ColorFlags::Red);
let mut red = ColorFlags::ZERO;
red.set_red(true);
assert_eq!(red, ColorFlags::Red);
assert_eq!(ColorFlags::Red.union(ColorFlags::Blue).is_all_red_and_blue(), true);
assert_eq!(ColorFlags::ZERO.toggled_red_and_blue(), ColorFlags::RedAndBlue);
assert_eq!(ColorFlags::Red.toggled_red_and_blue(), ColorFlags::Blue);
assert_eq!(Color::Blue as u8, 5);
assert_eq!(Color::Blue.index(), 5);
assert_eq!(Color::Blue.bits(), 0b100000);
assert_eq!(Color::Blue.flags().bits(), 0b100000);
assert_eq!(Color::Yellow as u8, 6);
assert_eq!(Color::Yellow.index(), 6);
assert_eq!(Color::Yellow.bits(), 0b1000000);
assert_eq!(Color::Yellow.flags().bits(), 0b1000000);
assert_eq!(Color::Purple as u8, 7);
assert_eq!(Color::Purple.index(), 7);
assert_eq!(Color::Purple.bits(), 0b10000000);
assert_eq!(Color::Purple.flags().bits(), 0b10000000);
assert_eq!(Color::Red | Color::Blue, ColorFlags::RedAndBlue);
assert_eq!(ColorFlags::Red | Color::Blue, ColorFlags::RedAndBlue);
assert_eq!(ColorFlags::Blue | Color::Red, ColorFlags::RedAndBlue);
assert_eq!(Color::Red | ColorFlags::Blue, ColorFlags::RedAndBlue);
assert_eq!(Color::Blue | ColorFlags::Red, ColorFlags::RedAndBlue);
assert_eq!(ColorFlags::Blue | ColorFlags::Red, ColorFlags::RedAndBlue);
assert_eq!(ColorFlags::Red | ColorFlags::Blue, ColorFlags::RedAndBlue);
assert_eq!(ColorFlags::GreenAndYellowAndPurple, Color::Green | Color::Yellow | Color::Purple);
assert_eq!(ColorFlags::RedAndBlue.collect::<Vec<_>>(), vec![Color::Red, Color::Blue]);
assert_eq!(
ColorFlags::GreenAndYellowAndPurple.collect::<Vec<_>>(),
vec![Color::Green, Color::Yellow, Color::Purple]
);
assert_eq!(ColorFlags::RedAndBlue & Color::Red, Color::Red);
assert_eq!(ColorFlags::RedAndBlue & Color::Red, ColorFlags::Red);
}
}