use crate::Variant;
impl Variant {
#[must_use]
pub const fn prefix(self) -> u8 {
match self {
Self::NCS => 0x00,
Self::OSF => 0x80,
Self::DCOM => 0xC0,
Self::Reserved => 0xE0,
}
}
}
#[cfg(test)]
mod tests {
use super::Variant;
#[test]
fn ncs_prefix_is_zero() {
assert_eq!(Variant::NCS.prefix(), 0x00);
}
#[test]
fn osf_prefix_is_0x80() {
assert_eq!(Variant::OSF.prefix(), 0x80);
}
#[test]
fn dcom_prefix_is_0xc0() {
assert_eq!(Variant::DCOM.prefix(), 0xC0);
}
#[test]
fn reserved_prefix_is_0xe0() {
assert_eq!(Variant::Reserved.prefix(), 0xE0);
}
#[test]
fn prefix_values_are_distinct() {
let prefixes = [
Variant::NCS.prefix(),
Variant::OSF.prefix(),
Variant::DCOM.prefix(),
Variant::Reserved.prefix(),
];
for (i, &prefix_a) in prefixes.iter().enumerate() {
for &prefix_b in prefixes.iter().skip(i + 1) {
assert_ne!(prefix_a, prefix_b);
}
}
}
#[test]
fn prefix_preserves_variant_bit_pattern() {
assert_eq!(Variant::NCS.prefix() & 0x80, 0x00);
assert_eq!(Variant::OSF.prefix() & 0xC0, 0x80);
assert_eq!(Variant::DCOM.prefix() & 0xE0, 0xC0);
assert_eq!(Variant::Reserved.prefix() & 0xE0, 0xE0);
}
}