Skip to main content

ps_uuid/methods/
get_clock_seq.rs

1use crate::UUID;
2
3impl UUID {
4    #[must_use]
5    pub const fn get_clock_seq(&self) -> Option<u16> {
6        match self.get_version() {
7            Some(1 | 2 | 6) => Some(u16::from_be_bytes([self.bytes[8], self.bytes[9]]) & 0x3FFF),
8            _ => None,
9        }
10    }
11}
12
13#[cfg(test)]
14mod tests {
15    use crate::UUID;
16
17    // Helper to create a UUID with a specific version and clock_seq
18    const fn make_uuid_with_version_and_clock_seq(version: u8, clock_seq: u16) -> UUID {
19        let mut uuid = UUID::nil();
20
21        // Set clock_seq in bytes 8 and 9 (big-endian)
22        let clock_seq_bytes = clock_seq.to_be_bytes();
23
24        uuid.bytes[8] = clock_seq_bytes[0];
25        uuid.bytes[9] = clock_seq_bytes[1];
26
27        // set variant and version bits
28        uuid.with_version(version)
29    }
30
31    #[test]
32    fn test_get_clock_seq_version_1() {
33        let clock_seq = 0x3ABC;
34        let uuid = make_uuid_with_version_and_clock_seq(1, clock_seq);
35        assert_eq!(uuid.get_clock_seq(), Some(clock_seq & 0x3FFF));
36    }
37
38    #[test]
39    fn test_get_clock_seq_version_2() {
40        let clock_seq = 0x1234;
41        let uuid = make_uuid_with_version_and_clock_seq(2, clock_seq);
42        assert_eq!(uuid.get_clock_seq(), Some(clock_seq & 0x3FFF));
43    }
44
45    #[test]
46    fn test_get_clock_seq_version_6() {
47        let clock_seq = 0x3FFF;
48        let uuid = make_uuid_with_version_and_clock_seq(6, clock_seq);
49        assert_eq!(uuid.get_clock_seq(), Some(clock_seq & 0x3FFF));
50    }
51
52    #[test]
53    fn test_get_clock_seq_other_version() {
54        let clock_seq = 0x3ABC;
55        let uuid = make_uuid_with_version_and_clock_seq(4, clock_seq);
56        assert_eq!(uuid.get_clock_seq(), None);
57    }
58
59    #[test]
60    fn test_get_clock_seq_invalid_version() {
61        // UUID with version() returning None
62        let uuid = UUID::nil();
63
64        assert_eq!(uuid.get_version(), None);
65        assert_eq!(uuid.get_clock_seq(), None);
66    }
67}