use crate::constant::{
CAPABILITIES_ALWAYS_DISABLED, CAPABILITIES_ALWAYS_ENABLED, CAPABILITIES_CONFIGURABLE,
CapabilityFlags,
};
#[test]
fn capability_flags_classification() {
const ALL_FLAGS: u32 = 0xFFFFFFFF;
let always_enabled = CAPABILITIES_ALWAYS_ENABLED;
let configurable = CAPABILITIES_CONFIGURABLE;
let always_disabled = CAPABILITIES_ALWAYS_DISABLED;
assert!(
always_enabled.intersection(configurable).is_empty(),
"ALWAYS_ENABLED and CONFIGURABLE must not overlap"
);
assert!(
always_enabled.intersection(always_disabled).is_empty(),
"ALWAYS_ENABLED and ALWAYS_DISABLED must not overlap"
);
assert!(
configurable.intersection(always_disabled).is_empty(),
"CONFIGURABLE and ALWAYS_DISABLED must not overlap"
);
let union = always_enabled | configurable | always_disabled;
assert_eq!(
union.bits(),
ALL_FLAGS,
"Union of all three categories must equal all possible flags (0xFFFFFFFF). Missing flags: 0x{:08X}",
ALL_FLAGS & !union.bits()
);
assert!(
always_enabled.contains(CapabilityFlags::CLIENT_PROTOCOL_41),
"CLIENT_PROTOCOL_41 must be always enabled"
);
assert!(
always_enabled.contains(CapabilityFlags::CLIENT_PLUGIN_AUTH),
"CLIENT_PLUGIN_AUTH must be always enabled"
);
assert!(
always_disabled.contains(CapabilityFlags::CLIENT_INTERACTIVE),
"CLIENT_INTERACTIVE must be always disabled (we're not interactive)"
);
}