graph_api_test/steps/
edges.rs1use crate::{Edge, EdgeLabel, Vertex, assert_elements_eq, assert_elements_one_of, populate_graph};
2use graph_api_lib::{EdgeSearch, Graph};
3
4pub fn test_out_edges<T>(graph: &mut T)
5where
6 T: Graph<Vertex = Vertex, Edge = Edge>,
7{
8 let refs = populate_graph(graph);
9 let collected = graph
10 .walk()
11 .vertices_by_id(vec![refs.bryn])
12 .edges(EdgeSearch::scan().outgoing())
13 .collect::<Vec<_>>();
14 assert_elements_eq!(
15 graph,
16 collected,
17 vec![refs.bryn_knows_julia, refs.bryn_created_graph_api]
18 );
19}
20
21pub fn test_out_edges_limit<T>(graph: &mut T)
22where
23 T: Graph<Vertex = Vertex, Edge = Edge>,
24{
25 let refs = populate_graph(graph);
26 let collected = graph
27 .walk()
28 .vertices_by_id(vec![refs.bryn])
29 .edges(EdgeSearch::scan().outgoing().with_limit(1))
30 .collect::<Vec<_>>();
31 assert_elements_one_of!(
32 graph,
33 collected,
34 vec![refs.bryn_knows_julia, refs.bryn_created_graph_api]
35 );
36}
37
38pub fn test_in_edges<T>(graph: &mut T)
39where
40 T: Graph<Vertex = Vertex, Edge = Edge>,
41{
42 let refs = populate_graph(graph);
43 let collected = graph
44 .walk()
45 .vertices_by_id(vec![refs.bryn])
46 .edges(EdgeSearch::scan().incoming())
47 .collect::<Vec<_>>();
48 assert_elements_eq!(graph, collected, vec![refs.julia_knows_bryn]);
49}
50
51pub fn test_in_edges_limit<T>(graph: &mut T)
52where
53 T: Graph<Vertex = Vertex, Edge = Edge>,
54{
55 let refs = populate_graph(graph);
56 let collected = graph
57 .walk()
58 .vertices_by_id(vec![refs.bryn])
59 .edges(EdgeSearch::scan().incoming().with_limit(1))
60 .collect::<Vec<_>>();
61 assert_elements_eq!(graph, collected, vec![refs.julia_knows_bryn]);
62}
63
64pub fn test_all_edges<T>(graph: &mut T)
65where
66 T: Graph<Vertex = Vertex, Edge = Edge>,
67{
68 let refs = populate_graph(graph);
69 let collected = graph
70 .walk()
71 .vertices_by_id(vec![refs.bryn])
72 .edges(EdgeSearch::scan())
73 .collect::<Vec<_>>();
74 assert_elements_eq!(
75 graph,
76 collected,
77 vec![
78 refs.bryn_knows_julia,
79 refs.bryn_created_graph_api,
80 refs.julia_knows_bryn
81 ]
82 );
83}
84
85pub fn test_all_edges_limit<T>(graph: &mut T)
86where
87 T: Graph<Vertex = Vertex, Edge = Edge>,
88{
89 let refs = populate_graph(graph);
90 let collected = graph
91 .walk()
92 .vertices_by_id(vec![refs.bryn])
93 .edges(EdgeSearch::scan().with_limit(1))
94 .collect::<Vec<_>>();
95 assert_elements_one_of!(
96 graph,
97 collected,
98 vec![refs.bryn_knows_julia, refs.bryn_created_graph_api]
99 );
100}
101
102pub fn test_out_edges_filtered<T>(graph: &mut T)
103where
104 T: Graph<Vertex = Vertex, Edge = Edge>,
105{
106 let refs = populate_graph(graph);
107 let collected = graph
108 .walk()
109 .vertices_by_id(vec![refs.bryn])
110 .edges(EdgeSearch::label(EdgeLabel::Knows).outgoing())
111 .collect::<Vec<_>>();
112 assert_elements_eq!(graph, collected, vec![refs.bryn_knows_julia]);
113}
114
115pub fn test_out_edges_filtered_limit<T>(graph: &mut T)
116where
117 T: Graph<Vertex = Vertex, Edge = Edge>,
118{
119 let refs = populate_graph(graph);
120 let collected = graph
121 .walk()
122 .vertices_by_id(vec![refs.bryn])
123 .edges(EdgeSearch::label(EdgeLabel::Knows).outgoing().with_limit(1))
124 .collect::<Vec<_>>();
125 assert_elements_eq!(graph, collected, vec![refs.bryn_knows_julia]);
126}
127
128pub fn test_in_edges_filtered<T>(graph: &mut T)
129where
130 T: Graph<Vertex = Vertex, Edge = Edge>,
131{
132 let refs = populate_graph(graph);
133 let collected = graph
134 .walk()
135 .vertices_by_id(vec![refs.bryn])
136 .edges(EdgeSearch::label(EdgeLabel::Knows).incoming())
137 .collect::<Vec<_>>();
138 assert_elements_eq!(graph, collected, vec![refs.julia_knows_bryn]);
139}
140
141pub fn test_in_edges_filtered_limit<T>(graph: &mut T)
142where
143 T: Graph<Vertex = Vertex, Edge = Edge>,
144{
145 let refs = populate_graph(graph);
146 let collected = graph
147 .walk()
148 .vertices_by_id(vec![refs.bryn])
149 .edges(EdgeSearch::label(EdgeLabel::Knows).incoming().with_limit(1))
150 .collect::<Vec<_>>();
151 assert_elements_eq!(graph, collected, vec![refs.julia_knows_bryn]);
152}
153
154pub fn test_all_edges_filtered<T>(graph: &mut T)
155where
156 T: Graph<Vertex = Vertex, Edge = Edge>,
157{
158 let refs = populate_graph(graph);
159 let collected = graph
160 .walk()
161 .vertices_by_id(vec![refs.bryn])
162 .edges(EdgeSearch::label(EdgeLabel::Knows))
163 .collect::<Vec<_>>();
164 assert_elements_eq!(
165 graph,
166 collected,
167 vec![refs.bryn_knows_julia, refs.julia_knows_bryn]
168 );
169}
170
171pub fn test_all_edges_filtered_limit<T>(graph: &mut T)
172where
173 T: Graph<Vertex = Vertex, Edge = Edge>,
174{
175 let refs = populate_graph(graph);
176 let collected = graph
177 .walk()
178 .vertices_by_id(vec![refs.bryn])
179 .edges(EdgeSearch::label(EdgeLabel::Knows).with_limit(1))
180 .collect::<Vec<_>>();
181 assert_elements_one_of!(
182 graph,
183 collected,
184 vec![refs.bryn_knows_julia, refs.julia_knows_bryn]
185 );
186}