Skip to main content

llama_cpp_bindings/context/
llama_state_seq_flags.rs

1#[derive(Debug, Clone, Copy, PartialEq, Eq)]
2pub struct LlamaStateSeqFlags {
3    flags: u32,
4}
5
6impl LlamaStateSeqFlags {
7    pub const PARTIAL_ONLY: Self = Self { flags: 1 };
8
9    #[must_use]
10    pub const fn empty() -> Self {
11        Self { flags: 0 }
12    }
13
14    #[must_use]
15    pub const fn bits(&self) -> u32 {
16        self.flags
17    }
18
19    #[must_use]
20    pub const fn contains(&self, other: Self) -> bool {
21        (self.flags & other.flags) == other.flags
22    }
23}
24
25impl std::ops::BitOr for LlamaStateSeqFlags {
26    type Output = Self;
27
28    fn bitor(self, rhs: Self) -> Self {
29        Self {
30            flags: self.flags | rhs.flags,
31        }
32    }
33}
34
35#[cfg(test)]
36mod tests {
37    use super::LlamaStateSeqFlags;
38
39    #[test]
40    fn empty_has_no_bits_set() {
41        assert_eq!(LlamaStateSeqFlags::empty().bits(), 0);
42    }
43
44    #[test]
45    fn partial_only_has_bit_one() {
46        assert_eq!(LlamaStateSeqFlags::PARTIAL_ONLY.bits(), 1);
47    }
48
49    #[test]
50    fn bitor_combines_flags() {
51        let combined = LlamaStateSeqFlags::empty() | LlamaStateSeqFlags::PARTIAL_ONLY;
52
53        assert_eq!(combined.bits(), 1);
54    }
55
56    #[test]
57    fn contains_detects_set_flag() {
58        let flags = LlamaStateSeqFlags::PARTIAL_ONLY;
59
60        assert!(flags.contains(LlamaStateSeqFlags::PARTIAL_ONLY));
61    }
62
63    #[test]
64    fn empty_does_not_contain_partial_only() {
65        let flags = LlamaStateSeqFlags::empty();
66
67        assert!(!flags.contains(LlamaStateSeqFlags::PARTIAL_ONLY));
68    }
69}