ade_graph/implementations/
edge.rs

1use ade_traits::EdgeTrait;
2
3#[derive(Debug, Clone)]
4pub struct Edge {
5    source: u32,
6    target: u32,
7}
8
9impl Edge {
10    pub fn new(source: u32, target: u32) -> Self {
11        Edge { source, target }
12    }
13
14    /// Returns the key used for HashMap storage
15    pub fn key(&self) -> (u32, u32) {
16        (self.source, self.target)
17    }
18
19    /// Creates a key from source and target IDs
20    pub fn make_key(source: u32, target: u32) -> (u32, u32) {
21        (source, target)
22    }
23}
24
25impl EdgeTrait for Edge {
26    fn new(source: u32, target: u32) -> Self {
27        Edge { source, target }
28    }
29
30    fn source(&self) -> u32 {
31        self.source
32    }
33
34    fn target(&self) -> u32 {
35        self.target
36    }
37}
38
39#[cfg(test)]
40mod tests {
41    use super::*;
42
43    #[test]
44    fn test_edge_creation() {
45        let edge = Edge::new(1, 2);
46        assert_eq!(edge.source(), 1);
47        assert_eq!(edge.target(), 2);
48    }
49
50    #[test]
51    fn test_source() {
52        let edge = Edge::new(5, 10);
53        assert_eq!(edge.source(), 5);
54    }
55
56    #[test]
57    fn test_target() {
58        let edge = Edge::new(5, 10);
59        assert_eq!(edge.target(), 10);
60    }
61
62    #[test]
63    fn test_key() {
64        let edge = Edge::new(1, 2);
65        assert_eq!(edge.key(), (1, 2));
66    }
67
68    #[test]
69    fn test_make_key() {
70        let key = Edge::make_key(3, 4);
71        assert_eq!(key, (3, 4));
72    }
73
74    #[test]
75    fn test_key_consistency() {
76        let edge = Edge::new(7, 8);
77        let manual_key = Edge::make_key(7, 8);
78        assert_eq!(edge.key(), manual_key);
79    }
80
81    #[test]
82    fn test_different_edges_different_keys() {
83        let edge1 = Edge::new(1, 2);
84        let edge2 = Edge::new(2, 1);
85        let edge3 = Edge::new(1, 3);
86
87        assert_ne!(edge1.key(), edge2.key());
88        assert_ne!(edge1.key(), edge3.key());
89        assert_ne!(edge2.key(), edge3.key());
90    }
91
92    #[test]
93    fn test_same_edges_same_keys() {
94        let edge1 = Edge::new(1, 2);
95        let edge2 = Edge::new(1, 2);
96
97        assert_eq!(edge1.key(), edge2.key());
98        assert_eq!(edge1.source(), edge2.source());
99        assert_eq!(edge1.target(), edge2.target());
100    }
101
102    #[test]
103    fn test_edge_trait_implementation() {
104        let edge = Edge::new(42, 99);
105
106        // Test that EdgeTrait methods work correctly
107        assert_eq!(edge.source(), 42);
108        assert_eq!(edge.target(), 99);
109    }
110}