ps_uuid/methods/
from_parts_v4.rs1use crate::UUID;
2
3impl UUID {
4 #[must_use]
8 pub const fn from_parts_v4(bytes: [u8; 16]) -> Self {
9 Self::from_bytes(bytes).with_version(4)
10 }
11}
12
13#[allow(clippy::cast_possible_truncation)]
14#[cfg(test)]
15mod tests {
16 use crate::UUID;
17
18 #[test]
19 fn sets_version_and_variant_correctly() {
20 let uuid = UUID::from_parts_v4([0u8; 16]);
22 assert_eq!(uuid.bytes[6] >> 4, 0b0100, "Version must be 4");
23 assert_eq!(
24 uuid.bytes[8] & 0b1100_0000,
25 0b1000_0000,
26 "Variant must be RFC 4122"
27 );
28
29 let uuid = UUID::from_parts_v4([0xFFu8; 16]);
31 assert_eq!(uuid.bytes[6] >> 4, 0b0100, "Version must be 4");
32 assert_eq!(
33 uuid.bytes[8] & 0b1100_0000,
34 0b1000_0000,
35 "Variant must be RFC 4122"
36 );
37
38 let mut input = [0xABu8; 16];
40 input[6] = 0x12;
41 input[8] = 0x34;
42 let uuid = UUID::from_parts_v4(input);
43 assert_eq!(uuid.bytes[6] >> 4, 0b0100, "Version must be 4");
44 assert_eq!(
45 uuid.bytes[8] & 0b1100_0000,
46 0b1000_0000,
47 "Variant must be RFC 4122"
48 );
49 }
50
51 #[test]
52 fn preserves_other_bytes() {
53 let mut input = [0u8; 16];
54
55 for (i, item) in input.iter_mut().enumerate() {
56 *item = i as u8;
57 }
58
59 let uuid = UUID::from_parts_v4(input);
60
61 for i in 0..16 {
63 if i == 6 {
64 assert_eq!(uuid.bytes[6] & 0xF0, 0x40, "Version bits must be set");
65 } else if i == 8 {
66 assert_eq!(uuid.bytes[8] & 0xC0, 0x80, "Variant bits must be set");
67 } else {
68 assert_eq!(uuid.bytes[i], i as u8, "Other bytes must be unchanged");
69 }
70 }
71 }
72
73 #[test]
74 fn version_and_variant_are_reported() {
75 let uuid = UUID::from_parts_v4([0u8; 16]);
76 assert_eq!(uuid.get_version(), Some(4));
77 }
79}