fn_graph/
edge_counts.rs

1/// Number of incoming and outgoing edges.
2///
3/// This is used during streaming -- a clone of the relevant edge counts is
4///  decremented each time.
5#[derive(Clone, Debug, Default, PartialEq, Eq)]
6pub struct EdgeCounts {
7    /// Number of incoming (parent) edges.
8    incoming: Vec<usize>,
9    /// Number of outgoing (child) edges.
10    outgoing: Vec<usize>,
11}
12
13impl EdgeCounts {
14    /// Returns new `EdgeCounts`.
15    pub fn new(incoming: Vec<usize>, outgoing: Vec<usize>) -> Self {
16        Self { incoming, outgoing }
17    }
18
19    /// Get a reference to the incoming (parent) counts.
20    pub fn incoming(&self) -> &[usize] {
21        self.incoming.as_ref()
22    }
23
24    /// Get a reference to the outgoing (parent) counts.
25    pub fn outgoing(&self) -> &[usize] {
26        self.outgoing.as_ref()
27    }
28}
29
30#[cfg(test)]
31mod tests {
32    use super::EdgeCounts;
33
34    #[test]
35    fn clone() {
36        let edge_counts = EdgeCounts {
37            incoming: vec![1, 2],
38            outgoing: vec![2, 1],
39        };
40
41        assert_eq!(edge_counts, edge_counts.clone());
42    }
43
44    #[test]
45    fn debug() {
46        let edge_counts = EdgeCounts {
47            incoming: vec![1, 2],
48            outgoing: vec![2, 1],
49        };
50
51        assert_eq!(
52            "EdgeCounts { incoming: [1, 2], outgoing: [2, 1] }",
53            format!("{edge_counts:?}")
54        );
55    }
56
57    #[test]
58    fn partial_eq() {
59        let edge_counts_0 = EdgeCounts {
60            incoming: vec![1, 2],
61            outgoing: vec![2, 1],
62        };
63        let edge_counts_1 = EdgeCounts {
64            incoming: vec![2, 3],
65            outgoing: vec![3, 2],
66        };
67
68        assert_eq!(edge_counts_0, edge_counts_0.clone());
69        assert!(edge_counts_0 != edge_counts_1);
70    }
71}