ps_uuid/variant/methods/
prefix.rs1use crate::Variant;
2
3impl Variant {
4 #[must_use]
5 pub const fn prefix(self) -> u8 {
6 match self {
7 Self::NCS => 0x00,
8 Self::OSF => 0x80,
9 Self::DCOM => 0xC0,
10 Self::Reserved => 0xE0,
11 }
12 }
13}
14
15#[cfg(test)]
16mod tests {
17 use super::Variant;
18
19 #[test]
20 fn ncs_prefix_is_zero() {
21 assert_eq!(Variant::NCS.prefix(), 0x00);
22 }
23
24 #[test]
25 fn osf_prefix_is_0x80() {
26 assert_eq!(Variant::OSF.prefix(), 0x80);
27 }
28
29 #[test]
30 fn dcom_prefix_is_0xc0() {
31 assert_eq!(Variant::DCOM.prefix(), 0xC0);
32 }
33
34 #[test]
35 fn reserved_prefix_is_0xe0() {
36 assert_eq!(Variant::Reserved.prefix(), 0xE0);
37 }
38
39 #[test]
40 fn prefix_values_are_distinct() {
41 let prefixes = [
42 Variant::NCS.prefix(),
43 Variant::OSF.prefix(),
44 Variant::DCOM.prefix(),
45 Variant::Reserved.prefix(),
46 ];
47
48 for (i, &prefix_a) in prefixes.iter().enumerate() {
49 for &prefix_b in prefixes.iter().skip(i + 1) {
50 assert_ne!(prefix_a, prefix_b);
51 }
52 }
53 }
54
55 #[test]
56 fn prefix_preserves_variant_bit_pattern() {
57 assert_eq!(Variant::NCS.prefix() & 0x80, 0x00);
59
60 assert_eq!(Variant::OSF.prefix() & 0xC0, 0x80);
62
63 assert_eq!(Variant::DCOM.prefix() & 0xE0, 0xC0);
65
66 assert_eq!(Variant::Reserved.prefix() & 0xE0, 0xE0);
68 }
69}