graph_api_test/steps/
edges.rs

1use 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}