ade_graph/implementations/
edge.rs1use 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 pub fn key(&self) -> (u32, u32) {
16 (self.source, self.target)
17 }
18
19 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 assert_eq!(edge.source(), 42);
108 assert_eq!(edge.target(), 99);
109 }
110}