1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
use crate::ConcurrentVec;
use core::fmt::Debug;
use orx_concurrent_option::ConcurrentOption;
use orx_fixed_vec::IntoConcurrentPinnedVec;

const ELEM_PER_LINE: usize = 8;

impl<T, P> Debug for ConcurrentVec<T, P>
where
    P: IntoConcurrentPinnedVec<ConcurrentOption<T>>,
    T: Debug,
{
    fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
        let len = self.len();
        let capacity = self.capacity();

        write!(f, "ConcurrentVec {{")?;
        write!(f, "\n    len: {},", len)?;
        write!(f, "\n    capacity: {},", capacity)?;
        write!(f, "\n    data: [,")?;
        for i in 0..len {
            if i % ELEM_PER_LINE == 0 {
                write!(f, "\n        ")?;
            }
            match self.get(i) {
                Some(x) => write!(f, "{:?}, ", x)?,
                None => write!(f, "*, ")?,
            }
        }
        write!(f, "\n    ],")?;
        write!(f, "\n}}")
    }
}

#[cfg(test)]
mod tests {
    use super::*;
    extern crate alloc;

    #[test]
    fn debug() {
        let vec = ConcurrentVec::new();
        vec.extend([0, 4, 1, 2, 5, 6, 32, 5, 1, 121, 2, 42]);
        let dbg_str = alloc::format!("{:?}", &vec);
        assert_eq!(dbg_str, "ConcurrentVec {\n    len: 12,\n    capacity: 12,\n    data: [,\n        0, 4, 1, 2, 5, 6, 32, 5, \n        1, 121, 2, 42, \n    ],\n}");
    }
}